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.
--- 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!