aboutsummaryrefslogtreecommitdiff
path: root/CmdLine/Option.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2014-01-26 16:25:55 -0400
committerGravatar Joey Hess <joey@kitenet.net>2014-01-26 16:25:55 -0400
commit4f050ca9b80d0565e408137f2422e808b82cfd11 (patch)
tree5aca9688e49dee8915a962de4baf4c305ccbfa9e /CmdLine/Option.hs
parent541178b499d084e4041ae4b9d62bf86f5a97c3ff (diff)
reorganize some files and imports
Diffstat (limited to 'CmdLine/Option.hs')
-rw-r--r--CmdLine/Option.hs77
1 files changed, 77 insertions, 0 deletions
diff --git a/CmdLine/Option.hs b/CmdLine/Option.hs
new file mode 100644
index 000000000..915b06849
--- /dev/null
+++ b/CmdLine/Option.hs
@@ -0,0 +1,77 @@
+{- common command-line options
+ -
+ - Copyright 2010-2011 Joey Hess <joey@kitenet.net>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module CmdLine.Option (
+ commonOptions,
+ matcherOptions,
+ flagOption,
+ fieldOption,
+ optionName,
+ ArgDescr(..),
+ OptDescr(..),
+) where
+
+import System.Console.GetOpt
+
+import Common.Annex
+import qualified Annex
+import Types.Messages
+import Limit
+import CmdLine.Usage
+
+commonOptions :: [Option]
+commonOptions =
+ [ 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 (Annex.setOutput QuietOutput))
+ "avoid verbose output"
+ , Option ['v'] ["verbose"] (NoArg (Annex.setOutput NormalOutput))
+ "allow verbose output (default)"
+ , Option ['d'] ["debug"] (NoArg setdebug)
+ "show debug messages"
+ , Option [] ["no-debug"] (NoArg unsetdebug)
+ "don't 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 }
+ setforcebackend v = Annex.changeState $ \s -> s { Annex.forcebackend = Just v }
+ setdebug = Annex.changeGitConfig $ \c -> c { annexDebug = True }
+ unsetdebug = Annex.changeGitConfig $ \c -> c { annexDebug = False }
+
+matcherOptions :: [Option]
+matcherOptions =
+ [ 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. -}
+flagOption :: String -> String -> String -> Option
+flagOption short opt description =
+ Option short [opt] (NoArg (Annex.setFlag opt)) description
+
+{- An option that sets a field. -}
+fieldOption :: String -> String -> String -> String -> Option
+fieldOption short opt paramdesc description =
+ Option short [opt] (ReqArg (Annex.setField opt) paramdesc) description
+
+{- The flag or field name used for an option. -}
+optionName :: Option -> String
+optionName (Option _ o _ _) = Prelude.head o