[PATCH 3 of 3] progress: specify updatebar() function by constructor argument
Yuya Nishihara
yuya at tcha.org
Sun Jan 13 01:43:11 EST 2019
# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1547357805 -32400
# Sun Jan 13 14:36:45 2019 +0900
# Node ID ed29a1a69f505fb8b35e8a36c220a50c99baa4cd
# Parent e13ab96098d053c755988b4e94e5c99b203f70e8
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 --git a/mercurial/scmutil.py b/mercurial/scmutil.py
--- a/mercurial/scmutil.py
+++ b/mercurial/scmutil.py
@@ -1415,28 +1415,13 @@ def wlocksub(repo, cmd, *args, **kwargs)
**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 --git a/mercurial/ui.py b/mercurial/ui.py
--- a/mercurial/ui.py
+++ b/mercurial/ui.py
@@ -1698,8 +1698,22 @@ class ui(object):
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"""
More information about the Mercurial-devel
mailing list