Mercurial > public > mercurial-scm > hg
comparison hgext/progress.py @ 23908:5502bd79d052
progress: add a lock to prepare for introducing a thread
author | Solomon Matthews <smat@fb.com> |
---|---|
date | Sat, 17 Jan 2015 13:13:16 -0800 |
parents | 63c7783a5928 |
children | 80c5b2666a96 |
comparison
equal
deleted
inserted
replaced
23907:63c7783a5928 | 23908:5502bd79d052 |
---|---|
35 characters. | 35 characters. |
36 """ | 36 """ |
37 | 37 |
38 import sys | 38 import sys |
39 import time | 39 import time |
40 import threading | |
40 | 41 |
41 from mercurial.i18n import _ | 42 from mercurial.i18n import _ |
42 testedwith = 'internal' | 43 testedwith = 'internal' |
43 | 44 |
44 from mercurial import encoding | 45 from mercurial import encoding |
88 return _("%dy%02dw") % (years, weeks) | 89 return _("%dy%02dw") % (years, weeks) |
89 | 90 |
90 class progbar(object): | 91 class progbar(object): |
91 def __init__(self, ui): | 92 def __init__(self, ui): |
92 self.ui = ui | 93 self.ui = ui |
94 self._refreshlock = threading.Lock() | |
93 self.resetstate() | 95 self.resetstate() |
94 | 96 |
95 def resetstate(self): | 97 def resetstate(self): |
96 self.topics = [] | 98 self.topics = [] |
97 self.topicstates = {} | 99 self.topicstates = {} |
239 else: | 241 else: |
240 return False | 242 return False |
241 | 243 |
242 def progress(self, topic, pos, item='', unit='', total=None): | 244 def progress(self, topic, pos, item='', unit='', total=None): |
243 now = time.time() | 245 now = time.time() |
246 self._refreshlock.acquire() | |
244 try: | 247 try: |
245 if pos is None: | 248 if pos is None: |
246 self.starttimes.pop(topic, None) | 249 self.starttimes.pop(topic, None) |
247 self.startvals.pop(topic, None) | 250 self.startvals.pop(topic, None) |
248 self.topicstates.pop(topic, None) | 251 self.topicstates.pop(topic, None) |
271 if now - self.lastprint >= self.refresh and self.topics: | 274 if now - self.lastprint >= self.refresh and self.topics: |
272 if self._oktoprint(now): | 275 if self._oktoprint(now): |
273 self.lastprint = now | 276 self.lastprint = now |
274 self.show(now, topic, *self.topicstates[topic]) | 277 self.show(now, topic, *self.topicstates[topic]) |
275 finally: | 278 finally: |
276 pass | 279 self._refreshlock.release() |
277 | 280 |
278 _singleton = None | 281 _singleton = None |
279 | 282 |
280 def uisetup(ui): | 283 def uisetup(ui): |
281 global _singleton | 284 global _singleton |