hgext/blackbox.py
changeset 40826 ea2688c84e4b
parent 40798 567e164f89b8
child 40827 644adf9c20fb
equal deleted inserted replaced
40825:03bca908d9fb 40826:ea2688c84e4b
   119                 for i in pycompat.xrange(maxfiles - 1, 1, -1):
   119                 for i in pycompat.xrange(maxfiles - 1, 1, -1):
   120                     rotate(oldpath='%s.%d' % (path, i - 1),
   120                     rotate(oldpath='%s.%d' % (path, i - 1),
   121                            newpath='%s.%d' % (path, i))
   121                            newpath='%s.%d' % (path, i))
   122                 rotate(oldpath=path,
   122                 rotate(oldpath=path,
   123                        newpath=maxfiles > 0 and path + '.1')
   123                        newpath=maxfiles > 0 and path + '.1')
   124     return vfs(name, 'a')
   124     return vfs(name, 'a', makeparentdirs=False)
   125 
   125 
   126 class proxylogger(object):
   126 class proxylogger(object):
   127     """Forward log events to another logger to be set later"""
   127     """Forward log events to another logger to be set later"""
   128 
   128 
   129     def __init__(self):
   129     def __init__(self):
   141 class blackboxlogger(object):
   141 class blackboxlogger(object):
   142     def __init__(self, ui, repo):
   142     def __init__(self, ui, repo):
   143         self._repo = repo
   143         self._repo = repo
   144         self._trackedevents = set(ui.configlist('blackbox', 'track'))
   144         self._trackedevents = set(ui.configlist('blackbox', 'track'))
   145 
   145 
   146     @property
       
   147     def _bbvfs(self):
       
   148         vfs = self._repo.vfs
       
   149         if not vfs.isdir('.'):
       
   150             vfs = None
       
   151         return vfs
       
   152 
       
   153     def tracked(self, event):
   146     def tracked(self, event):
   154         return b'*' in self._trackedevents or event in self._trackedevents
   147         return b'*' in self._trackedevents or event in self._trackedevents
   155 
   148 
   156     def log(self, ui, event, msg, opts):
   149     def log(self, ui, event, msg, opts):
   157         if self._bbvfs:
       
   158             _lastlogger.logger = self
       
   159         else:
       
   160             return
       
   161 
       
   162         default = ui.configdate('devel', 'default-date')
   150         default = ui.configdate('devel', 'default-date')
   163         date = dateutil.datestr(default, ui.config('blackbox', 'date-format'))
   151         date = dateutil.datestr(default, ui.config('blackbox', 'date-format'))
   164         user = procutil.getuser()
   152         user = procutil.getuser()
   165         pid = '%d' % procutil.getpid()
   153         pid = '%d' % procutil.getpid()
   166         rev = '(unknown)'
   154         rev = '(unknown)'
   176         else:
   164         else:
   177             src = ''
   165             src = ''
   178         try:
   166         try:
   179             fmt = '%s %s @%s%s (%s)%s> %s'
   167             fmt = '%s %s @%s%s (%s)%s> %s'
   180             args = (date, user, rev, changed, pid, src, msg)
   168             args = (date, user, rev, changed, pid, src, msg)
   181             with _openlogfile(ui, self._bbvfs) as fp:
   169             with _openlogfile(ui, self._repo.vfs) as fp:
   182                 fp.write(fmt % args)
   170                 fp.write(fmt % args)
   183         except (IOError, OSError) as err:
   171         except (IOError, OSError) as err:
   184             # deactivate this to avoid failed logging again
   172             # deactivate this to avoid failed logging again
   185             self._trackedevents.clear()
   173             self._trackedevents.clear()
   186             ui.debug('warning: cannot write to blackbox.log: %s\n' %
   174             ui.debug('warning: cannot write to blackbox.log: %s\n' %
   187                      encoding.strtolocal(err.strerror))
   175                      encoding.strtolocal(err.strerror))
       
   176             return
       
   177         _lastlogger.logger = self
   188 
   178 
   189 def uipopulate(ui):
   179 def uipopulate(ui):
   190     ui.setlogger(b'blackbox', _lastlogger)
   180     ui.setlogger(b'blackbox', _lastlogger)
   191 
   181 
   192 def reposetup(ui, repo):
   182 def reposetup(ui, repo):