D6561: copies: simplify merging of copy dicts on merge commits

martinvonz (Martin von Zweigbergk) phabricator at mercurial-scm.org
Mon Jun 24 15:00:00 EDT 2019


Closed by commit rHG907cef396635: copies: simplify merging of copy dicts on merge commits (authored by martinvonz).
This revision was automatically updated to reflect the committed changes.
This revision was not accepted when it landed; it landed in state "Needs Review".

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D6561?vs=15625&id=15651

CHANGES SINCE LAST ACTION
  https://phab.mercurial-scm.org/D6561/new/

REVISION DETAIL
  https://phab.mercurial-scm.org/D6561

AFFECTED FILES
  mercurial/copies.py

CHANGE DETAILS

diff --git a/mercurial/copies.py b/mercurial/copies.py
--- a/mercurial/copies.py
+++ b/mercurial/copies.py
@@ -272,25 +272,19 @@
     heapq.heapify(work)
     alwaysmatch = match.always()
     while work:
-        r, i1, copies1 = heapq.heappop(work)
+        r, i1, copies = heapq.heappop(work)
         if work and work[0][0] == r:
             # We are tracing copies from both parents
             r, i2, copies2 = heapq.heappop(work)
-            copies = {}
-            allcopies = set(copies1) | set(copies2)
-            for dst in allcopies:
+            for dst, src in copies2.items():
                 # 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
+                if dst not in copies:
+                    # If it was copied on the p1 side, leave it as copied from
                     # that side, even if it was also copied on the p2 side.
-                    copies[dst] = copies1[dst]
-                else:
                     copies[dst] = copies2[dst]
-        else:
-            copies = copies1
         if r == b.rev():
             _filter(a, b, copies)
             return copies



To: martinvonz, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list