diff options
author | Joey Hess <joey@kitenet.net> | 2010-10-14 14:38:29 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2010-10-14 14:38:29 -0400 |
commit | 90cdc61c7c8d08590e054018c54c542c463be7e9 (patch) | |
tree | f3521b9803dd4850170c83c05f4539a08bd9ef1c /git-annex.hs | |
parent | 65e4f9cc73f4800fd4dcb5503f7a428539e1e959 (diff) |
refactor
Diffstat (limited to 'git-annex.hs')
-rw-r--r-- | git-annex.hs | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/git-annex.hs b/git-annex.hs index b326b2b19..a038107e9 100644 --- a/git-annex.hs +++ b/git-annex.hs @@ -1,12 +1,44 @@ {- git-annex main program -} +import Control.Exception +import System.IO import System.Environment import qualified Annex +import Types import Core -import CmdLine +import Commands main = do args <- getArgs (mode, params) <- argvToMode args state <- start tryRun state mode params + +{- Processes each param in the list by dispatching the handler function + - for the user-selection operation mode. Catches exceptions, not stopping + - if some error out, and propigates an overall error status at the end. + - + - This runs in the IO monad, not in the Annex monad. It seems that + - exceptions can only be caught in the IO monad, not in a stacked monad; + - or more likely I missed an easy way to do it. So, I have to laboriously + - thread AnnexState through this function. + -} +tryRun :: AnnexState -> Mode -> [String] -> IO () +tryRun state mode params = tryRun' state mode 0 0 params +tryRun' state mode errnum oknum (f:fs) = do + result <- try + (Annex.run state (dispatch mode f))::IO (Either SomeException ((), AnnexState)) + case (result) of + Left err -> do + showErr err + tryRun' state mode (errnum + 1) oknum fs + Right (_,state') -> tryRun' state' mode errnum (oknum + 1) fs +tryRun' state mode errnum oknum [] = do + if (errnum > 0) + then error $ (show errnum) ++ " failed ; " ++ show (oknum) ++ " ok" + else return () + +{- Exception pretty-printing. -} +showErr e = do + hPutStrLn stderr $ "git-annex: " ++ (show e) + return () |