diff options
author | Joey Hess <joey@kitenet.net> | 2013-11-06 12:21:50 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2013-11-06 12:21:50 -0400 |
commit | 262a884d17ce86bbe3fbc54537b591ffba152c63 (patch) | |
tree | cae633d5434b899d6114a947405081ac5a4dd5d9 /Annex/Branch.hs | |
parent | f44a4902dc5433587c06bb299abd50170919e444 (diff) |
Fix exception handling bug that could cause .git/annex/index to be used for git commits outside the git-annex branch. Known to affect git-annex when used with the git shipped with Ubuntu 13.10.
Diffstat (limited to 'Annex/Branch.hs')
-rw-r--r-- | Annex/Branch.hs | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/Annex/Branch.hs b/Annex/Branch.hs index 8192804a6..bc6c8fe54 100644 --- a/Annex/Branch.hs +++ b/Annex/Branch.hs @@ -29,6 +29,7 @@ module Annex.Branch ( import qualified Data.ByteString.Lazy.Char8 as L import qualified Data.Set as S import qualified Data.Map as M +import qualified Control.Exception as E import Common.Annex import Annex.BranchState @@ -53,6 +54,7 @@ import Logs.Trust.Pure import Annex.ReplaceFile import qualified Annex.Queue import Annex.Branch.Transitions +import Annex.Exception {- Name of the branch that is used to store git-annex's information. -} name :: Git.Ref @@ -345,15 +347,15 @@ withIndex' bootstrapping a = do #endif let g' = g { gitEnv = Just $ ("GIT_INDEX_FILE", f):e } - Annex.changeState $ \s -> s { Annex.repo = g' } - checkIndexOnce $ unlessM (liftIO $ doesFileExist f) $ do - unless bootstrapping create - liftIO $ createDirectoryIfMissing True $ takeDirectory f - unless bootstrapping $ inRepo genIndex - r <- a + r <- tryAnnex $ do + Annex.changeState $ \s -> s { Annex.repo = g' } + checkIndexOnce $ unlessM (liftIO $ doesFileExist f) $ do + unless bootstrapping create + liftIO $ createDirectoryIfMissing True $ takeDirectory f + unless bootstrapping $ inRepo genIndex + a Annex.changeState $ \s -> s { Annex.repo = (Annex.repo s) { gitEnv = gitEnv g} } - - return r + either Ethrow return r {- Updates the branch's index to reflect the current contents of the branch. - Any changes staged in the index will be preserved. |