mercurial/extensions.py
changeset 30058 8f54f9b8010d
parent 30030 3741a8f86e88
child 30319 5581b294f3c6
equal deleted inserted replaced
30057:a8ba9a23c893 30058:8f54f9b8010d
    78     components = name.split('.')
    78     components = name.split('.')
    79     for comp in components[1:]:
    79     for comp in components[1:]:
    80         mod = getattr(mod, comp)
    80         mod = getattr(mod, comp)
    81     return mod
    81     return mod
    82 
    82 
       
    83 def _importext(name, path=None, reportfunc=None):
       
    84     if path:
       
    85         # the module will be loaded in sys.modules
       
    86         # choose an unique name so that it doesn't
       
    87         # conflicts with other modules
       
    88         mod = loadpath(path, 'hgext.%s' % name)
       
    89     else:
       
    90         try:
       
    91             mod = _importh("hgext.%s" % name)
       
    92         except ImportError as err:
       
    93             if reportfunc:
       
    94                 reportfunc(err, "hgext.%s" % name, "hgext3rd.%s" % name)
       
    95             try:
       
    96                 mod = _importh("hgext3rd.%s" % name)
       
    97             except ImportError as err:
       
    98                 if reportfunc:
       
    99                     reportfunc(err, "hgext3rd.%s" % name, name)
       
   100                 mod = _importh(name)
       
   101     return mod
       
   102 
    83 def _reportimporterror(ui, err, failed, next):
   103 def _reportimporterror(ui, err, failed, next):
    84     # note: this ui.debug happens before --debug is processed,
   104     # note: this ui.debug happens before --debug is processed,
    85     #       Use --config ui.debug=1 to see them.
   105     #       Use --config ui.debug=1 to see them.
    86     ui.debug('could not import %s (%s): trying %s\n'
   106     ui.debug('could not import %s (%s): trying %s\n'
    87              % (failed, err, next))
   107              % (failed, err, next))
    96     if shortname in _builtin:
   116     if shortname in _builtin:
    97         return None
   117         return None
    98     if shortname in _extensions:
   118     if shortname in _extensions:
    99         return _extensions[shortname]
   119         return _extensions[shortname]
   100     _extensions[shortname] = None
   120     _extensions[shortname] = None
   101     if path:
   121     mod = _importext(name, path, bind(_reportimporterror, ui))
   102         # the module will be loaded in sys.modules
       
   103         # choose an unique name so that it doesn't
       
   104         # conflicts with other modules
       
   105         mod = loadpath(path, 'hgext.%s' % name)
       
   106     else:
       
   107         try:
       
   108             mod = _importh("hgext.%s" % name)
       
   109         except ImportError as err:
       
   110             _reportimporterror(ui, err, "hgext.%s" % name, "hgext3rd.%s" % name)
       
   111             try:
       
   112                 mod = _importh("hgext3rd.%s" % name)
       
   113             except ImportError as err:
       
   114                 _reportimporterror(ui, err, "hgext3rd.%s" % name, name)
       
   115                 mod = _importh(name)
       
   116 
   122 
   117     # Before we do anything with the extension, check against minimum stated
   123     # Before we do anything with the extension, check against minimum stated
   118     # compatibility. This gives extension authors a mechanism to have their
   124     # compatibility. This gives extension authors a mechanism to have their
   119     # extensions short circuit when loaded with a known incompatible version
   125     # extensions short circuit when loaded with a known incompatible version
   120     # of Mercurial.
   126     # of Mercurial.