sync: Fix an edge case where syncing in a bare repository would try to merge and so fail.

In the case where a remote of the bare repo has a fetch =  configuration,
refs/remotes/origin/master will exist, and so the merge code path tried to
run in the bare repo.
This commit is contained in:
Joey Hess 2015-01-05 13:40:49 -04:00
parent 18f74b52bd
commit 584eac78e6
2 changed files with 11 additions and 6 deletions

View file

@ -227,12 +227,15 @@ pullRemote remote branch = do
- while the synced/master may have changes that some
- other remote synced to this remote. So, merge them both. -}
mergeRemote :: Remote -> Maybe Git.Ref -> CommandCleanup
mergeRemote remote b = case b of
Nothing -> do
branch <- inRepo Git.Branch.currentUnsafe
and <$> mapM (merge Nothing) (branchlist branch)
Just thisbranch ->
and <$> (mapM (merge (Just thisbranch)) =<< tomerge (branchlist b))
mergeRemote remote b = ifM isBareRepo
( return True
, case b of
Nothing -> do
branch <- inRepo Git.Branch.currentUnsafe
and <$> mapM (merge Nothing) (branchlist branch)
Just thisbranch ->
and <$> (mapM (merge (Just thisbranch)) =<< tomerge (branchlist b))
)
where
merge thisbranch br = autoMergeFrom (remoteBranch remote br) thisbranch Git.Branch.ManualCommit
tomerge = filterM (changed remote)

2
debian/changelog vendored
View file

@ -7,6 +7,8 @@ git-annex (5.20141232) UNRELEASED; urgency=medium
Closes: #774494
* Fix build with process 1.2.1.0.
* Android: Provide a version built with -fPIE -pie to support Android 5.0.
* sync: Fix an edge case where syncing in a bare repository would try to
merge and so fail.
-- Joey Hess <id@joeyh.name> Fri, 02 Jan 2015 13:35:13 -0400