changeset 42028:0cc9d7918754

discovery: prevent deleting items from a dictionary Removing elements from Python dictionary is expensive. So let's prevent adding them instead. I added a newline to make code look a bit better. Differential Revision: https://phab.mercurial-scm.org/D6146
author Pulkit Goyal <pulkit@yandex-team.ru>
date Sun, 17 Mar 2019 18:43:27 +0300
parents d36a7da96a5a
children 19ccc6788a27
files mercurial/discovery.py
diffstat 1 files changed, 6 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/discovery.py	Sun Mar 17 18:34:28 2019 +0300
+++ b/mercurial/discovery.py	Sun Mar 17 18:43:27 2019 +0300
@@ -212,10 +212,11 @@
     with remote.commandexecutor() as e:
         remotemap = e.callcommand('branchmap', {}).result()
 
-    remotebranches = set(remotemap)
-
-    # A. register remote heads
+    # A. register remote heads of branches which are in outgoing set
     for branch, heads in remotemap.iteritems():
+        # don't add head info about branches which we don't have locally
+        if branch not in branches:
+            continue
         known = []
         unsynced = []
         knownnode = cl.hasnode # do not use nodemap until it is filtered
@@ -225,16 +226,13 @@
             else:
                 unsynced.append(h)
         headssum[branch] = (known, list(known), unsynced)
+
     # B. add new branch data
     for branch in branches:
         if branch not in headssum:
             headssum[branch] = (None, [], [])
 
-    # C drop data about untouched branches:
-    for branch in remotebranches - branches:
-        del headssum[branch]
-
-    # D. Update newmap with outgoing changes.
+    # C. Update newmap with outgoing changes.
     # This will possibly add new heads and remove existing ones.
     newmap = branchmap.remotebranchcache((branch, heads[1])
                                  for branch, heads in headssum.iteritems()