Mercurial > public > mercurial-scm > hg-stable
annotate mercurial/progress.py @ 49037:642e31cb55f0
py3: use class X: instead of class X(object):
The inheritance from object is implied in Python 3. So this should
be equivalent.
This change was generated via an automated search and replace. So there
may have been some accidental changes.
Differential Revision: https://phab.mercurial-scm.org/D12352
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Mon, 21 Feb 2022 13:08:28 -0700 |
parents | 6000f5b25c9b |
children | ee4537e365c8 |
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 |
32049
ed42e00a5c4e
progress: retry ferr.flush() and .write() on EINTR (issue5532)
Yuya Nishihara <yuya@tcha.org>
parents:
32048
diff
changeset
|
9 import errno |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
10 import threading |
25968
1139d7cf9405
progress: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25847
diff
changeset
|
11 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
|
12 |
25968
1139d7cf9405
progress: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25847
diff
changeset
|
13 from .i18n import _ |
1139d7cf9405
progress: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25847
diff
changeset
|
14 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
|
15 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41144
diff
changeset
|
16 |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
17 def spacejoin(*args): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
18 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
|
19 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41144
diff
changeset
|
20 |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
21 def shouldprint(ui): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
22 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
|
23 ui._isatty(ui.ferr) or ui.configbool(b'progress', b'assume-tty') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41144
diff
changeset
|
24 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41144
diff
changeset
|
25 |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
26 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
27 def fmtremaining(seconds): |
26781
1aee2ab0f902
spelling: trivial spell checking
Mads Kiilerich <madski@unity3d.com>
parents:
26407
diff
changeset
|
28 """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
|
29 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
30 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
|
31 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
|
32 # 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
|
33 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
|
34 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
|
35 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
|
36 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
|
37 # 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
|
38 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
|
39 # 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
|
40 minutes += 1 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
41 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
|
42 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
|
43 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
|
44 # 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
|
45 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
|
46 # 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
|
47 hours += 1 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
48 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
|
49 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
|
50 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
|
51 # 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
|
52 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
|
53 # 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
|
54 days += 1 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
55 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
|
56 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
|
57 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
|
58 # 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
|
59 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
|
60 # 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
|
61 weeks += 1 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
62 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
|
63 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
|
64 # 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
|
65 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
|
66 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41144
diff
changeset
|
67 |
32049
ed42e00a5c4e
progress: retry ferr.flush() and .write() on EINTR (issue5532)
Yuya Nishihara <yuya@tcha.org>
parents:
32048
diff
changeset
|
68 # file_write() and file_flush() of Python 2 do not restart on EINTR if |
ed42e00a5c4e
progress: retry ferr.flush() and .write() on EINTR (issue5532)
Yuya Nishihara <yuya@tcha.org>
parents:
32048
diff
changeset
|
69 # the file is attached to a "slow" device (e.g. a terminal) and raise |
ed42e00a5c4e
progress: retry ferr.flush() and .write() on EINTR (issue5532)
Yuya Nishihara <yuya@tcha.org>
parents:
32048
diff
changeset
|
70 # IOError. We cannot know how many bytes would be written by file_write(), |
ed42e00a5c4e
progress: retry ferr.flush() and .write() on EINTR (issue5532)
Yuya Nishihara <yuya@tcha.org>
parents:
32048
diff
changeset
|
71 # but a progress text is known to be short enough to be written by a |
ed42e00a5c4e
progress: retry ferr.flush() and .write() on EINTR (issue5532)
Yuya Nishihara <yuya@tcha.org>
parents:
32048
diff
changeset
|
72 # single write() syscall, so we can just retry file_write() with the whole |
ed42e00a5c4e
progress: retry ferr.flush() and .write() on EINTR (issue5532)
Yuya Nishihara <yuya@tcha.org>
parents:
32048
diff
changeset
|
73 # text. (issue5532) |
ed42e00a5c4e
progress: retry ferr.flush() and .write() on EINTR (issue5532)
Yuya Nishihara <yuya@tcha.org>
parents:
32048
diff
changeset
|
74 # |
ed42e00a5c4e
progress: retry ferr.flush() and .write() on EINTR (issue5532)
Yuya Nishihara <yuya@tcha.org>
parents:
32048
diff
changeset
|
75 # This should be a short-term workaround. We'll need to fix every occurrence |
ed42e00a5c4e
progress: retry ferr.flush() and .write() on EINTR (issue5532)
Yuya Nishihara <yuya@tcha.org>
parents:
32048
diff
changeset
|
76 # of write() to a terminal or pipe. |
ed42e00a5c4e
progress: retry ferr.flush() and .write() on EINTR (issue5532)
Yuya Nishihara <yuya@tcha.org>
parents:
32048
diff
changeset
|
77 def _eintrretry(func, *args): |
ed42e00a5c4e
progress: retry ferr.flush() and .write() on EINTR (issue5532)
Yuya Nishihara <yuya@tcha.org>
parents:
32048
diff
changeset
|
78 while True: |
ed42e00a5c4e
progress: retry ferr.flush() and .write() on EINTR (issue5532)
Yuya Nishihara <yuya@tcha.org>
parents:
32048
diff
changeset
|
79 try: |
ed42e00a5c4e
progress: retry ferr.flush() and .write() on EINTR (issue5532)
Yuya Nishihara <yuya@tcha.org>
parents:
32048
diff
changeset
|
80 return func(*args) |
ed42e00a5c4e
progress: retry ferr.flush() and .write() on EINTR (issue5532)
Yuya Nishihara <yuya@tcha.org>
parents:
32048
diff
changeset
|
81 except IOError as err: |
ed42e00a5c4e
progress: retry ferr.flush() and .write() on EINTR (issue5532)
Yuya Nishihara <yuya@tcha.org>
parents:
32048
diff
changeset
|
82 if err.errno == errno.EINTR: |
ed42e00a5c4e
progress: retry ferr.flush() and .write() on EINTR (issue5532)
Yuya Nishihara <yuya@tcha.org>
parents:
32048
diff
changeset
|
83 continue |
ed42e00a5c4e
progress: retry ferr.flush() and .write() on EINTR (issue5532)
Yuya Nishihara <yuya@tcha.org>
parents:
32048
diff
changeset
|
84 raise |
ed42e00a5c4e
progress: retry ferr.flush() and .write() on EINTR (issue5532)
Yuya Nishihara <yuya@tcha.org>
parents:
32048
diff
changeset
|
85 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41144
diff
changeset
|
86 |
49037
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
87 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
|
88 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
|
89 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
|
90 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
|
91 self.resetstate() |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
92 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
93 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
|
94 self.topics = [] |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
95 self.topicstates = {} |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
96 self.starttimes = {} |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
97 self.startvals = {} |
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 = False |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41144
diff
changeset
|
99 self.lastprint = time.time() + float( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
100 self.ui.config(b'progress', b'delay') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41144
diff
changeset
|
101 ) |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
102 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
|
103 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
|
104 self.indetcount = 0 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
105 self.refresh = float(self.ui.config(b'progress', b'refresh')) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41144
diff
changeset
|
106 self.changedelay = max( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
107 3 * self.refresh, float(self.ui.config(b'progress', b'changedelay')) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41144
diff
changeset
|
108 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
109 self.order = self.ui.configlist(b'progress', b'format') |
34321
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34320
diff
changeset
|
110 self.estimateinterval = self.ui.configwith( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
111 float, b'progress', b'estimateinterval' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41144
diff
changeset
|
112 ) |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
113 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
114 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
|
115 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
|
116 return |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
117 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
|
118 self.printed = True |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
119 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
|
120 needprogress = False |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
121 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
|
122 for indicator in self.order: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
123 add = b'' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
124 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
|
125 add = topic |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
126 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
|
127 if total: |
36240
707aba4d48b5
progress: use '%*d' to pad progress value
Yuya Nishihara <yuya@tcha.org>
parents:
36190
diff
changeset
|
128 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
|
129 else: |
36453
2831d918e1b4
py3: convert known-int values to bytes using %d
Augie Fackler <augie@google.com>
parents:
36240
diff
changeset
|
130 add = b'%d' % pos |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
131 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
|
132 slice = b'end' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
133 if b'-' in indicator: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
134 wid = int(indicator.split(b'-')[1]) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
135 elif b'+' in indicator: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
136 slice = b'beginning' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
137 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
|
138 else: |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
139 wid = 20 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
140 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
|
141 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
|
142 else: |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
143 add = encoding.trim(item, wid) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
144 add += (wid - encoding.colwidth(add)) * b' ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
145 elif indicator == b'bar': |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
146 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
|
147 needprogress = True |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
148 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
|
149 add = unit |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
150 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
|
151 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
|
152 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
|
153 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
|
154 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
|
155 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
|
156 else: |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
157 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
|
158 if needprogress: |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
159 used = 0 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
160 if head: |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
161 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
|
162 if tail: |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
163 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
|
164 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
|
165 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
|
166 amt = pos * progwidth // total |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
167 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
|
168 if amt > 0: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
169 bar += b'>' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
170 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
|
171 else: |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
172 progwidth -= 3 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
173 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
|
174 # 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
|
175 # 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
|
176 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
|
177 amt -= progwidth |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41144
diff
changeset
|
178 bar = ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
179 b' ' * int(progwidth - abs(amt)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
180 + b'<=>' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
181 + b' ' * int(abs(amt)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41144
diff
changeset
|
182 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
183 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
|
184 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
|
185 else: |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
186 out = spacejoin(head, tail) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
187 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
|
188 self.lasttopic = topic |
32048
c3ef33fd0058
progress: extract stubs to restart ferr.flush() and .write() on EINTR
Yuya Nishihara <yuya@tcha.org>
parents:
30334
diff
changeset
|
189 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
|
190 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
191 def clear(self): |
29089
222b8170d69e
progress: stop excessive clearing (issue4801)
Matt Mackall <mpm@selenic.com>
parents:
28171
diff
changeset
|
192 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
|
193 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
194 self._writeerr(b'\r%s\r' % (b' ' * self.width())) |
43472
4e0a6d157910
progress: flush stderr after clearing
Kyle Lippincott <spectral@google.com>
parents:
43077
diff
changeset
|
195 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
|
196 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
|
197 # 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
|
198 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
|
199 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
200 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
|
201 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
|
202 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
203 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
|
204 self.clear() |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
205 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
206 self._writeerr(b'\n') |
32048
c3ef33fd0058
progress: extract stubs to restart ferr.flush() and .write() on EINTR
Yuya Nishihara <yuya@tcha.org>
parents:
30334
diff
changeset
|
207 self._flusherr() |
c3ef33fd0058
progress: extract stubs to restart ferr.flush() and .write() on EINTR
Yuya Nishihara <yuya@tcha.org>
parents:
30334
diff
changeset
|
208 |
c3ef33fd0058
progress: extract stubs to restart ferr.flush() and .write() on EINTR
Yuya Nishihara <yuya@tcha.org>
parents:
30334
diff
changeset
|
209 def _flusherr(self): |
32049
ed42e00a5c4e
progress: retry ferr.flush() and .write() on EINTR (issue5532)
Yuya Nishihara <yuya@tcha.org>
parents:
32048
diff
changeset
|
210 _eintrretry(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
|
211 |
32048
c3ef33fd0058
progress: extract stubs to restart ferr.flush() and .write() on EINTR
Yuya Nishihara <yuya@tcha.org>
parents:
30334
diff
changeset
|
212 def _writeerr(self, msg): |
32049
ed42e00a5c4e
progress: retry ferr.flush() and .write() on EINTR (issue5532)
Yuya Nishihara <yuya@tcha.org>
parents:
32048
diff
changeset
|
213 _eintrretry(self.ui.ferr.write, msg) |
32048
c3ef33fd0058
progress: extract stubs to restart ferr.flush() and .write() on EINTR
Yuya Nishihara <yuya@tcha.org>
parents:
30334
diff
changeset
|
214 |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
215 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
|
216 tw = self.ui.termwidth() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
217 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
|
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 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
|
220 if total is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
221 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
|
222 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
|
223 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
|
224 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
|
225 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
|
226 elapsed = now - self.starttimes[topic] |
34320
f428c347d32b
progress: remove progress.estimate config
Jun Wu <quark@fb.com>
parents:
33499
diff
changeset
|
227 seconds = (elapsed * (target - delta)) // delta + 1 |
f428c347d32b
progress: remove progress.estimate config
Jun Wu <quark@fb.com>
parents:
33499
diff
changeset
|
228 return fmtremaining(seconds) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
229 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
|
230 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
231 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
|
232 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
|
233 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
|
234 elapsed = now - self.starttimes[topic] |
34320
f428c347d32b
progress: remove progress.estimate config
Jun Wu <quark@fb.com>
parents:
33499
diff
changeset
|
235 if elapsed > 0: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
236 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
|
237 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
|
238 |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
239 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
|
240 '''Check if conditions are met to print - e.g. changedelay elapsed''' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41144
diff
changeset
|
241 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41144
diff
changeset
|
242 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
|
243 # 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
|
244 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
|
245 # it's been long enough we should print anyway |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41144
diff
changeset
|
246 or now - self.lastprint >= self.changedelay |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41144
diff
changeset
|
247 ): |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
248 return True |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
249 else: |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
250 return False |
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
251 |
34321
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34320
diff
changeset
|
252 def _calibrateestimate(self, topic, now, pos): |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43472
diff
changeset
|
253 """Adjust starttimes and startvals for topic so ETA works better |
34321
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34320
diff
changeset
|
254 |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34320
diff
changeset
|
255 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:
34320
diff
changeset
|
256 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:
34320
diff
changeset
|
257 calculation. |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34320
diff
changeset
|
258 |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34320
diff
changeset
|
259 [======================================> ] |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34320
diff
changeset
|
260 ^^^^^^^ |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34320
diff
changeset
|
261 estimateinterval, only use this for estimation |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43472
diff
changeset
|
262 """ |
34321
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34320
diff
changeset
|
263 interval = self.estimateinterval |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34320
diff
changeset
|
264 if interval <= 0: |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34320
diff
changeset
|
265 return |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34320
diff
changeset
|
266 elapsed = now - self.starttimes[topic] |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34320
diff
changeset
|
267 if elapsed > interval: |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34320
diff
changeset
|
268 delta = pos - self.startvals[topic] |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34320
diff
changeset
|
269 newdelta = delta * interval / elapsed |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34320
diff
changeset
|
270 # 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:
34320
diff
changeset
|
271 # 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:
34320
diff
changeset
|
272 # smoother. |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34320
diff
changeset
|
273 if newdelta < 0.1: |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34320
diff
changeset
|
274 return |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34320
diff
changeset
|
275 self.startvals[topic] = pos - newdelta |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34320
diff
changeset
|
276 self.starttimes[topic] = now - interval |
a667f0ca1d5f
progress: make ETA only consider progress made in the last minute
Jun Wu <quark@fb.com>
parents:
34320
diff
changeset
|
277 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
278 def progress(self, topic, pos, item=b'', unit=b'', total=None): |
38424
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
279 if pos is None: |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
280 self.closetopic(topic) |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
281 return |
25497
93b8b0049932
progress: move most extension code into a 'mercurial.progress' module
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
282 now = time.time() |
38423
6bd9f18d31a8
progress: use context manager for lock
Martin von Zweigbergk <martinvonz@google.com>
parents:
36453
diff
changeset
|
283 with self._refreshlock: |
38424
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
284 if topic not in self.topics: |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
285 self.starttimes[topic] = now |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
286 self.startvals[topic] = pos |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
287 self.topics.append(topic) |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
288 self.topicstates[topic] = pos, item, unit, total |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
289 self.curtopic = topic |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
290 self._calibrateestimate(topic, now, pos) |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
291 if now - self.lastprint >= self.refresh and self.topics: |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
292 if self._oktoprint(now): |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
293 self.lastprint = now |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
294 self.show(now, topic, *self.topicstates[topic]) |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
295 |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
296 def closetopic(self, topic): |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
297 with self._refreshlock: |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
298 self.starttimes.pop(topic, None) |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
299 self.startvals.pop(topic, None) |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
300 self.topicstates.pop(topic, None) |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
301 # reset the progress bar if this is the outermost topic |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
302 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:
38423
diff
changeset
|
303 self.complete() |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
304 self.resetstate() |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
305 # truncate the list of topics assuming all topics within |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
306 # this one are also closed |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
307 if topic in self.topics: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41144
diff
changeset
|
308 self.topics = self.topics[: self.topics.index(topic)] |
38424
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
309 # 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:
38423
diff
changeset
|
310 # so that higher-level topics will be stickier than |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
311 # lower-level topics |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
312 if self.topics: |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
313 self.lasttopic = self.topics[-1] |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
314 else: |
b34d0a6ef936
progress: extract function for closing topic
Martin von Zweigbergk <martinvonz@google.com>
parents:
38423
diff
changeset
|
315 self.lasttopic = None |