1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
import os
import sys
import unittest
# wrapped in a try/except because of weirdness in how
# run.py works as compared to nose.
try:
import test_util
except ImportError:
sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
import test_util
from mercurial import hg
from mercurial import ui
from hgsubversion import verify
# these fixtures contain no files at HEAD and would result in empty clones
_skipshallow = set([
'binaryfiles.svndump',
'binaryfiles-broken.svndump',
'emptyrepo.svndump',
'correct.svndump',
'corrupt.svndump',
])
_skipall = set([
'project_root_not_repo_root.svndump',
'movetotrunk.svndump',
])
_skipstandard = set([
'subdir_is_file_prefix.svndump',
'correct.svndump',
'corrupt.svndump',
'emptyrepo2.svndump',
])
def _do_case(self, name, layout):
subdir = test_util.subdir.get(name, '')
config = {}
for branch, path in test_util.custom.get(name, {}).iteritems():
config['hgsubversionbranch.%s' % branch] = path
repo, svnpath = self.load_and_fetch(name,
subdir=subdir,
layout=layout,
config=config)
assert test_util.repolen(self.repo) > 0
for i in repo:
ctx = repo[i]
self.assertEqual(verify.verify(repo.ui, repo, rev=ctx.node(),
stupid=True), 0)
self.assertEqual(verify.verify(repo.ui, repo, rev=ctx.node(),
stupid=False), 0)
# check a startrev clone
if layout == 'single' and name not in _skipshallow:
self.wc_path += '_shallow'
shallowrepo = self.fetch(svnpath, subdir=subdir,
layout='single', startrev='HEAD')
self.assertEqual(test_util.repolen(shallowrepo), 1,
"shallow clone should have just one revision, not %d"
% test_util.repolen(shallowrepo))
fulltip = repo['tip']
shallowtip = shallowrepo['tip']
repo.ui.pushbuffer()
self.assertEqual(0, verify.verify(repo.ui, shallowrepo,
rev=shallowtip.node(),
stupid=True))
self.assertEqual(0, verify.verify(repo.ui, shallowrepo,
rev=shallowtip.node(),
stupid=False))
stupidui = test_util.testui(stupid=True)
self.assertEqual(verify.verify(stupidui, repo, rev=ctx.node(),
stupid=True), 0)
self.assertEqual(verify.verify(stupidui, repo, rev=ctx.node(),
stupid=False), 0)
# viewing diff's of lists of files is easier on the eyes
self.assertMultiLineEqual('\n'.join(fulltip), '\n'.join(shallowtip),
repo.ui.popbuffer())
for f in fulltip:
self.assertMultiLineEqual(fulltip[f].data(), shallowtip[f].data())
def buildmethod(case, name, layout):
m = lambda self: self._do_case(case, layout)
m.__name__ = name
m.__doc__ = 'Test verify on %s (%s)' % (case, layout)
return m
attrs = {'_do_case': _do_case, 'stupid_mode_tests': True}
fixtures = [f for f in os.listdir(test_util.FIXTURES) if f.endswith('.svndump')]
for case in fixtures:
if case in _skipall:
continue
bname = 'test_' + case[:-len('.svndump')]
if case not in _skipstandard:
attrs[bname] = buildmethod(case, bname, 'standard')
attrs[bname + '_single'] = buildmethod(case, bname + '_single', 'single')
if case in test_util.custom:
attrs[bname + '_custom'] = buildmethod(case, bname + '_custom', 'custom')
VerifyTests = type('VerifyTests', (test_util.TestBase,), attrs)
|