##// END OF EJS Templates
progress: move all logic altering the ui object logic in mercurial.ui...
Pierre-Yves David -
r25499:0fa964d6 default
parent child Browse files
Show More
@@ -35,43 +35,9 b' would take the last num characters, or `'
35 35 characters.
36 36 """
37 37
38 from mercurial import progress
39 from mercurial import ui as uimod
40
41 38 def uisetup(ui):
42 class progressui(ui.__class__):
43 _progbar = None
44
45 def _quiet(self):
46 return self.debugflag or self.quiet
47
48 def progress(self, *args, **opts):
49 if not self._quiet():
50 self._progbar.progress(*args, **opts)
51 return super(progressui, self).progress(*args, **opts)
52
53 def write(self, *args, **opts):
54 if not self._quiet() and self._progbar.printed:
55 self._progbar.clear()
56 return super(progressui, self).write(*args, **opts)
57
58 def write_err(self, *args, **opts):
59 if not self._quiet() and self._progbar.printed:
60 self._progbar.clear()
61 return super(progressui, self).write_err(*args, **opts)
62
63 # Apps that derive a class from ui.ui() can use
64 # setconfig('progress', 'disable', 'True') to disable this extension
65 if ui.configbool('progress', 'disable'):
66 return
67 if progress.shouldprint(ui) and not ui.debugflag and not ui.quiet:
68 dval = object()
69 if getattr(ui, '_progbar', dval) is dval:
70 ui.__class__ = progressui
71 # we instantiate one globally-shared progress bar to avoid
72 # competing progress bars when multiple UI objects get created
73 if not progressui._progbar:
74 progressui._progbar = uimod.getprogbar(ui)
39 if ui.config('progress', 'disable', None) is None:
40 ui.setconfig('progress', 'disable', 'False', 'hgext-progress')
75 41
76 42 def reposetup(ui, repo):
77 43 uisetup(repo.ui)
@@ -584,6 +584,7 b' class ui(object):'
584 584 "cmdname.type" is recommended. For example, status issues
585 585 a label of "status.modified" for modified files.
586 586 '''
587 self._progclear()
587 588 if self._buffers:
588 589 self._buffers[-1].extend([str(a) for a in args])
589 590 else:
@@ -591,6 +592,7 b' class ui(object):'
591 592 self.fout.write(str(a))
592 593
593 594 def write_err(self, *args, **opts):
595 self._progclear()
594 596 try:
595 597 if self._bufferstates and self._bufferstates[-1][0]:
596 598 return self.write(*args, **opts)
@@ -886,6 +888,22 b' class ui(object):'
886 888 os.environ.get("VISUAL") or
887 889 os.environ.get("EDITOR", editor))
888 890
891 @util.propertycache
892 def _progbar(self):
893 """setup the progbar singleton to the ui object"""
894 if (self.quiet or self.debugflag
895 or self.configbool('progress', 'disable', True)
896 or not progress.shouldprint(self)):
897 return None
898 return getprogbar(self)
899
900 def _progclear(self):
901 """clear progress bar output if any. use it before any output"""
902 if '_progbar' not in vars(self): # nothing loadef yet
903 return
904 if self._progbar is not None and self._progbar.printed:
905 self._progbar.clear()
906
889 907 def progress(self, topic, pos, item="", unit="", total=None):
890 908 '''show a progress message
891 909
@@ -902,7 +920,9 b' class ui(object):'
902 920 All topics should be marked closed by setting pos to None at
903 921 termination.
904 922 '''
905
923 if self._progbar is not None:
924 self._progbar.progress(topic, pos, item=item, unit=unit,
925 total=total)
906 926 if pos is None or not self.configbool('progress', 'debug'):
907 927 return
908 928
@@ -258,6 +258,7 b' Enable progress extension for archive te'
258 258 > [extensions]
259 259 > progress =
260 260 > [progress]
261 > disable=False
261 262 > assume-tty = 1
262 263 > delay = 0
263 264 > # set changedelay really large so we don't see nested topics
General Comments 0
You need to be logged in to leave comments. Login now