diff options
Diffstat (limited to 'Command')
-rw-r--r-- | Command/GroupWanted.hs | 19 | ||||
-rw-r--r-- | Command/Wanted.hs | 56 |
2 files changed, 35 insertions, 40 deletions
diff --git a/Command/GroupWanted.hs b/Command/GroupWanted.hs index 859a39c1b..8fff47013 100644 --- a/Command/GroupWanted.hs +++ b/Command/GroupWanted.hs @@ -13,6 +13,7 @@ import Command import Logs.PreferredContent import Types.Messages import Types.Group +import Command.Wanted (performGet, performSet) import qualified Data.Map as M @@ -24,22 +25,8 @@ seek :: CommandSeek seek = withWords start start :: [String] -> CommandStart -start (g:[]) = next $ performGet g +start (g:[]) = next $ performGet groupPreferredContentMapRaw g start (g:expr:[]) = do showStart "groupwanted" g - next $ performSet g expr + next $ performSet groupPreferredContentSet expr g start _ = error "Specify a group." - -performGet :: Group -> CommandPerform -performGet g = do - Annex.setOutput QuietOutput - m <- groupPreferredContentMapRaw - liftIO $ putStrLn $ fromMaybe "" $ M.lookup g m - next $ return True - -performSet :: Group -> String -> CommandPerform -performSet g expr = case checkPreferredContentExpression expr of - Just e -> error $ "Parse error: " ++ e - Nothing -> do - groupPreferredContentSet g expr - next $ return True diff --git a/Command/Wanted.hs b/Command/Wanted.hs index 6b87e51d8..07f5ee7c3 100644 --- a/Command/Wanted.hs +++ b/Command/Wanted.hs @@ -1,6 +1,6 @@ {- git-annex command - - - Copyright 2013 Joey Hess <id@joeyh.name> + - Copyright 2013-2015 Joey Hess <id@joeyh.name> - - Licensed under the GNU GPL version 3 or higher. -} @@ -13,39 +13,47 @@ import Command import qualified Remote import Logs.PreferredContent import Types.Messages +import Types.StandardGroups import qualified Data.Map as M cmd :: [Command] -cmd = [command "wanted" (paramPair paramRemote (paramOptional paramExpression)) seek - SectionSetup "get or set preferred content expression"] - -seek :: CommandSeek -seek = withWords start - -start :: [String] -> CommandStart -start = parse +cmd = cmd' "wanted" "get or set preferred content expression" + preferredContentMapRaw + preferredContentSet + +cmd' + :: String + -> String + -> Annex (M.Map UUID PreferredContentExpression) + -> (UUID -> PreferredContentExpression -> Annex ()) + -> [Command] +cmd' name desc getter setter = [command name pdesc seek SectionSetup desc] where - parse (name:[]) = go name performGet - parse (name:expr:[]) = go name $ \uuid -> do - showStart "wanted" name - performSet expr uuid - parse _ = error "Specify a repository." - - go name a = do - u <- Remote.nameToUUID name + pdesc = paramPair paramRemote (paramOptional paramExpression) + + seek = withWords start + + start (rname:[]) = go rname (performGet getter) + start (rname:expr:[]) = go rname $ \uuid -> do + showStart name rname + performSet setter expr uuid + start _ = error "Specify a repository." + + go rname a = do + u <- Remote.nameToUUID rname next $ a u -performGet :: UUID -> CommandPerform -performGet uuid = do +performGet :: Ord a => Annex (M.Map a PreferredContentExpression) -> a -> CommandPerform +performGet getter a = do Annex.setOutput QuietOutput - m <- preferredContentMapRaw - liftIO $ putStrLn $ fromMaybe "" $ M.lookup uuid m + m <- getter + liftIO $ putStrLn $ fromMaybe "" $ M.lookup a m next $ return True -performSet :: String -> UUID -> CommandPerform -performSet expr uuid = case checkPreferredContentExpression expr of +performSet :: Ord a => (a -> PreferredContentExpression -> Annex ()) -> String -> a -> CommandPerform +performSet setter expr a = case checkPreferredContentExpression expr of Just e -> error $ "Parse error: " ++ e Nothing -> do - preferredContentSet uuid expr + setter a expr next $ return True |