mercurial/extensions.py
changeset 39286 331ab85e910b
parent 38838 d58958676b3c
child 39525 1a2bfc4d756a
equal deleted inserted replaced
39285:497effb0a04a 39286:331ab85e910b
   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):