subrepos: be smarter about what's an absolute path (issue2808) stable
authorMatt Mackall <mpm@selenic.com>
Wed, 29 Jun 2011 16:01:06 -0500
branchstable
changeset 14766 4f56b7530eab
parent 14765 08ef6b5f3715
child 14767 aab323df2c44
subrepos: be smarter about what's an absolute path (issue2808)
mercurial/subrepo.py
mercurial/util.py
--- a/mercurial/subrepo.py	Wed Jun 29 13:04:00 2011 +0200
+++ b/mercurial/subrepo.py	Wed Jun 29 16:01:06 2011 -0500
@@ -198,9 +198,9 @@
     or on the top repo config. Abort or return None if no source found."""
     if hasattr(repo, '_subparent'):
         source = util.url(repo._subsource)
+        if source.isabs():
+            return str(source)
         source.path = posixpath.normpath(source.path)
-        if posixpath.isabs(source.path) or source.scheme:
-            return str(source)
         parent = _abssource(repo._subparent, push, abort=False)
         if parent:
             parent = util.url(parent)
--- a/mercurial/util.py	Wed Jun 29 13:04:00 2011 +0200
+++ b/mercurial/util.py	Wed Jun 29 16:01:06 2011 -0500
@@ -1555,6 +1555,17 @@
         return (s, (None, (str(self), self.host),
                     self.user, self.passwd or ''))
 
+    def isabs(self):
+        if self.scheme and self.scheme != 'file':
+            return True # remote URL
+        if hasdriveletter(self.path):
+            return True # absolute for our purposes - can't be joined()
+        if self.path.startswith(r'\\'):
+            return True # Windows UNC path
+        if self.path.startswith('/'):
+            return True # POSIX-style
+        return False
+
     def localpath(self):
         if self.scheme == 'file' or self.scheme == 'bundle':
             path = self.path or '/'