- In direct mode, the work tree is not touched here; files are staged to
- the index, and written to the gitAnnexMergeDir, for later handling by
- the direct mode merge code.
+ -
+ - Returns false when there are no merge conflicts to resolve.
+ - A git merge can fail for other reasons, and this allows detecting
+ - such failures.
-}
resolveMerge :: Maybe Git.Ref -> Git.Ref -> Annex Bool
resolveMerge us them = do
withIndexFile tmpi $ do
merged <- stageMerge d branch commitmode
- r <- if merged
+ ok <- if merged
then return True
else resolvemerge
- mergeDirectCleanup d (fromMaybe Git.Sha.emptyTree oldref)
- mergeDirectCommit merged startbranch branch commitmode
+ if ok
+ then do
+ mergeDirectCleanup d (fromMaybe Git.Sha.emptyTree oldref)
+ mergeDirectCommit merged startbranch branch commitmode
+ liftIO $ whenM (doesFileExist tmpi) $
+ rename tmpi reali
+ else liftIO $ nukeFile tmpi
- liftIO $ whenM (doesFileExist tmpi) $
- rename tmpi reali
-
- return r
+ return ok
where
exclusively = withExclusiveLock gitAnnexMergeLock
* Avoid unncessary write to the location log when a file is unlocked
and then added back with unchanged content.
* S3: Fix support for using https.
+ * sync, merge, assistant: When git merge failed for a reason other
+ than a conflicted merge, such as a crippled filesystem not allowing
+ particular characters in filenames, git-annex would make a merge commit
+ that could omit such files or otherwise be bad. Fixed by aborting the
+ whole merge process when git merge fails for any reason other than a
+ merge conflict.
* Debian: Add torrent library to build-depends as it's packaged now,
and stop recommending bittornado | bittorrent.
* Debian: Remove dependency on transformers library, as it is now