Patchwork D6144: discovery: prevent recomputing info about server and outgoing changesets

login
register
mail settings
Submitter phabricator
Date March 17, 2019, 3:48 p.m.
Message ID <differential-rev-PHID-DREV-2fthrpy5fmtsmk3idsi4-req@phab.mercurial-scm.org>
Download mbox | patch
Permalink /patch/39310/
State Superseded
Headers show

Comments

phabricator - March 17, 2019, 3:48 p.m.
pulkit created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  We already iterate over the outgoing.missing above and lookup repo for them. So
  let's reuse info calculated at that time instead of recomputing that again.
  
  Also we calculate the set of remotebranches by doing set(remotemap), so let's
  reuse that again.
  
  Upcoming patches will clean things a bit more.

REPOSITORY
  rHG Mercurial

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

AFFECTED FILES
  mercurial/discovery.py

CHANGE DETAILS




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

Patch

diff --git a/mercurial/discovery.py b/mercurial/discovery.py
--- a/mercurial/discovery.py
+++ b/mercurial/discovery.py
@@ -201,19 +201,24 @@ 
     outgoing = pushop.outgoing
     cl = repo.changelog
     headssum = {}
+    missingctx = set()
     # A. Create set of branches involved in the push.
-    branches = set(repo[n].branch() for n in outgoing.missing)
+    branches = set()
+    for n in outgoing.missing:
+        ctx = repo[n]
+        missingctx.add(ctx)
+        branches.add(ctx.branch())
+    nbranches = branches.copy()
 
     with remote.commandexecutor() as e:
         remotemap = e.callcommand('branchmap', {}).result()
 
-    newbranches = branches - set(remotemap)
+    remotebranches = set(remotemap)
+    newbranches = branches - remotebranches
     branches.difference_update(newbranches)
 
     # A. register remote heads
-    remotebranches = set()
     for branch, heads in remotemap.iteritems():
-        remotebranches.add(branch)
         known = []
         unsynced = []
         knownnode = cl.hasnode # do not use nodemap until it is filtered
@@ -224,16 +229,12 @@ 
                 unsynced.append(h)
         headssum[branch] = (known, list(known), unsynced)
     # B. add new branch data
-    missingctx = list(repo[n] for n in outgoing.missing)
-    touchedbranches = set()
-    for ctx in missingctx:
-        branch = ctx.branch()
-        touchedbranches.add(branch)
+    for branch in nbranches:
         if branch not in headssum:
             headssum[branch] = (None, [], [])
 
     # C drop data about untouched branches:
-    for branch in remotebranches - touchedbranches:
+    for branch in remotebranches - nbranches:
         del headssum[branch]
 
     # D. Update newmap with outgoing changes.