# HG changeset patch # User Augie Fackler # Date 1244307201 18000 # Node ID 35993ba9d1194fdcabddb4fdf00643040782c5df # Parent dbdcb97b38afa5608254bc8b69a786f6a5758b91 urls: Make sure we preserve username in urls given to ssh. diff --git a/hgsubversion/svnwrap/svn_swig_wrapper.py b/hgsubversion/svnwrap/svn_swig_wrapper.py --- a/hgsubversion/svnwrap/svn_swig_wrapper.py +++ b/hgsubversion/svnwrap/svn_swig_wrapper.py @@ -115,6 +115,7 @@ def _create_auth_baton(pool): return core.svn_auth_open(providers, pool) + def parse_url(url): """Parse a URL and return a tuple (username, password, url) """ @@ -124,12 +125,17 @@ def parse_url(url): userpass, netloc = netloc.split('@') if ':' in userpass: user, passwd = userpass.split(':') - user, passwd = urllib.unquote(user) or None, urllib.unquote(passwd) or None + user, passwd = (urllib.unquote(user) or None, + urllib.unquote(passwd) or None, + ) else: user = urllib.unquote(userpass) or None + if user and scheme == 'svn+ssh': + netloc = '@'.join((user, netloc, )) url = urlparse.urlunparse((scheme, netloc, path, params, query, fragment)) return (user, passwd, url) + class Revision(tuple): """Wrapper for a Subversion revision. diff --git a/tests/test_urls.py b/tests/test_urls.py --- a/tests/test_urls.py +++ b/tests/test_urls.py @@ -15,6 +15,14 @@ class TestSubversionUrls(test_util.TestB self.assertEqual((None, 't3stpw', 'svn+ssh://svn.testurl.com/repo'), parse_url('svn+ssh://:t3stpw@svn.testurl.com/repo')) + def test_svnssh_preserve_user(self): + self.assertEqual( + ('user', 't3stpw', 'svn+ssh://user@svn.testurl.com/repo', ), + parse_url('svn+ssh://user:t3stpw@svn.testurl.com/repo')) + self.assertEqual( + ('user2', None, 'svn+ssh://user2@svn.testurl.com/repo', ), + parse_url('svn+ssh://user2@svn.testurl.com/repo')) + def test_user_password_url(self): self.assertEqual(('joe', 't3stpw', 'https://svn.testurl.com/repo'), parse_url('https://joe:t3stpw@svn.testurl.com/repo'))