[PATCH 2 of 7 (push is done; 12 more to go for pull)] push: move changeset push logic in its own function

pierre-yves.david at ens-lyon.org pierre-yves.david at ens-lyon.org
Tue Feb 11 15:32:52 CST 2014


# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at logilab.fr>
# Date 1391143495 28800
#      Thu Jan 30 20:44:55 2014 -0800
# Node ID d90f282f42ed0f761e95cffb997088cf4974e2b8
# Parent  783539ede731dee892842d1d07d27e8be95f8fa3
push: move changeset push  logic in its own function

Now that every necessary information is held in the `pushoperation` object, we
can extract the logic pushing changeset  to it's own function.

This changeset is pure code movement only.

diff --git a/mercurial/exchange.py b/mercurial/exchange.py
--- a/mercurial/exchange.py
+++ b/mercurial/exchange.py
@@ -139,47 +139,11 @@ def push(repo, remote, force=False, revs
                                                     ctx))
                     newbm = pushop.ui.configlist('bookmarks', 'pushing')
                     discovery.checkheads(unfi, pushop.remote, outgoing,
                                          remoteheads, pushop.newbranch,
                                          bool(inc), newbm)
-
-                # TODO: get bundlecaps from remote
-                bundlecaps = None
-                # create a changegroup from local
-                if pushop.revs is None and not (outgoing.excluded
-                                        or pushop.repo.changelog.filteredrevs):
-                    # push everything,
-                    # use the fast path, no race possible on push
-                    bundler = changegroup.bundle10(pushop.repo, bundlecaps)
-                    cg = pushop.repo._changegroupsubset(outgoing,
-                                                        bundler,
-                                                        'push',
-                                                        fastpath=True)
-                else:
-                    cg = pushop.repo.getlocalbundle('push', outgoing,
-                                                    bundlecaps)
-
-                # apply changegroup to remote
-                if unbundle:
-                    # local repo finds heads on server, finds out what
-                    # revs it must push. once revs transferred, if server
-                    # finds it has different heads (someone else won
-                    # commit/push race), server aborts.
-                    if pushop.force:
-                        remoteheads = ['force']
-                    else:
-                        remoteheads = pushop.remoteheads
-                    # ssh: return remote's addchangegroup()
-                    # http: return remote's addchangegroup() or 0 for error
-                    pushop.ret = pushop.remote.unbundle(cg, remoteheads,
-                                                        'push')
-                else:
-                    # we return an integer indicating remote head count
-                    # change
-                    pushop.ret = pushop.remote.addchangegroup(cg, 'push',
-                                                              pushop.repo.url())
-
+                _pushchangeset(pushop)
             _pushsyncphase(pushop)
             _pushobsolete(pushop)
         finally:
             if lock is not None:
                 lock.release()
@@ -188,10 +152,49 @@ def push(repo, remote, force=False, revs
             locallock.release()
 
     _pushbookmark(pushop)
     return pushop.ret
 
+def _pushchangeset(pushop):
+    """Make the actual push of changeset bundle to remote repo"""
+    outgoing = pushop.outgoing
+    unbundle = pushop.remote.capable('unbundle')
+    # TODO: get bundlecaps from remote
+    bundlecaps = None
+    # create a changegroup from local
+    if pushop.revs is None and not (outgoing.excluded
+                            or pushop.repo.changelog.filteredrevs):
+        # push everything,
+        # use the fast path, no race possible on push
+        bundler = changegroup.bundle10(pushop.repo, bundlecaps)
+        cg = pushop.repo._changegroupsubset(outgoing,
+                                            bundler,
+                                            'push',
+                                            fastpath=True)
+    else:
+        cg = pushop.repo.getlocalbundle('push', outgoing, bundlecaps)
+
+    # apply changegroup to remote
+    if unbundle:
+        # local repo finds heads on server, finds out what
+        # revs it must push. once revs transferred, if server
+        # finds it has different heads (someone else won
+        # commit/push race), server aborts.
+        if pushop.force:
+            remoteheads = ['force']
+        else:
+            remoteheads = pushop.remoteheads
+        # ssh: return remote's addchangegroup()
+        # http: return remote's addchangegroup() or 0 for error
+        pushop.ret = pushop.remote.unbundle(cg, remoteheads,
+                                            'push')
+    else:
+        # we return an integer indicating remote head count
+        # change
+        pushop.ret = pushop.remote.addchangegroup(cg, 'push',
+                                                              pushop.repo.url())
+
 def _pushsyncphase(pushop):
     """synchronise phase information locally and remotly"""
     unfi = pushop.repo.unfiltered()
     if pushop.ret:
         # push succeed, synchronize target of the push


More information about the Mercurial-devel mailing list