Mercurial > hg
changeset 9996:2770d03ae49f stable
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.
author | Sune Foldager <cryo@cyanite.org> |
---|---|
date | Thu, 03 Dec 2009 11:06:55 +0100 |
parents | eba6c8687fd2 |
children | c08583734fc5 4ddfad7ebd98 |
files | mercurial/util.py tests/test-clone tests/test-clone.out tests/test-pull tests/test-pull.out |
diffstat | 5 files changed, 23 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- 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!