summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2010-12-30 15:44:15 -0400
committerGravatar Joey Hess <joey@kitenet.net>2010-12-30 15:44:15 -0400
commit88ff9e82fc3dcb653b2a116f1c162d98a1f6bdcf (patch)
treecb52cb0a0e2326e61e30b8f364d96fb6c39fa44f
parent1c451fe3628f535898e7cf87ccad30270c6d16fb (diff)
factor out a little more
-rw-r--r--CmdLine.hs15
-rw-r--r--Core.hs2
-rw-r--r--git-annex.hs18
3 files changed, 18 insertions, 17 deletions
diff --git a/CmdLine.hs b/CmdLine.hs
index a2645f75f..b3dfc984d 100644
--- a/CmdLine.hs
+++ b/CmdLine.hs
@@ -6,19 +6,25 @@
-}
module CmdLine (
+ cmdLine,
parseCmd,
Option,
storeOptBool,
storeOptString,
) where
+import System.Environment
import System.Console.GetOpt
import Control.Monad (when)
import Control.Monad.State (liftIO)
import qualified Annex
+import qualified GitRepo as Git
import Types
import Command
+import BackendList
+import Core
+import Upgrade
{- Each dashed command-line option results in generation of an action
- in the Annex monad that performs the necessary setting.
@@ -30,6 +36,15 @@ storeOptBool name val = Annex.flagChange name $ FlagBool val
storeOptString :: FlagName -> String -> Annex ()
storeOptString name val = Annex.flagChange name $ FlagString val
+{- It all starts here. -}
+cmdLine :: [Command] -> [Option] -> String -> IO ()
+cmdLine cmds options header = do
+ args <- getArgs
+ gitrepo <- Git.repoFromCwd
+ state <- Annex.new gitrepo allBackends
+ (actions, state') <- Annex.run state $ parseCmd args header cmds options
+ tryRun state' $ [startup, upgrade] ++ actions
+
{- Parses command line, stores configure flags, and returns a
- list of actions to be run in the Annex monad. -}
parseCmd :: [String] -> String -> [Command] -> [Option] -> Annex [Annex Bool]
diff --git a/Core.hs b/Core.hs
index d91595a04..08e226592 100644
--- a/Core.hs
+++ b/Core.hs
@@ -45,7 +45,7 @@ tryRun' state errnum (a:as) = do
tryRun' state errnum [] = do
_ <- try $ Annex.run state $ shutdown errnum
when (errnum > 0) $ error $ show errnum ++ " failed"
-
+
{- Actions to perform each time ran. -}
startup :: Annex Bool
startup = do
diff --git a/git-annex.hs b/git-annex.hs
index 31d90e4fc..b8176befa 100644
--- a/git-annex.hs
+++ b/git-annex.hs
@@ -5,17 +5,11 @@
- Licensed under the GNU GPL version 3 or higher.
-}
-import System.Environment
import System.Console.GetOpt
-import qualified Annex
-import Core
-import Upgrade
import CmdLine
-import qualified GitRepo as Git
-import BackendList
-
import Command
+
import qualified Command.Add
import qualified Command.Unannex
import qualified Command.Drop
@@ -83,13 +77,5 @@ options = [
"skip files matching the glob pattern"
]
-header :: String
-header = "Usage: git-annex subcommand [option ..]"
-
main :: IO ()
-main = do
- args <- getArgs
- gitrepo <- Git.repoFromCwd
- state <- Annex.new gitrepo allBackends
- (actions, state') <- Annex.run state $ parseCmd args header cmds options
- tryRun state' $ [startup, upgrade] ++ actions
+main = cmdLine cmds options "Usage: git-annex subcommand [option ..]"