changeset 38753:e06a10d3b926 stable

clone: process 'lookup' return as an arbitrary symbol In theory, checkout is expected to be a node here because it was returned by peer.lookup. In practice, multiple important extensions (like hg-git, hg-subversion) use peers not backed by a mercurial repository where lookup cannot return a node. Allowing arbitrary symbols is necessary to make these extensions working with 4.7. We should probably introduce a new API in Core to have these extensions to work without abusing the lookup API. In the meantime, a small change to restore compatibility in 4.7 seems in order.
author Boris Feld <boris.feld@octobus.net>
date Mon, 30 Jul 2018 15:36:04 +0200
parents 8623a6c96998
children 8b5f97ab5774
files mercurial/hg.py
diffstat 1 files changed, 7 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/hg.py	Mon Jul 30 10:18:29 2018 -0400
+++ b/mercurial/hg.py	Mon Jul 30 15:36:04 2018 +0200
@@ -731,8 +731,14 @@
                 uprev = None
                 status = None
                 if checkout is not None:
-                    if checkout in destrepo:
+                    # Some extensions (at least hg-git and hg-subversion) have
+                    # a peer.lookup() implementation that returns a name instead
+                    # of a nodeid. We work around it here until we've figured
+                    # out a better solution.
+                    if len(checkout) == 20 and checkout in destrepo:
                         uprev = checkout
+                    elif scmutil.isrevsymbol(destrepo, checkout):
+                        uprev = scmutil.revsymbol(destrepo, checkout).node()
                     else:
                         if update is not True:
                             try: