Mercurial > hgsubversion
comparison tests/test_urls.py @ 1453:d890d8d4e168
svnrepo: change svnurl to not use self.svn
Before this patch, svnremoterepo uses self.svn.svn_url to answer svnurl.
Accessing svnremoterepo.svn will create an svn ra object, which can be
expensive because it involves network i/o.
This patch changes it to use self.svnauth, which is a local operation.
It speeds up "hg svn info" a lot.
The old behavior is hard to test since instantiating a svn ra object
requires a real URL. The change does not seem worth to set up SSH and
HTTP servers to test. Therefore the tests are added only for the new
behavior.
author | Jun Wu <quark@fb.com> |
---|---|
date | Sat, 11 Jun 2016 22:36:57 +0100 |
parents | d741f536f23a |
children | 7917abf6b456 |
comparison
equal
deleted
inserted
replaced
1452:4217a050a088 | 1453:d890d8d4e168 |
---|---|
6 from hgsubversion.svnwrap import parse_url | 6 from hgsubversion.svnwrap import parse_url |
7 from hgsubversion import svnrepo | 7 from hgsubversion import svnrepo |
8 | 8 |
9 class TestSubversionUrls(test_util.TestBase): | 9 class TestSubversionUrls(test_util.TestBase): |
10 def test_standard_url(self): | 10 def test_standard_url(self): |
11 self.assertEqual((None, None, 'file:///var/svn/repo'), | 11 self.check_parse_url((None, None, 'file:///var/svn/repo'), |
12 parse_url('file:///var/svn/repo')) | 12 ('file:///var/svn/repo', )) |
13 | 13 |
14 def test_user_url(self): | 14 def test_user_url(self): |
15 self.assertEqual( | 15 self.check_parse_url( |
16 ('joe', None, 'https://svn.testurl.com/repo'), | 16 ('joe', None, 'https://svn.testurl.com/repo'), |
17 parse_url('https://joe@svn.testurl.com/repo')) | 17 ('https://joe@svn.testurl.com/repo', )) |
18 self.assertEqual( | 18 self.check_parse_url( |
19 ('bob', None, 'https://svn.testurl.com/repo'), | 19 ('bob', None, 'https://svn.testurl.com/repo'), |
20 parse_url('https://joe@svn.testurl.com/repo', 'bob')) | 20 ('https://joe@svn.testurl.com/repo', 'bob', )) |
21 | 21 |
22 def test_password_url(self): | 22 def test_password_url(self): |
23 self.assertEqual( | 23 self.check_parse_url( |
24 (None, 't3stpw', 'svn+ssh://svn.testurl.com/repo'), | 24 (None, 't3stpw', 'svn+ssh://svn.testurl.com/repo'), |
25 parse_url('svn+ssh://:t3stpw@svn.testurl.com/repo')) | 25 ('svn+ssh://:t3stpw@svn.testurl.com/repo', )) |
26 self.assertEqual( | 26 self.check_parse_url( |
27 (None, '123abc', 'svn+ssh://svn.testurl.com/repo'), | 27 (None, '123abc', 'svn+ssh://svn.testurl.com/repo'), |
28 parse_url('svn+ssh://:t3stpw@svn.testurl.com/repo', None, '123abc')) | 28 ('svn+ssh://:t3stpw@svn.testurl.com/repo', None, '123abc', )) |
29 | 29 |
30 def test_svnssh_preserve_user(self): | 30 def test_svnssh_preserve_user(self): |
31 self.assertEqual( | 31 self.check_parse_url( |
32 ('user', 't3stpw', 'svn+ssh://user@svn.testurl.com/repo',), | 32 ('user', 't3stpw', 'svn+ssh://user@svn.testurl.com/repo',), |
33 parse_url('svn+ssh://user:t3stpw@svn.testurl.com/repo')) | 33 ('svn+ssh://user:t3stpw@svn.testurl.com/repo', )) |
34 self.assertEqual( | 34 self.check_parse_url( |
35 ('bob', '123abc', 'svn+ssh://bob@svn.testurl.com/repo',), | 35 ('bob', '123abc', 'svn+ssh://bob@svn.testurl.com/repo',), |
36 parse_url('svn+ssh://user:t3stpw@svn.testurl.com/repo', 'bob', '123abc')) | 36 ('svn+ssh://user:t3stpw@svn.testurl.com/repo', 'bob', '123abc', )) |
37 self.assertEqual( | 37 self.check_parse_url( |
38 ('user2', None, 'svn+ssh://user2@svn.testurl.com/repo',), | 38 ('user2', None, 'svn+ssh://user2@svn.testurl.com/repo',), |
39 parse_url('svn+ssh://user2@svn.testurl.com/repo')) | 39 ('svn+ssh://user2@svn.testurl.com/repo', )) |
40 self.assertEqual( | 40 self.check_parse_url( |
41 ('bob', None, 'svn+ssh://bob@svn.testurl.com/repo',), | 41 ('bob', None, 'svn+ssh://bob@svn.testurl.com/repo',), |
42 parse_url('svn+ssh://user2@svn.testurl.com/repo', 'bob')) | 42 ('svn+ssh://user2@svn.testurl.com/repo', 'bob', )) |
43 | 43 |
44 def test_user_password_url(self): | 44 def test_user_password_url(self): |
45 self.assertEqual( | 45 self.check_parse_url( |
46 ('joe', 't3stpw', 'https://svn.testurl.com/repo'), | 46 ('joe', 't3stpw', 'https://svn.testurl.com/repo'), |
47 parse_url('https://joe:t3stpw@svn.testurl.com/repo')) | 47 ('https://joe:t3stpw@svn.testurl.com/repo', )) |
48 self.assertEqual( | 48 self.check_parse_url( |
49 ('bob', '123abc', 'https://svn.testurl.com/repo'), | 49 ('bob', '123abc', 'https://svn.testurl.com/repo'), |
50 parse_url('https://joe:t3stpw@svn.testurl.com/repo', 'bob', '123abc')) | 50 ('https://joe:t3stpw@svn.testurl.com/repo', 'bob', '123abc', )) |
51 | 51 |
52 def test_url_rewriting(self): | 52 def test_url_rewriting(self): |
53 ui = test_util.ui.ui() | 53 ui = test_util.ui.ui() |
54 ui.setconfig('hgsubversion', 'username', 'bob') | 54 ui.setconfig('hgsubversion', 'username', 'bob') |
55 repo = svnrepo.svnremoterepo(ui, 'svn+ssh://joe@foo/bar') | 55 repo = svnrepo.svnremoterepo(ui, 'svn+ssh://joe@foo/bar') |
56 self.assertEqual('svn+ssh://bob@foo/bar', repo.svnauth[0]) | 56 self.assertEqual('svn+ssh://bob@foo/bar', repo.svnauth[0]) |
57 self.assertEqual('svn+ssh://bob@foo/bar', repo.svnurl) | |
57 | 58 |
58 repo = svnrepo.svnremoterepo(ui, 'svn+http://joe@foo/bar') | 59 repo = svnrepo.svnremoterepo(ui, 'svn+http://joe@foo/bar') |
59 self.assertEqual(('http://foo/bar', 'bob', None), repo.svnauth) | 60 self.assertEqual(('http://foo/bar', 'bob', None), repo.svnauth) |
61 self.assertEqual('http://foo/bar', repo.svnurl) | |
60 | 62 |
61 repo = svnrepo.svnremoterepo(ui, 'svn+https://joe@foo/bar') | 63 repo = svnrepo.svnremoterepo(ui, 'svn+https://joe@foo/bar') |
62 self.assertEqual(('https://foo/bar', 'bob', None), repo.svnauth) | 64 self.assertEqual(('https://foo/bar', 'bob', None), repo.svnauth) |
65 self.assertEqual('https://foo/bar', repo.svnurl) | |
63 | 66 |
64 def test_quoting(self): | 67 def test_quoting(self): |
65 ui = self.ui() | 68 ui = self.ui() |
66 repo_path = self.load_svndump('non_ascii_path_1.svndump') | 69 repo_path = self.load_svndump('non_ascii_path_1.svndump') |
67 | 70 |
70 quoted_subdir = urllib.quote(subdir) | 73 quoted_subdir = urllib.quote(subdir) |
71 | 74 |
72 repo1 = svnrepo.svnremoterepo(ui, repo_url + subdir) | 75 repo1 = svnrepo.svnremoterepo(ui, repo_url + subdir) |
73 repo2 = svnrepo.svnremoterepo(ui, repo_url + quoted_subdir) | 76 repo2 = svnrepo.svnremoterepo(ui, repo_url + quoted_subdir) |
74 self.assertEqual(repo1.svnurl, repo2.svnurl) | 77 self.assertEqual(repo1.svnurl, repo2.svnurl) |
78 | |
79 def check_parse_url(self, expected, args): | |
80 self.assertEqual(expected, parse_url(*args)) | |
81 if len(args) == 1: | |
82 repo = svnrepo.svnremoterepo(self.ui(), path=args[0]) | |
83 self.assertEqual(expected[2], repo.svnauth[0]) | |
84 self.assertEqual(expected[2], repo.svnurl) | |
85 |