changeset 20489:7b5ec1c7e8e2

pull: move changeset pulling in its own function pull: move changeset pulling in its own function Now that every necessary information is held in the `pulloperation` object, we can finally extract the changeset pulling to it's own function. This changeset is pure code movement only.
author Pierre-Yves David <pierre-yves.david@logilab.fr>
date Fri, 31 Jan 2014 01:39:59 -0800
parents 76e66654f74e
children d0bca0649c7f
files mercurial/exchange.py
diffstat 1 files changed, 27 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/exchange.py	Tue Feb 11 14:51:38 2014 -0800
+++ b/mercurial/exchange.py	Fri Jan 31 01:39:59 2014 -0800
@@ -452,35 +452,7 @@
             pullop.repo.ui.status(_("no changes found\n"))
             result = 0
         else:
-            # We delay the open of the transaction as late as possible so we
-            # don't open transaction for nothing or you break future useful
-            # rollback call
-            pullop.gettransaction()
-            if pullop.heads is None and list(pullop.common) == [nullid]:
-                pullop.repo.ui.status(_("requesting all changes\n"))
-            elif (pullop.heads is None
-                  and pullop.remote.capable('changegroupsubset')):
-                # issue1320, avoid a race if remote changed after discovery
-                pullop.heads = pullop.rheads
-
-            if pullop.remote.capable('getbundle'):
-                # TODO: get bundlecaps from remote
-                cg = pullop.remote.getbundle('pull',
-                                             common=pullop.common,
-                                             heads=(pullop.heads
-                                                   or pullop.rheads))
-            elif pullop.heads is None:
-                cg = pullop.remote.changegroup(pullop.fetch, 'pull')
-            elif not pullop.remote.capable('changegroupsubset'):
-                raise util.Abort(_("partial pull cannot be done because "
-                                       "other repository doesn't support "
-                                       "changegroupsubset."))
-            else:
-                cg = pullop.remote.changegroupsubset(pullop.fetch,
-                                                     pullop.heads,
-                                                     'pull')
-            result = pullop.repo.addchangegroup(cg, 'pull',
-                                                pullop.remote.url())
+            result = _pullchangeset(pullop)
 
         _pullphase(pullop)
         _pullobsolete(pullop)
@@ -491,6 +463,32 @@
 
     return result
 
+def _pullchangeset(pullop):
+    """pull changeset from unbundle into the local repo"""
+    # We delay the open of the transaction as late as possible so we
+    # don't open transaction for nothing or you break future useful
+    # rollback call
+    pullop.gettransaction()
+    if pullop.heads is None and list(pullop.common) == [nullid]:
+        pullop.repo.ui.status(_("requesting all changes\n"))
+    elif pullop.heads is None and pullop.remote.capable('changegroupsubset'):
+        # issue1320, avoid a race if remote changed after discovery
+        pullop.heads = pullop.rheads
+
+    if pullop.remote.capable('getbundle'):
+        # TODO: get bundlecaps from remote
+        cg = pullop.remote.getbundle('pull', common=pullop.common,
+                                     heads=pullop.heads or pullop.rheads)
+    elif pullop.heads is None:
+        cg = pullop.remote.changegroup(pullop.fetch, 'pull')
+    elif not pullop.remote.capable('changegroupsubset'):
+        raise util.Abort(_("partial pull cannot be done because "
+                                   "other repository doesn't support "
+                                   "changegroupsubset."))
+    else:
+        cg = pullop.remote.changegroupsubset(pullop.fetch, pullop.heads, 'pull')
+    return pullop.repo.addchangegroup(cg, 'pull', pullop.remote.url())
+
 def _pullphase(pullop):
     # Get remote phases data from remote
     remotephases = pullop.remote.listkeys('phases')