diff --git a/mercurial/remotenames.py b/mercurial/remotenames.py --- a/mercurial/remotenames.py +++ b/mercurial/remotenames.py @@ -8,12 +8,18 @@ from __future__ import absolute_import -from .node import hex +from .node import ( + bin, + hex, +) from . import ( + util, vfs as vfsmod, ) +# namespace to use when recording an hg journal entry +journalremotebookmarktype = 'remotebookmark' # directory name in .hg/ in which remotenames files will be present remotenamedir = 'remotenames' @@ -61,6 +67,7 @@ bookmarks is a dictionary of remote bookmarks. """ olddata = set(readremotenamefile(repo, 'bookmarks')) + oldbooks = {} vfs = vfsmod.vfs(repo.vfs.join(remotenamedir)) f = vfs('bookmarks', 'w', atomictemp=True) @@ -69,6 +76,17 @@ for node, oldpath, rname in sorted(olddata): if oldpath != remotepath: f.write('%s %s %s\n' % (node, oldpath, rname)) + else: + oldbooks[rname] = node + + # record a journal entry if journal is loaded + if util.safehasattr(repo, 'journal'): + for bname, newnode in bookmarks.iteritems(): + oldnode = oldbooks.get(bname, hex(nullid)) + if oldnode != newnode: + joinedremotename = remotepath + '/' + bname + repo.journal.record(journalremotebookmarktype, joinedremotename, + bin(oldnode), bin(newnode)) for bookmark, node in sorted(bookmarks.iteritems()): if node: