175 return None |
175 return None |
176 if shortname in _extensions: |
176 if shortname in _extensions: |
177 return _extensions[shortname] |
177 return _extensions[shortname] |
178 log(' - loading extension: %r\n', shortname) |
178 log(' - loading extension: %r\n', shortname) |
179 _extensions[shortname] = None |
179 _extensions[shortname] = None |
180 with util.timedcm() as stats: |
180 with util.timedcm('load extension %r', shortname) as stats: |
181 mod = _importext(name, path, bind(_reportimporterror, ui)) |
181 mod = _importext(name, path, bind(_reportimporterror, ui)) |
182 log(' > %r extension loaded in %s\n', shortname, stats) |
182 log(' > %r extension loaded in %s\n', shortname, stats) |
183 |
183 |
184 # Before we do anything with the extension, check against minimum stated |
184 # Before we do anything with the extension, check against minimum stated |
185 # compatibility. This gives extension authors a mechanism to have their |
185 # compatibility. This gives extension authors a mechanism to have their |
194 _validatetables(ui, mod) |
194 _validatetables(ui, mod) |
195 |
195 |
196 _extensions[shortname] = mod |
196 _extensions[shortname] = mod |
197 _order.append(shortname) |
197 _order.append(shortname) |
198 log(' - invoking registered callbacks: %r\n', shortname) |
198 log(' - invoking registered callbacks: %r\n', shortname) |
199 with util.timedcm() as stats: |
199 with util.timedcm('callbacks extension %r', shortname) as stats: |
200 for fn in _aftercallbacks.get(shortname, []): |
200 for fn in _aftercallbacks.get(shortname, []): |
201 fn(loaded=True) |
201 fn(loaded=True) |
202 log(' > callbacks completed in %s\n', stats) |
202 log(' > callbacks completed in %s\n', stats) |
203 return mod |
203 return mod |
204 |
204 |
241 if whitelist is not None: |
241 if whitelist is not None: |
242 result = [(k, v) for (k, v) in result if k in whitelist] |
242 result = [(k, v) for (k, v) in result if k in whitelist] |
243 newindex = len(_order) |
243 newindex = len(_order) |
244 log('loading %sextensions\n', 'additional ' if newindex else '') |
244 log('loading %sextensions\n', 'additional ' if newindex else '') |
245 log('- processing %d entries\n', len(result)) |
245 log('- processing %d entries\n', len(result)) |
246 with util.timedcm() as stats: |
246 with util.timedcm('load all extensions') as stats: |
247 for (name, path) in result: |
247 for (name, path) in result: |
248 if path: |
248 if path: |
249 if path[0:1] == '!': |
249 if path[0:1] == '!': |
250 if name not in _disabledextensions: |
250 if name not in _disabledextensions: |
251 log(' - skipping disabled extension: %r\n', name) |
251 log(' - skipping disabled extension: %r\n', name) |
284 |
284 |
285 broken = set() |
285 broken = set() |
286 log('- executing uisetup hooks\n') |
286 log('- executing uisetup hooks\n') |
287 for name in _order[newindex:]: |
287 for name in _order[newindex:]: |
288 log(' - running uisetup for %r\n', name) |
288 log(' - running uisetup for %r\n', name) |
289 with util.timedcm() as stats: |
289 with util.timedcm('uisetup %r', name) as stats: |
290 if not _runuisetup(name, ui): |
290 if not _runuisetup(name, ui): |
291 log(' - the %r extension uisetup failed\n', name) |
291 log(' - the %r extension uisetup failed\n', name) |
292 broken.add(name) |
292 broken.add(name) |
293 log(' > uisetup for %r took %s\n', name, stats) |
293 log(' > uisetup for %r took %s\n', name, stats) |
294 |
294 |
295 log('- executing extsetup hooks\n') |
295 log('- executing extsetup hooks\n') |
296 for name in _order[newindex:]: |
296 for name in _order[newindex:]: |
297 if name in broken: |
297 if name in broken: |
298 continue |
298 continue |
299 log(' - running extsetup for %r\n', name) |
299 log(' - running extsetup for %r\n', name) |
300 with util.timedcm() as stats: |
300 with util.timedcm('extsetup %r', name) as stats: |
301 if not _runextsetup(name, ui): |
301 if not _runextsetup(name, ui): |
302 log(' - the %r extension extsetup failed\n', name) |
302 log(' - the %r extension extsetup failed\n', name) |
303 broken.add(name) |
303 broken.add(name) |
304 log(' > extsetup for %r took %s\n', name, stats) |
304 log(' > extsetup for %r took %s\n', name, stats) |
305 |
305 |
307 log(' - disabling broken %r extension\n', name) |
307 log(' - disabling broken %r extension\n', name) |
308 _extensions[name] = None |
308 _extensions[name] = None |
309 |
309 |
310 # Call aftercallbacks that were never met. |
310 # Call aftercallbacks that were never met. |
311 log('- executing remaining aftercallbacks\n') |
311 log('- executing remaining aftercallbacks\n') |
312 with util.timedcm() as stats: |
312 with util.timedcm('aftercallbacks') as stats: |
313 for shortname in _aftercallbacks: |
313 for shortname in _aftercallbacks: |
314 if shortname in _extensions: |
314 if shortname in _extensions: |
315 continue |
315 continue |
316 |
316 |
317 for fn in _aftercallbacks[shortname]: |
317 for fn in _aftercallbacks[shortname]: |
351 ('revsetpredicate', revset, 'loadpredicate'), |
351 ('revsetpredicate', revset, 'loadpredicate'), |
352 ('templatefilter', templatefilters, 'loadfilter'), |
352 ('templatefilter', templatefilters, 'loadfilter'), |
353 ('templatefunc', templatefuncs, 'loadfunction'), |
353 ('templatefunc', templatefuncs, 'loadfunction'), |
354 ('templatekeyword', templatekw, 'loadkeyword'), |
354 ('templatekeyword', templatekw, 'loadkeyword'), |
355 ] |
355 ] |
356 with util.timedcm() as stats: |
356 with util.timedcm('load registration objects') as stats: |
357 _loadextra(ui, newindex, extraloaders) |
357 _loadextra(ui, newindex, extraloaders) |
358 log('> extension registration object loading took %s\n', stats) |
358 log('> extension registration object loading took %s\n', stats) |
359 log('extension loading complete\n') |
359 log('extension loading complete\n') |
360 |
360 |
361 def _loadextra(ui, newindex, extraloaders): |
361 def _loadextra(ui, newindex, extraloaders): |