aboutsummaryrefslogtreecommitdiff
path: root/Command/VAdd.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2014-02-19 15:10:18 -0400
committerGravatar Joey Hess <joey@kitenet.net>2014-02-19 16:29:56 -0400
commiteaf19cc8c9be6e53c0ae7a1fba48a947c41d2ee6 (patch)
treebac64b7fde8afb83661ac5384a2181cb91bd0926 /Command/VAdd.hs
parent22b8d9c7603d6ed610ed9bbc3e59dbdb39e885c5 (diff)
add tip about metadata driven views (and more flexible view filtering)
While writing this documentation, I realized that there needed to be a way to stay in a view like tag=* while adding a filter like tag=work that applies to the same field. So, there are really two ways a view can be refined. It can have a new "field=explicitvalue" filter added to it, which does not change the "shape" of the view, but narrows the files it shows. Or, it can have a new view added, which adds another level of subdirectories. So, added a vfilter command, which takes explicit values to add to the filter, and rejects changes that would change the shape of the view. And, made vadd only accept changes that change the shape of the view. And, changed the View data type slightly; now components that can match multiple metadata values can be visible, or not visible. This commit was sponsored by Stelian Iancu.
Diffstat (limited to 'Command/VAdd.hs')
-rw-r--r--Command/VAdd.hs22
1 files changed, 8 insertions, 14 deletions
diff --git a/Command/VAdd.hs b/Command/VAdd.hs
index d7dee9fb7..3dc1fd4cf 100644
--- a/Command/VAdd.hs
+++ b/Command/VAdd.hs
@@ -10,12 +10,11 @@ module Command.VAdd where
import Common.Annex
import Command
import Annex.View
-import Logs.View
import Command.View (paramView, parseViewParam, checkoutViewBranch)
def :: [Command]
def = [notBareRepo $ notDirect $
- command "vadd" paramView seek SectionMetaData "refine current view"]
+ command "vadd" paramView seek SectionMetaData "add subdirs to current view"]
seek :: CommandSeek
seek = withWords start
@@ -23,20 +22,15 @@ seek = withWords start
start :: [String] -> CommandStart
start params = do
showStart "vadd" ""
- go =<< currentView
- where
- go Nothing = error "Not in a view."
- go (Just view) = do
- let (view', change) = calc view Unchanged (reverse params)
+ withCurrentView $ \view -> do
+ let (view', change) = refineView view $
+ map parseViewParam $ reverse params
case change of
Unchanged -> do
showNote "unchanged"
next $ next $ return True
- Narrowing -> next $ next $
- checkoutViewBranch view' narrowView
+ Narrowing -> next $ next $ do
+ if visibleViewSize view' == visibleViewSize view
+ then error "That would not add an additional level of directory structure to the view. To filter the view, use vfilter instead of vadd."
+ else checkoutViewBranch view' narrowView
Widening -> error "Widening view to match more files is not currently supported."
-
- calc v c [] = (v, c)
- calc v c (p:ps) =
- let (v', c') = uncurry (refineView v) (parseViewParam p)
- in calc v' (max c c') ps