Mercurial > hg
changeset 41210:929999d963b8
progress: specify updatebar() function by constructor argument
This makes it easy for ui extensions to intercept progress messages. It also
seems slightly nicer in that scmutil.progress doesn't touch ui internals.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sun, 13 Jan 2019 14:36:45 +0900 |
parents | b223fc1c6b4c |
children | 57bece69d7be |
files | mercurial/scmutil.py mercurial/ui.py |
diffstat | 2 files changed, 17 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/scmutil.py Sun Jan 13 14:21:35 2019 +0900 +++ b/mercurial/scmutil.py Sun Jan 13 14:36:45 2019 +0900 @@ -1415,28 +1415,13 @@ **kwargs) class progress(object): - def __init__(self, ui, topic, unit="", total=None): + def __init__(self, ui, updatebar, topic, unit="", total=None): self.ui = ui self.pos = 0 self.topic = topic self.unit = unit self.total = total self.debug = ui.configbool('progress', 'debug') - if getattr(ui._fmsgerr, 'structured', False): - # channel for machine-readable output with metadata, just send - # raw information - # TODO: consider porting some useful information (e.g. estimated - # time) from progbar. we might want to support update delay to - # reduce the cost of transferring progress messages. - def updatebar(topic, pos, item, unit, total): - ui._fmsgerr.write(None, type=b'progress', topic=topic, - pos=pos, item=item, unit=unit, - total=total) - elif ui._progbar is not None: - updatebar = ui._progbar.progress - else: - def updatebar(topic, pos, item, unit, total): - pass self._updatebar = updatebar def __enter__(self):
--- a/mercurial/ui.py Sun Jan 13 14:21:35 2019 +0900 +++ b/mercurial/ui.py Sun Jan 13 14:36:45 2019 +0900 @@ -1698,8 +1698,22 @@ progress.complete() def makeprogress(self, topic, unit="", total=None): - '''exists only so low-level modules won't need to import scmutil''' - return scmutil.progress(self, topic, unit, total) + """Create a progress helper for the specified topic""" + if getattr(self._fmsgerr, 'structured', False): + # channel for machine-readable output with metadata, just send + # raw information + # TODO: consider porting some useful information (e.g. estimated + # time) from progbar. we might want to support update delay to + # reduce the cost of transferring progress messages. + def updatebar(topic, pos, item, unit, total): + self._fmsgerr.write(None, type=b'progress', topic=topic, + pos=pos, item=item, unit=unit, total=total) + elif self._progbar is not None: + updatebar = self._progbar.progress + else: + def updatebar(topic, pos, item, unit, total): + pass + return scmutil.progress(self, updatebar, topic, unit, total) def getlogger(self, name): """Returns a logger of the given name; or None if not registered"""