Patchwork [2,of,2] push-discovery: extract the bookmark comparison logic in its own function

login
register
mail settings
Submitter Boris Feld
Date March 13, 2018, 4:49 p.m.
Message ID <5b15c9c72bc88931d5a5.1520959758@FB>
Download mbox | patch
Permalink /patch/29449/
State Accepted
Headers show

Comments

Boris Feld - March 13, 2018, 4:49 p.m.
# HG changeset patch
# User Boris Feld <boris.feld@octobus.net>
# Date 1520607221 -3600
#      Fri Mar 09 15:53:41 2018 +0100
# Node ID 5b15c9c72bc88931d5a5dc9bfec0935098c04402
# Parent  9ecb102cd955e075a6a637f1b8d4f5c8e3015751
# EXP-Topic push-book-handling
# Available At https://bitbucket.org/octobus/mercurial-devel/
#              hg pull https://bitbucket.org/octobus/mercurial-devel/ -r 5b15c9c72bc8
push-discovery: extract the bookmark comparison logic in its own function

This will help extensions to alter the behavior as they see fit.

Patch

diff --git a/mercurial/exchange.py b/mercurial/exchange.py
--- a/mercurial/exchange.py
+++ b/mercurial/exchange.py
@@ -624,12 +624,20 @@  def _pushdiscoverybookmarks(pushop):
                 for (b, scid, dcid) in bookmarks]
 
     comp = [hexifycompbookmarks(marks) for marks in comp]
+    return _processcompared(pushop, ancestors, explicit, remotebookmark, comp)
+
+def _processcompared(pushop, pushed, explicit, remotebms, comp):
+    """take decision on bookmark to pull from the remote bookmark
+
+    Exist to help extension who want to alter this behavior."""
     addsrc, adddst, advsrc, advdst, diverge, differ, invalid, same = comp
 
+    repo = pushop.repo
+
     for b, scid, dcid in advsrc:
         if b in explicit:
             explicit.remove(b)
-        if not ancestors or repo[scid].rev() in ancestors:
+        if not pushed or repo[scid].rev() in pushed:
             pushop.outbookmarks.append((b, dcid, scid))
     # search added bookmark
     for b, scid, dcid in addsrc:
@@ -655,8 +663,8 @@  def _pushdiscoverybookmarks(pushop):
     if explicit:
         explicit = sorted(explicit)
         # we should probably list all of them
-        ui.warn(_('bookmark %s does not exist on the local '
-                  'or remote repository!\n') % explicit[0])
+        pushop.ui.warn(_('bookmark %s does not exist on the local '
+                         'or remote repository!\n') % explicit[0])
         pushop.bkresult = 2
 
     pushop.outbookmarks.sort()