diff mercurial/exchange.py @ 20352:58300f61b139

push: move bookmarks exchange in the exchange module The bookmark exchange code was already extracted during a previous cycle. This changesets moves the extracted function in this module. This function will read and write data in the `pushoperation` object and It is preferable to have all core function collaborating through this object in the same place. This changeset is pure code movement only. Code change for direct consumption of the `pushoperation` object will come later.
author Pierre-Yves David <pierre-yves.david@logilab.fr>
date Thu, 30 Jan 2014 17:46:51 -0800
parents c05ad450df23
children bebf8b8479f3
line wrap: on
line diff
--- a/mercurial/exchange.py	Thu Jan 30 17:08:29 2014 -0800
+++ b/mercurial/exchange.py	Thu Jan 30 17:46:51 2014 -0800
@@ -255,5 +255,22 @@
         if locallock is not None:
             locallock.release()
 
-    bookmarks.updateremote(pushop.ui, unfi, pushop.remote, pushop.revs)
+    _pushbookmark(pushop.ui, unfi, pushop.remote, pushop.revs)
     return ret
+
+def _pushbookmark(ui, repo, remote, revs):
+    """Update bookmark position on remote"""
+    ui.debug("checking for updated bookmarks\n")
+    revnums = map(repo.changelog.rev, revs or [])
+    ancestors = [a for a in repo.changelog.ancestors(revnums, inclusive=True)]
+    (addsrc, adddst, advsrc, advdst, diverge, differ, invalid
+     ) = bookmarks.compare(repo, repo._bookmarks, remote.listkeys('bookmarks'),
+                           srchex=hex)
+
+    for b, scid, dcid in advsrc:
+        if ancestors and repo[scid].rev() not in ancestors:
+            continue
+        if remote.pushkey('bookmarks', b, dcid, scid):
+            ui.status(_("updating bookmark %s\n") % b)
+        else:
+            ui.warn(_('updating bookmark %s failed!\n') % b)