sync: Pass --allow-unrelated-histories to git merge when used with git git 2.9.0 or newer.

This makes merging a remote into a freshly created direct mode repository
work the same as it works in indirect mode.

The git-annex branches would get merged in any case by a sync,
since that doesn't use git merge.

This might need to be revisited later to better mirror git's behavior.
This commit is contained in:
Joey Hess 2016-11-15 18:26:17 -04:00
parent 6416ae9c09
commit 556b2ded2b
No known key found for this signature in database
GPG key ID: C910D9222512E3C7
4 changed files with 11 additions and 12 deletions

View file

@ -21,7 +21,6 @@ import Utility.Parallel
import qualified Git import qualified Git
import qualified Git.Command import qualified Git.Command
import qualified Git.Ref import qualified Git.Ref
import qualified Git.Merge
import qualified Remote import qualified Remote
import qualified Types.Remote as Remote import qualified Types.Remote as Remote
import qualified Remote.List as Remote import qualified Remote.List as Remote
@ -239,19 +238,12 @@ manualPull currentbranch remotes = do
) )
haddiverged <- liftAnnex Annex.Branch.forceUpdate haddiverged <- liftAnnex Annex.Branch.forceUpdate
forM_ normalremotes $ \r -> forM_ normalremotes $ \r ->
liftAnnex $ Command.Sync.mergeRemote r currentbranch mergeConfig liftAnnex $ Command.Sync.mergeRemote r currentbranch Command.Sync.mergeConfig
u <- liftAnnex getUUID u <- liftAnnex getUUID
forM_ xmppremotes $ \r -> forM_ xmppremotes $ \r ->
sendNetMessage $ Pushing (getXMPPClientID r) (PushRequest u) sendNetMessage $ Pushing (getXMPPClientID r) (PushRequest u)
return (catMaybes failed, haddiverged) return (catMaybes failed, haddiverged)
mergeConfig :: [Git.Merge.MergeConfig]
mergeConfig =
[ Git.Merge.MergeNonInteractive
-- Pairing involves merging unrelated histories
, Git.Merge.MergeUnrelatedHistories
]
{- Start syncing a remote, using a background thread. -} {- Start syncing a remote, using a background thread. -}
syncRemote :: Remote -> Assistant () syncRemote :: Remote -> Assistant ()
syncRemote remote = do syncRemote remote = do

View file

@ -12,7 +12,6 @@ import Assistant.TransferQueue
import Assistant.BranchChange import Assistant.BranchChange
import Assistant.DaemonStatus import Assistant.DaemonStatus
import Assistant.ScanRemotes import Assistant.ScanRemotes
import Assistant.Sync
import Utility.DirWatcher import Utility.DirWatcher
import Utility.DirWatcher.Types import Utility.DirWatcher.Types
import qualified Annex.Branch import qualified Annex.Branch
@ -86,7 +85,7 @@ onChange file
, "into", Git.fromRef b , "into", Git.fromRef b
] ]
void $ liftAnnex $ Command.Sync.merge void $ liftAnnex $ Command.Sync.merge
currbranch mergeConfig currbranch Command.Sync.mergeConfig
Git.Branch.AutomaticCommit Git.Branch.AutomaticCommit
changedbranch changedbranch
mergecurrent _ = noop mergecurrent _ = noop

View file

@ -6,6 +6,9 @@ git-annex (6.20161112) UNRELEASED; urgency=medium
if so, either use stack to build, or run cabal with if so, either use stack to build, or run cabal with
--constraint='persistent ==2.2.4.1' --constraint='persistent ==2.2.4.1'
Hopefully this mess with esqueleto will be resolved soon. Hopefully this mess with esqueleto will be resolved soon.
* sync: Pass --allow-unrelated-histories to git merge when used with git
git 2.9.0 or newer. This makes merging a remote into a freshly created
direct mode repository work the same as it works in indirect mode.
-- Joey Hess <id@joeyh.name> Tue, 15 Nov 2016 11:15:27 -0400 -- Joey Hess <id@joeyh.name> Tue, 15 Nov 2016 11:15:27 -0400

View file

@ -169,7 +169,12 @@ prepMerge :: Annex ()
prepMerge = Annex.changeDirectory =<< fromRepo Git.repoPath prepMerge = Annex.changeDirectory =<< fromRepo Git.repoPath
mergeConfig :: [Git.Merge.MergeConfig] mergeConfig :: [Git.Merge.MergeConfig]
mergeConfig = [Git.Merge.MergeNonInteractive] mergeConfig =
[ Git.Merge.MergeNonInteractive
-- In several situations, unrelated histories should be merged
-- together. This includes pairing in the assistant etc.
, Git.Merge.MergeUnrelatedHistories
]
merge :: CurrBranch -> [Git.Merge.MergeConfig] -> Git.Branch.CommitMode -> Git.Branch -> Annex Bool merge :: CurrBranch -> [Git.Merge.MergeConfig] -> Git.Branch.CommitMode -> Git.Branch -> Annex Bool
merge (Just b, Just adj) mergeconfig commitmode tomerge = merge (Just b, Just adj) mergeconfig commitmode tomerge =