changeset 20465:170f71061069

push: move outgoing check logic in its own function Now that every necessary information is held in the `pushoperation` object, we can extract the part responsible of aborting the push to it's own function. This changeset is mostly pure code movement. the exception is the fact this function returns a value to decide if changeset bundle should be pushed.
author Pierre-Yves David <pierre-yves.david@logilab.fr>
date Thu, 30 Jan 2014 21:01:21 -0800
parents d032417db243
children 233623d58c9a
files mercurial/exchange.py
diffstat 1 files changed, 40 insertions(+), 33 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/exchange.py	Thu Jan 30 21:01:13 2014 -0800
+++ b/mercurial/exchange.py	Thu Jan 30 21:01:21 2014 -0800
@@ -111,39 +111,7 @@
             pushop.remoteheads = remoteheads
             pushop.incoming = inc
 
-
-            if not outgoing.missing:
-                # nothing to push
-                scmutil.nochangesfound(unfi.ui, unfi, outgoing.excluded)
-            else:
-                # something to push
-                if not pushop.force:
-                    # if repo.obsstore == False --> no obsolete
-                    # then, save the iteration
-                    if unfi.obsstore:
-                        # this message are here for 80 char limit reason
-                        mso = _("push includes obsolete changeset: %s!")
-                        mst = "push includes %s changeset: %s!"
-                        # plain versions for i18n tool to detect them
-                        _("push includes unstable changeset: %s!")
-                        _("push includes bumped changeset: %s!")
-                        _("push includes divergent changeset: %s!")
-                        # If we are to push if there is at least one
-                        # obsolete or unstable changeset in missing, at
-                        # least one of the missinghead will be obsolete or
-                        # unstable. So checking heads only is ok
-                        for node in outgoing.missingheads:
-                            ctx = unfi[node]
-                            if ctx.obsolete():
-                                raise util.Abort(mso % ctx)
-                            elif ctx.troubled():
-                                raise util.Abort(_(mst)
-                                                 % (ctx.troubles()[0],
-                                                    ctx))
-                    newbm = pushop.ui.configlist('bookmarks', 'pushing')
-                    discovery.checkheads(unfi, pushop.remote, outgoing,
-                                         remoteheads, pushop.newbranch,
-                                         bool(pushop.incoming), newbm)
+            if _pushcheckoutgoing(pushop):
                 _pushchangeset(pushop)
             _pushsyncphase(pushop)
             _pushobsolete(pushop)
@@ -157,6 +125,45 @@
     _pushbookmark(pushop)
     return pushop.ret
 
+def _pushcheckoutgoing(pushop):
+    outgoing = pushop.outgoing
+    unfi = pushop.repo.unfiltered()
+    if not outgoing.missing:
+        # nothing to push
+        scmutil.nochangesfound(unfi.ui, unfi, outgoing.excluded)
+        return False
+    # something to push
+    if not pushop.force:
+        # if repo.obsstore == False --> no obsolete
+        # then, save the iteration
+        if unfi.obsstore:
+            # this message are here for 80 char limit reason
+            mso = _("push includes obsolete changeset: %s!")
+            mst = "push includes %s changeset: %s!"
+            # plain versions for i18n tool to detect them
+            _("push includes unstable changeset: %s!")
+            _("push includes bumped changeset: %s!")
+            _("push includes divergent changeset: %s!")
+            # If we are to push if there is at least one
+            # obsolete or unstable changeset in missing, at
+            # least one of the missinghead will be obsolete or
+            # unstable. So checking heads only is ok
+            for node in outgoing.missingheads:
+                ctx = unfi[node]
+                if ctx.obsolete():
+                    raise util.Abort(mso % ctx)
+                elif ctx.troubled():
+                    raise util.Abort(_(mst)
+                                     % (ctx.troubles()[0],
+                                        ctx))
+        newbm = pushop.ui.configlist('bookmarks', 'pushing')
+        discovery.checkheads(unfi, pushop.remote, outgoing,
+                             pushop.remoteheads,
+                             pushop.newbranch,
+                             bool(pushop.incoming),
+                             newbm)
+    return True
+
 def _pushchangeset(pushop):
     """Make the actual push of changeset bundle to remote repo"""
     outgoing = pushop.outgoing