comparison mercurial/progress.py @ 43076:2372284d9457

formatting: blacken the codebase This is using my patch to black (https://github.com/psf/black/pull/826) so we don't un-wrap collection literals. Done with: hg files 'set:**.py - mercurial/thirdparty/** - "contrib/python-zstandard/**"' | xargs black -S # skip-blame mass-reformatting only # no-check-commit reformats foo_bar functions Differential Revision: https://phab.mercurial-scm.org/D6971
author Augie Fackler <augie@google.com>
date Sun, 06 Oct 2019 09:45:02 -0400
parents 7b80406b8271
children 687b865b95ad
comparison
equal deleted inserted replaced
43075:57875cf423c9 43076:2372284d9457
12 import time 12 import time
13 13
14 from .i18n import _ 14 from .i18n import _
15 from . import encoding 15 from . import encoding
16 16
17
17 def spacejoin(*args): 18 def spacejoin(*args):
18 return ' '.join(s for s in args if s) 19 return ' '.join(s for s in args if s)
19 20
21
20 def shouldprint(ui): 22 def shouldprint(ui):
21 return not (ui.quiet or ui.plain('progress')) and ( 23 return not (ui.quiet or ui.plain('progress')) and (
22 ui._isatty(ui.ferr) or ui.configbool('progress', 'assume-tty')) 24 ui._isatty(ui.ferr) or ui.configbool('progress', 'assume-tty')
25 )
26
23 27
24 def fmtremaining(seconds): 28 def fmtremaining(seconds):
25 """format a number of remaining seconds in human readable way 29 """format a number of remaining seconds in human readable way
26 30
27 This will properly display seconds, minutes, hours, days if needed""" 31 This will properly display seconds, minutes, hours, days if needed"""
28 if seconds < 60: 32 if seconds < 60:
29 # i18n: format XX seconds as "XXs" 33 # i18n: format XX seconds as "XXs"
30 return _("%02ds") % (seconds) 34 return _("%02ds") % seconds
31 minutes = seconds // 60 35 minutes = seconds // 60
32 if minutes < 60: 36 if minutes < 60:
33 seconds -= minutes * 60 37 seconds -= minutes * 60
34 # i18n: format X minutes and YY seconds as "XmYYs" 38 # i18n: format X minutes and YY seconds as "XmYYs"
35 return _("%dm%02ds") % (minutes, seconds) 39 return _("%dm%02ds") % (minutes, seconds)
59 years = weeks // 52 63 years = weeks // 52
60 weeks -= years * 52 64 weeks -= years * 52
61 # i18n: format X years and YY weeks as "XyYYw" 65 # i18n: format X years and YY weeks as "XyYYw"
62 return _("%dy%02dw") % (years, weeks) 66 return _("%dy%02dw") % (years, weeks)
63 67
68
64 # file_write() and file_flush() of Python 2 do not restart on EINTR if 69 # file_write() and file_flush() of Python 2 do not restart on EINTR if
65 # the file is attached to a "slow" device (e.g. a terminal) and raise 70 # the file is attached to a "slow" device (e.g. a terminal) and raise
66 # IOError. We cannot know how many bytes would be written by file_write(), 71 # IOError. We cannot know how many bytes would be written by file_write(),
67 # but a progress text is known to be short enough to be written by a 72 # but a progress text is known to be short enough to be written by a
68 # single write() syscall, so we can just retry file_write() with the whole 73 # single write() syscall, so we can just retry file_write() with the whole
77 except IOError as err: 82 except IOError as err:
78 if err.errno == errno.EINTR: 83 if err.errno == errno.EINTR:
79 continue 84 continue
80 raise 85 raise
81 86
87
82 class progbar(object): 88 class progbar(object):
83 def __init__(self, ui): 89 def __init__(self, ui):
84 self.ui = ui 90 self.ui = ui
85 self._refreshlock = threading.Lock() 91 self._refreshlock = threading.Lock()
86 self.resetstate() 92 self.resetstate()
89 self.topics = [] 95 self.topics = []
90 self.topicstates = {} 96 self.topicstates = {}
91 self.starttimes = {} 97 self.starttimes = {}
92 self.startvals = {} 98 self.startvals = {}
93 self.printed = False 99 self.printed = False
94 self.lastprint = time.time() + float(self.ui.config( 100 self.lastprint = time.time() + float(
95 'progress', 'delay')) 101 self.ui.config('progress', 'delay')
102 )
96 self.curtopic = None 103 self.curtopic = None
97 self.lasttopic = None 104 self.lasttopic = None
98 self.indetcount = 0 105 self.indetcount = 0
99 self.refresh = float(self.ui.config( 106 self.refresh = float(self.ui.config('progress', 'refresh'))
100 'progress', 'refresh')) 107 self.changedelay = max(
101 self.changedelay = max(3 * self.refresh, 108 3 * self.refresh, float(self.ui.config('progress', 'changedelay'))
102 float(self.ui.config( 109 )
103 'progress', 'changedelay')))
104 self.order = self.ui.configlist('progress', 'format') 110 self.order = self.ui.configlist('progress', 'format')
105 self.estimateinterval = self.ui.configwith( 111 self.estimateinterval = self.ui.configwith(
106 float, 'progress', 'estimateinterval') 112 float, 'progress', 'estimateinterval'
113 )
107 114
108 def show(self, now, topic, pos, item, unit, total): 115 def show(self, now, topic, pos, item, unit, total):
109 if not shouldprint(self.ui): 116 if not shouldprint(self.ui):
110 return 117 return
111 termwidth = self.width() 118 termwidth = self.width()
167 self.indetcount += 1 174 self.indetcount += 1
168 # mod the count by twice the width so we can make the 175 # mod the count by twice the width so we can make the
169 # cursor bounce between the right and left sides 176 # cursor bounce between the right and left sides
170 amt = self.indetcount % (2 * progwidth) 177 amt = self.indetcount % (2 * progwidth)
171 amt -= progwidth 178 amt -= progwidth
172 bar = (' ' * int(progwidth - abs(amt)) + '<=>' + 179 bar = (
173 ' ' * int(abs(amt))) 180 ' ' * int(progwidth - abs(amt))
181 + '<=>'
182 + ' ' * int(abs(amt))
183 )
174 prog = ''.join(('[', bar, ']')) 184 prog = ''.join(('[', bar, ']'))
175 out = spacejoin(head, prog, tail) 185 out = spacejoin(head, prog, tail)
176 else: 186 else:
177 out = spacejoin(head, tail) 187 out = spacejoin(head, tail)
178 self._writeerr('\r' + encoding.trim(out, termwidth)) 188 self._writeerr('\r' + encoding.trim(out, termwidth))
226 return _('%d %s/sec') % (delta / elapsed, unit) 236 return _('%d %s/sec') % (delta / elapsed, unit)
227 return '' 237 return ''
228 238
229 def _oktoprint(self, now): 239 def _oktoprint(self, now):
230 '''Check if conditions are met to print - e.g. changedelay elapsed''' 240 '''Check if conditions are met to print - e.g. changedelay elapsed'''
231 if (self.lasttopic is None # first time we printed 241 if (
242 self.lasttopic is None # first time we printed
232 # not a topic change 243 # not a topic change
233 or self.curtopic == self.lasttopic 244 or self.curtopic == self.lasttopic
234 # it's been long enough we should print anyway 245 # it's been long enough we should print anyway
235 or now - self.lastprint >= self.changedelay): 246 or now - self.lastprint >= self.changedelay
247 ):
236 return True 248 return True
237 else: 249 else:
238 return False 250 return False
239 251
240 def _calibrateestimate(self, topic, now, pos): 252 def _calibrateestimate(self, topic, now, pos):
291 self.complete() 303 self.complete()
292 self.resetstate() 304 self.resetstate()
293 # truncate the list of topics assuming all topics within 305 # truncate the list of topics assuming all topics within
294 # this one are also closed 306 # this one are also closed
295 if topic in self.topics: 307 if topic in self.topics:
296 self.topics = self.topics[:self.topics.index(topic)] 308 self.topics = self.topics[: self.topics.index(topic)]
297 # reset the last topic to the one we just unwound to, 309 # reset the last topic to the one we just unwound to,
298 # so that higher-level topics will be stickier than 310 # so that higher-level topics will be stickier than
299 # lower-level topics 311 # lower-level topics
300 if self.topics: 312 if self.topics:
301 self.lasttopic = self.topics[-1] 313 self.lasttopic = self.topics[-1]