progress.py
77 lines
| 3.0 KiB
| text/x-python
|
PythonLexer
/ hgext / progress.py
|
r10434 | # progress.py show progress bars for some actions | ||
# | ||||
# Copyright (C) 2010 Augie Fackler <durin42@gmail.com> | ||||
# | ||||
|
r15772 | # This software may be used and distributed according to the terms of the | ||
# GNU General Public License version 2 or any later version. | ||||
|
r10434 | |||
"""show progress bars for some actions | ||||
|
r10450 | This extension uses the progress information logged by hg commands | ||
to draw progress bars that are as informative as possible. Some progress | ||||
|
r10434 | bars only offer indeterminate information, while others have a definite | ||
end point. | ||||
The following settings are available:: | ||||
[progress] | ||||
delay = 3 # number of seconds (float) before showing the progress bar | ||||
|
r14838 | changedelay = 1 # changedelay: minimum delay before showing a new topic. | ||
# If set to less than 3 * refresh, that value will | ||||
# be used instead. | ||||
|
r10434 | refresh = 0.1 # time in seconds between refreshes of the progress bar | ||
|
r13148 | format = topic bar number estimate # format of the progress bar | ||
|
r10434 | width = <none> # if set, the maximum width of the progress information | ||
# (that is, min(width, term width) will be used) | ||||
clear-complete = True # clear the progress bar after it's done | ||||
|
r10656 | disable = False # if true, don't show a progress bar | ||
|
r10788 | assume-tty = False # if true, ALWAYS show a progress bar, unless | ||
# disable is given | ||||
|
r10434 | |||
|
r13147 | Valid entries for the format field are topic, bar, number, unit, | ||
|
r14280 | estimate, speed, and item. item defaults to the last 20 characters of | ||
the item, but this can be changed by adding either ``-<num>`` which | ||||
would take the last num characters, or ``+<num>`` for the first num | ||||
|
r13147 | characters. | ||
|
r10434 | """ | ||
|
r25497 | from mercurial import progress | ||
|
r25498 | from mercurial import ui as uimod | ||
|
r14837 | |||
|
r10434 | def uisetup(ui): | ||
|
r11555 | class progressui(ui.__class__): | ||
_progbar = None | ||||
|
r15662 | def _quiet(self): | ||
return self.debugflag or self.quiet | ||||
|
r11555 | def progress(self, *args, **opts): | ||
|
r15662 | if not self._quiet(): | ||
self._progbar.progress(*args, **opts) | ||||
|
r11555 | return super(progressui, self).progress(*args, **opts) | ||
def write(self, *args, **opts): | ||||
|
r15662 | if not self._quiet() and self._progbar.printed: | ||
|
r11555 | self._progbar.clear() | ||
return super(progressui, self).write(*args, **opts) | ||||
def write_err(self, *args, **opts): | ||||
|
r15662 | if not self._quiet() and self._progbar.printed: | ||
|
r11555 | self._progbar.clear() | ||
return super(progressui, self).write_err(*args, **opts) | ||||
|
r10540 | # Apps that derive a class from ui.ui() can use | ||
# setconfig('progress', 'disable', 'True') to disable this extension | ||||
if ui.configbool('progress', 'disable'): | ||||
return | ||||
|
r25497 | if progress.shouldprint(ui) and not ui.debugflag and not ui.quiet: | ||
|
r25482 | 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: | ||||
|
r25498 | progressui._progbar = uimod.getprogbar(ui) | ||
|
r10434 | |||
def reposetup(ui, repo): | ||||
uisetup(repo.ui) | ||||