diff -r 1ec7cdaf898f -r 6e431e1635b6 mercurial/exchange.py --- 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