changeset 8174:29bc5d18714a

hg: allow hg.parseurl(url, None) In many places hg.parseurl is called with a url and "opts.get('rev')", suggesting the second, optional argument can be None. Because opts['rev'] usually defaults to [] this never happens in practice. However, extensions don't necessarily behave the same, but do copy this pattern. Also, include wider hg.parseurl tests, beyond a demonstration of the problem.
author Martijn Pieters <mj@zopatista.com>
date Fri, 24 Apr 2009 18:17:42 +0200
parents d3fb413667e5
children c8cb471fc9c2
files mercurial/hg.py tests/test-hg-parseurl.py tests/test-hg-parseurl.py.out
diffstat 3 files changed, 18 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/hg.py	Fri Apr 24 17:00:18 2009 -0500
+++ b/mercurial/hg.py	Fri Apr 24 18:17:42 2009 +0200
@@ -25,7 +25,7 @@
 
     url, branch = url.split('#', 1)
     checkout = revs and revs[-1] or branch
-    return url, revs + [branch], checkout
+    return url, (revs or []) + [branch], checkout
 
 schemes = {
     'bundle': bundlerepo,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-hg-parseurl.py	Fri Apr 24 18:17:42 2009 +0200
@@ -0,0 +1,12 @@
+#!/usr/bin/env python
+
+from mercurial.hg import parseurl
+
+def testparse(url, rev=[]):
+    print '%s, revs: %r, checkout: %r' % parseurl(url, rev)
+
+testparse('http://example.com/no/anchor')
+testparse('http://example.com/an/anchor#foo')
+testparse('http://example.com/no/anchor/revs', rev=['foo'])
+testparse('http://example.com/an/anchor/revs#bar', rev=['foo'])
+testparse('http://example.com/an/anchor/rev-None#foo', rev=None)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-hg-parseurl.py.out	Fri Apr 24 18:17:42 2009 +0200
@@ -0,0 +1,5 @@
+http://example.com/no/anchor, revs: None, checkout: None
+http://example.com/an/anchor, revs: ['foo'], checkout: 'foo'
+http://example.com/no/anchor/revs, revs: ['foo'], checkout: 'foo'
+http://example.com/an/anchor/revs, revs: ['foo', 'bar'], checkout: 'foo'
+http://example.com/an/anchor/rev-None, revs: ['foo'], checkout: 'foo'