Mercurial > hgsubversion
annotate tests/test_startrev.py @ 787:4bbc6bf947f5 1.2.1
replay: fetch full revision at most once per run (issue252)
Before this change, hgsubversion was fetching full revisions from the first
revision the project was created to the first revision containing converted
data. Unfortunately, some projects exhibits such spans longer than 500
revisions, during which hgsubversion was uselessly scanning the whole tree. The
fix is not technically perfect, we could record somewhere that while no data
was converted we scanned the project already, instead of scanning once at every
hgsubversion run until a revision is converted. But it should be good enough
unless someone runs hgsubversion once for every target revision.
One repository exhibiting this behaviour:
svn://svn.zankasoftware.com/zanka
author | Patrick Mezard <pmezard@gmail.com> |
---|---|
date | Sun, 13 Feb 2011 20:10:52 +0100 |
parents | d101b39f6c51 |
children | e9af7eba88db |
rev | line source |
---|---|
653
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
1 import test_util |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
2 |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
3 import os |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
4 import unittest |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
5 |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
6 def _do_case(self, name, subdir, stupid): |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
7 wc_base = self.wc_path |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
8 self.wc_path = wc_base + '_full' |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
9 headclone = self._load_fixture_and_fetch(name, subdir=subdir, stupid=stupid, |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
10 layout='single', startrev='HEAD') |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
11 self.wc_path = wc_base + '_head' |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
12 fullclone = self._load_fixture_and_fetch(name, subdir=subdir, stupid=stupid, |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
13 layout='single') |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
14 |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
15 fulltip = fullclone['tip'] |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
16 headtip = headclone['tip'] |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
17 # viewing diff's of lists of files is easier on the eyes |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
18 self.assertMultiLineEqual('\n'.join(fulltip), '\n'.join(headtip)) |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
19 |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
20 for f in fulltip: |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
21 self.assertMultiLineEqual(fulltip[f].data(), headtip[f].data()) |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
22 |
658
d101b39f6c51
test_startrev: add a few assertions about clone lengths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
23 self.assertNotEqual(len(fullclone), 0, "full clone shouldn't be empty") |
d101b39f6c51
test_startrev: add a few assertions about clone lengths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
24 self.assertEqual(len(headclone), 1, |
d101b39f6c51
test_startrev: add a few assertions about clone lengths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
25 "shallow clone should have just one revision, not %d" |
d101b39f6c51
test_startrev: add a few assertions about clone lengths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
26 % len(headclone)) |
d101b39f6c51
test_startrev: add a few assertions about clone lengths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
27 |
653
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
28 def buildmethod(case, name, subdir, stupid): |
657
9cf547fc36e8
pull: fix shallow clone when lastest change isn't HEAD.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
653
diff
changeset
|
29 m = lambda self: self._do_case(case, subdir.strip('/'), stupid) |
653
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
30 m.__name__ = name |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
31 m.__doc__ = ('Test clone with startrev on %s%s with %s replay.' % |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
32 (case, subdir, (stupid and 'stupid') or 'real')) |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
33 return m |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
34 |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
35 |
658
d101b39f6c51
test_startrev: add a few assertions about clone lengths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
36 # these fixtures contain no files at HEAD and would result in empty clones |
d101b39f6c51
test_startrev: add a few assertions about clone lengths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
37 nofiles = set([ |
d101b39f6c51
test_startrev: add a few assertions about clone lengths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
38 'binaryfiles.svndump', |
d101b39f6c51
test_startrev: add a few assertions about clone lengths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
39 'emptyrepo.svndump', |
d101b39f6c51
test_startrev: add a few assertions about clone lengths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
40 ]) |
d101b39f6c51
test_startrev: add a few assertions about clone lengths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
41 |
d101b39f6c51
test_startrev: add a few assertions about clone lengths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
42 # these fixtures contain no files in trunk at HEAD and would result in an empty |
d101b39f6c51
test_startrev: add a few assertions about clone lengths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
43 # shallow clone if cloning trunk, so we use another subdirectory |
d101b39f6c51
test_startrev: add a few assertions about clone lengths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
44 subdirmap = { |
d101b39f6c51
test_startrev: add a few assertions about clone lengths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
45 'commit-to-tag.svndump': '/branches/magic', |
d101b39f6c51
test_startrev: add a few assertions about clone lengths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
46 'pushexternals.svndump': '', |
d101b39f6c51
test_startrev: add a few assertions about clone lengths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
47 'tag_name_same_as_branch.svndump': '/branches/magic', |
d101b39f6c51
test_startrev: add a few assertions about clone lengths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
48 } |
d101b39f6c51
test_startrev: add a few assertions about clone lengths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
49 |
653
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
50 attrs = {'_do_case': _do_case, |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
51 } |
658
d101b39f6c51
test_startrev: add a few assertions about clone lengths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
52 |
653
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
53 for case in [f for f in os.listdir(test_util.FIXTURES) if f.endswith('.svndump')]: |
658
d101b39f6c51
test_startrev: add a few assertions about clone lengths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
54 if case in nofiles: |
d101b39f6c51
test_startrev: add a few assertions about clone lengths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
55 continue |
d101b39f6c51
test_startrev: add a few assertions about clone lengths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
56 |
d101b39f6c51
test_startrev: add a few assertions about clone lengths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
57 subdir = test_util.subdir.get(case, '') + subdirmap.get(case, '/trunk') |
653
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
58 |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
59 bname = 'test_' + case[:-len('.svndump')] |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
60 attrs[bname] = buildmethod(case, bname, subdir, False) |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
61 name = bname + '_stupid' |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
62 attrs[name] = buildmethod(case, name, subdir, True) |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
63 |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
64 StartRevTests = type('StartRevTests', (test_util.TestBase, ), attrs) |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
65 |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
66 |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
67 def suite(): |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
68 all = [unittest.TestLoader().loadTestsFromTestCase(StartRevTests), |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
69 ] |
ab454ee515d4
test_startrev: new tests inspired by test_rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
70 return unittest.TestSuite(all) |