mercurial/copies.py
changeset 42486 35d674a3d5db
parent 42485 4c39c99d9492
child 42487 5ceb91136ebe
--- a/mercurial/copies.py	Thu Apr 18 00:40:53 2019 -0700
+++ b/mercurial/copies.py	Thu Apr 18 21:22:14 2019 -0700
@@ -276,27 +276,22 @@
             # We are tracing copies from both parents
             r, i2, copies2 = heapq.heappop(work)
             copies = {}
-            ctx = repo[r]
-            p1man, p2man = ctx.p1().manifest(), ctx.p2().manifest()
             allcopies = set(copies1) | set(copies2)
             # TODO: perhaps this filtering should be done as long as ctx
             # is merge, whether or not we're tracing from both parent.
             for dst in allcopies:
                 if not match(dst):
                     continue
-                if dst not in copies2:
-                    # Copied on p1 side: mark as copy from p1 side if it didn't
-                    # already exist on p2 side
-                    if dst not in p2man:
-                        copies[dst] = copies1[dst]
-                elif dst not in copies1:
-                    # Copied on p2 side: mark as copy from p2 side if it didn't
-                    # already exist on p1 side
-                    if dst not in p1man:
-                        copies[dst] = copies2[dst]
+                # Unlike when copies are stored in the filelog, we consider
+                # it a copy even if the destination already existed on the
+                # other branch. It's simply too expensive to check if the
+                # file existed in the manifest.
+                if dst in copies1:
+                    # If it was copied on the p1 side, mark it as copied from
+                    # that side, even if it was also copied on the p2 side.
+                    copies[dst] = copies1[dst]
                 else:
-                    # Copied on both sides: mark as copy from p1 side
-                    copies[dst] = copies1[dst]
+                    copies[dst] = copies2[dst]
         else:
             copies = copies1
         if r == b.rev():