url: fix crash by empty path with #fragments
Before, "#foo" paths made hg crash. We've moved the #fragment parsing at
64fbd0de9773, but we shouldn't set path to None too early. This patch just
removes the "if not path:" block since that's checked a few lines later.
--- a/mercurial/util.py Wed Sep 28 20:07:32 2016 +0900
+++ b/mercurial/util.py Fri Sep 30 21:38:47 2016 +0900
@@ -2377,6 +2377,22 @@
<url scheme: 'http', host: 'host', path: 'a', query: 'b', fragment: 'c'>
>>> url('http://host/a?b#c', parsequery=False, parsefragment=False)
<url scheme: 'http', host: 'host', path: 'a?b#c'>
+
+ Empty path:
+
+ >>> url('')
+ <url path: ''>
+ >>> url('#a')
+ <url path: '', fragment: 'a'>
+ >>> url('http://host/')
+ <url scheme: 'http', host: 'host', path: ''>
+ >>> url('http://host/#a')
+ <url scheme: 'http', host: 'host', path: '', fragment: 'a'>
+
+ Only scheme:
+
+ >>> url('http:')
+ <url scheme: 'http'>
"""
_safechars = "!~*'()+"
@@ -2393,8 +2409,6 @@
if parsefragment and '#' in path:
path, self.fragment = path.split('#', 1)
- if not path:
- path = None
# special case for Windows drive letters and UNC paths
if hasdriveletter(path) or path.startswith(r'\\'):
--- a/tests/test-url-rev.t Wed Sep 28 20:07:32 2016 +0900
+++ b/tests/test-url-rev.t Fri Sep 30 21:38:47 2016 +0900
@@ -320,3 +320,12 @@
remote: 1 outgoing
$ cd ..
+
+Test url#rev syntax of local destination path, which should be taken as
+a 'url#rev' path
+
+ $ hg clone repo '#foo'
+ updating to branch default
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg root -R '#foo'
+ $TESTTMP/#foo (glob)