Mercurial > hg-stable
changeset 25499:0fa964d6fd48
progress: move all logic altering the ui object logic in mercurial.ui
The ui object can take care of its progress object logic by itself.
test-subrepo-recursion is modified because it is a bit sensitive to the "no
progress bar" default. It will become unnecessary in the next step when
progress will be on by default in core.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Sun, 07 Jun 2015 17:50:56 -0700 |
parents | 7a5335ed7e1a |
children | 00ecc894138d |
files | hgext/progress.py mercurial/ui.py tests/test-subrepo-recursion.t |
diffstat | 3 files changed, 24 insertions(+), 37 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/progress.py Sun Jun 07 17:26:34 2015 -0700 +++ b/hgext/progress.py Sun Jun 07 17:50:56 2015 -0700 @@ -35,43 +35,9 @@ characters. """ -from mercurial import progress -from mercurial import ui as uimod - def uisetup(ui): - class progressui(ui.__class__): - _progbar = None - - def _quiet(self): - return self.debugflag or self.quiet - - def progress(self, *args, **opts): - if not self._quiet(): - self._progbar.progress(*args, **opts) - return super(progressui, self).progress(*args, **opts) - - def write(self, *args, **opts): - if not self._quiet() and self._progbar.printed: - self._progbar.clear() - return super(progressui, self).write(*args, **opts) - - def write_err(self, *args, **opts): - if not self._quiet() and self._progbar.printed: - self._progbar.clear() - return super(progressui, self).write_err(*args, **opts) - - # Apps that derive a class from ui.ui() can use - # setconfig('progress', 'disable', 'True') to disable this extension - if ui.configbool('progress', 'disable'): - return - if progress.shouldprint(ui) and not ui.debugflag and not ui.quiet: - dval = object() - if getattr(ui, '_progbar', dval) is dval: - ui.__class__ = progressui - # we instantiate one globally-shared progress bar to avoid - # competing progress bars when multiple UI objects get created - if not progressui._progbar: - progressui._progbar = uimod.getprogbar(ui) + if ui.config('progress', 'disable', None) is None: + ui.setconfig('progress', 'disable', 'False', 'hgext-progress') def reposetup(ui, repo): uisetup(repo.ui)
--- a/mercurial/ui.py Sun Jun 07 17:26:34 2015 -0700 +++ b/mercurial/ui.py Sun Jun 07 17:50:56 2015 -0700 @@ -584,6 +584,7 @@ "cmdname.type" is recommended. For example, status issues a label of "status.modified" for modified files. ''' + self._progclear() if self._buffers: self._buffers[-1].extend([str(a) for a in args]) else: @@ -591,6 +592,7 @@ self.fout.write(str(a)) def write_err(self, *args, **opts): + self._progclear() try: if self._bufferstates and self._bufferstates[-1][0]: return self.write(*args, **opts) @@ -886,6 +888,22 @@ os.environ.get("VISUAL") or os.environ.get("EDITOR", editor)) + @util.propertycache + def _progbar(self): + """setup the progbar singleton to the ui object""" + if (self.quiet or self.debugflag + or self.configbool('progress', 'disable', True) + or not progress.shouldprint(self)): + return None + return getprogbar(self) + + def _progclear(self): + """clear progress bar output if any. use it before any output""" + if '_progbar' not in vars(self): # nothing loadef yet + return + if self._progbar is not None and self._progbar.printed: + self._progbar.clear() + def progress(self, topic, pos, item="", unit="", total=None): '''show a progress message @@ -902,7 +920,9 @@ All topics should be marked closed by setting pos to None at termination. ''' - + if self._progbar is not None: + self._progbar.progress(topic, pos, item=item, unit=unit, + total=total) if pos is None or not self.configbool('progress', 'debug'): return
--- a/tests/test-subrepo-recursion.t Sun Jun 07 17:26:34 2015 -0700 +++ b/tests/test-subrepo-recursion.t Sun Jun 07 17:50:56 2015 -0700 @@ -258,6 +258,7 @@ > [extensions] > progress = > [progress] + > disable=False > assume-tty = 1 > delay = 0 > # set changedelay really large so we don't see nested topics