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
|
import test_util
import sys
import unittest
class TestFetchRenames(test_util.TestBase):
stupid_mode_tests = True
def _debug_print_copies(self, repo):
w = sys.stderr.write
for rev in repo:
ctx = repo[rev]
w('%d - %s\n' % (ctx.rev(), ctx.branch()))
for f in ctx:
fctx = ctx[f]
w('%s: %r %r\n' % (f, fctx.data(), fctx.renamed()))
def test_rename(self):
config = {
'hgsubversion.filestoresize': '0',
# we set this because we expect all of the copies to be
# handled via replay, and we want to notice if that
# changes.
'hgsubversion.failonmissing': 'yes',
}
repo = self._load_fixture_and_fetch('renames.svndump', config=config)
self._run_assertions(repo)
def test_rename_with_prefix(self):
config = {
'hgsubversion.filestoresize': '0',
'hgsubversion.failonmissing': 'yes',
}
repo = self._load_fixture_and_fetch('renames_with_prefix.svndump',
subdir='prefix',
config=config)
self._run_assertions(repo)
def _run_assertions(self, repo):
# Map revnum to mappings of dest name to (source name, dest content)
copies = {
4: {
'a1': ('a', 'a\n'),
'linka1': ('linka', 'a'),
'a2': ('a', 'a\n'),
'linka2': ('linka', 'a'),
'b1': ('b', 'b\nc\n'),
'linkb1': ('linkb', 'bc'),
'da1/daf': ('da/daf', 'c\n'),
'da1/dalink': ('da/dalink', 'daf'),
'da1/db/dbf': ('da/db/dbf', 'd\n'),
'da1/db/dblink': ('da/db/dblink', '../daf'),
'da2/daf': ('da/daf', 'c\n'),
'da2/dalink': ('da/dalink', 'daf'),
'da2/db/dbf': ('da/db/dbf', 'd\n'),
'da2/db/dblink': ('da/db/dblink', '../daf'),
},
5: {
'c1': ('c', 'c\nc\n'),
'linkc1': ('linkc', 'cc'),
},
9: {
'unchanged2': ('unchanged', 'unchanged\n'),
'unchangedlink2': ('unchangedlink', 'unchanged'),
'unchangeddir2/f': ('unchangeddir/f', 'unchanged2\n'),
'unchangeddir2/link': ('unchangeddir/link', 'f'),
},
10: {
'groupdir2/b': ('groupdir/b', 'b\n'),
'groupdir2/linkb': ('groupdir/linkb', 'b'),
},
}
for rev in repo:
ctx = repo[rev]
copymap = copies.get(rev, {})
for f in ctx.manifest():
cp = ctx[f].renamed()
self.assertEqual(bool(cp), bool(copymap.get(f)),
'copy records differ for %s in %d' % (f, rev))
if not cp:
continue
self.assertEqual(cp[0], copymap[f][0])
self.assertEqual(ctx[f].data(), copymap[f][1])
self.assertEqual(repo['tip']['changed3'].data(), 'changed\nchanged3\n')
def test_case(self):
repo = self._load_fixture_and_fetch('filecase.svndump')
files = {
0: ['A', 'a', 'e/a', 'b', 'd/a', 'D/a', 'f/a', 'F'],
1: ['A', 'a', 'E/a', 'B', 'd/A', 'D/a', 'f/a', 'F'],
}
for rev in repo:
self.assertEqual(sorted(files[rev]), sorted(repo[rev].manifest()))
|