comparison tests/test_fetch_command.py @ 1106:5cb6c95e0283 stable

Merge default and stable so I can do stable releases again.
author Augie Fackler <raf@durin42.com>
date Tue, 11 Feb 2014 12:48:49 -0500
parents ca36d5915dc7
children 86ae03f889a4
comparison
equal deleted inserted replaced
1020:b5b1fce26f1f 1106:5cb6c95e0283
9 from mercurial import node 9 from mercurial import node
10 from mercurial import ui 10 from mercurial import ui
11 from mercurial import encoding 11 from mercurial import encoding
12 12
13 class TestBasicRepoLayout(test_util.TestBase): 13 class TestBasicRepoLayout(test_util.TestBase):
14 stupid_mode_tests = True
14 15
15 def test_no_dates(self): 16 def test_no_dates(self):
16 repo = self._load_fixture_and_fetch('test_no_dates.svndump') 17 repo = self._load_fixture_and_fetch('test_no_dates.svndump')
17 local_epoch = repo[0].date() 18 local_epoch = repo[0].date()
18 self.assertEqual(local_epoch[0], local_epoch[1]) 19 self.assertEqual(local_epoch[0], local_epoch[1])
60 'f1ff5b860f5dbb9a59ad0921a79da77f10f25109') 61 'f1ff5b860f5dbb9a59ad0921a79da77f10f25109')
61 self.assertEqual(len(repo['tip'].parents()), 1) 62 self.assertEqual(len(repo['tip'].parents()), 1)
62 self.assertEqual(repo['tip'], repo['default']) 63 self.assertEqual(repo['tip'], repo['default'])
63 self.assertEqual(len(repo.heads()), 2) 64 self.assertEqual(len(repo.heads()), 2)
64 65
65 def test_many_special_cases_replay(self): 66 def test_many_special_cases(self):
66 repo = self._load_fixture_and_fetch('many_special_cases.svndump') 67 repo = self._load_fixture_and_fetch('many_special_cases.svndump')
67 self._many_special_cases_checks(repo) 68
68
69
70 def test_many_special_cases_diff(self):
71 repo = self._load_fixture_and_fetch('many_special_cases.svndump',
72 stupid=True)
73 self._many_special_cases_checks(repo)
74
75 def _many_special_cases_checks(self, repo):
76 self.assertEquals(node.hex(repo[0].node()), 69 self.assertEquals(node.hex(repo[0].node()),
77 '434ed487136c1b47c1e8f952edb4dc5a8e6328df') 70 '434ed487136c1b47c1e8f952edb4dc5a8e6328df')
78 # two possible hashes for bw compat to hg < 1.5, since hg 1.5 71 # two possible hashes for bw compat to hg < 1.5, since hg 1.5
79 # sorts entries in extra() 72 # sorts entries in extra()
80 self.assertTrue(node.hex(repo['tip'].node()) in 73 self.assertTrue(node.hex(repo['tip'].node()) in
93 self.assertEqual(node.hex(repo['default'].node()), 86 self.assertEqual(node.hex(repo['default'].node()),
94 '434ed487136c1b47c1e8f952edb4dc5a8e6328df') 87 '434ed487136c1b47c1e8f952edb4dc5a8e6328df')
95 assert 'README' not in repo 88 assert 'README' not in repo
96 assert '../branches' not in repo 89 assert '../branches' not in repo
97 90
98 def test_files_copied_from_outside_btt(self, stupid=False): 91 def test_files_copied_from_outside_btt(self):
99 repo = self._load_fixture_and_fetch( 92 repo = self._load_fixture_and_fetch(
100 'test_files_copied_from_outside_btt.svndump', stupid=stupid) 93 'test_files_copied_from_outside_btt.svndump')
101 self.assertEqual(node.hex(repo['tip'].node()), 94 self.assertEqual(node.hex(repo['tip'].node()),
102 '3c78170e30ddd35f2c32faa0d8646ab75bba4f73') 95 '3c78170e30ddd35f2c32faa0d8646ab75bba4f73')
103 self.assertEqual(len(repo.changelog), 2) 96 self.assertEqual(test_util.repolen(repo.changelog), 2)
104
105 def test_files_copied_from_outside_btt_stupid(self):
106 self.test_files_copied_from_outside_btt(stupid=True)
107 97
108 def test_file_renamed_in_from_outside_btt(self): 98 def test_file_renamed_in_from_outside_btt(self):
109 repo = self._load_fixture_and_fetch( 99 repo = self._load_fixture_and_fetch(
110 'file_renamed_in_from_outside_btt.svndump') 100 'file_renamed_in_from_outside_btt.svndump')
111 self.assert_('LICENSE.file' in repo['default']) 101 self.assert_('LICENSE.file' in repo['default'])
128 self.assertEqual(repo['tip'].parents()[0].parents()[0], 118 self.assertEqual(repo['tip'].parents()[0].parents()[0],
129 repo['oldest']) 119 repo['oldest'])
130 self.assertEqual(node.hex(repo['tip'].node()), 120 self.assertEqual(node.hex(repo['tip'].node()),
131 '1a6c3f30911d57abb67c257ec0df3e7bc44786f7') 121 '1a6c3f30911d57abb67c257ec0df3e7bc44786f7')
132 122
133 def test_propedit_with_nothing_else(self, stupid=False): 123 def test_propedit_with_nothing_else(self):
134 repo = self._load_fixture_and_fetch('branch_prop_edit.svndump', 124 repo = self._load_fixture_and_fetch('branch_prop_edit.svndump')
135 stupid=stupid)
136 self.assertEqual(repo['tip'].description(), 'Commit bogus propchange.') 125 self.assertEqual(repo['tip'].description(), 'Commit bogus propchange.')
137 self.assertEqual(repo['tip'].branch(), 'dev_branch') 126 self.assertEqual(repo['tip'].branch(), 'dev_branch')
138 127
139 def test_propedit_with_nothing_else_stupid(self): 128 def test_entry_deletion(self):
140 self.test_propedit_with_nothing_else(stupid=True) 129 repo = self._load_fixture_and_fetch('delentries.svndump')
141
142 def test_entry_deletion(self, stupid=False):
143 repo = self._load_fixture_and_fetch('delentries.svndump',
144 stupid=stupid)
145 files = list(sorted(repo['tip'].manifest())) 130 files = list(sorted(repo['tip'].manifest()))
146 self.assertEqual(['aa', 'd1/c', 'd1/d2prefix'], files) 131 self.assertEqual(['aa', 'd1/c', 'd1/d2prefix'], files)
147 132
148 def test_entry_deletion_stupid(self): 133 def test_fetch_when_trunk_has_no_files(self):
149 self.test_entry_deletion(stupid=True) 134 repo = self._load_fixture_and_fetch('file_not_in_trunk_root.svndump')
150
151 def test_fetch_when_trunk_has_no_files(self, stupid=False):
152 repo = self._load_fixture_and_fetch('file_not_in_trunk_root.svndump', stupid=stupid)
153 self.assertEqual(repo['tip'].branch(), 'default') 135 self.assertEqual(repo['tip'].branch(), 'default')
154 136
155 def test_fetch_when_trunk_has_no_files_stupid(self): 137 def test_path_quoting(self):
156 self.test_fetch_when_trunk_has_no_files(stupid=True)
157
158 def test_path_quoting(self, stupid=False):
159 repo_path = self.load_svndump('non_ascii_path_1.svndump') 138 repo_path = self.load_svndump('non_ascii_path_1.svndump')
160 subdir = '/b\xC3\xB8b' 139 subdir = '/b\xC3\xB8b'
161 quoted_subdir = urllib.quote(subdir) 140 quoted_subdir = urllib.quote(subdir)
162 141
163 repo_url = test_util.fileurl(repo_path) 142 repo_url = test_util.fileurl(repo_path)
164 wc_path = self.wc_path 143 wc_path = self.wc_path
165 wc2_path = wc_path + '-2' 144 wc2_path = wc_path + '-2'
166 145
167 ui = self.ui(stupid=stupid) 146 ui = self.ui()
168 147
169 commands.clone(ui, repo_url + subdir, wc_path) 148 commands.clone(ui, repo_url + subdir, wc_path)
170 commands.clone(ui, repo_url + quoted_subdir, wc2_path) 149 commands.clone(ui, repo_url + quoted_subdir, wc2_path)
171 repo = hg.repository(ui, wc_path) 150 repo = hg.repository(ui, wc_path)
172 repo2 = hg.repository(ui, wc2_path) 151 repo2 = hg.repository(ui, wc2_path)
173 152
174 self.assertEqual(repo['tip'].extra()['convert_revision'], 153 self.assertEqual(repo['tip'].extra()['convert_revision'],
175 repo2['tip'].extra()['convert_revision']) 154 repo2['tip'].extra()['convert_revision'])
176 self.assertEqual(len(repo), len(repo2)) 155 self.assertEqual(test_util.repolen(repo), test_util.repolen(repo2))
177 156
178 for r in repo: 157 for r in repo:
179 self.assertEqual(repo[r].hex(), repo2[r].hex()) 158 self.assertEqual(repo[r].hex(), repo2[r].hex())
180
181 def test_path_quoting_stupid(self):
182 repo = self.test_path_quoting(True)
183
184 159
185 def test_identical_fixtures(self): 160 def test_identical_fixtures(self):
186 '''ensure that the non_ascii_path_N fixtures are identical''' 161 '''ensure that the non_ascii_path_N fixtures are identical'''
187 fixturepaths = [ 162 fixturepaths = [
188 os.path.join(test_util.FIXTURES, 'non_ascii_path_1.svndump'), 163 os.path.join(test_util.FIXTURES, 'non_ascii_path_1.svndump'),
198 self.assertEqual(desc.decode('utf8'), 173 self.assertEqual(desc.decode('utf8'),
199 u'bl\xe5b\xe6rgr\xf8d') 174 u'bl\xe5b\xe6rgr\xf8d')
200 175
201 176
202 class TestStupidPull(test_util.TestBase): 177 class TestStupidPull(test_util.TestBase):
178 stupid_mode_tests = True
179
203 def test_stupid(self): 180 def test_stupid(self):
204 repo = self._load_fixture_and_fetch('two_heads.svndump', stupid=True) 181 repo = self._load_fixture_and_fetch('two_heads.svndump')
205 self.assertEqual(node.hex(repo[0].node()), 182 self.assertEqual(node.hex(repo[0].node()),
206 '434ed487136c1b47c1e8f952edb4dc5a8e6328df') 183 '434ed487136c1b47c1e8f952edb4dc5a8e6328df')
207 self.assertEqual(node.hex(repo['tip'].node()), 184 self.assertEqual(node.hex(repo['tip'].node()),
208 '1083037b18d85cd84fa211c5adbaeff0fea2cd9f') 185 '1083037b18d85cd84fa211c5adbaeff0fea2cd9f')
209 self.assertEqual(node.hex(repo['the_branch'].node()), 186 self.assertEqual(node.hex(repo['the_branch'].node()),
218 self.assertEqual(repo['tip'], repo['default']) 195 self.assertEqual(repo['tip'], repo['default'])
219 self.assertEqual(len(repo.heads()), 2) 196 self.assertEqual(len(repo.heads()), 2)
220 197
221 def test_oldest_not_trunk_and_tag_vendor_branch(self): 198 def test_oldest_not_trunk_and_tag_vendor_branch(self):
222 repo = self._load_fixture_and_fetch( 199 repo = self._load_fixture_and_fetch(
223 'tagged_vendor_and_oldest_not_trunk.svndump', 200 'tagged_vendor_and_oldest_not_trunk.svndump')
224 stupid=True)
225 self.assertEqual(node.hex(repo['oldest'].node()), 201 self.assertEqual(node.hex(repo['oldest'].node()),
226 '926671740dec045077ab20f110c1595f935334fa') 202 '926671740dec045077ab20f110c1595f935334fa')
227 self.assertEqual(repo['tip'].parents()[0].parents()[0], 203 self.assertEqual(repo['tip'].parents()[0].parents()[0],
228 repo['oldest']) 204 repo['oldest'])
229 self.assertEqual(node.hex(repo['tip'].node()), 205 self.assertEqual(node.hex(repo['tip'].node()),
230 '1a6c3f30911d57abb67c257ec0df3e7bc44786f7') 206 '1a6c3f30911d57abb67c257ec0df3e7bc44786f7')
231 207
232 def test_empty_repo(self, stupid=False): 208 def test_empty_repo(self):
233 # This used to crash HgEditor because it could be closed without 209 # This used to crash HgEditor because it could be closed without
234 # having been initialized again. 210 # having been initialized again.
235 self._load_fixture_and_fetch('emptyrepo2.svndump', stupid=stupid) 211 self._load_fixture_and_fetch('emptyrepo2.svndump')
236 212
237 def test_empty_repo_stupid(self): 213 def test_fetch_revert(self):
238 self.test_empty_repo(stupid=True) 214 repo = self._load_fixture_and_fetch('revert.svndump')
239
240 def test_fetch_revert(self, stupid=False):
241 repo = self._load_fixture_and_fetch('revert.svndump', stupid=stupid)
242 graph = self.getgraph(repo) 215 graph = self.getgraph(repo)
243 refgraph = """\ 216 refgraph = """\
244 o changeset: 3:937dcd1206d4 217 o changeset: 3:937dcd1206d4 (r4)
245 | branch: 218 | branch:
246 | tags: tip 219 | tags: tip
247 | summary: revert2 220 | summary: revert2
248 | files: a dir/b 221 | files: a dir/b
249 | 222 |
250 o changeset: 2:9317a748b7c3 223 o changeset: 2:9317a748b7c3 (r3)
251 | branch: 224 | branch:
252 | tags: 225 | tags:
253 | summary: revert 226 | summary: revert
254 | files: a dir/b 227 | files: a dir/b
255 | 228 |
256 o changeset: 1:243259a4138a 229 o changeset: 1:243259a4138a (r2)
257 | branch: 230 | branch:
258 | tags: 231 | tags:
259 | summary: changefiles 232 | summary: changefiles
260 | files: a dir/b 233 | files: a dir/b
261 | 234 |
262 o changeset: 0:ab86791fc857 235 o changeset: 0:ab86791fc857 (r1)
263 branch: 236 branch:
264 tags: 237 tags:
265 summary: init 238 summary: init
266 files: a dir/b 239 files: a dir/b
240
267 """ 241 """
268 self.assertEqual(refgraph.strip(), graph.strip()) 242 self.assertMultiLineEqual(refgraph, graph)
269 243
270 def test_fetch_revert_stupid(self): 244 def test_fetch_movetotrunk(self):
271 self.test_fetch_revert(stupid=True)
272
273 def test_fetch_movetotrunk(self, stupid=False):
274 repo = self._load_fixture_and_fetch('movetotrunk.svndump', 245 repo = self._load_fixture_and_fetch('movetotrunk.svndump',
275 stupid=stupid, subdir='sub1/sub2') 246 subdir='sub1/sub2')
276 graph = self.getgraph(repo) 247 graph = self.getgraph(repo)
277 refgraph = """\ 248 refgraph = """\
278 o changeset: 0:02996a5980ba 249 o changeset: 0:02996a5980ba (r3)
279 branch: 250 branch:
280 tags: tip 251 tags: tip
281 summary: move to trunk 252 summary: move to trunk
282 files: a dir/b 253 files: a dir/b
254
283 """ 255 """
284 self.assertEqual(refgraph.strip(), graph.strip()) 256 self.assertMultiLineEqual(refgraph, graph)
285 257
286 def test_fetch_movetotrunk_stupid(self):
287 self.test_fetch_movetotrunk(stupid=True)
288
289 def suite():
290 all_tests = [unittest.TestLoader().loadTestsFromTestCase(TestBasicRepoLayout),
291 unittest.TestLoader().loadTestsFromTestCase(TestStupidPull),
292 ]
293 return unittest.TestSuite(all_tests)