From patchwork Mon Dec 1 20:57:23 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [2,of,3] share: accept optional bookmarks parameter From: Ryan McElroy X-Patchwork-Id: 6935 Message-Id: To: Date: Mon, 1 Dec 2014 12:57:23 -0800 # HG changeset patch # User Ryan McElroy # Date 1417078134 28800 # Thu Nov 27 00:48:54 2014 -0800 # Node ID beb7a11c50c34e38adea9d8dd3650d42d16cf0ff # Parent c4f7d3fbe855041951dfccb40b05031def426a2b share: accept optional bookmarks parameter This modifies the share function in the hg module so it takes a boolean bookmarks parameter and plumbs this through to the share command added by the extension. If this parameter is true, the function will create a bookmarks.shared file in the destination repository with contents pointing to the source repository with which the destination should share bookmarks. The actual bookmark sharing functionality will be added in a later patch. diff --git a/hgext/share.py b/hgext/share.py --- a/hgext/share.py +++ b/hgext/share.py @@ -13,10 +13,12 @@ testedwith = 'internal' @command('share', - [('U', 'noupdate', None, _('do not create a working copy'))], - _('[-U] SOURCE [DEST]'), + [('U', 'noupdate', None, _('do not create a working copy')), + ('B', 'bookmarks', None, _('share bookmarks with source repository')), + ], + _('[-U] [-B] SOURCE [DEST]'), norepo=True) -def share(ui, source, dest=None, noupdate=False): +def share(ui, source, dest=None, noupdate=False, bookmarks=False): """create a new shared repository Initialize a new repository and working directory that shares its @@ -34,7 +36,7 @@ the broken clone to reset it to a changeset that still exists. """ - return hg.share(ui, source, dest, not noupdate) + return hg.share(ui, source, dest, not noupdate, bookmarks) @command('unshare', [], '') def unshare(ui, repo): diff --git a/mercurial/hg.py b/mercurial/hg.py --- a/mercurial/hg.py +++ b/mercurial/hg.py @@ -158,7 +158,7 @@ return '' return os.path.basename(os.path.normpath(path)) -def share(ui, source, dest=None, update=True): +def share(ui, source, dest=None, update=True, bookmarks=False): '''create a shared repository''' if not islocal(source): @@ -225,6 +225,19 @@ continue _update(r, uprev) + if bookmarks: + bookpath = srcrepo.wvfs.base + # follow shared repo to source + try: + bookpath = srcrepo.vfs.read('bookmarks.shared') + ui.debug('bookmark path changed to %s' % bookpath) + except IOError, inst: + ui.debug('bookmkar path left as %s' % bookpath) + if inst.errno != errno.ENOENT: + raise + + destvfs.write('bookmarks.shared', bookpath) + def copystore(ui, srcrepo, destpath): '''copy files from store of srcrepo in destpath