comparison hgext/blackbox.py @ 40764:567e164f89b8

blackbox: initialize logger with repo instance The blackboxlogger is unusable without a repo. Let's simply initialize it with a repo instance.
author Yuya Nishihara <yuya@tcha.org>
date Sun, 11 Nov 2018 20:05:38 +0900
parents 3ede5d1724bb
children ea2688c84e4b
comparison
equal deleted inserted replaced
40763:3ede5d1724bb 40764:567e164f89b8
137 self.logger.log(ui, event, msg, opts) 137 self.logger.log(ui, event, msg, opts)
138 138
139 _lastlogger = proxylogger() 139 _lastlogger = proxylogger()
140 140
141 class blackboxlogger(object): 141 class blackboxlogger(object):
142 def __init__(self, ui): 142 def __init__(self, ui, repo):
143 self._repo = None 143 self._repo = repo
144 self._trackedevents = set(ui.configlist('blackbox', 'track')) 144 self._trackedevents = set(ui.configlist('blackbox', 'track'))
145 145
146 @property 146 @property
147 def _bbvfs(self): 147 def _bbvfs(self):
148 vfs = None 148 vfs = self._repo.vfs
149 if self._repo: 149 if not vfs.isdir('.'):
150 vfs = self._repo.vfs 150 vfs = None
151 if not vfs.isdir('.'):
152 vfs = None
153 return vfs 151 return vfs
154 152
155 def tracked(self, event): 153 def tracked(self, event):
156 return b'*' in self._trackedevents or event in self._trackedevents 154 return b'*' in self._trackedevents or event in self._trackedevents
157 155
186 # deactivate this to avoid failed logging again 184 # deactivate this to avoid failed logging again
187 self._trackedevents.clear() 185 self._trackedevents.clear()
188 ui.debug('warning: cannot write to blackbox.log: %s\n' % 186 ui.debug('warning: cannot write to blackbox.log: %s\n' %
189 encoding.strtolocal(err.strerror)) 187 encoding.strtolocal(err.strerror))
190 188
191 def setrepo(self, repo):
192 self._repo = repo
193
194 def uipopulate(ui): 189 def uipopulate(ui):
195 ui.setlogger(b'blackbox', _lastlogger) 190 ui.setlogger(b'blackbox', _lastlogger)
196 191
197 def reposetup(ui, repo): 192 def reposetup(ui, repo):
198 # During 'hg pull' a httppeer repo is created to represent the remote repo. 193 # During 'hg pull' a httppeer repo is created to represent the remote repo.
201 if not repo.local(): 196 if not repo.local():
202 return 197 return
203 198
204 # Since blackbox.log is stored in the repo directory, the logger should be 199 # Since blackbox.log is stored in the repo directory, the logger should be
205 # instantiated per repository. 200 # instantiated per repository.
206 logger = blackboxlogger(ui) 201 logger = blackboxlogger(ui, repo)
207 ui.setlogger(b'blackbox', logger) 202 ui.setlogger(b'blackbox', logger)
208 logger.setrepo(repo)
209 203
210 # Set _lastlogger even if ui.log is not called. This gives blackbox a 204 # Set _lastlogger even if ui.log is not called. This gives blackbox a
211 # fallback place to log 205 # fallback place to log
212 if _lastlogger.logger is None: 206 if _lastlogger.logger is None:
213 _lastlogger.logger = logger 207 _lastlogger.logger = logger