diff options
author | Joey Hess <joey@kitenet.net> | 2011-10-29 23:48:46 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2011-10-30 00:28:22 -0400 |
commit | 4e9be0d1f86893a469b33b763b55edfe75bdb3aa (patch) | |
tree | e721a64007bc52df419a720caf2907dcf62e54ef /Types | |
parent | ef5330120c0b522ff159a5b3caba7a926236947b (diff) |
refactoring and cleanup
No code changes.
Diffstat (limited to 'Types')
-rw-r--r-- | Types/Command.hs | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/Types/Command.hs b/Types/Command.hs new file mode 100644 index 000000000..d39876a7a --- /dev/null +++ b/Types/Command.hs @@ -0,0 +1,45 @@ +{- git-annex command data types + - + - Copyright 2010-2011 Joey Hess <joey@kitenet.net> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Types.Command where + +import Types + +{- A command runs in these stages. + - + - a. The check stage runs checks, that error out if + - anything prevents the command from running. -} +data CommandCheck = CommandCheck { idCheck :: Int, runCheck :: Annex () } +{- b. The seek stage takes the parameters passed to the command, + - looks through the repo to find the ones that are relevant + - to that command (ie, new files to add), and generates + - a list of start stage actions. -} +type CommandSeek = [String] -> Annex [CommandStart] +{- c. The start stage is run before anything is printed about the + - command, is passed some input, and can early abort it + - if the input does not make sense. It should run quickly and + - should not modify Annex state. -} +type CommandStart = Annex (Maybe CommandPerform) +{- d. The perform stage is run after a message is printed about the command + - being run, and it should be where the bulk of the work happens. -} +type CommandPerform = Annex (Maybe CommandCleanup) +{- e. The cleanup stage is run only if the perform stage succeeds, and it + - returns the overall success/fail of the command. -} +type CommandCleanup = Annex Bool + +{- A command is defined by specifying these things. -} +data Command = Command { + cmdcheck :: [CommandCheck], + cmdname :: String, + cmdparams :: String, + cmdseek :: [CommandSeek], + cmddesc :: String +} + +{- CommandCheck functions can be compared using their unique id. -} +instance Eq CommandCheck where + a == b = idCheck a == idCheck b |