diff options
author | Joey Hess <joeyh@joeyh.name> | 2015-07-09 12:44:03 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2015-07-09 12:44:03 -0400 |
commit | 80603339ea4e8b93ef456e706ca8c4efeef341f8 (patch) | |
tree | c7649e94a367b270afb6c584d4af2b04d4f52b7a /CmdLine/GitAnnex | |
parent | 97545540a3e00bb696142c022894ac216961dc23 (diff) |
use Alternative for parsing KeyOptions
Diffstat (limited to 'CmdLine/GitAnnex')
-rw-r--r-- | CmdLine/GitAnnex/Options.hs | 61 |
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 |