Show More
@@ -121,12 +121,11 b' def _importext(name, path=None, reportfu' | |||||
121 | return mod |
|
121 | return mod | |
122 |
|
122 | |||
123 | def _reportimporterror(ui, err, failed, next): |
|
123 | def _reportimporterror(ui, err, failed, next): | |
124 |
# note: this ui. |
|
124 | # note: this ui.log happens before --debug is processed, | |
125 | # Use --config ui.debug=1 to see them. |
|
125 | # Use --config ui.debug=1 to see them. | |
126 | if ui.configbool('devel', 'debug.extensions'): |
|
126 | ui.log(b'extension', b' - could not import %s (%s): trying %s\n', | |
127 | ui.debug('debug.extensions: - could not import %s (%s): trying %s\n' |
|
127 | failed, stringutil.forcebytestr(err), next) | |
128 | % (failed, stringutil.forcebytestr(err), next)) |
|
128 | if ui.debugflag and ui.configbool('devel', 'debug.extensions'): | |
129 | if ui.debugflag: |
|
|||
130 |
|
|
129 | ui.traceback() | |
131 |
|
130 | |||
132 | def _rejectunicode(name, xs): |
|
131 | def _rejectunicode(name, xs): | |
@@ -166,7 +165,7 b' def _validatetables(ui, mod):' | |||||
166 | _rejectunicode(t, o._table) |
|
165 | _rejectunicode(t, o._table) | |
167 | _validatecmdtable(ui, getattr(mod, 'cmdtable', {})) |
|
166 | _validatecmdtable(ui, getattr(mod, 'cmdtable', {})) | |
168 |
|
167 | |||
169 |
def load(ui, name, path, |
|
168 | def load(ui, name, path, loadingtime=None): | |
170 | if name.startswith('hgext.') or name.startswith('hgext/'): |
|
169 | if name.startswith('hgext.') or name.startswith('hgext/'): | |
171 | shortname = name[6:] |
|
170 | shortname = name[6:] | |
172 | else: |
|
171 | else: | |
@@ -175,11 +174,11 b' def load(ui, name, path, log=lambda *a: ' | |||||
175 | return None |
|
174 | return None | |
176 | if shortname in _extensions: |
|
175 | if shortname in _extensions: | |
177 | return _extensions[shortname] |
|
176 | return _extensions[shortname] | |
178 | log(' - loading extension: %s\n', shortname) |
|
177 | ui.log(b'extension', b' - loading extension: %s\n', shortname) | |
179 | _extensions[shortname] = None |
|
178 | _extensions[shortname] = None | |
180 | with util.timedcm('load extension %s', shortname) as stats: |
|
179 | with util.timedcm('load extension %s', shortname) as stats: | |
181 | mod = _importext(name, path, bind(_reportimporterror, ui)) |
|
180 | mod = _importext(name, path, bind(_reportimporterror, ui)) | |
182 | log(' > %s extension loaded in %s\n', shortname, stats) |
|
181 | ui.log(b'extension', b' > %s extension loaded in %s\n', shortname, stats) | |
183 | if loadingtime is not None: |
|
182 | if loadingtime is not None: | |
184 | loadingtime[shortname] += stats.elapsed |
|
183 | loadingtime[shortname] += stats.elapsed | |
185 |
|
184 | |||
@@ -193,16 +192,17 b' def load(ui, name, path, log=lambda *a: ' | |||||
193 | 'of Mercurial (current: %s); disabling)\n') |
|
192 | 'of Mercurial (current: %s); disabling)\n') | |
194 | ui.warn(msg % (shortname, minver, util.version())) |
|
193 | ui.warn(msg % (shortname, minver, util.version())) | |
195 | return |
|
194 | return | |
196 | log(' - validating extension tables: %s\n', shortname) |
|
195 | ui.log(b'extension', b' - validating extension tables: %s\n', shortname) | |
197 | _validatetables(ui, mod) |
|
196 | _validatetables(ui, mod) | |
198 |
|
197 | |||
199 | _extensions[shortname] = mod |
|
198 | _extensions[shortname] = mod | |
200 | _order.append(shortname) |
|
199 | _order.append(shortname) | |
201 |
log(' - invoking registered callbacks: %s\n', |
|
200 | ui.log(b'extension', b' - invoking registered callbacks: %s\n', | |
|
201 | shortname) | |||
202 | with util.timedcm('callbacks extension %s', shortname) as stats: |
|
202 | with util.timedcm('callbacks extension %s', shortname) as stats: | |
203 | for fn in _aftercallbacks.get(shortname, []): |
|
203 | for fn in _aftercallbacks.get(shortname, []): | |
204 | fn(loaded=True) |
|
204 | fn(loaded=True) | |
205 | log(' > callbacks completed in %s\n', stats) |
|
205 | ui.log(b'extension', b' > callbacks completed in %s\n', stats) | |
206 | return mod |
|
206 | return mod | |
207 |
|
207 | |||
208 | def _runuisetup(name, ui): |
|
208 | def _runuisetup(name, ui): | |
@@ -235,28 +235,25 b' def _runextsetup(name, ui):' | |||||
235 | return True |
|
235 | return True | |
236 |
|
236 | |||
237 | def loadall(ui, whitelist=None): |
|
237 | def loadall(ui, whitelist=None): | |
238 | if ui.configbool('devel', 'debug.extensions'): |
|
|||
239 | log = lambda msg, *values: ui.debug('debug.extensions: ', |
|
|||
240 | msg % values, label='debug.extensions') |
|
|||
241 | else: |
|
|||
242 | log = lambda *a, **kw: None |
|
|||
243 | loadingtime = collections.defaultdict(int) |
|
238 | loadingtime = collections.defaultdict(int) | |
244 | result = ui.configitems("extensions") |
|
239 | result = ui.configitems("extensions") | |
245 | if whitelist is not None: |
|
240 | if whitelist is not None: | |
246 | result = [(k, v) for (k, v) in result if k in whitelist] |
|
241 | result = [(k, v) for (k, v) in result if k in whitelist] | |
247 | newindex = len(_order) |
|
242 | newindex = len(_order) | |
248 | log('loading %sextensions\n', 'additional ' if newindex else '') |
|
243 | ui.log(b'extension', b'loading %sextensions\n', | |
249 | log('- processing %d entries\n', len(result)) |
|
244 | 'additional ' if newindex else '') | |
|
245 | ui.log(b'extension', b'- processing %d entries\n', len(result)) | |||
250 | with util.timedcm('load all extensions') as stats: |
|
246 | with util.timedcm('load all extensions') as stats: | |
251 | for (name, path) in result: |
|
247 | for (name, path) in result: | |
252 | if path: |
|
248 | if path: | |
253 | if path[0:1] == '!': |
|
249 | if path[0:1] == '!': | |
254 | if name not in _disabledextensions: |
|
250 | if name not in _disabledextensions: | |
255 |
log(' |
|
251 | ui.log(b'extension', | |
|
252 | b' - skipping disabled extension: %s\n', name) | |||
256 | _disabledextensions[name] = path[1:] |
|
253 | _disabledextensions[name] = path[1:] | |
257 | continue |
|
254 | continue | |
258 | try: |
|
255 | try: | |
259 |
load(ui, name, path, |
|
256 | load(ui, name, path, loadingtime) | |
260 | except Exception as inst: |
|
257 | except Exception as inst: | |
261 | msg = stringutil.forcebytestr(inst) |
|
258 | msg = stringutil.forcebytestr(inst) | |
262 | if path: |
|
259 | if path: | |
@@ -269,7 +266,7 b' def loadall(ui, whitelist=None):' | |||||
269 | ui.warn(_("*** (%s)\n") % inst.hint) |
|
266 | ui.warn(_("*** (%s)\n") % inst.hint) | |
270 | ui.traceback() |
|
267 | ui.traceback() | |
271 |
|
268 | |||
272 | log('> loaded %d extensions, total time %s\n', |
|
269 | ui.log(b'extension', b'> loaded %d extensions, total time %s\n', | |
273 | len(_order) - newindex, stats) |
|
270 | len(_order) - newindex, stats) | |
274 | # list of (objname, loadermod, loadername) tuple: |
|
271 | # list of (objname, loadermod, loadername) tuple: | |
275 | # - objname is the name of an object in extension module, |
|
272 | # - objname is the name of an object in extension module, | |
@@ -283,52 +280,55 b' def loadall(ui, whitelist=None):' | |||||
283 | ('configtable', configitems, 'loadconfigtable'), |
|
280 | ('configtable', configitems, 'loadconfigtable'), | |
284 | ] |
|
281 | ] | |
285 |
|
282 | |||
286 | log('- loading configtable attributes\n') |
|
283 | ui.log(b'extension', b'- loading configtable attributes\n') | |
287 | _loadextra(ui, newindex, earlyextraloaders) |
|
284 | _loadextra(ui, newindex, earlyextraloaders) | |
288 |
|
285 | |||
289 | broken = set() |
|
286 | broken = set() | |
290 | log('- executing uisetup hooks\n') |
|
287 | ui.log(b'extension', b'- executing uisetup hooks\n') | |
291 | with util.timedcm('all uisetup') as alluisetupstats: |
|
288 | with util.timedcm('all uisetup') as alluisetupstats: | |
292 | for name in _order[newindex:]: |
|
289 | for name in _order[newindex:]: | |
293 | log(' - running uisetup for %s\n', name) |
|
290 | ui.log(b'extension', b' - running uisetup for %s\n', name) | |
294 | with util.timedcm('uisetup %s', name) as stats: |
|
291 | with util.timedcm('uisetup %s', name) as stats: | |
295 | if not _runuisetup(name, ui): |
|
292 | if not _runuisetup(name, ui): | |
296 |
log(' |
|
293 | ui.log(b'extension', | |
|
294 | b' - the %s extension uisetup failed\n', name) | |||
297 | broken.add(name) |
|
295 | broken.add(name) | |
298 | log(' > uisetup for %s took %s\n', name, stats) |
|
296 | ui.log(b'extension', b' > uisetup for %s took %s\n', name, stats) | |
299 | loadingtime[name] += stats.elapsed |
|
297 | loadingtime[name] += stats.elapsed | |
300 | log('> all uisetup took %s\n', alluisetupstats) |
|
298 | ui.log(b'extension', b'> all uisetup took %s\n', alluisetupstats) | |
301 |
|
299 | |||
302 | log('- executing extsetup hooks\n') |
|
300 | ui.log(b'extension', b'- executing extsetup hooks\n') | |
303 | with util.timedcm('all extsetup') as allextetupstats: |
|
301 | with util.timedcm('all extsetup') as allextetupstats: | |
304 | for name in _order[newindex:]: |
|
302 | for name in _order[newindex:]: | |
305 | if name in broken: |
|
303 | if name in broken: | |
306 | continue |
|
304 | continue | |
307 | log(' - running extsetup for %s\n', name) |
|
305 | ui.log(b'extension', b' - running extsetup for %s\n', name) | |
308 | with util.timedcm('extsetup %s', name) as stats: |
|
306 | with util.timedcm('extsetup %s', name) as stats: | |
309 | if not _runextsetup(name, ui): |
|
307 | if not _runextsetup(name, ui): | |
310 |
log(' |
|
308 | ui.log(b'extension', | |
|
309 | b' - the %s extension extsetup failed\n', name) | |||
311 | broken.add(name) |
|
310 | broken.add(name) | |
312 | log(' > extsetup for %s took %s\n', name, stats) |
|
311 | ui.log(b'extension', b' > extsetup for %s took %s\n', name, stats) | |
313 | loadingtime[name] += stats.elapsed |
|
312 | loadingtime[name] += stats.elapsed | |
314 | log('> all extsetup took %s\n', allextetupstats) |
|
313 | ui.log(b'extension', b'> all extsetup took %s\n', allextetupstats) | |
315 |
|
314 | |||
316 | for name in broken: |
|
315 | for name in broken: | |
317 | log(' - disabling broken %s extension\n', name) |
|
316 | ui.log(b'extension', b' - disabling broken %s extension\n', name) | |
318 | _extensions[name] = None |
|
317 | _extensions[name] = None | |
319 |
|
318 | |||
320 | # Call aftercallbacks that were never met. |
|
319 | # Call aftercallbacks that were never met. | |
321 | log('- executing remaining aftercallbacks\n') |
|
320 | ui.log(b'extension', b'- executing remaining aftercallbacks\n') | |
322 | with util.timedcm('aftercallbacks') as stats: |
|
321 | with util.timedcm('aftercallbacks') as stats: | |
323 | for shortname in _aftercallbacks: |
|
322 | for shortname in _aftercallbacks: | |
324 | if shortname in _extensions: |
|
323 | if shortname in _extensions: | |
325 | continue |
|
324 | continue | |
326 |
|
325 | |||
327 | for fn in _aftercallbacks[shortname]: |
|
326 | for fn in _aftercallbacks[shortname]: | |
328 |
log(' |
|
327 | ui.log(b'extension', | |
|
328 | b' - extension %s not loaded, notify callbacks\n', | |||
329 | shortname) |
|
329 | shortname) | |
330 | fn(loaded=False) |
|
330 | fn(loaded=False) | |
331 | log('> remaining aftercallbacks completed in %s\n', stats) |
|
331 | ui.log(b'extension', b'> remaining aftercallbacks completed in %s\n', stats) | |
332 |
|
332 | |||
333 | # loadall() is called multiple times and lingering _aftercallbacks |
|
333 | # loadall() is called multiple times and lingering _aftercallbacks | |
334 | # entries could result in double execution. See issue4646. |
|
334 | # entries could result in double execution. See issue4646. | |
@@ -352,7 +352,7 b' def loadall(ui, whitelist=None):' | |||||
352 | # - loadermod is the module where loader is placed |
|
352 | # - loadermod is the module where loader is placed | |
353 | # - loadername is the name of the function, |
|
353 | # - loadername is the name of the function, | |
354 | # which takes (ui, extensionname, extraobj) arguments |
|
354 | # which takes (ui, extensionname, extraobj) arguments | |
355 | log('- loading extension registration objects\n') |
|
355 | ui.log(b'extension', b'- loading extension registration objects\n') | |
356 | extraloaders = [ |
|
356 | extraloaders = [ | |
357 | ('cmdtable', commands, 'loadcmdtable'), |
|
357 | ('cmdtable', commands, 'loadcmdtable'), | |
358 | ('colortable', color, 'loadcolortable'), |
|
358 | ('colortable', color, 'loadcolortable'), | |
@@ -365,14 +365,15 b' def loadall(ui, whitelist=None):' | |||||
365 | ] |
|
365 | ] | |
366 | with util.timedcm('load registration objects') as stats: |
|
366 | with util.timedcm('load registration objects') as stats: | |
367 | _loadextra(ui, newindex, extraloaders) |
|
367 | _loadextra(ui, newindex, extraloaders) | |
368 |
log('> extension registration object loading took %s\n', |
|
368 | ui.log(b'extension', b'> extension registration object loading took %s\n', | |
|
369 | stats) | |||
369 |
|
370 | |||
370 | # Report per extension loading time (except reposetup) |
|
371 | # Report per extension loading time (except reposetup) | |
371 | for name in sorted(loadingtime): |
|
372 | for name in sorted(loadingtime): | |
372 |
extension |
|
373 | ui.log(b'extension', b'> extension %s take a total of %s to load\n', | |
373 |
|
|
374 | name, util.timecount(loadingtime[name])) | |
374 |
|
375 | |||
375 | log('extension loading complete\n') |
|
376 | ui.log(b'extension', b'extension loading complete\n') | |
376 |
|
377 | |||
377 | def _loadextra(ui, newindex, extraloaders): |
|
378 | def _loadextra(ui, newindex, extraloaders): | |
378 | for name in _order[newindex:]: |
|
379 | for name in _order[newindex:]: |
@@ -160,23 +160,19 b' def _peerorrepo(ui, path, create=False, ' | |||||
160 | obj = _peerlookup(path).instance(ui, path, create, intents=intents, |
|
160 | obj = _peerlookup(path).instance(ui, path, create, intents=intents, | |
161 | createopts=createopts) |
|
161 | createopts=createopts) | |
162 | ui = getattr(obj, "ui", ui) |
|
162 | ui = getattr(obj, "ui", ui) | |
163 | if ui.configbool('devel', 'debug.extensions'): |
|
|||
164 | log = lambda msg, *values: ui.debug('debug.extensions: ', |
|
|||
165 | msg % values, label='debug.extensions') |
|
|||
166 | else: |
|
|||
167 | log = lambda *a, **kw: None |
|
|||
168 | for f in presetupfuncs or []: |
|
163 | for f in presetupfuncs or []: | |
169 | f(ui, obj) |
|
164 | f(ui, obj) | |
170 | log('- executing reposetup hooks\n') |
|
165 | ui.log(b'extension', b'- executing reposetup hooks\n') | |
171 | with util.timedcm('all reposetup') as allreposetupstats: |
|
166 | with util.timedcm('all reposetup') as allreposetupstats: | |
172 | for name, module in extensions.extensions(ui): |
|
167 | for name, module in extensions.extensions(ui): | |
173 |
log(' - running reposetup for %s\n' |
|
168 | ui.log(b'extension', b' - running reposetup for %s\n', name) | |
174 | hook = getattr(module, 'reposetup', None) |
|
169 | hook = getattr(module, 'reposetup', None) | |
175 | if hook: |
|
170 | if hook: | |
176 | with util.timedcm('reposetup %r', name) as stats: |
|
171 | with util.timedcm('reposetup %r', name) as stats: | |
177 | hook(ui, obj) |
|
172 | hook(ui, obj) | |
178 |
log(' > reposetup for %s took %s\n', |
|
173 | ui.log(b'extension', b' > reposetup for %s took %s\n', | |
179 | log('> all reposetup took %s\n', allreposetupstats) |
|
174 | name, stats) | |
|
175 | ui.log(b'extension', b'> all reposetup took %s\n', allreposetupstats) | |||
180 | if not obj.local(): |
|
176 | if not obj.local(): | |
181 | for f in wirepeersetupfuncs: |
|
177 | for f in wirepeersetupfuncs: | |
182 | f(ui, obj) |
|
178 | f(ui, obj) |
@@ -1,3 +1,7 b'' | |||||
|
1 | $ filterlog () { | |||
|
2 | > sed -e 's!^[0-9/]* [0-9:]* ([0-9]*)>!YYYY/MM/DD HH:MM:SS (PID)>!' | |||
|
3 | > } | |||
|
4 | ||||
1 | ensure that failing ui.atexit handlers report sensibly |
|
5 | ensure that failing ui.atexit handlers report sensibly | |
2 |
|
6 | |||
3 | $ cat > $TESTTMP/bailatexit.py <<EOF |
|
7 | $ cat > $TESTTMP/bailatexit.py <<EOF | |
@@ -82,29 +86,30 b' show traceback for ImportError of hgext.' | |||||
82 |
|
86 | |||
83 | $ (hg help help --traceback --debug --config devel.debug.extensions=yes 2>&1) \ |
|
87 | $ (hg help help --traceback --debug --config devel.debug.extensions=yes 2>&1) \ | |
84 | > | grep -v '^ ' \ |
|
88 | > | grep -v '^ ' \ | |
85 | > | egrep 'extension..[^p]|^Exception|Traceback|ImportError|not import|ModuleNotFound' |
|
89 | > | filterlog \ | |
86 | debug.extensions: loading extensions |
|
90 | > | egrep 'extension..[^p]|^Exception|Traceback|ImportError|^YYYY|not import|ModuleNotFound' | |
87 | debug.extensions: - processing 5 entries |
|
91 | YYYY/MM/DD HH:MM:SS (PID)> loading extensions | |
88 | debug.extensions: - loading extension: gpg |
|
92 | YYYY/MM/DD HH:MM:SS (PID)> - processing 5 entries | |
89 | debug.extensions: > gpg extension loaded in * (glob) |
|
93 | YYYY/MM/DD HH:MM:SS (PID)> - loading extension: gpg | |
90 | debug.extensions: - validating extension tables: gpg |
|
94 | YYYY/MM/DD HH:MM:SS (PID)> > gpg extension loaded in * (glob) | |
91 | debug.extensions: - invoking registered callbacks: gpg |
|
95 | YYYY/MM/DD HH:MM:SS (PID)> - validating extension tables: gpg | |
92 | debug.extensions: > callbacks completed in * (glob) |
|
96 | YYYY/MM/DD HH:MM:SS (PID)> - invoking registered callbacks: gpg | |
93 | debug.extensions: - loading extension: badext |
|
97 | YYYY/MM/DD HH:MM:SS (PID)> > callbacks completed in * (glob) | |
|
98 | YYYY/MM/DD HH:MM:SS (PID)> - loading extension: badext | |||
94 | *** failed to import extension badext from $TESTTMP/badext.py: bit bucket overflow |
|
99 | *** failed to import extension badext from $TESTTMP/badext.py: bit bucket overflow | |
95 | Traceback (most recent call last): |
|
100 | Traceback (most recent call last): | |
96 | Exception: bit bucket overflow |
|
101 | Exception: bit bucket overflow | |
97 |
|
|
102 | YYYY/MM/DD HH:MM:SS (PID)> - loading extension: baddocext | |
98 |
|
|
103 | YYYY/MM/DD HH:MM:SS (PID)> > baddocext extension loaded in * (glob) | |
99 |
|
|
104 | YYYY/MM/DD HH:MM:SS (PID)> - validating extension tables: baddocext | |
100 |
|
|
105 | YYYY/MM/DD HH:MM:SS (PID)> - invoking registered callbacks: baddocext | |
101 |
|
|
106 | YYYY/MM/DD HH:MM:SS (PID)> > callbacks completed in * (glob) | |
102 |
|
|
107 | YYYY/MM/DD HH:MM:SS (PID)> - loading extension: badext2 | |
103 |
|
|
108 | YYYY/MM/DD HH:MM:SS (PID)> - could not import hgext.badext2 (No module named *badext2*): trying hgext3rd.badext2 (glob) | |
104 | Traceback (most recent call last): |
|
109 | Traceback (most recent call last): | |
105 | ImportError: No module named badext2 (no-py3 !) |
|
110 | ImportError: No module named badext2 (no-py3 !) | |
106 | ModuleNotFoundError: No module named 'hgext.badext2' (py3 !) |
|
111 | ModuleNotFoundError: No module named 'hgext.badext2' (py3 !) | |
107 |
|
|
112 | YYYY/MM/DD HH:MM:SS (PID)> - could not import hgext3rd.badext2 (No module named *badext2*): trying badext2 (glob) | |
108 | Traceback (most recent call last): |
|
113 | Traceback (most recent call last): | |
109 | ImportError: No module named badext2 (no-py3 !) |
|
114 | ImportError: No module named badext2 (no-py3 !) | |
110 | ModuleNotFoundError: No module named 'hgext.badext2' (py3 !) |
|
115 | ModuleNotFoundError: No module named 'hgext.badext2' (py3 !) | |
@@ -118,27 +123,27 b' show traceback for ImportError of hgext.' | |||||
118 | Traceback (most recent call last): (py3 !) |
|
123 | Traceback (most recent call last): (py3 !) | |
119 | ModuleNotFoundError: No module named 'badext2' (py3 !) |
|
124 | ModuleNotFoundError: No module named 'badext2' (py3 !) | |
120 | ImportError: No module named badext2 (no-py3 !) |
|
125 | ImportError: No module named badext2 (no-py3 !) | |
121 |
|
|
126 | YYYY/MM/DD HH:MM:SS (PID)> > loaded 2 extensions, total time * (glob) | |
122 |
|
|
127 | YYYY/MM/DD HH:MM:SS (PID)> - loading configtable attributes | |
123 | debug.extensions: - executing uisetup hooks |
|
128 | YYYY/MM/DD HH:MM:SS (PID)> - executing uisetup hooks | |
124 |
|
|
129 | YYYY/MM/DD HH:MM:SS (PID)> - running uisetup for gpg | |
125 |
|
|
130 | YYYY/MM/DD HH:MM:SS (PID)> > uisetup for gpg took * (glob) | |
126 |
|
|
131 | YYYY/MM/DD HH:MM:SS (PID)> - running uisetup for baddocext | |
127 |
|
|
132 | YYYY/MM/DD HH:MM:SS (PID)> > uisetup for baddocext took * (glob) | |
128 |
|
|
133 | YYYY/MM/DD HH:MM:SS (PID)> > all uisetup took * (glob) | |
129 | debug.extensions: - executing extsetup hooks |
|
134 | YYYY/MM/DD HH:MM:SS (PID)> - executing extsetup hooks | |
130 |
|
|
135 | YYYY/MM/DD HH:MM:SS (PID)> - running extsetup for gpg | |
131 |
|
|
136 | YYYY/MM/DD HH:MM:SS (PID)> > extsetup for gpg took * (glob) | |
132 |
|
|
137 | YYYY/MM/DD HH:MM:SS (PID)> - running extsetup for baddocext | |
133 |
|
|
138 | YYYY/MM/DD HH:MM:SS (PID)> > extsetup for baddocext took * (glob) | |
134 |
|
|
139 | YYYY/MM/DD HH:MM:SS (PID)> > all extsetup took * (glob) | |
135 |
|
|
140 | YYYY/MM/DD HH:MM:SS (PID)> - executing remaining aftercallbacks | |
136 |
|
|
141 | YYYY/MM/DD HH:MM:SS (PID)> > remaining aftercallbacks completed in * (glob) | |
137 |
|
|
142 | YYYY/MM/DD HH:MM:SS (PID)> - loading extension registration objects | |
138 |
|
|
143 | YYYY/MM/DD HH:MM:SS (PID)> > extension registration object loading took * (glob) | |
139 |
|
|
144 | YYYY/MM/DD HH:MM:SS (PID)> > extension baddocext take a total of * to load (glob) | |
140 |
|
|
145 | YYYY/MM/DD HH:MM:SS (PID)> > extension gpg take a total of * to load (glob) | |
141 | debug.extensions: extension loading complete |
|
146 | YYYY/MM/DD HH:MM:SS (PID)> extension loading complete | |
142 | #endif |
|
147 | #endif | |
143 |
|
148 | |||
144 | confirm that there's no crash when an extension's documentation is bad |
|
149 | confirm that there's no crash when an extension's documentation is bad |
@@ -41,54 +41,58 b' Test basic extension support' | |||||
41 | $ echo '[extensions]' >> $HGRCPATH |
|
41 | $ echo '[extensions]' >> $HGRCPATH | |
42 | $ echo "foobar = $abspath" >> $HGRCPATH |
|
42 | $ echo "foobar = $abspath" >> $HGRCPATH | |
43 |
|
43 | |||
|
44 | $ filterlog () { | |||
|
45 | > sed -e 's!^[0-9/]* [0-9:]* ([0-9]*)>!YYYY/MM/DD HH:MM:SS (PID)>!' | |||
|
46 | > } | |||
|
47 | ||||
44 | Test extension setup timings |
|
48 | Test extension setup timings | |
45 |
|
49 | |||
46 | $ hg foo --traceback --config devel.debug.extensions=yes --debug 2>&1 |
|
50 | $ hg foo --traceback --config devel.debug.extensions=yes --debug 2>&1 | filterlog | |
47 | debug.extensions: loading extensions |
|
51 | YYYY/MM/DD HH:MM:SS (PID)> loading extensions | |
48 | debug.extensions: - processing 1 entries |
|
52 | YYYY/MM/DD HH:MM:SS (PID)> - processing 1 entries | |
49 |
|
|
53 | YYYY/MM/DD HH:MM:SS (PID)> - loading extension: foobar | |
50 |
|
|
54 | YYYY/MM/DD HH:MM:SS (PID)> > foobar extension loaded in * (glob) | |
51 |
|
|
55 | YYYY/MM/DD HH:MM:SS (PID)> - validating extension tables: foobar | |
52 |
|
|
56 | YYYY/MM/DD HH:MM:SS (PID)> - invoking registered callbacks: foobar | |
53 |
|
|
57 | YYYY/MM/DD HH:MM:SS (PID)> > callbacks completed in * (glob) | |
54 |
|
|
58 | YYYY/MM/DD HH:MM:SS (PID)> > loaded 1 extensions, total time * (glob) | |
55 |
|
|
59 | YYYY/MM/DD HH:MM:SS (PID)> - loading configtable attributes | |
56 | debug.extensions: - executing uisetup hooks |
|
60 | YYYY/MM/DD HH:MM:SS (PID)> - executing uisetup hooks | |
57 |
|
|
61 | YYYY/MM/DD HH:MM:SS (PID)> - running uisetup for foobar | |
58 | uisetup called [debug] |
|
62 | uisetup called [debug] | |
59 | uisetup called |
|
63 | uisetup called | |
60 | uisetup called [status] |
|
64 | uisetup called [status] | |
61 |
|
|
65 | YYYY/MM/DD HH:MM:SS (PID)> > uisetup for foobar took * (glob) | |
62 |
|
|
66 | YYYY/MM/DD HH:MM:SS (PID)> > all uisetup took * (glob) | |
63 | debug.extensions: - executing extsetup hooks |
|
67 | YYYY/MM/DD HH:MM:SS (PID)> - executing extsetup hooks | |
64 |
|
|
68 | YYYY/MM/DD HH:MM:SS (PID)> - running extsetup for foobar | |
65 |
|
|
69 | YYYY/MM/DD HH:MM:SS (PID)> > extsetup for foobar took * (glob) | |
66 |
|
|
70 | YYYY/MM/DD HH:MM:SS (PID)> > all extsetup took * (glob) | |
67 |
|
|
71 | YYYY/MM/DD HH:MM:SS (PID)> - executing remaining aftercallbacks | |
68 |
|
|
72 | YYYY/MM/DD HH:MM:SS (PID)> > remaining aftercallbacks completed in * (glob) | |
69 |
|
|
73 | YYYY/MM/DD HH:MM:SS (PID)> - loading extension registration objects | |
70 |
|
|
74 | YYYY/MM/DD HH:MM:SS (PID)> > extension registration object loading took * (glob) | |
71 |
|
|
75 | YYYY/MM/DD HH:MM:SS (PID)> > extension foobar take a total of * to load (glob) | |
72 | debug.extensions: extension loading complete |
|
76 | YYYY/MM/DD HH:MM:SS (PID)> extension loading complete | |
73 |
|
|
77 | YYYY/MM/DD HH:MM:SS (PID)> loading additional extensions | |
74 | debug.extensions: - processing 1 entries |
|
78 | YYYY/MM/DD HH:MM:SS (PID)> - processing 1 entries | |
75 |
|
|
79 | YYYY/MM/DD HH:MM:SS (PID)> > loaded 0 extensions, total time * (glob) | |
76 |
|
|
80 | YYYY/MM/DD HH:MM:SS (PID)> - loading configtable attributes | |
77 | debug.extensions: - executing uisetup hooks |
|
81 | YYYY/MM/DD HH:MM:SS (PID)> - executing uisetup hooks | |
78 |
|
|
82 | YYYY/MM/DD HH:MM:SS (PID)> > all uisetup took * (glob) | |
79 | debug.extensions: - executing extsetup hooks |
|
83 | YYYY/MM/DD HH:MM:SS (PID)> - executing extsetup hooks | |
80 |
|
|
84 | YYYY/MM/DD HH:MM:SS (PID)> > all extsetup took * (glob) | |
81 |
|
|
85 | YYYY/MM/DD HH:MM:SS (PID)> - executing remaining aftercallbacks | |
82 |
|
|
86 | YYYY/MM/DD HH:MM:SS (PID)> > remaining aftercallbacks completed in * (glob) | |
83 |
|
|
87 | YYYY/MM/DD HH:MM:SS (PID)> - loading extension registration objects | |
84 |
|
|
88 | YYYY/MM/DD HH:MM:SS (PID)> > extension registration object loading took * (glob) | |
85 | debug.extensions: extension loading complete |
|
89 | YYYY/MM/DD HH:MM:SS (PID)> extension loading complete | |
86 |
|
|
90 | YYYY/MM/DD HH:MM:SS (PID)> - executing reposetup hooks | |
87 |
|
|
91 | YYYY/MM/DD HH:MM:SS (PID)> - running reposetup for foobar | |
88 | reposetup called for a |
|
92 | reposetup called for a | |
89 | ui == repo.ui |
|
93 | ui == repo.ui | |
90 |
|
|
94 | YYYY/MM/DD HH:MM:SS (PID)> > reposetup for foobar took * (glob) | |
91 |
|
|
95 | YYYY/MM/DD HH:MM:SS (PID)> > all reposetup took * (glob) | |
92 | Foo |
|
96 | Foo | |
93 |
|
97 | |||
94 | $ cd .. |
|
98 | $ cd .. |
General Comments 0
You need to be logged in to leave comments.
Login now