author | Pierre-Yves David <pierre-yves.david@fb.com> |
Sun, 07 Jun 2015 17:26:34 -0700 | |
changeset 25498 | 7a5335ed7e1a |
parent 25497 | 93b8b0049932 |
child 25499 | 0fa964d6fd48 |
permissions | -rw-r--r-- |
10434 | 1 |
# progress.py show progress bars for some actions |
2 |
# |
|
3 |
# Copyright (C) 2010 Augie Fackler <durin42@gmail.com> |
|
4 |
# |
|
15772
83a140752239
progress: Use the same GPL boilerplate as most hg files
Augie Fackler <durin42@gmail.com>
parents:
15662
diff
changeset
|
5 |
# This software may be used and distributed according to the terms of the |
83a140752239
progress: Use the same GPL boilerplate as most hg files
Augie Fackler <durin42@gmail.com>
parents:
15662
diff
changeset
|
6 |
# GNU General Public License version 2 or any later version. |
10434 | 7 |
|
8 |
"""show progress bars for some actions |
|
9 |
||
10450 | 10 |
This extension uses the progress information logged by hg commands |
11 |
to draw progress bars that are as informative as possible. Some progress |
|
10434 | 12 |
bars only offer indeterminate information, while others have a definite |
13 |
end point. |
|
14 |
||
15 |
The following settings are available:: |
|
16 |
||
17 |
[progress] |
|
18 |
delay = 3 # number of seconds (float) before showing the progress bar |
|
14838
5d261fd00446
progress: add a changedelay to prevent parallel topics from flapping (issue2698)
Augie Fackler <durin42@gmail.com>
parents:
14837
diff
changeset
|
19 |
changedelay = 1 # changedelay: minimum delay before showing a new topic. |
5d261fd00446
progress: add a changedelay to prevent parallel topics from flapping (issue2698)
Augie Fackler <durin42@gmail.com>
parents:
14837
diff
changeset
|
20 |
# If set to less than 3 * refresh, that value will |
5d261fd00446
progress: add a changedelay to prevent parallel topics from flapping (issue2698)
Augie Fackler <durin42@gmail.com>
parents:
14837
diff
changeset
|
21 |
# be used instead. |
10434 | 22 |
refresh = 0.1 # time in seconds between refreshes of the progress bar |
13148
ab5fcc473fd1
progress: include time estimate as part of the default progress format
Augie Fackler <durin42@gmail.com>
parents:
13147
diff
changeset
|
23 |
format = topic bar number estimate # format of the progress bar |
10434 | 24 |
width = <none> # if set, the maximum width of the progress information |
25 |
# (that is, min(width, term width) will be used) |
|
26 |
clear-complete = True # clear the progress bar after it's done |
|
10656
f6ee02933af9
progress: document progress.disable config option
Augie Fackler <durin42@gmail.com>
parents:
10594
diff
changeset
|
27 |
disable = False # if true, don't show a progress bar |
10788
ca6ba6cac6cd
progress: use stderr instead of stdout; check stderr.isatty()
Augie Fackler <durin42@gmail.com>
parents:
10656
diff
changeset
|
28 |
assume-tty = False # if true, ALWAYS show a progress bar, unless |
ca6ba6cac6cd
progress: use stderr instead of stdout; check stderr.isatty()
Augie Fackler <durin42@gmail.com>
parents:
10656
diff
changeset
|
29 |
# disable is given |
10434 | 30 |
|
13147
082f5be788d9
progress: only show time estimate when progress format contains 'estimate'
Augie Fackler <durin42@gmail.com>
parents:
13146
diff
changeset
|
31 |
Valid entries for the format field are topic, bar, number, unit, |
14280
98e4d3914c2e
progress: add speed format
Martin Geisler <mg@aragost.com>
parents:
14247
diff
changeset
|
32 |
estimate, speed, and item. item defaults to the last 20 characters of |
98e4d3914c2e
progress: add speed format
Martin Geisler <mg@aragost.com>
parents:
14247
diff
changeset
|
33 |
the item, but this can be changed by adding either ``-<num>`` which |
98e4d3914c2e
progress: add speed format
Martin Geisler <mg@aragost.com>
parents:
14247
diff
changeset
|
34 |
would take the last num characters, or ``+<num>`` for the first num |
13147
082f5be788d9
progress: only show time estimate when progress format contains 'estimate'
Augie Fackler <durin42@gmail.com>
parents:
13146
diff
changeset
|
35 |
characters. |
10434 | 36 |
""" |
37 |
||
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25482
diff
changeset
|
38 |
from mercurial import progress |
25498
7a5335ed7e1a
progress: move the singleton logic to the ui module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25497
diff
changeset
|
39 |
from mercurial import ui as uimod |
14837
ec4ba216ddef
progress: make progress bar a singleton to avoid double-progress ui bugs
Augie Fackler <durin42@gmail.com>
parents:
14836
diff
changeset
|
40 |
|
10434 | 41 |
def uisetup(ui): |
11555
d8d0fc3988ca
color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents:
11458
diff
changeset
|
42 |
class progressui(ui.__class__): |
d8d0fc3988ca
color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents:
11458
diff
changeset
|
43 |
_progbar = None |
d8d0fc3988ca
color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents:
11458
diff
changeset
|
44 |
|
15662
06671371e634
progress: check for ui.quiet and ui.debugflag before we write
David Soria Parra <dsp@php.net>
parents:
14838
diff
changeset
|
45 |
def _quiet(self): |
06671371e634
progress: check for ui.quiet and ui.debugflag before we write
David Soria Parra <dsp@php.net>
parents:
14838
diff
changeset
|
46 |
return self.debugflag or self.quiet |
06671371e634
progress: check for ui.quiet and ui.debugflag before we write
David Soria Parra <dsp@php.net>
parents:
14838
diff
changeset
|
47 |
|
11555
d8d0fc3988ca
color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents:
11458
diff
changeset
|
48 |
def progress(self, *args, **opts): |
15662
06671371e634
progress: check for ui.quiet and ui.debugflag before we write
David Soria Parra <dsp@php.net>
parents:
14838
diff
changeset
|
49 |
if not self._quiet(): |
06671371e634
progress: check for ui.quiet and ui.debugflag before we write
David Soria Parra <dsp@php.net>
parents:
14838
diff
changeset
|
50 |
self._progbar.progress(*args, **opts) |
11555
d8d0fc3988ca
color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents:
11458
diff
changeset
|
51 |
return super(progressui, self).progress(*args, **opts) |
d8d0fc3988ca
color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents:
11458
diff
changeset
|
52 |
|
d8d0fc3988ca
color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents:
11458
diff
changeset
|
53 |
def write(self, *args, **opts): |
15662
06671371e634
progress: check for ui.quiet and ui.debugflag before we write
David Soria Parra <dsp@php.net>
parents:
14838
diff
changeset
|
54 |
if not self._quiet() and self._progbar.printed: |
11555
d8d0fc3988ca
color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents:
11458
diff
changeset
|
55 |
self._progbar.clear() |
d8d0fc3988ca
color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents:
11458
diff
changeset
|
56 |
return super(progressui, self).write(*args, **opts) |
d8d0fc3988ca
color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents:
11458
diff
changeset
|
57 |
|
d8d0fc3988ca
color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents:
11458
diff
changeset
|
58 |
def write_err(self, *args, **opts): |
15662
06671371e634
progress: check for ui.quiet and ui.debugflag before we write
David Soria Parra <dsp@php.net>
parents:
14838
diff
changeset
|
59 |
if not self._quiet() and self._progbar.printed: |
11555
d8d0fc3988ca
color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents:
11458
diff
changeset
|
60 |
self._progbar.clear() |
d8d0fc3988ca
color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents:
11458
diff
changeset
|
61 |
return super(progressui, self).write_err(*args, **opts) |
d8d0fc3988ca
color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents:
11458
diff
changeset
|
62 |
|
10540
dd9d057465c1
progress: provide an explicit disable method for developers
Steve Borho <steve@borho.org>
parents:
10523
diff
changeset
|
63 |
# Apps that derive a class from ui.ui() can use |
dd9d057465c1
progress: provide an explicit disable method for developers
Steve Borho <steve@borho.org>
parents:
10523
diff
changeset
|
64 |
# setconfig('progress', 'disable', 'True') to disable this extension |
dd9d057465c1
progress: provide an explicit disable method for developers
Steve Borho <steve@borho.org>
parents:
10523
diff
changeset
|
65 |
if ui.configbool('progress', 'disable'): |
dd9d057465c1
progress: provide an explicit disable method for developers
Steve Borho <steve@borho.org>
parents:
10523
diff
changeset
|
66 |
return |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25482
diff
changeset
|
67 |
if progress.shouldprint(ui) and not ui.debugflag and not ui.quiet: |
25482
95f490136e75
progress: stop double-wrapping of ui class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25186
diff
changeset
|
68 |
dval = object() |
95f490136e75
progress: stop double-wrapping of ui class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25186
diff
changeset
|
69 |
if getattr(ui, '_progbar', dval) is dval: |
95f490136e75
progress: stop double-wrapping of ui class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25186
diff
changeset
|
70 |
ui.__class__ = progressui |
95f490136e75
progress: stop double-wrapping of ui class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25186
diff
changeset
|
71 |
# we instantiate one globally-shared progress bar to avoid |
95f490136e75
progress: stop double-wrapping of ui class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25186
diff
changeset
|
72 |
# competing progress bars when multiple UI objects get created |
95f490136e75
progress: stop double-wrapping of ui class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25186
diff
changeset
|
73 |
if not progressui._progbar: |
25498
7a5335ed7e1a
progress: move the singleton logic to the ui module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25497
diff
changeset
|
74 |
progressui._progbar = uimod.getprogbar(ui) |
10434 | 75 |
|
76 |
def reposetup(ui, repo): |
|
77 |
uisetup(repo.ui) |