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 /Checks.hs | |
parent | ef5330120c0b522ff159a5b3caba7a926236947b (diff) |
refactoring and cleanup
No code changes.
Diffstat (limited to 'Checks.hs')
-rw-r--r-- | Checks.hs | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/Checks.hs b/Checks.hs new file mode 100644 index 000000000..cd172c609 --- /dev/null +++ b/Checks.hs @@ -0,0 +1,45 @@ +{- git-annex command checks + - + - Common sanity checks for commands, and an interface to selectively + - remove them, or add others. + - + - Copyright 2011 Joey Hess <joey@kitenet.net> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Checks where + +import Common.Annex +import Types.Command +import Init +import qualified Annex + +commonChecks :: [CommandCheck] +commonChecks = [fromOpt, toOpt, repoExists] + +repoExists :: CommandCheck +repoExists = CommandCheck 0 ensureInitialized + +fromOpt :: CommandCheck +fromOpt = CommandCheck 1 $ do + v <- Annex.getState Annex.fromremote + unless (v == Nothing) $ error "cannot use --from with this command" + +toOpt :: CommandCheck +toOpt = CommandCheck 2 $ do + v <- Annex.getState Annex.toremote + unless (v == Nothing) $ error "cannot use --to with this command" + +checkCommand :: Command -> Annex () +checkCommand Command { cmdcheck = c } = sequence_ $ map runCheck c + +dontCheck :: CommandCheck -> Command -> Command +dontCheck check cmd = mutateCheck cmd $ \c -> filter (/= check) c + +addCheck :: Annex () -> Command -> Command +addCheck check cmd = mutateCheck cmd $ + \c -> CommandCheck (length c + 100) check : c + +mutateCheck :: Command -> ([CommandCheck] -> [CommandCheck]) -> Command +mutateCheck cmd@(Command { cmdcheck = c }) a = cmd { cmdcheck = a c } |