Patchwork [3,of,7] push: move common heads computation in pushop

login
register
mail settings
Submitter Pierre-Yves David
Date Aug. 4, 2014, 10:32 p.m.
Message ID <757e2729b231c008ac46.1407191525@marginatus.alto.octopoid.net>
Download mbox | patch
Permalink /patch/5251/
State Accepted
Headers show

Comments

Pierre-Yves David - Aug. 4, 2014, 10:32 p.m.
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david@fb.com>
# Date 1404228442 -7200
#      Tue Jul 01 17:27:22 2014 +0200
# Node ID 757e2729b231c008ac4657d57f98a0eca6c4617b
# Parent  df19d14fd7bd1562324f50e7f55f0ec7b87aa54d
push: move common heads computation in pushop

Now that both option (push succeed or fall back) lives on pushop, we can move
the common heads computation there too. It is a very commonly accessed attribute
so it makes a lot of sense to have it on pushop.

Patch

diff --git a/mercurial/exchange.py b/mercurial/exchange.py
--- a/mercurial/exchange.py
+++ b/mercurial/exchange.py
@@ -75,12 +75,10 @@  class pushoperation(object):
         self.outgoing = None
         # all remote heads before the push
         self.remoteheads = None
         # testable as a boolean indicating if any nodes are missing locally.
         self.incoming = None
-        # set of all heads common after changeset bundle push
-        self.commonheads = None
 
     @util.propertycache
     def futureheads(self):
         """future remote heads if the changeset push succeed"""
         return self.outgoing.missingheads
@@ -115,10 +113,17 @@  class pushoperation(object):
                          self.outgoing.commonheads,
                          self.outgoing.missing)
         cheads.extend(c.node() for c in revset)
         return cheads
 
+    @property
+    def commonheads(self):
+        """set of all heads common after changeset bundle push"""
+        if self.ret:
+            return self.futureheads
+        else:
+            return self.fallbackheads
 
 def push(repo, remote, force=False, revs=None, newbranch=False):
     '''Push outgoing changesets (limited by revs) from a local
     repository to remote. Return an integer:
       - None means nothing to push
@@ -172,11 +177,10 @@  def push(repo, remote, force=False, revs
             if (pushop.repo.ui.configbool('experimental', 'bundle2-exp',
                                           False)
                 and pushop.remote.capable('bundle2-exp')):
                 _pushbundle2(pushop)
             _pushchangeset(pushop)
-            _pushcomputecommonheads(pushop)
             _pushsyncphase(pushop)
             _pushobsolete(pushop)
         finally:
             if lock is not None:
                 lock.release()
@@ -343,17 +347,10 @@  def _pushchangeset(pushop):
     else:
         # we return an integer indicating remote head count
         # change
         pushop.ret = pushop.remote.addchangegroup(cg, 'push', pushop.repo.url())
 
-def _pushcomputecommonheads(pushop):
-    if pushop.ret:
-        cheads = pushop.futureheads
-    else:
-        cheads = pushop.fallbackheads
-    pushop.commonheads = cheads
-
 def _pushsyncphase(pushop):
     """synchronise phase information locally and remotely"""
     unfi = pushop.repo.unfiltered()
     cheads = pushop.commonheads
     # even when we don't push, exchanging phase data is useful