diff options
author | Joey Hess <joey@kitenet.net> | 2012-01-06 10:14:37 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2012-01-06 10:57:57 -0400 |
commit | 1f8a1058c96bd4ee11fcb353f0ede1842d79ab6a (patch) | |
tree | 0754233445da5c75737aa2b7866881d30939ec56 /Option.hs | |
parent | df21cbfdd2b7342c206ebd4aea32d989328374dc (diff) |
tweak
Diffstat (limited to 'Option.hs')
-rw-r--r-- | Option.hs | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/Option.hs b/Option.hs new file mode 100644 index 000000000..d6d8b44a3 --- /dev/null +++ b/Option.hs @@ -0,0 +1,79 @@ +{- git-annex command-line options + - + - Copyright 2010-2011 Joey Hess <joey@kitenet.net> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Option ( + common, + matcher, + flag, + field, + name, + ArgDescr(..), + OptDescr(..), +) where + +import System.Console.GetOpt +import System.Log.Logger + +import Common.Annex +import qualified Annex +import Limit +import Usage + +common :: [Option] +common = + [ Option [] ["force"] (NoArg (setforce True)) + "allow actions that may lose annexed data" + , Option ['F'] ["fast"] (NoArg (setfast True)) + "avoid slow operations" + , Option ['a'] ["auto"] (NoArg (setauto True)) + "automatic mode" + , Option ['q'] ["quiet"] (NoArg (setoutput Annex.QuietOutput)) + "avoid verbose output" + , Option ['v'] ["verbose"] (NoArg (setoutput Annex.NormalOutput)) + "allow verbose output (default)" + , Option ['j'] ["json"] (NoArg (setoutput Annex.JSONOutput)) + "enable JSON output" + , Option ['d'] ["debug"] (NoArg (setdebug)) + "show debug messages" + , Option ['b'] ["backend"] (ReqArg setforcebackend paramName) + "specify key-value backend to use" + ] + where + setforce v = Annex.changeState $ \s -> s { Annex.force = v } + setfast v = Annex.changeState $ \s -> s { Annex.fast = v } + setauto v = Annex.changeState $ \s -> s { Annex.auto = v } + setoutput v = Annex.changeState $ \s -> s { Annex.output = v } + setforcebackend v = Annex.changeState $ \s -> s { Annex.forcebackend = Just v } + setdebug = liftIO $ updateGlobalLogger rootLoggerName $ + setLevel DEBUG + +matcher :: [Option] +matcher = + [ 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 $ addToken o + shortopt o = Option o [] $ NoArg $ addToken o + +{- An option that sets a flag. -} +flag :: String -> String -> String -> Option +flag short opt description = + Option short [opt] (NoArg (Annex.setFlag opt)) description + +{- An option that sets a field. -} +field :: String -> String -> String -> String -> Option +field short opt paramdesc description = + Option short [opt] (ReqArg (Annex.setField opt) paramdesc) description + +{- The flag or field name used for an option. -} +name :: Option -> String +name (Option _ o _ _) = Prelude.head o + |