comparison hgsubversion/wrappers.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 7913a82a8cdd
children d50858a8a17b
comparison
equal deleted inserted replaced
786:607f43a0f09c 787:4bbc6bf947f5
292 else: 292 else:
293 total = svn.HEAD - start 293 total = svn.HEAD - start
294 try: 294 try:
295 try: 295 try:
296 # start converting revisions 296 # start converting revisions
297 firstrun = True
297 for r in svn.revisions(start=start, stop=stopat_rev): 298 for r in svn.revisions(start=start, stop=stopat_rev):
298 if (r.author is None and 299 if (r.author is None and
299 r.message == 'This is an empty revision for padding.'): 300 r.message == 'This is an empty revision for padding.'):
300 continue 301 continue
301 tbdelta = meta.update_branch_tag_map_for_rev(r) 302 tbdelta = meta.update_branch_tag_map_for_rev(r)
318 bits = (r.revnum, r.author, msg) 319 bits = (r.revnum, r.author, msg)
319 ui.status(('[r%d] %s: %s' % bits)[:w] + '\n') 320 ui.status(('[r%d] %s: %s' % bits)[:w] + '\n')
320 util.progress(ui, 'pull', r.revnum - start, total=total) 321 util.progress(ui, 'pull', r.revnum - start, total=total)
321 322
322 meta.save_tbdelta(tbdelta) 323 meta.save_tbdelta(tbdelta)
323 close = pullfuns[have_replay](ui, meta, svn, r, tbdelta) 324 close = pullfuns[have_replay](ui, meta, svn, r, tbdelta,
325 firstrun)
324 meta.committags(r, close) 326 meta.committags(r, close)
325 for branch, parent in close.iteritems(): 327 for branch, parent in close.iteritems():
326 if parent in (None, node.nullid): 328 if parent in (None, node.nullid):
327 continue 329 continue
328 meta.delbranch(branch, parent, r) 330 meta.delbranch(branch, parent, r)
329 331
330 meta.save() 332 meta.save()
331 converted = True 333 converted = True
334 firstrun = False
332 335
333 except svnwrap.SubversionRepoCanNotReplay, e: #pragma: no cover 336 except svnwrap.SubversionRepoCanNotReplay, e: #pragma: no cover
334 ui.status('%s\n' % e.message) 337 ui.status('%s\n' % e.message)
335 stupidmod.print_your_svn_is_old_message(ui) 338 stupidmod.print_your_svn_is_old_message(ui)
336 have_replay = False 339 have_replay = False