fix: add progress bar for number of file revisions processed
This ensures responsiveness when the configured tools are slow or numerous.
Differential Revision: https://phab.mercurial-scm.org/D3848
--- a/hgext/fix.py Tue Jun 26 15:30:49 2018 -0700
+++ b/hgext/fix.py Tue Jun 26 16:29:55 2018 -0700
@@ -162,22 +162,25 @@
filedata = collections.defaultdict(dict)
replacements = {}
commitorder = sorted(revstofix, reverse=True)
- for rev, path, newdata in results:
- if newdata is not None:
- filedata[rev][path] = newdata
- numitems[rev] -= 1
- # Apply the fixes for this and any other revisions that are ready
- # and sitting at the front of the queue. Using a loop here prevents
- # the queue from being blocked by the first revision to be ready out
- # of order.
- while commitorder and not numitems[commitorder[-1]]:
- rev = commitorder.pop()
- ctx = repo[rev]
- if rev == wdirrev:
- writeworkingdir(repo, ctx, filedata[rev], replacements)
- else:
- replacerev(ui, repo, ctx, filedata[rev], replacements)
- del filedata[rev]
+ with ui.makeprogress(topic=_('fixing'), unit=_('files'),
+ total=sum(numitems.values())) as progress:
+ for rev, path, newdata in results:
+ progress.increment(item=path)
+ if newdata is not None:
+ filedata[rev][path] = newdata
+ numitems[rev] -= 1
+ # Apply the fixes for this and any other revisions that are
+ # ready and sitting at the front of the queue. Using a loop here
+ # prevents the queue from being blocked by the first revision to
+ # be ready out of order.
+ while commitorder and not numitems[commitorder[-1]]:
+ rev = commitorder.pop()
+ ctx = repo[rev]
+ if rev == wdirrev:
+ writeworkingdir(repo, ctx, filedata[rev], replacements)
+ else:
+ replacerev(ui, repo, ctx, filedata[rev], replacements)
+ del filedata[rev]
replacements = {prec: [succ] for prec, succ in replacements.iteritems()}
scmutil.cleanupnodes(repo, replacements, 'fix', fixphase=True)