summaryrefslogtreecommitdiff
path: root/CmdLine/GitAnnex
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2015-07-09 19:03:21 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2015-07-09 19:03:24 -0400
commitea0f914261e4747de75339952c2d47374c5a7803 (patch)
tree4af3a12da54d8f40878f1f8d563b8abbd5d0516f /CmdLine/GitAnnex
parent7a5aff2c121f4ecbc173e939b0cf7b2975d18438 (diff)
wip
Current status: * building again, but several commands are commented out * still need to implement global options, file matching options, etc
Diffstat (limited to 'CmdLine/GitAnnex')
-rw-r--r--CmdLine/GitAnnex/Options.hs78
1 files changed, 40 insertions, 38 deletions
diff --git a/CmdLine/GitAnnex/Options.hs b/CmdLine/GitAnnex/Options.hs
index c027c602c..4ec7bc875 100644
--- a/CmdLine/GitAnnex/Options.hs
+++ b/CmdLine/GitAnnex/Options.hs
@@ -99,11 +99,7 @@ parseKeyOptions allowincomplete = if allowincomplete
)
else base
where
- base =
- flag' WantAllKeys
- ( long "all" <> short 'A'
- <> help "operate on all versions of all files"
- )
+ base = parseAllOption
<|> flag' WantUnusedKeys
( long "unused" <> short 'U'
<> help "operate on files found by last run of git-annex unused"
@@ -113,6 +109,12 @@ parseKeyOptions allowincomplete = if allowincomplete
<> help "operate on specified key"
))
+parseAllOption :: Parser KeyOptions
+parseAllOption = flag' WantAllKeys
+ ( long "all" <> short 'A'
+ <> help "operate on all versions of all files"
+ )
+
parseKey :: Monad m => String -> m Key
parseKey = maybe (fail "invalid key") return . file2key
@@ -121,13 +123,13 @@ annexedMatchingOptions :: [Option]
annexedMatchingOptions = concat
[ nonWorkTreeMatchingOptions'
, fileMatchingOptions'
- , combiningOptions
- , [timeLimitOption]
+ -- , combiningOptions
+ -- , [timeLimitOption]
]
-- Matching options that don't need to examine work tree files.
nonWorkTreeMatchingOptions :: [Option]
-nonWorkTreeMatchingOptions = nonWorkTreeMatchingOptions' ++ combiningOptions
+nonWorkTreeMatchingOptions = nonWorkTreeMatchingOptions' -- ++ combiningOptions
nonWorkTreeMatchingOptions' :: [Option]
nonWorkTreeMatchingOptions' =
@@ -153,7 +155,7 @@ nonWorkTreeMatchingOptions' =
-- Options to match files which may not yet be annexed.
fileMatchingOptions :: [Option]
-fileMatchingOptions = fileMatchingOptions' ++ combiningOptions
+fileMatchingOptions = fileMatchingOptions' -- ++ combiningOptions
fileMatchingOptions' :: [Option]
fileMatchingOptions' =
@@ -167,37 +169,37 @@ fileMatchingOptions' =
"match files smaller than a size"
]
-combiningOptions :: [Option]
-combiningOptions =
- [ longopt "not" "negate next option"
- , longopt "and" "both previous and next option must match"
- , longopt "or" "either previous or next option must match"
- , shortopt "(" "open group of options"
- , shortopt ")" "close group of options"
- ]
- where
- longopt o = Option [] [o] $ NoArg $ Limit.addToken o
- shortopt o = Option o [] $ NoArg $ Limit.addToken o
-
-jsonOption :: Option
-jsonOption = Option ['j'] ["json"] (NoArg (Annex.setOutput JSONOutput))
- "enable JSON output"
-
-jobsOption :: Option
-jobsOption = Option ['J'] ["jobs"] (ReqArg set paramNumber)
- "enable concurrent jobs"
+parseCombiningOptions :: Parser [GlobalSetter]
+parseCombiningOptions =
+ many $ longopt "not" "negate next option"
+ <|> longopt "and" "both previous and next option must match"
+ <|> longopt "or" "either previous or next option must match"
+ <|> shortopt '(' "open group of options"
+ <|> shortopt ')' "close group of options"
where
- set s = case readish s of
- Nothing -> error "Bad --jobs number"
- Just n -> Annex.setOutput (ParallelOutput n)
-
-timeLimitOption :: Option
-timeLimitOption = Option ['T'] ["time-limit"]
- (ReqArg Limit.addTimeLimit paramTime)
- "stop after the specified amount of time"
+ longopt o h = globalOpt (Limit.addToken o) $ switch
+ ( long o <> help h )
+ shortopt o h = globalOpt (Limit.addToken [o]) $ switch
+ ( short o <> help h)
+
+parseJsonOption :: Parser GlobalSetter
+parseJsonOption = globalOpt (Annex.setOutput JSONOutput) $ switch
+ ( long "json" <> short 'j'
+ <> help "enable JSON output"
+ )
-autoOption :: Option
-autoOption = flagOption ['a'] "auto" "automatic mode"
+parseJobsOption :: Parser GlobalSetter
+parseJobsOption = globalSetter (Annex.setOutput . ParallelOutput) $
+ option auto
+ ( long "jobs" <> short 'J' <> metavar paramNumber
+ <> help "enable concurrent jobs"
+ )
+
+parseTimeLimitOption :: Parser GlobalSetter
+parseTimeLimitOption = globalSetter Limit.addTimeLimit $ strOption
+ ( long "time-limit" <> short 'T' <> metavar paramTime
+ <> help "stop after the specified amount of time"
+ )
parseAutoOption :: Parser Bool
parseAutoOption = switch