hgext/progress.py
branchstable
changeset 11458 ec21d91c79b3
parent 10891 83af68e38be3
child 11555 d8d0fc3988ca
equal deleted inserted replaced
11457:2ec346160783 11458:ec21d91c79b3
    48 from mercurial import extensions
    48 from mercurial import extensions
    49 from mercurial import util
    49 from mercurial import util
    50 
    50 
    51 def spacejoin(*args):
    51 def spacejoin(*args):
    52     return ' '.join(s for s in args if s)
    52     return ' '.join(s for s in args if s)
       
    53 
       
    54 def shouldprint(ui):
       
    55     return sys.stderr.isatty() or ui.configbool('progress', 'assume-tty')
    53 
    56 
    54 class progbar(object):
    57 class progbar(object):
    55     def __init__(self, ui):
    58     def __init__(self, ui):
    56         self.ui = ui
    59         self.ui = ui
    57         self.resetstate()
    60         self.resetstate()
    67         self.order = self.ui.configlist(
    70         self.order = self.ui.configlist(
    68             'progress', 'format',
    71             'progress', 'format',
    69             default=['topic', 'bar', 'number'])
    72             default=['topic', 'bar', 'number'])
    70 
    73 
    71     def show(self, topic, pos, item, unit, total):
    74     def show(self, topic, pos, item, unit, total):
       
    75         if not shouldprint(self.ui):
       
    76             return
    72         termwidth = self.width()
    77         termwidth = self.width()
    73         self.printed = True
    78         self.printed = True
    74         head = ''
    79         head = ''
    75         needprogress = False
    80         needprogress = False
    76         tail = ''
    81         tail = ''
   135             out = spacejoin(head, tail)
   140             out = spacejoin(head, tail)
   136         sys.stderr.write('\r' + out[:termwidth])
   141         sys.stderr.write('\r' + out[:termwidth])
   137         sys.stderr.flush()
   142         sys.stderr.flush()
   138 
   143 
   139     def clear(self):
   144     def clear(self):
       
   145         if not shouldprint(self.ui):
       
   146             return
   140         sys.stderr.write('\r%s\r' % (' ' * self.width()))
   147         sys.stderr.write('\r%s\r' % (' ' * self.width()))
   141 
   148 
   142     def complete(self):
   149     def complete(self):
       
   150         if not shouldprint(self.ui):
       
   151             return
   143         if self.ui.configbool('progress', 'clear-complete', default=True):
   152         if self.ui.configbool('progress', 'clear-complete', default=True):
   144             self.clear()
   153             self.clear()
   145         else:
   154         else:
   146             sys.stderr.write('\n')
   155             sys.stderr.write('\n')
   147         sys.stderr.flush()
   156         sys.stderr.flush()
   175 def uisetup(ui):
   184 def uisetup(ui):
   176     # Apps that derive a class from ui.ui() can use
   185     # Apps that derive a class from ui.ui() can use
   177     # setconfig('progress', 'disable', 'True') to disable this extension
   186     # setconfig('progress', 'disable', 'True') to disable this extension
   178     if ui.configbool('progress', 'disable'):
   187     if ui.configbool('progress', 'disable'):
   179         return
   188         return
   180     if ((sys.stderr.isatty() or ui.configbool('progress', 'assume-tty'))
   189     if shouldprint(ui) and not ui.debugflag and not ui.quiet:
   181         and not ui.debugflag and not ui.quiet):
       
   182         # we instantiate one globally shared progress bar to avoid
   190         # we instantiate one globally shared progress bar to avoid
   183         # competing progress bars when multiple UI objects get created
   191         # competing progress bars when multiple UI objects get created
   184         global sharedprog
   192         global sharedprog
   185         if not sharedprog:
   193         if not sharedprog:
   186             sharedprog = progbar(ui)
   194             sharedprog = progbar(ui)