summaryrefslogtreecommitdiff
path: root/CmdLine/GitAnnex
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2015-07-09 12:44:03 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2015-07-09 12:44:03 -0400
commit80603339ea4e8b93ef456e706ca8c4efeef341f8 (patch)
treec7649e94a367b270afb6c584d4af2b04d4f52b7a /CmdLine/GitAnnex
parent97545540a3e00bb696142c022894ac216961dc23 (diff)
use Alternative for parsing KeyOptions
Diffstat (limited to 'CmdLine/GitAnnex')
-rw-r--r--CmdLine/GitAnnex/Options.hs61
1 files changed, 26 insertions, 35 deletions
diff --git a/CmdLine/GitAnnex/Options.hs b/CmdLine/GitAnnex/Options.hs
index f95ab08ff..02cbcdcfe 100644
--- a/CmdLine/GitAnnex/Options.hs
+++ b/CmdLine/GitAnnex/Options.hs
@@ -55,47 +55,38 @@ gitAnnexOptions = commonOptions ++
>>= Annex.changeGitRepo
-- Options for acting on keys, rather than work tree files.
-data KeyOptions = KeyOptions
- { wantAllKeys :: Bool
- , wantUnusedKeys :: Bool
- , wantIncompleteKeys :: Bool
- , wantSpecificKey :: Maybe Key
- }
+data KeyOptions
+ = WantAllKeys
+ | WantUnusedKeys
+ | WantSpecificKey Key
+ | WantIncompleteKeys
parseKeyOptions :: Bool -> Parser KeyOptions
-parseKeyOptions allowincomplete = KeyOptions
- <$> parseAllKeysOption
- <*> parseUnusedKeysOption
- <*> (if allowincomplete then parseIncompleteOption else pure False)
- <*> parseSpecificKeyOption
-
-parseAllKeysOption :: Parser Bool
-parseAllKeysOption = switch
- ( long "all" <> short 'A'
- <> help "operate on all versions of all files"
- )
-
-parseUnusedKeysOption :: Parser Bool
-parseUnusedKeysOption = switch
- ( long "unused" <> short 'U'
- <> help "operate on files found by last run of git-annex unused"
- )
-
-parseSpecificKeyOption :: Parser (Maybe Key)
-parseSpecificKeyOption = optional $ option (str >>= parseKey)
- ( long "key" <> metavar paramKey
- <> help "operate on specified key"
- )
+parseKeyOptions allowincomplete = if allowincomplete
+ then base
+ <|> flag' WantIncompleteKeys
+ ( long "incomplete"
+ <> help "resume previous downloads"
+ )
+ else base
+ where
+ base =
+ flag' WantAllKeys
+ ( long "all" <> short 'A'
+ <> help "operate on all versions of all files"
+ )
+ <|> flag' WantUnusedKeys
+ ( long "unused" <> short 'U'
+ <> help "operate on files found by last run of git-annex unused"
+ )
+ <|> (WantSpecificKey <$> option (str >>= parseKey)
+ ( long "key" <> metavar paramKey
+ <> help "operate on specified key"
+ ))
parseKey :: Monad m => String -> m Key
parseKey = maybe (fail "invalid key") return . file2key
-parseIncompleteOption :: Parser Bool
-parseIncompleteOption = switch
- ( long "incomplete"
- <> help "resume previous downloads"
- )
-
-- Options to match properties of annexed files.
annexedMatchingOptions :: [Option]
annexedMatchingOptions = concat