[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