--- a/mercurial/util.py Thu Sep 07 22:36:54 2017 +0900
+++ b/mercurial/util.py Sun Sep 03 14:32:11 2017 +0900
@@ -227,15 +227,15 @@
This helper can be used to compute one or more digests given their name.
- >>> d = digester(['md5', 'sha1'])
- >>> d.update('foo')
+ >>> d = digester([b'md5', b'sha1'])
+ >>> d.update(b'foo')
>>> [k for k in sorted(d)]
['md5', 'sha1']
- >>> d['md5']
+ >>> d[b'md5']
'acbd18db4cc2f85cedef654fccc4a4d8'
- >>> d['sha1']
+ >>> d[b'sha1']
'0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33'
- >>> digester.preferred(['md5', 'sha1'])
+ >>> digester.preferred([b'md5', b'sha1'])
'sha1'
"""
@@ -448,7 +448,7 @@
``n`` can be 2, 3, or 4. Here is how some version strings map to
returned values:
- >>> v = '3.6.1+190-df9b73d2d444'
+ >>> v = b'3.6.1+190-df9b73d2d444'
>>> versiontuple(v, 2)
(3, 6)
>>> versiontuple(v, 3)
@@ -456,10 +456,10 @@
>>> versiontuple(v, 4)
(3, 6, 1, '190-df9b73d2d444')
- >>> versiontuple('3.6.1+190-df9b73d2d444+20151118')
+ >>> versiontuple(b'3.6.1+190-df9b73d2d444+20151118')
(3, 6, 1, '190-df9b73d2d444+20151118')
- >>> v = '3.6'
+ >>> v = b'3.6'
>>> versiontuple(v, 2)
(3, 6)
>>> versiontuple(v, 3)
@@ -467,7 +467,7 @@
>>> versiontuple(v, 4)
(3, 6, None, None)
- >>> v = '3.9-rc'
+ >>> v = b'3.9-rc'
>>> versiontuple(v, 2)
(3, 9)
>>> versiontuple(v, 3)
@@ -475,7 +475,7 @@
>>> versiontuple(v, 4)
(3, 9, None, 'rc')
- >>> v = '3.9-rc+2-02a8fea4289b'
+ >>> v = b'3.9-rc+2-02a8fea4289b'
>>> versiontuple(v, 2)
(3, 9)
>>> versiontuple(v, 3)
@@ -579,11 +579,11 @@
class sortdict(collections.OrderedDict):
'''a simple sorted dictionary
- >>> d1 = sortdict([('a', 0), ('b', 1)])
+ >>> d1 = sortdict([(b'a', 0), (b'b', 1)])
>>> d2 = d1.copy()
>>> d2
sortdict([('a', 0), ('b', 1)])
- >>> d2.update([('a', 2)])
+ >>> d2.update([(b'a', 2)])
>>> d2.keys() # should still be in last-set order
['b', 'a']
'''
@@ -1240,24 +1240,24 @@
r'''Check that the base-relative path is a valid filename on Windows.
Returns None if the path is ok, or a UI string describing the problem.
- >>> checkwinfilename("just/a/normal/path")
- >>> checkwinfilename("foo/bar/con.xml")
+ >>> checkwinfilename(b"just/a/normal/path")
+ >>> checkwinfilename(b"foo/bar/con.xml")
"filename contains 'con', which is reserved on Windows"
- >>> checkwinfilename("foo/con.xml/bar")
+ >>> checkwinfilename(b"foo/con.xml/bar")
"filename contains 'con', which is reserved on Windows"
- >>> checkwinfilename("foo/bar/xml.con")
- >>> checkwinfilename("foo/bar/AUX/bla.txt")
+ >>> checkwinfilename(b"foo/bar/xml.con")
+ >>> checkwinfilename(b"foo/bar/AUX/bla.txt")
"filename contains 'AUX', which is reserved on Windows"
- >>> checkwinfilename("foo/bar/bla:.txt")
+ >>> checkwinfilename(b"foo/bar/bla:.txt")
"filename contains ':', which is reserved on Windows"
- >>> checkwinfilename("foo/bar/b\07la.txt")
+ >>> checkwinfilename(b"foo/bar/b\07la.txt")
"filename contains '\\x07', which is invalid on Windows"
- >>> checkwinfilename("foo/bar/bla ")
+ >>> checkwinfilename(b"foo/bar/bla ")
"filename ends with ' ', which is not allowed on Windows"
- >>> checkwinfilename("../bar")
- >>> checkwinfilename("foo\\")
+ >>> checkwinfilename(b"../bar")
+ >>> checkwinfilename(b"foo\\")
"filename ends with '\\', which is invalid on Windows"
- >>> checkwinfilename("foo\\/bar")
+ >>> checkwinfilename(b"foo\\/bar")
"directory name ends with '\\', which is invalid on Windows"
'''
if path.endswith('\\'):
@@ -1994,15 +1994,15 @@
The date may be a "unixtime offset" string or in one of the specified
formats. If the date already is a (unixtime, offset) tuple, it is returned.
- >>> parsedate(' today ') == parsedate(\
+ >>> parsedate(b' today ') == parsedate(\
datetime.date.today().strftime('%b %d'))
True
- >>> parsedate( 'yesterday ') == parsedate((datetime.date.today() -\
+ >>> parsedate(b'yesterday ') == parsedate((datetime.date.today() -\
datetime.timedelta(days=1)\
).strftime('%b %d'))
True
>>> now, tz = makedate()
- >>> strnow, strtz = parsedate('now')
+ >>> strnow, strtz = parsedate(b'now')
>>> (strnow - now) < 1
True
>>> tz == strtz
@@ -2076,12 +2076,12 @@
'>{date}' on or after a given date
- >>> p1 = parsedate("10:29:59")
- >>> p2 = parsedate("10:30:00")
- >>> p3 = parsedate("10:30:59")
- >>> p4 = parsedate("10:31:00")
- >>> p5 = parsedate("Sep 15 10:30:00 1999")
- >>> f = matchdate("10:30")
+ >>> p1 = parsedate(b"10:29:59")
+ >>> p2 = parsedate(b"10:30:00")
+ >>> p3 = parsedate(b"10:30:59")
+ >>> p4 = parsedate(b"10:31:00")
+ >>> p5 = parsedate(b"Sep 15 10:30:00 1999")
+ >>> f = matchdate(b"10:30")
>>> f(p1[0])
False
>>> f(p2[0])
@@ -2156,27 +2156,27 @@
... return (kind, pattern, [bool(matcher(t)) for t in tests])
exact matching (no prefix):
- >>> test('abcdefg', 'abc', 'def', 'abcdefg')
+ >>> test(b'abcdefg', b'abc', b'def', b'abcdefg')
('literal', 'abcdefg', [False, False, True])
regex matching ('re:' prefix)
- >>> test('re:a.+b', 'nomatch', 'fooadef', 'fooadefbar')
+ >>> test(b're:a.+b', b'nomatch', b'fooadef', b'fooadefbar')
('re', 'a.+b', [False, False, True])
force exact matches ('literal:' prefix)
- >>> test('literal:re:foobar', 'foobar', 're:foobar')
+ >>> test(b'literal:re:foobar', b'foobar', b're:foobar')
('literal', 're:foobar', [False, True])
unknown prefixes are ignored and treated as literals
- >>> test('foo:bar', 'foo', 'bar', 'foo:bar')
+ >>> test(b'foo:bar', b'foo', b'bar', b'foo:bar')
('literal', 'foo:bar', [False, False, True])
case insensitive regex matches
- >>> itest('re:A.+b', 'nomatch', 'fooadef', 'fooadefBar')
+ >>> itest(b're:A.+b', b'nomatch', b'fooadef', b'fooadefBar')
('re', 'A.+b', [False, False, True])
case insensitive literal matches
- >>> itest('ABCDEFG', 'abc', 'def', 'abcdefg')
+ >>> itest(b'ABCDEFG', b'abc', b'def', b'abcdefg')
('literal', 'ABCDEFG', [False, False, True])
"""
if pattern.startswith('re:'):
@@ -2649,55 +2649,55 @@
Examples:
- >>> url('http://www.ietf.org/rfc/rfc2396.txt')
+ >>> url(b'http://www.ietf.org/rfc/rfc2396.txt')
<url scheme: 'http', host: 'www.ietf.org', path: 'rfc/rfc2396.txt'>
- >>> url('ssh://[::1]:2200//home/joe/repo')
+ >>> url(b'ssh://[::1]:2200//home/joe/repo')
<url scheme: 'ssh', host: '[::1]', port: '2200', path: '/home/joe/repo'>
- >>> url('file:///home/joe/repo')
+ >>> url(b'file:///home/joe/repo')
<url scheme: 'file', path: '/home/joe/repo'>
- >>> url('file:///c:/temp/foo/')
+ >>> url(b'file:///c:/temp/foo/')
<url scheme: 'file', path: 'c:/temp/foo/'>
- >>> url('bundle:foo')
+ >>> url(b'bundle:foo')
<url scheme: 'bundle', path: 'foo'>
- >>> url('bundle://../foo')
+ >>> url(b'bundle://../foo')
<url scheme: 'bundle', path: '../foo'>
- >>> url(r'c:\foo\bar')
+ >>> url(br'c:\foo\bar')
<url path: 'c:\\foo\\bar'>
- >>> url(r'\\blah\blah\blah')
+ >>> url(br'\\blah\blah\blah')
<url path: '\\\\blah\\blah\\blah'>
- >>> url(r'\\blah\blah\blah#baz')
+ >>> url(br'\\blah\blah\blah#baz')
<url path: '\\\\blah\\blah\\blah', fragment: 'baz'>
- >>> url(r'file:///C:\users\me')
+ >>> url(br'file:///C:\users\me')
<url scheme: 'file', path: 'C:\\users\\me'>
Authentication credentials:
- >>> url('ssh://joe:xyz@x/repo')
+ >>> url(b'ssh://joe:xyz@x/repo')
<url scheme: 'ssh', user: 'joe', passwd: 'xyz', host: 'x', path: 'repo'>
- >>> url('ssh://joe@x/repo')
+ >>> url(b'ssh://joe@x/repo')
<url scheme: 'ssh', user: 'joe', host: 'x', path: 'repo'>
Query strings and fragments:
- >>> url('http://host/a?b#c')
+ >>> url(b'http://host/a?b#c')
<url scheme: 'http', host: 'host', path: 'a', query: 'b', fragment: 'c'>
- >>> url('http://host/a?b#c', parsequery=False, parsefragment=False)
+ >>> url(b'http://host/a?b#c', parsequery=False, parsefragment=False)
<url scheme: 'http', host: 'host', path: 'a?b#c'>
Empty path:
- >>> url('')
+ >>> url(b'')
<url path: ''>
- >>> url('#a')
+ >>> url(b'#a')
<url path: '', fragment: 'a'>
- >>> url('http://host/')
+ >>> url(b'http://host/')
<url scheme: 'http', host: 'host', path: ''>
- >>> url('http://host/#a')
+ >>> url(b'http://host/#a')
<url scheme: 'http', host: 'host', path: '', fragment: 'a'>
Only scheme:
- >>> url('http:')
+ >>> url(b'http:')
<url scheme: 'http'>
"""
@@ -2812,33 +2812,33 @@
Examples:
- >>> str(url('http://user:pw@host:80/c:/bob?fo:oo#ba:ar'))
+ >>> str(url(b'http://user:pw@host:80/c:/bob?fo:oo#ba:ar'))
'http://user:pw@host:80/c:/bob?fo:oo#ba:ar'
- >>> str(url('http://user:pw@host:80/?foo=bar&baz=42'))
+ >>> str(url(b'http://user:pw@host:80/?foo=bar&baz=42'))
'http://user:pw@host:80/?foo=bar&baz=42'
- >>> str(url('http://user:pw@host:80/?foo=bar%3dbaz'))
+ >>> str(url(b'http://user:pw@host:80/?foo=bar%3dbaz'))
'http://user:pw@host:80/?foo=bar%3dbaz'
- >>> str(url('ssh://user:pw@[::1]:2200//home/joe#'))
+ >>> str(url(b'ssh://user:pw@[::1]:2200//home/joe#'))
'ssh://user:pw@[::1]:2200//home/joe#'
- >>> str(url('http://localhost:80//'))
+ >>> str(url(b'http://localhost:80//'))
'http://localhost:80//'
- >>> str(url('http://localhost:80/'))
+ >>> str(url(b'http://localhost:80/'))
'http://localhost:80/'
- >>> str(url('http://localhost:80'))
+ >>> str(url(b'http://localhost:80'))
'http://localhost:80/'
- >>> str(url('bundle:foo'))
+ >>> str(url(b'bundle:foo'))
'bundle:foo'
- >>> str(url('bundle://../foo'))
+ >>> str(url(b'bundle://../foo'))
'bundle:../foo'
- >>> str(url('path'))
+ >>> str(url(b'path'))
'path'
- >>> str(url('file:///tmp/foo/bar'))
+ >>> str(url(b'file:///tmp/foo/bar'))
'file:///tmp/foo/bar'
- >>> str(url('file:///c:/tmp/foo/bar'))
+ >>> str(url(b'file:///c:/tmp/foo/bar'))
'file:///c:/tmp/foo/bar'
- >>> print url(r'bundle:foo\bar')
+ >>> print url(br'bundle:foo\bar')
bundle:foo\bar
- >>> print url(r'file:///D:\data\hg')
+ >>> print url(br'file:///D:\data\hg')
file:///D:\data\hg
"""
if self._localpath:
@@ -3017,11 +3017,11 @@
def sizetoint(s):
'''Convert a space specifier to a byte count.
- >>> sizetoint('30')
+ >>> sizetoint(b'30')
30
- >>> sizetoint('2.2kb')
+ >>> sizetoint(b'2.2kb')
2252
- >>> sizetoint('6M')
+ >>> sizetoint(b'6M')
6291456
'''
t = s.strip().lower()