annotate tests/test_urls.py @ 1467:53e306a6086b

maps: implement sqlite revmap This patch adds the SqliteRevMap, which has a same interface with RevMap but is backed by a sqlite database. It uses database indexes to accelerate all kinds of queries and disables iteration to prevent slow code being written in the future. In practise, it should be faster on large repos with millions of svn revisions but slower on small repos due to the overhead introduced.
author Jun Wu <quark@fb.com>
date Wed, 15 Jun 2016 18:23:07 +0100
parents d890d8d4e168
children 7917abf6b456
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
235
2969a20e0eef Add support for user:pass@url repositories to be hg-like
Daniel Tang <dytang@cs.purdue.edu>
parents:
diff changeset
1 import test_util
717
ae5968ffe6fe svnwrap: fix handling of quotable URLs (fixes #197, refs #132)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 710
diff changeset
2
235
2969a20e0eef Add support for user:pass@url repositories to be hg-like
Daniel Tang <dytang@cs.purdue.edu>
parents:
diff changeset
3 import unittest
717
ae5968ffe6fe svnwrap: fix handling of quotable URLs (fixes #197, refs #132)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 710
diff changeset
4 import urllib
ae5968ffe6fe svnwrap: fix handling of quotable URLs (fixes #197, refs #132)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 710
diff changeset
5
672
2cc1342d4476 svnwrap: factor out a common module
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 475
diff changeset
6 from hgsubversion.svnwrap import parse_url
468
037bba1c6736 svnrepo: expose the same svnurl than SubversionRepo
Patrick Mezard <pmezard@gmail.com>
parents: 467
diff changeset
7 from hgsubversion import svnrepo
235
2969a20e0eef Add support for user:pass@url repositories to be hg-like
Daniel Tang <dytang@cs.purdue.edu>
parents:
diff changeset
8
2969a20e0eef Add support for user:pass@url repositories to be hg-like
Daniel Tang <dytang@cs.purdue.edu>
parents:
diff changeset
9 class TestSubversionUrls(test_util.TestBase):
2969a20e0eef Add support for user:pass@url repositories to be hg-like
Daniel Tang <dytang@cs.purdue.edu>
parents:
diff changeset
10 def test_standard_url(self):
1453
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
11 self.check_parse_url((None, None, 'file:///var/svn/repo'),
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
12 ('file:///var/svn/repo', ))
235
2969a20e0eef Add support for user:pass@url repositories to be hg-like
Daniel Tang <dytang@cs.purdue.edu>
parents:
diff changeset
13
2969a20e0eef Add support for user:pass@url repositories to be hg-like
Daniel Tang <dytang@cs.purdue.edu>
parents:
diff changeset
14 def test_user_url(self):
1453
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
15 self.check_parse_url(
467
3941d73c262e svnwrappers: override svn+ssh credentials with supplied ones if any
Patrick Mezard <pmezard@gmail.com>
parents: 392
diff changeset
16 ('joe', None, 'https://svn.testurl.com/repo'),
1453
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
17 ('https://joe@svn.testurl.com/repo', ))
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
18 self.check_parse_url(
467
3941d73c262e svnwrappers: override svn+ssh credentials with supplied ones if any
Patrick Mezard <pmezard@gmail.com>
parents: 392
diff changeset
19 ('bob', None, 'https://svn.testurl.com/repo'),
1453
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
20 ('https://joe@svn.testurl.com/repo', 'bob', ))
235
2969a20e0eef Add support for user:pass@url repositories to be hg-like
Daniel Tang <dytang@cs.purdue.edu>
parents:
diff changeset
21
2969a20e0eef Add support for user:pass@url repositories to be hg-like
Daniel Tang <dytang@cs.purdue.edu>
parents:
diff changeset
22 def test_password_url(self):
1453
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
23 self.check_parse_url(
467
3941d73c262e svnwrappers: override svn+ssh credentials with supplied ones if any
Patrick Mezard <pmezard@gmail.com>
parents: 392
diff changeset
24 (None, 't3stpw', 'svn+ssh://svn.testurl.com/repo'),
1453
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
25 ('svn+ssh://:t3stpw@svn.testurl.com/repo', ))
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
26 self.check_parse_url(
467
3941d73c262e svnwrappers: override svn+ssh credentials with supplied ones if any
Patrick Mezard <pmezard@gmail.com>
parents: 392
diff changeset
27 (None, '123abc', 'svn+ssh://svn.testurl.com/repo'),
1453
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
28 ('svn+ssh://:t3stpw@svn.testurl.com/repo', None, '123abc', ))
235
2969a20e0eef Add support for user:pass@url repositories to be hg-like
Daniel Tang <dytang@cs.purdue.edu>
parents:
diff changeset
29
392
35993ba9d119 urls: Make sure we preserve username in urls given to ssh.
Augie Fackler <durin42@gmail.com>
parents: 337
diff changeset
30 def test_svnssh_preserve_user(self):
1453
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
31 self.check_parse_url(
832
e9af7eba88db globally: clean up whitespace around operators and commas to conform with PEP8
Yonggang Luo <luoyonggang@gmail.com>
parents: 717
diff changeset
32 ('user', 't3stpw', 'svn+ssh://user@svn.testurl.com/repo',),
1453
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
33 ('svn+ssh://user:t3stpw@svn.testurl.com/repo', ))
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
34 self.check_parse_url(
832
e9af7eba88db globally: clean up whitespace around operators and commas to conform with PEP8
Yonggang Luo <luoyonggang@gmail.com>
parents: 717
diff changeset
35 ('bob', '123abc', 'svn+ssh://bob@svn.testurl.com/repo',),
1453
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
36 ('svn+ssh://user:t3stpw@svn.testurl.com/repo', 'bob', '123abc', ))
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
37 self.check_parse_url(
832
e9af7eba88db globally: clean up whitespace around operators and commas to conform with PEP8
Yonggang Luo <luoyonggang@gmail.com>
parents: 717
diff changeset
38 ('user2', None, 'svn+ssh://user2@svn.testurl.com/repo',),
1453
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
39 ('svn+ssh://user2@svn.testurl.com/repo', ))
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
40 self.check_parse_url(
832
e9af7eba88db globally: clean up whitespace around operators and commas to conform with PEP8
Yonggang Luo <luoyonggang@gmail.com>
parents: 717
diff changeset
41 ('bob', None, 'svn+ssh://bob@svn.testurl.com/repo',),
1453
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
42 ('svn+ssh://user2@svn.testurl.com/repo', 'bob', ))
392
35993ba9d119 urls: Make sure we preserve username in urls given to ssh.
Augie Fackler <durin42@gmail.com>
parents: 337
diff changeset
43
235
2969a20e0eef Add support for user:pass@url repositories to be hg-like
Daniel Tang <dytang@cs.purdue.edu>
parents:
diff changeset
44 def test_user_password_url(self):
1453
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
45 self.check_parse_url(
467
3941d73c262e svnwrappers: override svn+ssh credentials with supplied ones if any
Patrick Mezard <pmezard@gmail.com>
parents: 392
diff changeset
46 ('joe', 't3stpw', 'https://svn.testurl.com/repo'),
1453
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
47 ('https://joe:t3stpw@svn.testurl.com/repo', ))
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
48 self.check_parse_url(
467
3941d73c262e svnwrappers: override svn+ssh credentials with supplied ones if any
Patrick Mezard <pmezard@gmail.com>
parents: 392
diff changeset
49 ('bob', '123abc', 'https://svn.testurl.com/repo'),
1453
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
50 ('https://joe:t3stpw@svn.testurl.com/repo', 'bob', '123abc', ))
235
2969a20e0eef Add support for user:pass@url repositories to be hg-like
Daniel Tang <dytang@cs.purdue.edu>
parents:
diff changeset
51
468
037bba1c6736 svnrepo: expose the same svnurl than SubversionRepo
Patrick Mezard <pmezard@gmail.com>
parents: 467
diff changeset
52 def test_url_rewriting(self):
037bba1c6736 svnrepo: expose the same svnurl than SubversionRepo
Patrick Mezard <pmezard@gmail.com>
parents: 467
diff changeset
53 ui = test_util.ui.ui()
037bba1c6736 svnrepo: expose the same svnurl than SubversionRepo
Patrick Mezard <pmezard@gmail.com>
parents: 467
diff changeset
54 ui.setconfig('hgsubversion', 'username', 'bob')
037bba1c6736 svnrepo: expose the same svnurl than SubversionRepo
Patrick Mezard <pmezard@gmail.com>
parents: 467
diff changeset
55 repo = svnrepo.svnremoterepo(ui, 'svn+ssh://joe@foo/bar')
710
db56e65906f4 svnrepo: make the svnurl property obtain the URL from Subversion.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 699
diff changeset
56 self.assertEqual('svn+ssh://bob@foo/bar', repo.svnauth[0])
1453
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
57 self.assertEqual('svn+ssh://bob@foo/bar', repo.svnurl)
235
2969a20e0eef Add support for user:pass@url repositories to be hg-like
Daniel Tang <dytang@cs.purdue.edu>
parents:
diff changeset
58
469
5567af673f83 Revive svn+http(s) URLs support (issue94)
Patrick Mezard <pmezard@gmail.com>
parents: 468
diff changeset
59 repo = svnrepo.svnremoterepo(ui, 'svn+http://joe@foo/bar')
5567af673f83 Revive svn+http(s) URLs support (issue94)
Patrick Mezard <pmezard@gmail.com>
parents: 468
diff changeset
60 self.assertEqual(('http://foo/bar', 'bob', None), repo.svnauth)
1453
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
61 self.assertEqual('http://foo/bar', repo.svnurl)
469
5567af673f83 Revive svn+http(s) URLs support (issue94)
Patrick Mezard <pmezard@gmail.com>
parents: 468
diff changeset
62
475
15443c592f7a Remove the svn+ from svn+https urls before calling the Subversion API. This was already being done for svn+http urls.
David Stanek <dstanek@dstanek.com>
parents: 469
diff changeset
63 repo = svnrepo.svnremoterepo(ui, 'svn+https://joe@foo/bar')
15443c592f7a Remove the svn+ from svn+https urls before calling the Subversion API. This was already being done for svn+http urls.
David Stanek <dstanek@dstanek.com>
parents: 469
diff changeset
64 self.assertEqual(('https://foo/bar', 'bob', None), repo.svnauth)
1453
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
65 self.assertEqual('https://foo/bar', repo.svnurl)
475
15443c592f7a Remove the svn+ from svn+https urls before calling the Subversion API. This was already being done for svn+http urls.
David Stanek <dstanek@dstanek.com>
parents: 469
diff changeset
66
717
ae5968ffe6fe svnwrap: fix handling of quotable URLs (fixes #197, refs #132)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 710
diff changeset
67 def test_quoting(self):
ae5968ffe6fe svnwrap: fix handling of quotable URLs (fixes #197, refs #132)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 710
diff changeset
68 ui = self.ui()
866
20e73b5ab6f7 test_util: merge load_svndump_fixture() into TestBase
Patrick Mezard <patrick@mezard.eu>
parents: 833
diff changeset
69 repo_path = self.load_svndump('non_ascii_path_1.svndump')
717
ae5968ffe6fe svnwrap: fix handling of quotable URLs (fixes #197, refs #132)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 710
diff changeset
70
866
20e73b5ab6f7 test_util: merge load_svndump_fixture() into TestBase
Patrick Mezard <patrick@mezard.eu>
parents: 833
diff changeset
71 repo_url = test_util.fileurl(repo_path)
717
ae5968ffe6fe svnwrap: fix handling of quotable URLs (fixes #197, refs #132)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 710
diff changeset
72 subdir = '/b\xC3\xB8b'
ae5968ffe6fe svnwrap: fix handling of quotable URLs (fixes #197, refs #132)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 710
diff changeset
73 quoted_subdir = urllib.quote(subdir)
ae5968ffe6fe svnwrap: fix handling of quotable URLs (fixes #197, refs #132)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 710
diff changeset
74
ae5968ffe6fe svnwrap: fix handling of quotable URLs (fixes #197, refs #132)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 710
diff changeset
75 repo1 = svnrepo.svnremoterepo(ui, repo_url + subdir)
ae5968ffe6fe svnwrap: fix handling of quotable URLs (fixes #197, refs #132)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 710
diff changeset
76 repo2 = svnrepo.svnremoterepo(ui, repo_url + quoted_subdir)
ae5968ffe6fe svnwrap: fix handling of quotable URLs (fixes #197, refs #132)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 710
diff changeset
77 self.assertEqual(repo1.svnurl, repo2.svnurl)
1453
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
78
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
79 def check_parse_url(self, expected, args):
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
80 self.assertEqual(expected, parse_url(*args))
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
81 if len(args) == 1:
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
82 repo = svnrepo.svnremoterepo(self.ui(), path=args[0])
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
83 self.assertEqual(expected[2], repo.svnauth[0])
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
84 self.assertEqual(expected[2], repo.svnurl)
d890d8d4e168 svnrepo: change svnurl to not use self.svn
Jun Wu <quark@fb.com>
parents: 1044
diff changeset
85