Mercurial > hg
annotate mercurial/progress.py @ 49803:55d45d0de4e7
typing: add type hints to pycompat.bytestr
The problem with leaving pytype to its own devices here was that for functions
that returned a bytestr, pytype inferred `Union[bytes, int]`. It now accepts
that it can be treated as plain bytes.
I wasn't able to figure out the arg type for `__getitem__`- `SupportsIndex`
(which PyCharm indicated is how the superclass function is typed) got flagged:
File "/mnt/c/Users/Matt/hg/mercurial/pycompat.py", line 236, in __getitem__:
unsupported operand type(s) for item retrieval: bytestr and SupportsIndex [unsupported-operands]
Function __getitem__ on bytestr expects int
But some caller got flagged when I marked it as `int`.
There's some minor spillover problems elsewhere- pytype doesn't seem to
recognize that `bytes.startswith()` can optionally take a 3rd and 4th arg, so
those few places have the warning disabled. It also flags where the tar API is
being abused, but that would be a tricky refactor (and would require typing
extensions until py3.7 is dropped), so disable those too.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Wed, 14 Dec 2022 01:51:33 -0500 |
parents | ee4537e365c8 |
children | f4733654f144 |
rev | line source |
---|---|
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
1 # progress.py progress bars related code |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
2 # |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
3 # Copyright (C) 2010 Augie Fackler <durin42@gmail.com> |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
4 # |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
7 |
25968
1139d7cf9405
progress: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25847
diff
changeset
|
8 |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
9 import threading |
25968
1139d7cf9405
progress: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25847
diff
changeset
|
10 import time |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
11 |
25968
1139d7cf9405
progress: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25847
diff
changeset
|
12 from .i18n import _ |
1139d7cf9405
progress: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25847
diff
changeset
|
13 from . import encoding |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
14 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41143
diff
changeset
|
15 |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
16 def spacejoin(*args): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
17 return b' '.join(s for s in args if s) |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
18 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41143
diff
changeset
|
19 |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
20 def shouldprint(ui): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
21 return not (ui.quiet or ui.plain(b'progress')) and ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
22 ui._isatty(ui.ferr) or ui.configbool(b'progress', b'assume-tty') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41143
diff
changeset
|
23 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41143
diff
changeset
|
24 |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
25 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
26 def fmtremaining(seconds): |
26781
1aee2ab0f902
spelling: trivial spell checking
Mads Kiilerich <madski@unity3d.com>
parents:
26407
diff
changeset
|
27 """format a number of remaining seconds in human readable way |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
28 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
29 This will properly display seconds, minutes, hours, days if needed""" |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
30 if seconds < 60: |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
31 # i18n: format XX seconds as "XXs" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
32 return _(b"%02ds") % seconds |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
33 minutes = seconds // 60 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
34 if minutes < 60: |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
35 seconds -= minutes * 60 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
36 # i18n: format X minutes and YY seconds as "XmYYs" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
37 return _(b"%dm%02ds") % (minutes, seconds) |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
38 # we're going to ignore seconds in this case |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
39 minutes += 1 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
40 hours = minutes // 60 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
41 minutes -= hours * 60 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
42 if hours < 30: |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
43 # i18n: format X hours and YY minutes as "XhYYm" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
44 return _(b"%dh%02dm") % (hours, minutes) |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
45 # we're going to ignore minutes in this case |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
46 hours += 1 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
47 days = hours // 24 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
48 hours -= days * 24 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
49 if days < 15: |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
50 # i18n: format X days and YY hours as "XdYYh" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
51 return _(b"%dd%02dh") % (days, hours) |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
52 # we're going to ignore hours in this case |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
53 days += 1 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
54 weeks = days // 7 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
55 days -= weeks * 7 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
56 if weeks < 55: |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
57 # i18n: format X weeks and YY days as "XwYYd" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
58 return _(b"%dw%02dd") % (weeks, days) |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
59 # we're going to ignore days and treat a year as 52 weeks |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
60 weeks += 1 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
61 years = weeks // 52 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
62 weeks -= years * 52 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
63 # i18n: format X years and YY weeks as "XyYYw" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
64 return _(b"%dy%02dw") % (years, weeks) |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
65 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41143
diff
changeset
|
66 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
67 class progbar: |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
68 def __init__(self, ui): |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
69 self.ui = ui |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
70 self._refreshlock = threading.Lock() |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
71 self.resetstate() |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
72 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
73 def resetstate(self): |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
74 self.topics = [] |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
75 self.topicstates = {} |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
76 self.starttimes = {} |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
77 self.startvals = {} |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
78 self.printed = False |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41143
diff
changeset
|
79 self.lastprint = time.time() + float( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
80 self.ui.config(b'progress', b'delay') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41143
diff
changeset
|
81 ) |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
82 self.curtopic = None |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
83 self.lasttopic = None |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
84 self.indetcount = 0 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
85 self.refresh = float(self.ui.config(b'progress', b'refresh')) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41143
diff
changeset
|
86 self.changedelay = max( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
87 3 * self.refresh, float(self.ui.config(b'progress', b'changedelay')) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41143
diff
changeset
|
88 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
89 self.order = self.ui.configlist(b'progress', b'format') |
34314
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34313
diff
changeset
|
90 self.estimateinterval = self.ui.configwith( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
91 float, b'progress', b'estimateinterval' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41143
diff
changeset
|
92 ) |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
93 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
94 def show(self, now, topic, pos, item, unit, total): |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
95 if not shouldprint(self.ui): |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
96 return |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
97 termwidth = self.width() |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
98 self.printed = True |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
99 head = b'' |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
100 needprogress = False |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
101 tail = b'' |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
102 for indicator in self.order: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
103 add = b'' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
104 if indicator == b'topic': |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
105 add = topic |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
106 elif indicator == b'number': |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
107 if total: |
36202
707aba4d48b5
progress: use '%*d' to pad progress value
Yuya Nishihara <yuya@tcha.org>
parents:
36152
diff
changeset
|
108 add = b'%*d/%d' % (len(str(total)), pos, total) |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
109 else: |
36423
2831d918e1b4
py3: convert known-int values to bytes using %d
Augie Fackler <augie@google.com>
parents:
36202
diff
changeset
|
110 add = b'%d' % pos |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
111 elif indicator.startswith(b'item') and item: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
112 slice = b'end' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
113 if b'-' in indicator: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
114 wid = int(indicator.split(b'-')[1]) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
115 elif b'+' in indicator: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
116 slice = b'beginning' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
117 wid = int(indicator.split(b'+')[1]) |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
118 else: |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
119 wid = 20 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
120 if slice == b'end': |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
121 add = encoding.trim(item, wid, leftside=True) |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
122 else: |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
123 add = encoding.trim(item, wid) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
124 add += (wid - encoding.colwidth(add)) * b' ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
125 elif indicator == b'bar': |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
126 add = b'' |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
127 needprogress = True |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
128 elif indicator == b'unit' and unit: |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
129 add = unit |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
130 elif indicator == b'estimate': |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
131 add = self.estimate(topic, pos, total, now) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
132 elif indicator == b'speed': |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
133 add = self.speed(topic, pos, unit, now) |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
134 if not needprogress: |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
135 head = spacejoin(head, add) |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
136 else: |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
137 tail = spacejoin(tail, add) |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
138 if needprogress: |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
139 used = 0 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
140 if head: |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
141 used += encoding.colwidth(head) + 1 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
142 if tail: |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
143 used += encoding.colwidth(tail) + 1 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
144 progwidth = termwidth - used - 3 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
145 if total and pos <= total: |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
146 amt = pos * progwidth // total |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
147 bar = b'=' * (amt - 1) |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
148 if amt > 0: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
149 bar += b'>' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
150 bar += b' ' * (progwidth - amt) |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
151 else: |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
152 progwidth -= 3 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
153 self.indetcount += 1 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
154 # mod the count by twice the width so we can make the |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
155 # cursor bounce between the right and left sides |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
156 amt = self.indetcount % (2 * progwidth) |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
157 amt -= progwidth |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41143
diff
changeset
|
158 bar = ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
159 b' ' * int(progwidth - abs(amt)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
160 + b'<=>' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
161 + b' ' * int(abs(amt)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41143
diff
changeset
|
162 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
163 prog = b''.join((b'[', bar, b']')) |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
164 out = spacejoin(head, prog, tail) |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
165 else: |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
166 out = spacejoin(head, tail) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
167 self._writeerr(b'\r' + encoding.trim(out, termwidth)) |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
168 self.lasttopic = topic |
32048
c3ef33fd0058
progress: extract stubs to restart ferr.flush() and .write() on EINTR
Yuya Nishihara <yuya@tcha.org>
parents:
30324
diff
changeset
|
169 self._flusherr() |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
170 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
171 def clear(self): |
29089
222b8170d69e
progress: stop excessive clearing (issue4801)
Matt Mackall <mpm@selenic.com>
parents:
28171
diff
changeset
|
172 if not self.printed or not self.lastprint or not shouldprint(self.ui): |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
173 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
174 self._writeerr(b'\r%s\r' % (b' ' * self.width())) |
44033
4e0a6d157910
progress: flush stderr after clearing
Kyle Lippincott <spectral@google.com>
parents:
43077
diff
changeset
|
175 self._flusherr() |
26407
72bccc1f26b1
progress: force a repaint of a printed progress bar after a clear()
Augie Fackler <augie@google.com>
parents:
25968
diff
changeset
|
176 if self.printed: |
72bccc1f26b1
progress: force a repaint of a printed progress bar after a clear()
Augie Fackler <augie@google.com>
parents:
25968
diff
changeset
|
177 # force immediate re-paint of progress bar |
72bccc1f26b1
progress: force a repaint of a printed progress bar after a clear()
Augie Fackler <augie@google.com>
parents:
25968
diff
changeset
|
178 self.lastprint = 0 |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
179 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
180 def complete(self): |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
181 if not shouldprint(self.ui): |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
182 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
183 if self.ui.configbool(b'progress', b'clear-complete'): |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
184 self.clear() |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
185 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
186 self._writeerr(b'\n') |
32048
c3ef33fd0058
progress: extract stubs to restart ferr.flush() and .write() on EINTR
Yuya Nishihara <yuya@tcha.org>
parents:
30324
diff
changeset
|
187 self._flusherr() |
c3ef33fd0058
progress: extract stubs to restart ferr.flush() and .write() on EINTR
Yuya Nishihara <yuya@tcha.org>
parents:
30324
diff
changeset
|
188 |
c3ef33fd0058
progress: extract stubs to restart ferr.flush() and .write() on EINTR
Yuya Nishihara <yuya@tcha.org>
parents:
30324
diff
changeset
|
189 def _flusherr(self): |
49302
ee4537e365c8
py3: remove retry on EINTR errno
Manuel Jacob <me@manueljacob.de>
parents:
48946
diff
changeset
|
190 self.ui.ferr.flush() |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
191 |
32048
c3ef33fd0058
progress: extract stubs to restart ferr.flush() and .write() on EINTR
Yuya Nishihara <yuya@tcha.org>
parents:
30324
diff
changeset
|
192 def _writeerr(self, msg): |
49302
ee4537e365c8
py3: remove retry on EINTR errno
Manuel Jacob <me@manueljacob.de>
parents:
48946
diff
changeset
|
193 self.ui.ferr.write(msg) |
32048
c3ef33fd0058
progress: extract stubs to restart ferr.flush() and .write() on EINTR
Yuya Nishihara <yuya@tcha.org>
parents:
30324
diff
changeset
|
194 |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
195 def width(self): |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
196 tw = self.ui.termwidth() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
197 return min(int(self.ui.config(b'progress', b'width', default=tw)), tw) |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
198 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
199 def estimate(self, topic, pos, total, now): |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
200 if total is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
201 return b'' |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
202 initialpos = self.startvals[topic] |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
203 target = total - initialpos |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
204 delta = pos - initialpos |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
205 if delta > 0: |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
206 elapsed = now - self.starttimes[topic] |
34313
f428c347d32b
progress: remove progress.estimate config
Jun Wu <quark@fb.com>
parents:
33499
diff
changeset
|
207 seconds = (elapsed * (target - delta)) // delta + 1 |
f428c347d32b
progress: remove progress.estimate config
Jun Wu <quark@fb.com>
parents:
33499
diff
changeset
|
208 return fmtremaining(seconds) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
209 return b'' |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
210 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
211 def speed(self, topic, pos, unit, now): |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
212 initialpos = self.startvals[topic] |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
213 delta = pos - initialpos |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
214 elapsed = now - self.starttimes[topic] |
34313
f428c347d32b
progress: remove progress.estimate config
Jun Wu <quark@fb.com>
parents:
33499
diff
changeset
|
215 if elapsed > 0: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
216 return _(b'%d %s/sec') % (delta / elapsed, unit) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
217 return b'' |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
218 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
219 def _oktoprint(self, now): |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
220 '''Check if conditions are met to print - e.g. changedelay elapsed''' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41143
diff
changeset
|
221 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41143
diff
changeset
|
222 self.lasttopic is None # first time we printed |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
223 # not a topic change |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
224 or self.curtopic == self.lasttopic |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
225 # it's been long enough we should print anyway |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41143
diff
changeset
|
226 or now - self.lastprint >= self.changedelay |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41143
diff
changeset
|
227 ): |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
228 return True |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
229 else: |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
230 return False |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
231 |
34314
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34313
diff
changeset
|
232 def _calibrateestimate(self, topic, now, pos): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44033
diff
changeset
|
233 """Adjust starttimes and startvals for topic so ETA works better |
34314
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34313
diff
changeset
|
234 |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34313
diff
changeset
|
235 If progress is non-linear (ex. get much slower in the last minute), |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34313
diff
changeset
|
236 it's more friendly to only use a recent time span for ETA and speed |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34313
diff
changeset
|
237 calculation. |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34313
diff
changeset
|
238 |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34313
diff
changeset
|
239 [======================================> ] |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34313
diff
changeset
|
240 ^^^^^^^ |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34313
diff
changeset
|
241 estimateinterval, only use this for estimation |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44033
diff
changeset
|
242 """ |
34314
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34313
diff
changeset
|
243 interval = self.estimateinterval |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34313
diff
changeset
|
244 if interval <= 0: |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34313
diff
changeset
|
245 return |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34313
diff
changeset
|
246 elapsed = now - self.starttimes[topic] |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34313
diff
changeset
|
247 if elapsed > interval: |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34313
diff
changeset
|
248 delta = pos - self.startvals[topic] |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34313
diff
changeset
|
249 newdelta = delta * interval / elapsed |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34313
diff
changeset
|
250 # If a stall happens temporarily, ETA could change dramatically |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34313
diff
changeset
|
251 # frequently. This is to avoid such dramatical change and make ETA |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34313
diff
changeset
|
252 # smoother. |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34313
diff
changeset
|
253 if newdelta < 0.1: |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34313
diff
changeset
|
254 return |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34313
diff
changeset
|
255 self.startvals[topic] = pos - newdelta |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34313
diff
changeset
|
256 self.starttimes[topic] = now - interval |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34313
diff
changeset
|
257 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
258 def progress(self, topic, pos, item=b'', unit=b'', total=None): |
38418
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
259 if pos is None: |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
260 self.closetopic(topic) |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
261 return |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
262 now = time.time() |
38417
6bd9f18d31a8
progress: use context manager for lock
Martin von Zweigbergk <martinvonz@google.com>
parents:
36423
diff
changeset
|
263 with self._refreshlock: |
38418
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
264 if topic not in self.topics: |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
265 self.starttimes[topic] = now |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
266 self.startvals[topic] = pos |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
267 self.topics.append(topic) |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
268 self.topicstates[topic] = pos, item, unit, total |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
269 self.curtopic = topic |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
270 self._calibrateestimate(topic, now, pos) |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
271 if now - self.lastprint >= self.refresh and self.topics: |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
272 if self._oktoprint(now): |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
273 self.lastprint = now |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
274 self.show(now, topic, *self.topicstates[topic]) |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
275 |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
276 def closetopic(self, topic): |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
277 with self._refreshlock: |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
278 self.starttimes.pop(topic, None) |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
279 self.startvals.pop(topic, None) |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
280 self.topicstates.pop(topic, None) |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
281 # reset the progress bar if this is the outermost topic |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
282 if self.topics and self.topics[0] == topic and self.printed: |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
283 self.complete() |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
284 self.resetstate() |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
285 # truncate the list of topics assuming all topics within |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
286 # this one are also closed |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
287 if topic in self.topics: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41143
diff
changeset
|
288 self.topics = self.topics[: self.topics.index(topic)] |
38418
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
289 # reset the last topic to the one we just unwound to, |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
290 # so that higher-level topics will be stickier than |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
291 # lower-level topics |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
292 if self.topics: |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
293 self.lasttopic = self.topics[-1] |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
294 else: |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38417
diff
changeset
|
295 self.lasttopic = None |