Mercurial > hgsubversion
annotate tests/comprehensive/test_rebuildmeta.py @ 1229:46523cdfd3b0 stable 1.6.3
pushmod: prepend "link " to base text for links
http://svn.apache.org/viewvc?view=revision&revision=1223036 exposes
what is arguably a bug in hgsubversion push code. Specifically, when
we are receiving text from the server in an editor, we prepend a "link
" to the text of symlinks when opening a file and strip it when
closing a file. We don't, however, prepend "link " to the base we use
when sending text changes to the server.
This was working before because prior to that revision, the first
thing subversion did was to check whether the entirety of the before
text or the entirety of the after text was less than 64 bytes. In
that case, it just sent the entirety of the after text as a single
insert operation. I'd expect most, but not all symlinks to fit under
the 64 byte limit, including the leading "link " text on the
subversion end.
After the change, the first thing subversion does is check for a
leading match that is more than 4 bytes long, or that is the full
length of the after text. In this case, it sends a copy operation for
the leading match, and then goes into the if < 64 bytes remaining send
the whole thing behavior. It also looks for trailing matches of more
than 4 bytes even in the <64 byte case, but that's not what breaks the
tests.
Incidentally, changing the destination of long symlinks was broken
even before this subversion change. This diff includes test additions
that cover that breakage.
author | David Schleimer <dschleimer@gmail.com> |
---|---|
date | Thu, 07 Aug 2014 19:30:26 -0700 |
parents | 6e1dbf6cbc92 |
children | ff4e102932ed |
rev | line source |
---|---|
155
ba801f44d240
utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1 import os |
ba801f44d240
utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
2 import pickle |
ba801f44d240
utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
3 import unittest |
1042
af84ef787d93
tests: move updatemeta & rebuildmeta tests into comprehensive
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
953
diff
changeset
|
4 import sys |
af84ef787d93
tests: move updatemeta & rebuildmeta tests into comprehensive
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
953
diff
changeset
|
5 |
af84ef787d93
tests: move updatemeta & rebuildmeta tests into comprehensive
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
953
diff
changeset
|
6 # wrapped in a try/except because of weirdness in how |
af84ef787d93
tests: move updatemeta & rebuildmeta tests into comprehensive
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
953
diff
changeset
|
7 # run.py works as compared to nose. |
af84ef787d93
tests: move updatemeta & rebuildmeta tests into comprehensive
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
953
diff
changeset
|
8 try: |
af84ef787d93
tests: move updatemeta & rebuildmeta tests into comprehensive
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
953
diff
changeset
|
9 import test_util |
af84ef787d93
tests: move updatemeta & rebuildmeta tests into comprehensive
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
953
diff
changeset
|
10 except ImportError: |
af84ef787d93
tests: move updatemeta & rebuildmeta tests into comprehensive
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
953
diff
changeset
|
11 sys.path.insert(0, os.path.dirname(os.path.dirname(__file__))) |
af84ef787d93
tests: move updatemeta & rebuildmeta tests into comprehensive
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
953
diff
changeset
|
12 import test_util |
155
ba801f44d240
utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
13 |
638
ea0f42e0004d
tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
622
diff
changeset
|
14 from mercurial import context |
ea0f42e0004d
tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
622
diff
changeset
|
15 from mercurial import extensions |
155
ba801f44d240
utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
16 from mercurial import hg |
ba801f44d240
utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
17 from mercurial import ui |
ba801f44d240
utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
18 |
1103
6e1dbf6cbc92
compathacks: new module to collect hacks to work around hg internals changing
Augie Fackler <raf@durin42.com>
parents:
1092
diff
changeset
|
19 from hgsubversion import compathacks |
337
46e69be8e2c8
Reorganize to have a more conventional module structure.
Augie Fackler <durin42@gmail.com>
parents:
331
diff
changeset
|
20 from hgsubversion import svncommands |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
414
diff
changeset
|
21 from hgsubversion import svnmeta |
155
ba801f44d240
utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
22 |
821
f28e0f54a6ef
svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents:
816
diff
changeset
|
23 # 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
|
24 # 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
|
25 # changes in hg. |
f28e0f54a6ef
svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents:
816
diff
changeset
|
26 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
|
27 ('file_mixed_with_branches.svndump', True, False), |
f28e0f54a6ef
svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents:
816
diff
changeset
|
28 ('unrelatedbranch.svndump', False, False), |
f28e0f54a6ef
svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents:
816
diff
changeset
|
29 ('unrelatedbranch.svndump', True, False), |
f28e0f54a6ef
svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents:
816
diff
changeset
|
30 ] |
f28e0f54a6ef
svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents:
816
diff
changeset
|
31 |
f28e0f54a6ef
svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents:
816
diff
changeset
|
32 |
f28e0f54a6ef
svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents:
816
diff
changeset
|
33 |
1092
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1057
diff
changeset
|
34 def _do_case(self, name, layout): |
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
|
35 subdir = test_util.subdir.get(name, '') |
1092
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1057
diff
changeset
|
36 single = layout == 'single' |
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1057
diff
changeset
|
37 u = ui.ui() |
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1057
diff
changeset
|
38 config = {} |
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1057
diff
changeset
|
39 if layout == 'custom': |
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1057
diff
changeset
|
40 for branch, path in test_util.custom.get(name, {}).iteritems(): |
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1057
diff
changeset
|
41 config['hgsubversionbranch.%s' % branch] = path |
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1057
diff
changeset
|
42 u.setconfig('hgsubversionbranch', branch, path) |
1057
cd256960b622
comprehensive tests: consolidate stupidity into test_util
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
1048
diff
changeset
|
43 repo, repo_path = self.load_and_fetch(name, subdir=subdir, layout=layout) |
1048
903c9c9dfe6a
tests: count revisions explicitly
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1044
diff
changeset
|
44 assert test_util.repolen(self.repo) > 0 |
155
ba801f44d240
utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
45 wc2_path = self.wc_path + '_clone' |
816
86d124a8768e
Fix hg.clone() calls changed by d976542986d2
Patrick Mezard <pmezard@gmail.com>
parents:
748
diff
changeset
|
46 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
|
47 src = test_util.getlocalpeer(src) |
5bacb9c63e3e
Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents:
916
diff
changeset
|
48 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
|
49 |
ea0f42e0004d
tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
622
diff
changeset
|
50 # 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
|
51 def failfn(orig, ctx): |
ea0f42e0004d
tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
622
diff
changeset
|
52 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
|
53 'when rebuilding large repositories' % orig) |
ea0f42e0004d
tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
622
diff
changeset
|
54 |
ea0f42e0004d
tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
622
diff
changeset
|
55 origchildren = getattr(context.changectx, 'children') |
ea0f42e0004d
tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
622
diff
changeset
|
56 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
|
57 |
ea0f42e0004d
tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
622
diff
changeset
|
58 try: |
ea0f42e0004d
tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
622
diff
changeset
|
59 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
|
60 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
|
61 subdir), ]) |
ea0f42e0004d
tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
622
diff
changeset
|
62 finally: |
ea0f42e0004d
tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
622
diff
changeset
|
63 # remove the wrapper |
ea0f42e0004d
tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
622
diff
changeset
|
64 context.changectx.children = origchildren |
ea0f42e0004d
tests: disallow calling changectx.children() during rebuildmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
622
diff
changeset
|
65 |
1057
cd256960b622
comprehensive tests: consolidate stupidity into test_util
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
1048
diff
changeset
|
66 self._run_assertions(name, single, src, dest, u) |
890
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
67 |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
68 wc3_path = self.wc_path + '_partial' |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
69 src, dest = test_util.hgclone(u, |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
70 self.wc_path, |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
71 wc3_path, |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
72 update=False, |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
73 rev=[0]) |
930
5bacb9c63e3e
Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents:
916
diff
changeset
|
74 srcrepo = test_util.getlocalpeer(src) |
5bacb9c63e3e
Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents:
916
diff
changeset
|
75 dest = test_util.getlocalpeer(dest) |
890
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
76 |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
77 # insert a wrapper that prevents calling changectx.children() |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
78 extensions.wrapfunction(context.changectx, 'children', failfn) |
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 try: |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
81 svncommands.rebuildmeta(u, dest, |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
82 args=[test_util.fileurl(repo_path + |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
83 subdir), ]) |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
84 finally: |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
85 # remove the wrapper |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
86 context.changectx.children = origchildren |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
87 |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
88 dest.pull(src) |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
89 |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
90 # insert a wrapper that prevents calling changectx.children() |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
91 extensions.wrapfunction(context.changectx, 'children', failfn) |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
92 try: |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
93 svncommands.updatemeta(u, dest, |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
94 args=[test_util.fileurl(repo_path + |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
95 subdir), ]) |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
96 finally: |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
97 # remove the wrapper |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
98 context.changectx.children = origchildren |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
99 |
1057
cd256960b622
comprehensive tests: consolidate stupidity into test_util
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
1048
diff
changeset
|
100 self._run_assertions(name, single, srcrepo, dest, u) |
890
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
101 |
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
102 |
1057
cd256960b622
comprehensive tests: consolidate stupidity into test_util
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
1048
diff
changeset
|
103 def _run_assertions(self, name, single, src, dest, u): |
890
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
104 |
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
|
105 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
|
106 'no .hg/svn directory in the source!') |
953
3b43b1c45e2e
test_rebuildmeta: fix src/dest typo
Patrick Mezard <patrick@mezard.eu>
parents:
930
diff
changeset
|
107 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
|
108 '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
|
109 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
|
110 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
|
111 |
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
|
112 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
|
113 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
|
114 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
|
115 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
|
116 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
|
117 if tf == 'lastpulled' and (name, |
1057
cd256960b622
comprehensive tests: consolidate stupidity into test_util
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
1048
diff
changeset
|
118 self.stupid, single) in expect_youngest_skew: |
821
f28e0f54a6ef
svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents:
816
diff
changeset
|
119 self.assertNotEqual(old, new, |
f28e0f54a6ef
svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents:
816
diff
changeset
|
120 'rebuildmeta unexpected match on youngest rev!') |
f28e0f54a6ef
svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents:
816
diff
changeset
|
121 continue |
890
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
122 self.assertMultiLineEqual(old, new, tf + ' differs') |
1103
6e1dbf6cbc92
compathacks: new module to collect hacks to work around hg internals changing
Augie Fackler <raf@durin42.com>
parents:
1092
diff
changeset
|
123 try: |
6e1dbf6cbc92
compathacks: new module to collect hacks to work around hg internals changing
Augie Fackler <raf@durin42.com>
parents:
1092
diff
changeset
|
124 self.assertEqual(src.branchmap(), dest.branchmap()) |
6e1dbf6cbc92
compathacks: new module to collect hacks to work around hg internals changing
Augie Fackler <raf@durin42.com>
parents:
1092
diff
changeset
|
125 except AttributeError: |
6e1dbf6cbc92
compathacks: new module to collect hacks to work around hg internals changing
Augie Fackler <raf@durin42.com>
parents:
1092
diff
changeset
|
126 # hg 2.8 and earlier |
6e1dbf6cbc92
compathacks: new module to collect hacks to work around hg internals changing
Augie Fackler <raf@durin42.com>
parents:
1092
diff
changeset
|
127 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
|
128 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
|
129 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
|
130 self.assertEqual(sorted(srcbi.keys()), sorted(destbi.keys())) |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
414
diff
changeset
|
131 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
|
132 for branch in destbi: |
ba801f44d240
utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
133 srcinfo = srcbi[branch] |
ba801f44d240
utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
134 destinfo = destbi[branch] |
447
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
416
diff
changeset
|
135 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
|
136 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
|
137 '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
|
138 % (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
|
139 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
|
140 else: |
ba801f44d240
utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
141 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
|
142 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
|
143 self.assertEqual(pr, destinfo[1]) |
ba801f44d240
utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
144 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
|
145 |
ba801f44d240
utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
146 |
1092
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1057
diff
changeset
|
147 def buildmethod(case, name, layout): |
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1057
diff
changeset
|
148 m = lambda self: self._do_case(case, layout) |
155
ba801f44d240
utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
149 m.__name__ = name |
1057
cd256960b622
comprehensive tests: consolidate stupidity into test_util
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
1048
diff
changeset
|
150 m.__doc__ = ('Test rebuildmeta on %s (%s)' % |
1092
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1057
diff
changeset
|
151 (case, layout)) |
155
ba801f44d240
utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
152 return m |
ba801f44d240
utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
153 |
ba801f44d240
utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
154 |
892
3bfb7e985c47
svn verify: add a test for corrupt repositories.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
867
diff
changeset
|
155 skip = set([ |
3bfb7e985c47
svn verify: add a test for corrupt repositories.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
867
diff
changeset
|
156 '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
|
157 'corrupt.svndump', |
3bfb7e985c47
svn verify: add a test for corrupt repositories.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
867
diff
changeset
|
158 ]) |
3bfb7e985c47
svn verify: add a test for corrupt repositories.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
867
diff
changeset
|
159 |
155
ba801f44d240
utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
160 attrs = {'_do_case': _do_case, |
890
78db88de9622
Partial metadata rebuilding
David Schleimer <dschleimer@fb.com>
parents:
867
diff
changeset
|
161 '_run_assertions': _run_assertions, |
1057
cd256960b622
comprehensive tests: consolidate stupidity into test_util
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
1048
diff
changeset
|
162 'stupid_mode_tests': True, |
155
ba801f44d240
utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
163 } |
182
47d25d61abfa
remove generators (compat with python2.3)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
155
diff
changeset
|
164 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
|
165 # 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
|
166 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
|
167 continue |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
474
diff
changeset
|
168 bname = 'test_' + case[:-len('.svndump')] |
1092
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1057
diff
changeset
|
169 attrs[bname] = buildmethod(case, bname, 'auto') |
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1057
diff
changeset
|
170 attrs[bname + '_single'] = buildmethod(case, bname + '_single', 'single') |
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1057
diff
changeset
|
171 if case in test_util.custom: |
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1057
diff
changeset
|
172 attrs[bname + '_custom'] = buildmethod(case, |
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1057
diff
changeset
|
173 bname + '_custom', |
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1057
diff
changeset
|
174 'single') |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
474
diff
changeset
|
175 |
832
e9af7eba88db
globally: clean up whitespace around operators and commas to conform with PEP8
Yonggang Luo <luoyonggang@gmail.com>
parents:
821
diff
changeset
|
176 RebuildMetaTests = type('RebuildMetaTests', (test_util.TestBase,), attrs) |