[PATCH 4 of 5] copies: do not initialize the dictionary with root in changeset copies

Pierre-Yves David pierre-yves.david at ens-lyon.org
Mon Dec 2 06:28:19 EST 2019


# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at octobus.net>
# Date 1573634384 -3600
#      Wed Nov 13 09:39:44 2019 +0100
# Node ID 3348c01c4f299189d5f3ad208cea1bc635a57766
# Parent  aecdfe3c798f29670f341d88c7a4b7e2289500e9
# EXP-Topic patch-copies-rust-prep
# Available At https://dev.heptapod.net/octobus/mercurial-devel/
#              hg pull https://dev.heptapod.net/octobus/mercurial-devel/ -r 3348c01c4f29
copies: do not initialize the dictionary with root in changeset copies

We don't strictly need the dict to be prefiled with `{}`. Not doing so will make
the next changeset simpler. This part of a preparation to use native code for
this part of copy tracing.

diff --git a/mercurial/copies.py b/mercurial/copies.py
--- a/mercurial/copies.py
+++ b/mercurial/copies.py
@@ -281,10 +281,13 @@ def _changesetforwardcopies(a, b, match)
     iterrevs &= mrset
     iterrevs.update(roots)
     iterrevs.remove(b.rev())
-    all_copies = {r: {} for r in roots}
+    all_copies = {}
     alwaysmatch = match.always()
     for r in sorted(iterrevs):
-        copies = all_copies.pop(r)
+        copies = all_copies.pop(r, None)
+        if copies is None:
+            # this is a root
+            copies = {}
         for i, c in enumerate(children[r]):
             p1, p2, p1copies, p2copies, removed = revinfo(c)
             if r == p1:


More information about the Mercurial-devel mailing list