mercurial/ui.py
changeset 10815 32b213b9b22c
parent 10567 992723445a29
child 10982 0a548640e012
equal deleted inserted replaced
10814:cd0c49bdbfd9 10815:32b213b9b22c
   237         return path or loc
   237         return path or loc
   238 
   238 
   239     def pushbuffer(self):
   239     def pushbuffer(self):
   240         self._buffers.append([])
   240         self._buffers.append([])
   241 
   241 
   242     def popbuffer(self):
   242     def popbuffer(self, labeled=False):
       
   243         '''pop the last buffer and return the buffered output
       
   244 
       
   245         If labeled is True, any labels associated with buffered
       
   246         output will be handled. By default, this has no effect
       
   247         on the output returned, but extensions and GUI tools may
       
   248         handle this argument and returned styled output. If output
       
   249         is being buffered so it can be captured and parsed or
       
   250         processed, labeled should not be set to True.
       
   251         '''
   243         return "".join(self._buffers.pop())
   252         return "".join(self._buffers.pop())
   244 
   253 
   245     def write(self, *args):
   254     def write(self, *args, **opts):
       
   255         '''write args to output
       
   256 
       
   257         By default, this method simply writes to the buffer or stdout,
       
   258         but extensions or GUI tools may override this method,
       
   259         write_err(), popbuffer(), and label() to style output from
       
   260         various parts of hg.
       
   261 
       
   262         An optional keyword argument, "label", can be passed in.
       
   263         This should be a string containing label names separated by
       
   264         space. Label names take the form of "topic.type". For example,
       
   265         ui.debug() issues a label of "ui.debug".
       
   266 
       
   267         When labeling output for a specific command, a label of
       
   268         "cmdname.type" is recommended. For example, status issues
       
   269         a label of "status.modified" for modified files.
       
   270         '''
   246         if self._buffers:
   271         if self._buffers:
   247             self._buffers[-1].extend([str(a) for a in args])
   272             self._buffers[-1].extend([str(a) for a in args])
   248         else:
   273         else:
   249             for a in args:
   274             for a in args:
   250                 sys.stdout.write(str(a))
   275                 sys.stdout.write(str(a))
   251 
   276 
   252     def write_err(self, *args):
   277     def write_err(self, *args, **opts):
   253         try:
   278         try:
   254             if not getattr(sys.stdout, 'closed', False):
   279             if not getattr(sys.stdout, 'closed', False):
   255                 sys.stdout.flush()
   280                 sys.stdout.flush()
   256             for a in args:
   281             for a in args:
   257                 sys.stderr.write(str(a))
   282                 sys.stderr.write(str(a))
   333             return default
   358             return default
   334         try:
   359         try:
   335             return getpass.getpass(prompt or _('password: '))
   360             return getpass.getpass(prompt or _('password: '))
   336         except EOFError:
   361         except EOFError:
   337             raise util.Abort(_('response expected'))
   362             raise util.Abort(_('response expected'))
   338     def status(self, *msg):
   363     def status(self, *msg, **opts):
       
   364         '''write status message to output (if ui.quiet is False)
       
   365 
       
   366         This adds an output label of "ui.status".
       
   367         '''
   339         if not self.quiet:
   368         if not self.quiet:
   340             self.write(*msg)
   369             opts['label'] = opts.get('label', '') + ' ui.status'
   341     def warn(self, *msg):
   370             self.write(*msg, **opts)
   342         self.write_err(*msg)
   371     def warn(self, *msg, **opts):
   343     def note(self, *msg):
   372         '''write warning message to output (stderr)
       
   373 
       
   374         This adds an output label of "ui.warning".
       
   375         '''
       
   376         opts['label'] = opts.get('label', '') + ' ui.warning'
       
   377         self.write_err(*msg, **opts)
       
   378     def note(self, *msg, **opts):
       
   379         '''write note to output (if ui.verbose is True)
       
   380 
       
   381         This adds an output label of "ui.note".
       
   382         '''
   344         if self.verbose:
   383         if self.verbose:
   345             self.write(*msg)
   384             opts['label'] = opts.get('label', '') + ' ui.note'
   346     def debug(self, *msg):
   385             self.write(*msg, **opts)
       
   386     def debug(self, *msg, **opts):
       
   387         '''write debug message to output (if ui.debugflag is True)
       
   388 
       
   389         This adds an output label of "ui.debug".
       
   390         '''
   347         if self.debugflag:
   391         if self.debugflag:
   348             self.write(*msg)
   392             opts['label'] = opts.get('label', '') + ' ui.debug'
       
   393             self.write(*msg, **opts)
   349     def edit(self, text, user):
   394     def edit(self, text, user):
   350         (fd, name) = tempfile.mkstemp(prefix="hg-editor-", suffix=".txt",
   395         (fd, name) = tempfile.mkstemp(prefix="hg-editor-", suffix=".txt",
   351                                       text=True)
   396                                       text=True)
   352         try:
   397         try:
   353             f = os.fdopen(fd, "w")
   398             f = os.fdopen(fd, "w")
   415             pct = 100.0 * pos / total
   460             pct = 100.0 * pos / total
   416             self.debug('%s:%s %s/%s%s (%4.2f%%)\n'
   461             self.debug('%s:%s %s/%s%s (%4.2f%%)\n'
   417                      % (topic, item, pos, total, unit, pct))
   462                      % (topic, item, pos, total, unit, pct))
   418         else:
   463         else:
   419             self.debug('%s:%s %s%s\n' % (topic, item, pos, unit))
   464             self.debug('%s:%s %s%s\n' % (topic, item, pos, unit))
       
   465 
       
   466     def label(self, msg, label):
       
   467         '''style msg based on supplied label
       
   468 
       
   469         Like ui.write(), this just returns msg unchanged, but extensions
       
   470         and GUI tools can override it to allow styling output without
       
   471         writing it.
       
   472 
       
   473         ui.write(s, 'label') is equivalent to
       
   474         ui.write(ui.label(s, 'label')).
       
   475         '''
       
   476         return msg