[PATCH 2 of 2] hg: share supports bookmarks and uses same update targets as clone
Simon Heimberg
simohe at besonet.ch
Mon Nov 5 17:08:37 CST 2012
# HG changeset patch
# User simon at laptop-tosh
# Date 1351339146 -7200
# Branch stable
# Node ID c97840a340fb33b783b3dbbec7a6a04140de32ba
# Parent 7425c0c92b2ee79e4e9271c3307d44290bc0977b
hg: share supports bookmarks and uses same update targets as clone
Move some code of clone in new function _postclone and use it in share
diff -r 7425c0c92b2e -r c97840a340fb mercurial/hg.py
--- a/mercurial/hg.py Sam Okt 27 12:38:59 2012 +0200
+++ b/mercurial/hg.py Sam Okt 27 13:59:06 2012 +0200
@@ -174,25 +174,8 @@
if not default:
# set default to source for being able to clone subrepos
default = os.path.abspath(util.urllocalpath(origsource))
- fp = r.opener("hgrc", "w", text=True)
- fp.write("[paths]\n")
- fp.write("default = %s\n" % default)
- fp.close()
- r.ui.setconfig('paths', 'default', default)
+ _postclone(srcrepo.peer(), r, default, update, checkout)
- if update:
- r.ui.status(_("updating working directory\n"))
- if update is not True:
- checkout = update
- for test in (checkout, 'default', 'tip'):
- if test is None:
- continue
- try:
- uprev = r.lookup(test)
- break
- except error.RepoLookupError:
- continue
- _update(r, uprev)
def copystore(ui, srcrepo, destpath):
'''copy files from store of srcrepo in destpath
@@ -390,66 +373,15 @@
if dircleanup:
dircleanup.close()
- # clone all bookmarks except divergent ones
destrepo = destpeer.local()
- if destrepo and srcpeer.capable("pushkey"):
- rb = srcpeer.listkeys('bookmarks')
- for k, n in rb.iteritems():
- try:
- m = destrepo.lookup(n)
- destrepo._bookmarks[k] = m
- except error.RepoLookupError:
- pass
- if rb:
- bookmarks.write(destrepo)
- elif srcrepo and destpeer.capable("pushkey"):
- for k, n in srcrepo._bookmarks.iteritems():
- destpeer.pushkey('bookmarks', k, '', hex(n))
if destrepo:
- fp = destrepo.opener("hgrc", "w", text=True)
- fp.write("[paths]\n")
u = util.url(abspath)
u.passwd = None
defaulturl = str(u)
- fp.write("default = %s\n" % defaulturl)
- fp.close()
-
- destrepo.ui.setconfig('paths', 'default', defaulturl)
-
- if update:
- if update is not True:
- checkout = srcpeer.lookup(update)
- uprev = None
- status = None
- if checkout is not None:
- try:
- uprev = destrepo.lookup(checkout)
- except error.RepoLookupError:
- pass
- if uprev is None:
- try:
- uprev = destrepo._bookmarks['@']
- update = '@'
- bn = destrepo[uprev].branch()
- if bn == 'default':
- status = _("updating to bookmark @\n")
- else:
- status = _("updating to bookmark @ on branch %s\n"
- % bn)
- except KeyError:
- try:
- uprev = destrepo.branchtip('default')
- except error.RepoLookupError:
- uprev = destrepo.lookup('tip')
- if not status:
- bn = destrepo[uprev].branch()
- status = _("updating to branch %s\n") % bn
- destrepo.ui.status(status)
- _update(destrepo, uprev)
- if update in destrepo._bookmarks:
- bookmarks.setcurrent(destrepo, update)
-
+ else:
+ defaulturl = None
+ _postclone(srcpeer, destrepo, defaulturl, update, checkout, srcrepo)
return srcpeer, destpeer
finally:
release(srclock, destlock)
@@ -458,6 +390,65 @@
if srcpeer is not None:
srcpeer.close()
+def _postclone(srcpeer, destrepo, defaulturl, update, checkout, srcrepo=None):
+ "clone bookmarks, write default path in hgrc, update repo"
+
+ # clone all bookmarks except divergent ones
+ if destrepo and srcpeer.capable("pushkey"):
+ rb = srcpeer.listkeys('bookmarks')
+ for k, n in rb.iteritems():
+ try:
+ m = destrepo.lookup(n)
+ destrepo._bookmarks[k] = m
+ except error.RepoLookupError:
+ pass
+ if rb:
+ bookmarks.write(destrepo)
+ elif srcrepo and destpeer.capable("pushkey"):
+ for k, n in srcrepo._bookmarks.iteritems():
+ destpeer.pushkey('bookmarks', k, '', hex(n))
+
+ if destrepo:
+ fp = destrepo.opener("hgrc", "w", text=True)
+ fp.write("[paths]\n")
+ fp.write("default = %s\n" % defaulturl)
+ fp.close()
+
+ destrepo.ui.setconfig('paths', 'default', defaulturl)
+
+ if update:
+ if update is not True:
+ checkout = srcpeer.lookup(update)
+ uprev = None
+ status = None
+ if checkout is not None:
+ try:
+ uprev = destrepo.lookup(checkout)
+ except error.RepoLookupError:
+ pass
+ if uprev is None:
+ try:
+ uprev = destrepo._bookmarks['@']
+ update = '@'
+ bn = destrepo[uprev].branch()
+ if bn == 'default':
+ status = _("updating to bookmark @\n")
+ else:
+ status = _("updating to bookmark @ on branch %s\n"
+ % bn)
+ except KeyError:
+ try:
+ uprev = destrepo.branchtip('default')
+ except error.RepoLookupError:
+ uprev = destrepo.lookup('tip')
+ if not status:
+ bn = destrepo[uprev].branch()
+ status = _("updating to branch %s\n") % bn
+ destrepo.ui.status(status)
+ _update(destrepo, uprev)
+ if update in destrepo._bookmarks:
+ bookmarks.setcurrent(destrepo, update)
+
def _showstats(repo, stats):
repo.ui.status(_("%d files updated, %d files merged, "
"%d files removed, %d files unresolved\n") % stats)
diff -r 7425c0c92b2e -r c97840a340fb tests/test-subrepo.t
--- a/tests/test-subrepo.t Sam Okt 27 12:38:59 2012 +0200
+++ b/tests/test-subrepo.t Sam Okt 27 13:59:06 2012 +0200
@@ -720,7 +720,7 @@
Check that share works with subrepo
$ hg --config extensions.share= share . ../shared
- updating working directory
+ updating to branch default
cloning subrepo subrepo-2 from $TESTTMP/subrepo-status/subrepo-2
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ test -f ../shared/subrepo-1/.hg/sharedpath
More information about the Mercurial-devel
mailing list