Mercurial > hg
comparison hgext/blackbox.py @ 40797:ea2688c84e4b
blackbox: just try writing to repo.vfs and update lastlogger on success
This is simpler and more robust. Before, an empty ".hg" directory would be
created if it's removed after checking vfs.isdir('.').
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sat, 17 Nov 2018 22:10:27 +0900 |
parents | 567e164f89b8 |
children | 644adf9c20fb |
comparison
equal
deleted
inserted
replaced
40796:03bca908d9fb | 40797: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): |