# HG changeset patch # User Yuya Nishihara # Date 1547357805 -32400 # Node ID 929999d963b82562d93f50c934ef7c59a940bd9b # Parent b223fc1c6b4cb061063fcbd1331c80021e5d4d5b 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. diff -r b223fc1c6b4c -r 929999d963b8 mercurial/scmutil.py --- 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): diff -r b223fc1c6b4c -r 929999d963b8 mercurial/ui.py --- 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"""