summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Annex/Direct.hs8
-rw-r--r--debian/changelog3
-rw-r--r--doc/bugs/Assistant:_synchronisation_between_two_regular_repositories_hangs_.mdwn2
-rw-r--r--doc/bugs/Assistant:_synchronisation_between_two_regular_repositories_hangs_/comment_3_db50cbdc302480c4b1fe0f364aa769d9._comment19
4 files changed, 29 insertions, 3 deletions
diff --git a/Annex/Direct.hs b/Annex/Direct.hs
index d88dc43fb..35a5b5013 100644
--- a/Annex/Direct.hs
+++ b/Annex/Direct.hs
@@ -153,7 +153,7 @@ addDirect file cache = do
-
- A lock file is used to avoid races with any other caller of mergeDirect.
-
- - To avoid other git processes from making change to the index while our
+ - To avoid other git processes from making changes to the index while our
- merge is in progress, the index lock file is used as the temp index
- file. This is the same as what git does when updating the index
- normally.
@@ -162,7 +162,8 @@ mergeDirect :: Maybe Git.Ref -> Maybe Git.Ref -> Git.Branch -> Annex Bool -> Git
mergeDirect startbranch oldref branch resolvemerge commitmode = exclusively $ do
reali <- liftIO . absPath =<< fromRepo indexFile
tmpi <- liftIO . absPath =<< fromRepo indexFileLock
- liftIO $ copyFile reali tmpi
+ liftIO $ whenM (doesFileExist reali) $
+ copyFile reali tmpi
d <- fromRepo gitAnnexMergeDir
liftIO $ do
@@ -178,7 +179,8 @@ mergeDirect startbranch oldref branch resolvemerge commitmode = exclusively $ do
mergeDirectCleanup d (fromMaybe Git.Sha.emptyTree oldref)
mergeDirectCommit merged startbranch branch commitmode
- liftIO $ rename tmpi reali
+ liftIO $ whenM (doesFileExist tmpi) $
+ rename tmpi reali
return r
where
diff --git a/debian/changelog b/debian/changelog
index 17fd70a0f..5ebbfcd18 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -10,6 +10,9 @@ git-annex (5.20150917) UNRELEASED; urgency=medium
to use Google's NearLine storage.
* Improve ~/.ssh/config modification code to not add trailing spaces
to lines it cannot parse.
+ * Fix a crash at direct mode merge time when .git/index doesn't exist
+ yet. Triggered by eg, git-annex sync --no-commit in a fresh clone of
+ a repository.
-- Joey Hess <id@joeyh.name> Wed, 16 Sep 2015 12:23:33 -0400
diff --git a/doc/bugs/Assistant:_synchronisation_between_two_regular_repositories_hangs_.mdwn b/doc/bugs/Assistant:_synchronisation_between_two_regular_repositories_hangs_.mdwn
index 8e6c4f468..cc63ac138 100644
--- a/doc/bugs/Assistant:_synchronisation_between_two_regular_repositories_hangs_.mdwn
+++ b/doc/bugs/Assistant:_synchronisation_between_two_regular_repositories_hangs_.mdwn
@@ -26,3 +26,5 @@ Also note that the second repository is on a FAT32 usb stick
# End of transcript or log.
"""]]
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/Assistant:_synchronisation_between_two_regular_repositories_hangs_/comment_3_db50cbdc302480c4b1fe0f364aa769d9._comment b/doc/bugs/Assistant:_synchronisation_between_two_regular_repositories_hangs_/comment_3_db50cbdc302480c4b1fe0f364aa769d9._comment
new file mode 100644
index 000000000..515ad0b7b
--- /dev/null
+++ b/doc/bugs/Assistant:_synchronisation_between_two_regular_repositories_hangs_/comment_3_db50cbdc302480c4b1fe0f364aa769d9._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2015-09-22T16:25:15Z"
+ content="""
+Ok, that seems clear enough, and there's only 1 place where git-annex
+copies .git/index; in `mergeDirect`. Indeed, if .git/index doesn't exist
+yet when that is called, it'll crash. And, a freshly created git repo
+starts off without a .git/index until changes start to be staged.
+
+However, I can't reproduce the crash with a current version of git-annex,
+and this bug report is about a version nearly a year old now. AFAICS,
+the sync (or the assistant) will make a commit before merging, and that
+commit results in the index file being created, as a side effect.
+Also, I can't see anything that VFAT could have to do with this.
+
+Hmm, I did manage to reproduce the crash using the new --no-commit flag to
+git-annex sync. Will fix on that basis.
+"""]]