handle file URIs correctly, according to RFC 2396 (issue1153) stable
authorSune Foldager <cryo@cyanite.org>
Thu, 03 Dec 2009 11:06:55 +0100
branchstable
changeset 9996 2770d03ae49f
parent 9995 eba6c8687fd2
child 9997 c08583734fc5
child 10018 4ddfad7ebd98
handle file URIs correctly, according to RFC 2396 (issue1153) The new code aims to implement the RFC correctly for file URIs. Previously they were handled incorrectly in several ways, which could cause problem on Windows in particular.
mercurial/util.py
tests/test-clone
tests/test-clone.out
tests/test-pull
tests/test-pull.out
--- a/mercurial/util.py	Thu Dec 03 11:06:44 2009 +0100
+++ b/mercurial/util.py	Thu Dec 03 11:06:55 2009 +0100
@@ -1197,7 +1197,19 @@
     if path.startswith(sc):
         path = path[len(sc):]
         if path.startswith('//'):
-            path = path[2:]
+            if scheme == 'file':
+                i = path.find('/', 2)
+                if i == -1:
+                    return ''
+                # On Windows, absolute paths are rooted at the current drive
+                # root. On POSIX they are rooted at the file system root.
+                if os.name == 'nt':
+                    droot = os.path.splitdrive(os.getcwd())[0] + '/'
+                    path = os.path.join(droot, path[i+1:])
+                else:
+                    path = path[i:]
+            else:
+                path = path[2:]
     return path
 
 def uirepr(s):
--- a/tests/test-clone	Thu Dec 03 11:06:44 2009 +0100
+++ b/tests/test-clone	Thu Dec 03 11:06:55 2009 +0100
@@ -44,10 +44,10 @@
 hg cat a
 
 echo
-echo % "check that we drop the file:// from the path before"
+echo % "check that we drop the file: from the path before"
 echo % "writing the .hgrc"
 cd ../..
-hg clone file://a e
+hg clone file:a e
 grep 'file:' e/.hg/hgrc
 
 echo
--- a/tests/test-clone.out	Thu Dec 03 11:06:44 2009 +0100
+++ b/tests/test-clone.out	Thu Dec 03 11:06:55 2009 +0100
@@ -29,7 +29,7 @@
 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
 a
 
-% check that we drop the file:// from the path before
+% check that we drop the file: from the path before
 % writing the .hgrc
 updating to branch default
 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
--- a/tests/test-pull	Thu Dec 03 11:06:44 2009 +0100
+++ b/tests/test-pull	Thu Dec 03 11:06:55 2009 +0100
@@ -24,3 +24,8 @@
 hg init empty
 cd empty
 hg pull -u ../test
+
+echo % test file: uri handling
+hg pull -q file://../test-doesnt-exist
+hg pull -q file:../test
+hg pull -q file://foobar`pwd`/../test
--- a/tests/test-pull.out	Thu Dec 03 11:06:44 2009 +0100
+++ b/tests/test-pull.out	Thu Dec 03 11:06:55 2009 +0100
@@ -30,3 +30,5 @@
 adding file changes
 added 1 changesets with 1 changes to 1 files
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+% test file: uri handling
+abort: repository /test-doesnt-exist not found!