From patchwork Tue Mar 13 16:49:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [2, of, 2] push-discovery: extract the bookmark comparison logic in its own function From: Boris Feld X-Patchwork-Id: 29449 Message-Id: <5b15c9c72bc88931d5a5.1520959758@FB> To: mercurial-devel@mercurial-scm.org Date: Tue, 13 Mar 2018 17:49:18 +0100 # HG changeset patch # User Boris Feld # 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. 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()