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 | |
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.
-rw-r--r-- | Annex/Branch.hs | 18 | ||||
-rw-r--r-- | debian/changelog | 3 | ||||
-rw-r--r-- | doc/bugs/Freshly_initialized_repo_has_staged_change___34__deleted:_uuid.log__34__.mdwn | 2 |
3 files changed, 15 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. diff --git a/debian/changelog b/debian/changelog index 94c68b42c..17911cab5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -13,6 +13,9 @@ git-annex (4.20131106) unstable; urgency=low views in the webapp. * map: Work when there are gcrypt remotes. * Fix build w/o webapp. + * 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. -- Joey Hess <joeyh@debian.org> Wed, 06 Nov 2013 11:17:47 -0400 diff --git a/doc/bugs/Freshly_initialized_repo_has_staged_change___34__deleted:_uuid.log__34__.mdwn b/doc/bugs/Freshly_initialized_repo_has_staged_change___34__deleted:_uuid.log__34__.mdwn index ca8e765bc..d66196acd 100644 --- a/doc/bugs/Freshly_initialized_repo_has_staged_change___34__deleted:_uuid.log__34__.mdwn +++ b/doc/bugs/Freshly_initialized_repo_has_staged_change___34__deleted:_uuid.log__34__.mdwn @@ -40,3 +40,5 @@ Perhaps some sort of a race-condition with the annex-assistant picking up the uu ### What version of git-annex are you using? On what operating system? Ubuntu 13.10 with git-annex 4.20130815 + +> [[fixed|done]]; see comments. (This fix needs to be backported to Ubuntu.) --[[Joey]] |