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): |