diff --git a/hgext/convert/hg.py b/hgext/convert/hg.py --- a/hgext/convert/hg.py +++ b/hgext/convert/hg.py @@ -217,7 +217,8 @@ """ anc = [p1ctx.ancestor(p2ctx)] # Calculate what files are coming from p2 - actions, diverge, rename = mergemod.calculateupdates( + # TODO: this might be achieved using commitinfo + actions, diverge, rename, commitinfo = mergemod.calculateupdates( self.repo, p1ctx, p2ctx, diff --git a/hgext/largefiles/overrides.py b/hgext/largefiles/overrides.py --- a/hgext/largefiles/overrides.py +++ b/hgext/largefiles/overrides.py @@ -543,12 +543,12 @@ origfn, repo, p1, p2, pas, branchmerge, force, acceptremote, *args, **kwargs ): overwrite = force and not branchmerge - actions, diverge, renamedelete = origfn( + actions, diverge, renamedelete, commitinfo = origfn( repo, p1, p2, pas, branchmerge, force, acceptremote, *args, **kwargs ) if overwrite: - return actions, diverge, renamedelete + return actions, diverge, renamedelete, commitinfo # Convert to dictionary with filename as key and action as value. lfiles = set() @@ -620,7 +620,7 @@ actions[lfile] = (b'g', largs, b'replaces standin') actions[standin] = (b'r', None, b'replaced by non-standin') - return actions, diverge, renamedelete + return actions, diverge, renamedelete, commitinfo @eh.wrapfunction(mergestatemod, b'recordupdates') diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -565,6 +565,8 @@ diverge: mapping of source name -> list of dest name for divergent renames renamedelete: mapping of source name -> list of destinations for files deleted on one side and renamed on other. + commitinfo: dict containing data which should be used on commit + contains a filename -> info mapping """ if matcher is not None and matcher.always(): matcher = None @@ -578,6 +580,10 @@ branch_copies1 = copies.branch_copies() branch_copies2 = copies.branch_copies() diverge = {} + # information from merge which is needed at commit time + # for example choosing filelog of which parent to commit + # TODO: use specific constants in future for this mapping + commitinfo = {} if followcopies: branch_copies1, branch_copies2, diverge = copies.mergecopies( repo, wctx, p2, pa @@ -671,6 +677,8 @@ (fl2, False), b'remote is newer', ) + if branchmerge: + commitinfo[f] = b'other' elif nol and n2 == a: # remote only changed 'x' actions[f] = ( mergestatemod.ACTION_EXEC, @@ -685,6 +693,8 @@ (fl1, False), b'remote is newer', ) + if branchmerge: + commitinfo[f] = b'other' else: # both changed something actions[f] = ( mergestatemod.ACTION_MERGE, @@ -846,7 +856,7 @@ renamedelete = branch_copies1.renamedelete renamedelete.update(branch_copies2.renamedelete) - return actions, diverge, renamedelete + return actions, diverge, renamedelete, commitinfo def _resolvetrivial(repo, wctx, mctx, ancestor, actions): @@ -892,13 +902,13 @@ Also filters out actions which are unrequired if repository is sparse. - Returns same 3 element tuple as manifestmerge(). + Returns same 4 element tuple as manifestmerge(). """ # Avoid cycle. from . import sparse if len(ancestors) == 1: # default - actions, diverge, renamedelete = manifestmerge( + actions, diverge, renamedelete, commitinfo = manifestmerge( repo, wctx, mctx, @@ -928,7 +938,7 @@ diverge, renamedelete = None, None for ancestor in ancestors: repo.ui.note(_(b'\ncalculating bids for ancestor %s\n') % ancestor) - actions, diverge1, renamedelete1 = manifestmerge( + actions, diverge1, renamedelete1, commitinfo = manifestmerge( repo, wctx, mctx, @@ -1011,7 +1021,7 @@ ) _resolvetrivial(repo, wctx, mctx, ancestors[0], actions) - return prunedactions, diverge, renamedelete + return prunedactions, diverge, renamedelete, commitinfo def _getcwd(): @@ -1735,7 +1745,7 @@ followcopies = False ### calculate phase - actionbyfile, diverge, renamedelete = calculateupdates( + actionbyfile, diverge, renamedelete, commitinfo = calculateupdates( repo, wc, p2,