diff --git a/mercurial/remotenames.py b/mercurial/remotenames.py --- a/mercurial/remotenames.py +++ b/mercurial/remotenames.py @@ -7,6 +7,16 @@ from __future__ import absolute_import +from .node import ( + hex, +) + +from . import ( + vfs as vfsmod, +) + +remotenamedir = 'remotenames' + def splitremotename(remote): name = '' if '/' in remote: @@ -18,6 +28,56 @@ remote += '/' + ref return remote +def saveremotebookmarks(repo, vfs, remotepath, bookmarks): + """ save remote bookmarks in .hg/remotenames/bookmarks. + The format of the data stored will be: + + `node remotepath/bookmarkname` + + bookmarks is a dictionary of remote bookmarks. + """ + + f = vfs('bookmarks', 'w', atomictemp=True) + + for bookmark, node in bookmarks.iteritems(): + if node: + f.write('%s %s\n' % + (node, joinremotename(remotepath, bookmark))) + f.close() + +def saveremotebranches(repo, vfs, remotepath, branches): + """ save remote branches is .hg/remotenames/branches. + The format of the data stored will be: + + `node remotepath/branchname` + + branches is a dictionary of remote branches. + """ + + f = vfs('branches', 'w', atomictemp=True) + + for branch, nodes in branches.iteritems(): + for n in nodes: + rname = joinremotename(remotepath, branch) + f.write('%s %s\n' % (hex(n), rname)) + + f.close() + +def saveremotenames(repo, remotepath, branches=None, bookmarks=None): + """ save remotenames i.e. remotebookmarks and remotebranches in their + respective files under ".hg/remotenames/" directory. + """ + + vfs = vfsmod.vfs(repo.vfs.join(remotenamedir)) + wlock = repo.wlock() + try: + if bookmarks: + saveremotebookmarks(repo, vfs, remotepath, bookmarks) + if branches: + saveremotebranches(repo, vfs, remotepath, branches) + finally: + wlock.release() + def pullremotenames(localrepo, remoterepo, remotepath): """ pulls bookmarks and branches information of the remote repo during a pull or clone operation. @@ -37,3 +97,5 @@ for node in nodes: if node in repo and not repo[node].obsolete(): bmap[branch].append(node) + + saveremotenames(localrepo, remotepath, bmap, bookmarks)