Mercurial > hgsubversion
comparison tests/test_rebuildmeta.py @ 155:ba801f44d240
utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
hg_delta_editor: Fixed some longstanding branch_info bugs detected while
rebuilding meta.
author | Augie Fackler <durin42@gmail.com> |
---|---|
date | Tue, 23 Dec 2008 22:19:26 -0600 |
parents | |
children | 47d25d61abfa |
comparison
equal
deleted
inserted
replaced
154:6fa97cfbf62f | 155:ba801f44d240 |
---|---|
1 import os | |
2 import pickle | |
3 import unittest | |
4 | |
5 from mercurial import hg | |
6 from mercurial import ui | |
7 | |
8 import test_util | |
9 import rebuildmeta | |
10 import hg_delta_editor | |
11 | |
12 subdir = {'truncatedhistory.svndump': '/project2', | |
13 'fetch_missing_files_subdir.svndump': '/foo', | |
14 } | |
15 # List of expected "missing" branches - these are really files that happen | |
16 # to be in the branches dir. This will be fixed at a later date. | |
17 expected_branch_deltas = {'unrelatedbranch.svndump': ['c', ], | |
18 'file_mixed_with_branches.svndump': ['README', ], | |
19 } | |
20 | |
21 def _do_case(self, name, stupid): | |
22 self._load_fixture_and_fetch(name, subdir=subdir.get(name, ''), stupid=stupid) | |
23 assert len(self.repo) > 0 | |
24 wc2_path = self.wc_path + '_clone' | |
25 u = ui.ui() | |
26 src, dest = hg.clone(u, self.wc_path, wc2_path, update=False) | |
27 rebuildmeta.rebuildmeta(u, | |
28 dest, | |
29 os.path.dirname(dest.path), | |
30 args=[test_util.fileurl(self.repo_path + | |
31 subdir.get(name, '')), ]) | |
32 dest = hg.repository(u, os.path.dirname(dest.path)) | |
33 self.assert_(open(os.path.join(src.path, 'svn', 'last_rev')).read() >= | |
34 open(os.path.join(dest.path, 'svn', 'last_rev')).read()) | |
35 for tf in ('rev_map', 'uuid', 'url'): | |
36 self.assertEqual(open(os.path.join(src.path, 'svn', tf)).read(), | |
37 open(os.path.join(dest.path, 'svn', tf)).read()) | |
38 self.assertEqual(pickle.load(open(os.path.join(src.path, 'svn', | |
39 'tag_info'))), | |
40 pickle.load(open(os.path.join(dest.path, 'svn', | |
41 'tag_info')))) | |
42 self.assertEqual(src.branchtags(), dest.branchtags()) | |
43 srcbi = pickle.load(open(os.path.join(src.path, 'svn', 'branch_info'))) | |
44 for mustpop in expected_branch_deltas.get(name, []): | |
45 del srcbi[mustpop] | |
46 destbi = pickle.load(open(os.path.join(dest.path, 'svn', 'branch_info'))) | |
47 self.assertEqual(sorted(srcbi.keys()), sorted(destbi.keys())) | |
48 for branch in destbi: | |
49 srcinfo = srcbi[branch] | |
50 destinfo = destbi[branch] | |
51 hge = hg_delta_editor.HgChangeReceiver(path=os.path.dirname(dest.path), | |
52 repo=dest, | |
53 ui_=u) | |
54 if destinfo[:2] == (None, 0): | |
55 self.assert_(srcinfo[2] <= destinfo[2]) | |
56 self.assertEqual(srcinfo[0], destinfo[0]) | |
57 else: | |
58 pr = sorted(filter(lambda x: x[1] == srcinfo[0] and x[0] <= srcinfo[1], | |
59 hge.revmap.keys()), reverse=True)[0][0] | |
60 self.assertEqual(pr, destinfo[1]) | |
61 self.assertEqual(srcinfo[2], destinfo[2]) | |
62 | |
63 | |
64 def buildmethod(case, name, stupid): | |
65 m = lambda self: self._do_case(case, stupid) | |
66 m.__name__ = name | |
67 m.__doc__ = ('Test rebuildmeta on %s with %s replay.' % | |
68 (case, (stupid and 'stupid') or 'real')) | |
69 return m | |
70 | |
71 | |
72 attrs = {'_do_case': _do_case, | |
73 } | |
74 for case in (f for f in os.listdir(test_util.FIXTURES) if f.endswith('.svndump')): | |
75 name = 'test_' + case[:-len('.svndump')] | |
76 attrs[name] = buildmethod(case, name, False) | |
77 name += '_stupid' | |
78 attrs[name] = buildmethod(case, name, True) | |
79 RebuildMetaTests = type('RebuildMetaTests', (test_util.TestBase, ), attrs) | |
80 | |
81 | |
82 def suite(): | |
83 all = [unittest.TestLoader().loadTestsFromTestCase(RebuildMetaTests), | |
84 ] | |
85 return unittest.TestSuite(all) |