##// END OF EJS Templates
rebase: use matcher to optimize manifestmerge...
Durham Goode -
r32151:4d504e54 default
parent child Browse files
Show More
@@ -786,7 +786,7 b' def driverconclude(repo, ms, wctx, label'
786 786 return True
787 787
788 788 def manifestmerge(repo, wctx, p2, pa, branchmerge, force, matcher,
789 acceptremote, followcopies):
789 acceptremote, followcopies, forcefulldiff=False):
790 790 """
791 791 Merge wctx and p2 with ancestor pa and generate merge action list
792 792
@@ -821,6 +821,26 b' def manifestmerge(repo, wctx, p2, pa, br'
821 821 if any(wctx.sub(s).dirty() for s in wctx.substate):
822 822 m1['.hgsubstate'] = modifiednodeid
823 823
824 # Don't use m2-vs-ma optimization if:
825 # - ma is the same as m1 or m2, which we're just going to diff again later
826 # - The matcher is set already, so we can't override it
827 # - The caller specifically asks for a full diff, which is useful during bid
828 # merge.
829 if (pa not in ([wctx, p2] + wctx.parents()) and
830 matcher is None and not forcefulldiff):
831 # Identify which files are relevant to the merge, so we can limit the
832 # total m1-vs-m2 diff to just those files. This has significant
833 # performance benefits in large repositories.
834 relevantfiles = set(ma.diff(m2).keys())
835
836 # For copied and moved files, we need to add the source file too.
837 for copykey, copyvalue in copy.iteritems():
838 if copyvalue in relevantfiles:
839 relevantfiles.add(copykey)
840 for movedirkey in movewithdir.iterkeys():
841 relevantfiles.add(movedirkey)
842 matcher = scmutil.matchfiles(repo, relevantfiles)
843
824 844 diff = m1.diff(m2, match=matcher)
825 845
826 846 if matcher is None:
@@ -974,7 +994,7 b' def calculateupdates(repo, wctx, mctx, a'
974 994 repo.ui.note(_('\ncalculating bids for ancestor %s\n') % ancestor)
975 995 actions, diverge1, renamedelete1 = manifestmerge(
976 996 repo, wctx, mctx, ancestor, branchmerge, force, matcher,
977 acceptremote, followcopies)
997 acceptremote, followcopies, forcefulldiff=True)
978 998 _checkunknownfiles(repo, wctx, mctx, force, actions, mergeforce)
979 999
980 1000 # Track the shortest set of warning on the theory that bid
@@ -186,7 +186,6 b' Graft out of order, skipping a merge and'
186 186 ancestor: 4c60f11aa304, local: 6b9e5368ca4e+, remote: 97f8bfe72746
187 187 e: remote is newer -> g
188 188 getting e
189 b: remote unchanged -> k
190 189 committing files:
191 190 e
192 191 committing manifest
@@ -203,7 +202,6 b' Graft out of order, skipping a merge and'
203 202 preserving e for resolve of e
204 203 d: remote is newer -> g
205 204 getting d
206 b: remote unchanged -> k
207 205 e: versions differ -> m (premerge)
208 206 picked tool ':merge' for e (binary False symlink False changedelete False)
209 207 merging e
@@ -38,7 +38,6 b' https://bz.mercurial-scm.org/672'
38 38 removing 1
39 39 1a: remote created -> g
40 40 getting 1a
41 2: remote unchanged -> k
42 41 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
43 42 (branch merge, don't forget to commit)
44 43
@@ -89,7 +89,6 b' args:'
89 89 preserving a for resolve of b
90 90 preserving rev for resolve of rev
91 91 starting 4 threads for background file closing (?)
92 a: remote unchanged -> k
93 92 b: remote copied from a -> m (premerge)
94 93 picked tool 'python ../merge' for b (binary False symlink False changedelete False)
95 94 merging a and b to b
@@ -652,7 +651,6 b' m "um a c" "um x c" " " "10 do merg'
652 651 preserving b for resolve of b
653 652 preserving rev for resolve of rev
654 653 starting 4 threads for background file closing (?)
655 a: remote unchanged -> k
656 654 b: both created -> m (premerge)
657 655 picked tool 'python ../merge' for b (binary False symlink False changedelete False)
658 656 merging b
General Comments 0
You need to be logged in to leave comments. Login now