mercurial/exchange.py
changeset 22645 6e431e1635b6
parent 22628 2805d23e1f88
child 22649 1d7a2422b90c
--- a/mercurial/exchange.py	Thu Oct 02 12:16:07 2014 -0500
+++ b/mercurial/exchange.py	Fri Sep 26 17:44:00 2014 -0700
@@ -781,7 +781,7 @@
         if self._tr is not None:
             self._tr.release()
 
-def pull(repo, remote, heads=None, force=False):
+def pull(repo, remote, heads=None, force=False, bookmarks=()):
     pullop = pulloperation(repo, remote, heads, force)
     if pullop.remote.local():
         missing = set(pullop.remote.requirements) - pullop.repo.supported
@@ -791,6 +791,7 @@
                     " %s") % (', '.join(sorted(missing)))
             raise util.Abort(msg)
 
+    remotebookmarks = remote.listkeys('bookmarks')
     lock = pullop.repo.lock()
     try:
         _pulldiscovery(pullop)
@@ -807,6 +808,18 @@
     finally:
         pullop.releasetransaction()
         lock.release()
+    bookmod.updatefromremote(repo.ui, repo, remotebookmarks, remote.url())
+    # update specified bookmarks
+    if bookmarks:
+        marks = repo._bookmarks
+        writer = repo.ui.status
+        if repo.ui.configbool('ui', 'quietbookmarkmove', False):
+            writer = repo.ui.debug
+        for b in bookmarks:
+            # explicit pull overrides local bookmark if any
+            writer(_("importing bookmark %s\n") % b)
+            marks[b] = repo[remotebookmarks[b]].node()
+        marks.write()
 
     return pullop.cgresult