Mercurial > hgsubversion
comparison tests/test_utility_commands.py @ 899:7f90bb48c9de
svn verify: use a custom editor and get_revision()
Previously, we would fetch each file in the revision/changeset
individually. With this change, we fetch the entire revision in one
request, and use a custom editor to verify its contents. This is quite
a lot faster than the previous means when verifying over the internet.
By an order of magnitude or two, in fact. As data is transfered in a
single operation, verifying a revision from PyPy took 30 seconds
rather than 30 minutes, and saturated my 10Mbps connection.
Please note that the output ordering isn't stable between the two;
output will appear in reverse order when using the fast verifier.
author | Dan Villiom Podlaski Christiansen <danchr@gmail.com> |
---|---|
date | Wed, 14 Dec 2011 00:07:58 +0100 |
parents | 6bc8046e3d0a |
children | 761a87134501 |
comparison
equal
deleted
inserted
replaced
898:6524260be543 | 899:7f90bb48c9de |
---|---|
244 svncommands.listauthors(self.ui(), | 244 svncommands.listauthors(self.ui(), |
245 args=[test_util.fileurl(repo_path)], | 245 args=[test_util.fileurl(repo_path)], |
246 authors=author_path) | 246 authors=author_path) |
247 self.assertMultiLineEqual(open(author_path).read(), 'Augie=\nevil=\n') | 247 self.assertMultiLineEqual(open(author_path).read(), 'Augie=\nevil=\n') |
248 | 248 |
249 def test_svnverify(self): | 249 def test_svnverify(self, stupid=False): |
250 repo, repo_path = self.load_and_fetch('binaryfiles.svndump', | 250 repo, repo_path = self.load_and_fetch('binaryfiles.svndump', |
251 noupdate=False) | 251 noupdate=False, stupid=stupid) |
252 ret = verify.verify(self.ui(), repo, [], rev=1) | 252 ret = verify.verify(self.ui(), repo, [], rev=1, stupid=stupid) |
253 self.assertEqual(0, ret) | 253 self.assertEqual(0, ret) |
254 repo_path = self.load_svndump('binaryfiles-broken.svndump') | 254 repo_path = self.load_svndump('binaryfiles-broken.svndump') |
255 u = self.ui() | 255 u = self.ui() |
256 u.pushbuffer() | 256 u.pushbuffer() |
257 ret = verify.verify(u, repo, [test_util.fileurl(repo_path)], rev=1) | 257 ret = verify.verify(u, repo, [test_util.fileurl(repo_path)], |
258 rev=1, stupid=stupid) | |
258 output = u.popbuffer() | 259 output = u.popbuffer() |
259 self.assertEqual(1, ret) | 260 self.assertEqual(1, ret) |
260 output = re.sub(r'file://\S+', 'file://', output) | 261 output = re.sub(r'file://\S+', 'file://', output) |
261 self.assertMultiLineEqual("""\ | 262 self.assertMultiLineEqual("""\ |
262 verifying d51f46a715a1 against file:// | 263 verifying d51f46a715a1 against file:// |
263 difference in: binary2 | 264 difference in: binary2 |
264 unexpected file: binary1 | 265 unexpected file: binary1 |
265 missing file: binary3 | 266 missing file: binary3 |
266 """, output) | 267 """, output) |
267 | 268 |
268 def test_svnverify_corruption(self): | 269 def test_svnverify_stupid(self): |
270 self.test_svnverify(True) | |
271 | |
272 def test_corruption(self, stupid=False): | |
269 SUCCESS = 0 | 273 SUCCESS = 0 |
270 FAILURE = 1 | 274 FAILURE = 1 |
271 | 275 |
272 repo, repo_path = self.load_and_fetch('correct.svndump', layout='single', | 276 repo, repo_path = self.load_and_fetch('correct.svndump', layout='single', |
273 subdir='') | 277 subdir='', stupid=stupid) |
274 | 278 |
275 ui = self.ui() | 279 ui = self.ui() |
276 | 280 |
277 self.assertEqual(SUCCESS, verify.verify(ui, self.repo, rev='tip')) | 281 self.assertEqual(SUCCESS, verify.verify(ui, self.repo, rev='tip', |
282 stupid=stupid)) | |
278 | 283 |
279 corrupt_source = test_util.fileurl(self.load_svndump('corrupt.svndump')) | 284 corrupt_source = test_util.fileurl(self.load_svndump('corrupt.svndump')) |
280 | 285 |
281 repo.ui.setconfig('paths', 'default', corrupt_source) | 286 repo.ui.setconfig('paths', 'default', corrupt_source) |
282 | 287 |
298 'unexpected file: empty-file', | 303 'unexpected file: empty-file', |
299 ]) | 304 ]) |
300 | 305 |
301 self.assertEqual((FAILURE, expected), (code, actual)) | 306 self.assertEqual((FAILURE, expected), (code, actual)) |
302 | 307 |
308 def test_corruption_stupid(self): | |
309 self.test_corruption(True) | |
310 | |
303 def suite(): | 311 def suite(): |
304 all_tests = [unittest.TestLoader().loadTestsFromTestCase(UtilityTests), | 312 all_tests = [unittest.TestLoader().loadTestsFromTestCase(UtilityTests), |
305 ] | 313 ] |
306 return unittest.TestSuite(all_tests) | 314 return unittest.TestSuite(all_tests) |