Mercurial > hgsubversion
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 |