--- a/mercurial/copies.py Fri Apr 06 09:34:44 2018 -0700
+++ b/mercurial/copies.py Thu Apr 05 17:51:10 2018 +0200
@@ -698,9 +698,6 @@
basenametofilename[basename].append(f)
dirnametofilename[dirname].append(f)
- # in case of a rebase/graft, base may not be a common ancestor
- anc = c1.ancestor(c2)
-
for f in missingfiles:
basename = os.path.basename(f)
dirname = os.path.dirname(f)
@@ -723,7 +720,7 @@
for candidate in movecandidates:
f1 = c1.filectx(candidate)
- if _related(f1, f2, anc.rev()):
+ if _related(f1, f2):
# if there are a few related copies then we'll merge
# changes into all of them. This matches the behaviour
# of upstream copytracing
@@ -731,7 +728,7 @@
return copies, {}, {}, {}, {}
-def _related(f1, f2, limit):
+def _related(f1, f2):
"""return True if f1 and f2 filectx have a common ancestor
Walk back to common ancestor to see if the two files originate
@@ -758,10 +755,8 @@
f1 = next(g1)
elif f2r > f1r:
f2 = next(g2)
- elif f1 == f2:
- return f1 # a match
- elif f1r == f2r or f1r < limit or f2r < limit:
- return False # copy no longer relevant
+ else: # f1 and f2 point to files in the same linkrev
+ return f1 == f2 # true if they point to the same file
except StopIteration:
return False
@@ -829,7 +824,7 @@
c2 = getdstfctx(of, mdst[of])
# c2 might be a plain new file on added on destination side that is
# unrelated to the droids we are looking for.
- cr = _related(oc, c2, tca.rev())
+ cr = _related(oc, c2)
if cr and (of == f or of == c2.path()): # non-divergent
if backwards:
data['copy'][of] = f