annotate tests/test_rebuildmeta.py @ 990:def2144c0a8c

push: rebase one at a time before push Previously when pushing n commits, push would rebase n, commit 1, rebase n-1, commit 1, rebase n-2, etc. This caused push to be very slow on large repositories. Pushing 10 commits on our repo took 75 seconds per commit, and that grew at n^2 with the number of commits being pushed. This changes push to rebase each commit individually. Now pushing 10 commits on our repo takes 25 seconds per commit, and is constant relative to the number of commits being pushed.
author Durham Goode <durham@fb.com>
date Wed, 02 Jan 2013 17:51:07 -0800
parents 3b43b1c45e2e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
643
d2ef7220a079 tests: import test_util as the first module in all relevant tests
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 638
diff changeset
1 import test_util
d2ef7220a079 tests: import test_util as the first module in all relevant tests
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 638
diff changeset
2
155
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
3 import os
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
4 import pickle
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
5 import unittest
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
6
638
ea0f42e0004d tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 622
diff changeset
7 from mercurial import context
ea0f42e0004d tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 622
diff changeset
8 from mercurial import extensions
155
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
9 from mercurial import hg
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
10 from mercurial import ui
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
11
337
46e69be8e2c8 Reorganize to have a more conventional module structure.
Augie Fackler <durin42@gmail.com>
parents: 331
diff changeset
12 from hgsubversion import svncommands
416
cd6317fe70be invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 414
diff changeset
13 from hgsubversion import svnmeta
155
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
14
821
f28e0f54a6ef svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents: 816
diff changeset
15 # These test repositories have harmless skew in rebuildmeta for the
f28e0f54a6ef svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents: 816
diff changeset
16 # last-pulled-rev because the last rev in svn causes absolutely no
f28e0f54a6ef svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents: 816
diff changeset
17 # changes in hg.
f28e0f54a6ef svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents: 816
diff changeset
18 expect_youngest_skew = [('file_mixed_with_branches.svndump', False, False),
f28e0f54a6ef svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents: 816
diff changeset
19 ('file_mixed_with_branches.svndump', True, False),
f28e0f54a6ef svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents: 816
diff changeset
20 ('unrelatedbranch.svndump', False, False),
f28e0f54a6ef svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents: 816
diff changeset
21 ('unrelatedbranch.svndump', True, False),
f28e0f54a6ef svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents: 816
diff changeset
22 ]
f28e0f54a6ef svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents: 816
diff changeset
23
f28e0f54a6ef svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents: 816
diff changeset
24
f28e0f54a6ef svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents: 816
diff changeset
25
499
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
26 def _do_case(self, name, stupid, single):
194
13ae1bded5e7 Add some comprehensive tests that can be run with nose in order to make it easier to verify stupid and real replay do the same thing.
Augie Fackler <durin42@gmail.com>
parents: 182
diff changeset
27 subdir = test_util.subdir.get(name, '')
499
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
28 layout = 'auto'
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
29 if single:
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
30 layout = 'single'
867
50c13e01c7e3 test_util: add a load_and_fetch() returning the repo_path
Patrick Mezard <patrick@mezard.eu>
parents: 833
diff changeset
31 repo, repo_path = self.load_and_fetch(name, subdir=subdir, stupid=stupid,
50c13e01c7e3 test_util: add a load_and_fetch() returning the repo_path
Patrick Mezard <patrick@mezard.eu>
parents: 833
diff changeset
32 layout=layout)
155
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
33 assert len(self.repo) > 0
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
34 wc2_path = self.wc_path + '_clone'
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
35 u = ui.ui()
816
86d124a8768e Fix hg.clone() calls changed by d976542986d2
Patrick Mezard <pmezard@gmail.com>
parents: 748
diff changeset
36 src, dest = test_util.hgclone(u, self.wc_path, wc2_path, update=False)
930
5bacb9c63e3e Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents: 916
diff changeset
37 src = test_util.getlocalpeer(src)
5bacb9c63e3e Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents: 916
diff changeset
38 dest = test_util.getlocalpeer(dest)
638
ea0f42e0004d tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 622
diff changeset
39
ea0f42e0004d tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 622
diff changeset
40 # insert a wrapper that prevents calling changectx.children()
ea0f42e0004d tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 622
diff changeset
41 def failfn(orig, ctx):
ea0f42e0004d tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 622
diff changeset
42 self.fail('calling %s is forbidden; it can cause massive slowdowns '
ea0f42e0004d tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 622
diff changeset
43 'when rebuilding large repositories' % orig)
ea0f42e0004d tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 622
diff changeset
44
ea0f42e0004d tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 622
diff changeset
45 origchildren = getattr(context.changectx, 'children')
ea0f42e0004d tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 622
diff changeset
46 extensions.wrapfunction(context.changectx, 'children', failfn)
ea0f42e0004d tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 622
diff changeset
47
ea0f42e0004d tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 622
diff changeset
48 try:
ea0f42e0004d tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 622
diff changeset
49 svncommands.rebuildmeta(u, dest,
867
50c13e01c7e3 test_util: add a load_and_fetch() returning the repo_path
Patrick Mezard <patrick@mezard.eu>
parents: 833
diff changeset
50 args=[test_util.fileurl(repo_path +
638
ea0f42e0004d tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 622
diff changeset
51 subdir), ])
ea0f42e0004d tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 622
diff changeset
52 finally:
ea0f42e0004d tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 622
diff changeset
53 # remove the wrapper
ea0f42e0004d tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 622
diff changeset
54 context.changectx.children = origchildren
ea0f42e0004d tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 622
diff changeset
55
890
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
56 self._run_assertions(name, stupid, single, src, dest, u)
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
57
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
58 wc3_path = self.wc_path + '_partial'
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
59 src, dest = test_util.hgclone(u,
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
60 self.wc_path,
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
61 wc3_path,
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
62 update=False,
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
63 rev=[0])
930
5bacb9c63e3e Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents: 916
diff changeset
64 srcrepo = test_util.getlocalpeer(src)
5bacb9c63e3e Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents: 916
diff changeset
65 dest = test_util.getlocalpeer(dest)
890
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
66
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
67 # insert a wrapper that prevents calling changectx.children()
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
68 extensions.wrapfunction(context.changectx, 'children', failfn)
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
69
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
70 try:
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
71 svncommands.rebuildmeta(u, dest,
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
72 args=[test_util.fileurl(repo_path +
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
73 subdir), ])
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
74 finally:
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
75 # remove the wrapper
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
76 context.changectx.children = origchildren
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
77
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
78 dest.pull(src)
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
79
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
80 # insert a wrapper that prevents calling changectx.children()
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
81 extensions.wrapfunction(context.changectx, 'children', failfn)
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
82 try:
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
83 svncommands.updatemeta(u, dest,
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
84 args=[test_util.fileurl(repo_path +
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
85 subdir), ])
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
86 finally:
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
87 # remove the wrapper
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
88 context.changectx.children = origchildren
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
89
916
7e9d805a0e1f tests: fix regressions introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents: 893
diff changeset
90 self._run_assertions(name, stupid, single, srcrepo, dest, u)
890
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
91
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
92
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
93 def _run_assertions(self, name, stupid, single, src, dest, u):
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
94
331
75f082b5897e Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 246
diff changeset
95 self.assertTrue(os.path.isdir(os.path.join(src.path, 'svn')),
75f082b5897e Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 246
diff changeset
96 'no .hg/svn directory in the source!')
953
3b43b1c45e2e test_rebuildmeta: fix src/dest typo
Patrick Mezard <patrick@mezard.eu>
parents: 930
diff changeset
97 self.assertTrue(os.path.isdir(os.path.join(dest.path, 'svn')),
331
75f082b5897e Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 246
diff changeset
98 'no .hg/svn directory in the destination!')
155
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
99 dest = hg.repository(u, os.path.dirname(dest.path))
832
e9af7eba88db globally: clean up whitespace around operators and commas to conform with PEP8
Yonggang Luo <luoyonggang@gmail.com>
parents: 821
diff changeset
100 for tf in ('lastpulled', 'rev_map', 'uuid', 'tagmap', 'layout', 'subdir',):
821
f28e0f54a6ef svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents: 816
diff changeset
101
331
75f082b5897e Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 246
diff changeset
102 stf = os.path.join(src.path, 'svn', tf)
75f082b5897e Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 246
diff changeset
103 self.assertTrue(os.path.isfile(stf), '%r is missing!' % stf)
75f082b5897e Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 246
diff changeset
104 dtf = os.path.join(dest.path, 'svn', tf)
75f082b5897e Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 246
diff changeset
105 self.assertTrue(os.path.isfile(dtf), '%r is missing!' % tf)
447
0d3b5acb1d51 tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents: 416
diff changeset
106 old, new = open(stf).read(), open(dtf).read()
821
f28e0f54a6ef svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents: 816
diff changeset
107 if tf == 'lastpulled' and (name,
f28e0f54a6ef svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents: 816
diff changeset
108 stupid, single) in expect_youngest_skew:
f28e0f54a6ef svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents: 816
diff changeset
109 self.assertNotEqual(old, new,
f28e0f54a6ef svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents: 816
diff changeset
110 'rebuildmeta unexpected match on youngest rev!')
f28e0f54a6ef svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents: 816
diff changeset
111 continue
890
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
112 self.assertMultiLineEqual(old, new, tf + ' differs')
447
0d3b5acb1d51 tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents: 416
diff changeset
113 self.assertEqual(src.branchtags(), dest.branchtags())
155
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
114 srcbi = pickle.load(open(os.path.join(src.path, 'svn', 'branch_info')))
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
115 destbi = pickle.load(open(os.path.join(dest.path, 'svn', 'branch_info')))
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
116 self.assertEqual(sorted(srcbi.keys()), sorted(destbi.keys()))
416
cd6317fe70be invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 414
diff changeset
117 revkeys = svnmeta.SVNMeta(dest).revmap.keys()
155
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
118 for branch in destbi:
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
119 srcinfo = srcbi[branch]
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
120 destinfo = destbi[branch]
447
0d3b5acb1d51 tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents: 416
diff changeset
121 if srcinfo[:2] == (None, 0) or destinfo[:2] == (None, 0):
655
dcac6dc1abe6 test_rebuildmeta: make an assertion more helpful.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 643
diff changeset
122 self.assertTrue(srcinfo[2] <= destinfo[2],
dcac6dc1abe6 test_rebuildmeta: make an assertion more helpful.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 643
diff changeset
123 'Latest revision for %s decreased from %d to %d!'
dcac6dc1abe6 test_rebuildmeta: make an assertion more helpful.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 643
diff changeset
124 % (branch or 'default', srcinfo[2], destinfo[2]))
155
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
125 self.assertEqual(srcinfo[0], destinfo[0])
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
126 else:
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
127 pr = sorted(filter(lambda x: x[1] == srcinfo[0] and x[0] <= srcinfo[1],
405
a98b8d424221 editor: simplify HgChangeReceiver constructor signature
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 383
diff changeset
128 revkeys), reverse=True)[0][0]
155
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
129 self.assertEqual(pr, destinfo[1])
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
130 self.assertEqual(srcinfo[2], destinfo[2])
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
131
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
132
499
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
133 def buildmethod(case, name, stupid, single):
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
134 m = lambda self: self._do_case(case, stupid, single)
155
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
135 m.__name__ = name
499
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
136 m.__doc__ = ('Test rebuildmeta on %s with %s replay. (%s)' %
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
137 (case,
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
138 (stupid and 'stupid') or 'real',
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
139 (single and 'single') or 'standard',
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
140 )
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
141 )
155
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
142 return m
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
143
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
144
892
3bfb7e985c47 svn verify: add a test for corrupt repositories.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 867
diff changeset
145 skip = set([
3bfb7e985c47 svn verify: add a test for corrupt repositories.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 867
diff changeset
146 'project_root_not_repo_root.svndump',
3bfb7e985c47 svn verify: add a test for corrupt repositories.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 867
diff changeset
147 'corrupt.svndump',
3bfb7e985c47 svn verify: add a test for corrupt repositories.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 867
diff changeset
148 ])
3bfb7e985c47 svn verify: add a test for corrupt repositories.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 867
diff changeset
149
155
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
150 attrs = {'_do_case': _do_case,
890
78db88de9622 Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents: 867
diff changeset
151 '_run_assertions': _run_assertions,
155
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
152 }
182
47d25d61abfa remove generators (compat with python2.3)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 155
diff changeset
153 for case in [f for f in os.listdir(test_util.FIXTURES) if f.endswith('.svndump')]:
347
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 337
diff changeset
154 # this fixture results in an empty repository, don't use it
892
3bfb7e985c47 svn verify: add a test for corrupt repositories.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 867
diff changeset
155 if case in skip:
347
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 337
diff changeset
156 continue
499
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
157 bname = 'test_' + case[:-len('.svndump')]
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
158 attrs[bname] = buildmethod(case, bname, False, False)
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
159 name = bname + '_stupid'
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
160 attrs[name] = buildmethod(case, name, True, False)
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
161 name = bname + '_single'
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
162 attrs[name] = buildmethod(case, name, False, True)
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
163
832
e9af7eba88db globally: clean up whitespace around operators and commas to conform with PEP8
Yonggang Luo <luoyonggang@gmail.com>
parents: 821
diff changeset
164 RebuildMetaTests = type('RebuildMetaTests', (test_util.TestBase,), attrs)
155
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
165
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
166
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
167 def suite():
833
312b37bc5e20 tests: avoid shadowing Python builtin all()
Yonggang Luo <luoyonggang@gmail.com>
parents: 832
diff changeset
168 all_tests = [unittest.TestLoader().loadTestsFromTestCase(RebuildMetaTests),
155
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
169 ]
833
312b37bc5e20 tests: avoid shadowing Python builtin all()
Yonggang Luo <luoyonggang@gmail.com>
parents: 832
diff changeset
170 return unittest.TestSuite(all_tests)