stop trapping all exceptions

Need to allow exceptions to be thrown for SIGPIPE propigation.

Converted places that used error unncessarily to not.
This commit is contained in:
Joey Hess 2010-10-19 01:46:20 -04:00
parent 470e0a2fbd
commit 2caf711827
2 changed files with 17 additions and 19 deletions

View file

@ -101,21 +101,19 @@ parseCmd argv state = do
- the annex directory and setting up the symlink pointing to its content. -}
addCmd :: FilePath -> Annex ()
addCmd file = inBackend file $ do
liftIO $ checkLegal file
showStart "add" file
g <- Annex.gitRepo
stored <- Backend.storeFileKey file
case (stored) of
Nothing -> showEndFail "no backend could store" file
Just (key, backend) -> do
logStatus key ValuePresent
setup g key
s <- liftIO $ getSymbolicLinkStatus file
if ((isSymbolicLink s) || (not $ isRegularFile s))
then return ()
else do
showStart "add" file
g <- Annex.gitRepo
stored <- Backend.storeFileKey file
case (stored) of
Nothing -> showEndFail "no backend could store" file
Just (key, backend) -> do
logStatus key ValuePresent
setup g key
where
checkLegal file = do
s <- getSymbolicLinkStatus file
if ((isSymbolicLink s) || (not $ isRegularFile s))
then error $ "not a regular file: " ++ file
else return ()
setup g key = do
let dest = annexLocation g key
liftIO $ createDirectoryIfMissing True (parentDir dest)

View file

@ -1,6 +1,6 @@
{- git-annex main program -}
import Control.Exception
import IO (try)
import System.IO
import System.Environment
@ -18,8 +18,9 @@ main = do
(flags, actions) <- parseCmd args state
tryRun state $ [startup flags] ++ actions ++ [shutdown]
{- Runs a list of Annex actions. Catches exceptions, not stopping
- if some error out, and propigates an overall error status at the end.
{- Runs a list of Annex actions. Catches IO errors and continues
- (but explicitly thrown errors terminate the whole command).
- 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;
@ -29,8 +30,7 @@ main = do
tryRun :: AnnexState -> [Annex ()] -> IO ()
tryRun state actions = tryRun' state 0 actions
tryRun' state errnum (a:as) = do
result <- try
(Annex.run state a)::IO (Either SomeException ((), AnnexState))
result <- try $ Annex.run state a
case (result) of
Left err -> do
showErr err