diff -r 56694b4d41b0 -r a9393d7600f3 hgext/blackbox.py --- a/hgext/blackbox.py Sun Nov 11 16:58:22 2018 +0900 +++ b/hgext/blackbox.py Sun Nov 11 17:17:49 2018 +0900 @@ -127,8 +127,11 @@ newpath=maxfiles > 0 and path + '.1') return vfs(name, 'a') -def wrapui(ui): - class blackboxui(ui.__class__): +if True: + class blackboxlogger(object): + def __init__(self, ui): + self.track = ui.configlist('blackbox', 'track') + @property def _bbvfs(self): vfs = None @@ -139,19 +142,8 @@ vfs = None return vfs - @util.propertycache - def track(self): - return self.configlist('blackbox', 'track') - - def debug(self, *msg, **opts): - super(blackboxui, self).debug(*msg, **opts) - if self.debugflag: - self.log('debug', '%s', ''.join(msg)) - - def log(self, event, *msg, **opts): + def log(self, ui, event, msg, opts): global _lastlogger - super(blackboxui, self).log(event, *msg, **opts) - if not '*' in self.track and not event in self.track: return @@ -164,7 +156,7 @@ pass else: return - _lastlogger._log(self, event, msg, opts) + _lastlogger._log(ui, event, msg, opts) def _log(self, ui, event, msg, opts): if getattr(self, '_bbinlog', False): @@ -205,6 +197,29 @@ def setrepo(self, repo): self._bbrepo = repo +def wrapui(ui): + class blackboxui(ui.__class__): + def __init__(self, src=None): + super(blackboxui, self).__init__(src) + if src and r'_bblogger' in src.__dict__: + self._bblogger = src._bblogger + + # trick to initialize logger after configuration is loaded, which + # can be replaced later with blackboxlogger(ui) in uisetup(), where + # both user and repo configurations should be available. + @util.propertycache + def _bblogger(self): + return blackboxlogger(self) + + def debug(self, *msg, **opts): + super(blackboxui, self).debug(*msg, **opts) + if self.debugflag: + self.log('debug', '%s', ''.join(msg)) + + def log(self, event, *msg, **opts): + super(blackboxui, self).log(event, *msg, **opts) + self._bblogger.log(self, event, msg, opts) + ui.__class__ = blackboxui uimod.ui = blackboxui @@ -218,8 +233,8 @@ if not repo.local(): return - if util.safehasattr(ui, 'setrepo'): - logger = ui + logger = getattr(ui, '_bblogger', None) + if logger: logger.setrepo(repo) # Set _lastlogger even if ui.log is not called. This gives blackbox a