
* assistant, watcher: .gitignore files and other git ignores are now honored, when git 1.8.4 or newer is installed. (Thanks, Adam Spiers, for getting the necessary support into git for this.) * importfeed: Ignores transient problems with feeds. Only exits nonzero when a feed has repeatedly had a problems for at least 1 day. * importfeed: Fix handling of dots in extensions. * Windows: Added support for encrypted special remotes. * Windows: Fixed permissions problem that prevented removing files from directory special remote. Directory special remotes now fully usable. # imported from the archive
39 lines
1.1 KiB
Haskell
39 lines
1.1 KiB
Haskell
{- exception handling in the git-annex monad
|
|
-
|
|
- Note that when an Annex action fails and the exception is handled
|
|
- by these functions, any changes the action has made to the
|
|
- AnnexState are retained. This works because the Annex monad
|
|
- internally stores the AnnexState in a MVar.
|
|
-
|
|
- Copyright 2011-2013 Joey Hess <joey@kitenet.net>
|
|
-
|
|
- Licensed under the GNU GPL version 3 or higher.
|
|
-}
|
|
|
|
module Annex.Exception (
|
|
bracketIO,
|
|
tryAnnex,
|
|
throwAnnex,
|
|
catchAnnex,
|
|
) where
|
|
|
|
import qualified "MonadCatchIO-transformers" Control.Monad.CatchIO as M
|
|
import Control.Exception
|
|
|
|
import Common.Annex
|
|
|
|
{- Runs an Annex action, with setup and cleanup both in the IO monad. -}
|
|
bracketIO :: IO v -> (v -> IO b) -> (v -> Annex a) -> Annex a
|
|
bracketIO setup cleanup go = M.bracket (liftIO setup) (liftIO . cleanup) go
|
|
|
|
{- try in the Annex monad -}
|
|
tryAnnex :: Annex a -> Annex (Either SomeException a)
|
|
tryAnnex = M.try
|
|
|
|
{- throw in the Annex monad -}
|
|
throwAnnex :: Exception e => e -> Annex a
|
|
throwAnnex = M.throw
|
|
|
|
{- catch in the Annex monad -}
|
|
catchAnnex :: Exception e => Annex a -> (e -> Annex a) -> Annex a
|
|
catchAnnex = M.catch
|