[PATCH 7 of 9 paths v2] ui: parse revisions out of URLs

Gregory Szorc gregory.szorc at gmail.com
Sun Mar 1 15:50:46 CST 2015


# HG changeset patch
# User Gregory Szorc <gregory.szorc at gmail.com>
# Date 1423518263 28800
#      Mon Feb 09 13:44:23 2015 -0800
# Node ID a18ef66b7b91f6ab396683330e849bc8009c7ad8
# Parent  b8d39c692feb69e2560a49abb1b9dcc984b3e1c8
ui: parse revisions out of URLs

URLs can be of the form "url#revision." Currently, this additional
parsing is done at call sites in addition to ui.expandpath(). We
build this functionality into the "path" class to make consumer code
simpler.

diff --git a/mercurial/ui.py b/mercurial/ui.py
--- a/mercurial/ui.py
+++ b/mercurial/ui.py
@@ -979,9 +979,13 @@ class paths(object):
         if name:
             if util.hasscheme(name):
                 return path(None, url=name)
 
-            if os.path.isdir(os.path.join(name, '.hg')):
+            # Strip #revision fragment before testing against filesystem
+            # paths.
+            url = util.url(name)
+            url.fragment = None
+            if os.path.isdir(os.path.join(str(url), '.hg')):
                 return path(name, local=name)
 
         try:
             return self[name]
@@ -1017,8 +1021,16 @@ class path(object):
 
         The primary URL for the path is defined as either a URL via ``url``
         (preferred) or from a local, relative filesystem path (``local``).
         """
+        import hg # avoid cycle
+
+        url = url or local
         self.name = name
-        # We will eventually do intelligent things depending on the
-        # source type. Until then, store a single variable for simplicity.
-        self.loc = url or local
+
+        # loc can disappear once all consumers are gone.
+        self.loc = url
+
+        url, revs = hg.parseurl(url)
+
+        self.url = url
+        self.rev = revs[0]


More information about the Mercurial-devel mailing list