mercurial/extensions.py
changeset 7916 f779e1996e23
parent 7876 53c72ba36c2b
child 7960 5c794e7331e7
equal deleted inserted replaced
7915:fba93bbbca02 7916:f779e1996e23
    26         for k, v in _extensions.iteritems():
    26         for k, v in _extensions.iteritems():
    27             if k.endswith('.' + name) or k.endswith('/' + name):
    27             if k.endswith('.' + name) or k.endswith('/' + name):
    28                 return v
    28                 return v
    29         raise KeyError(name)
    29         raise KeyError(name)
    30 
    30 
       
    31 def loadpath(path, module_name):
       
    32     module_name = module_name.replace('.', '_')
       
    33     path = os.path.expanduser(path)
       
    34     if os.path.isdir(path):
       
    35         # module/__init__.py style
       
    36         d, f = os.path.split(path)
       
    37         fd, fpath, desc = imp.find_module(f, [d])
       
    38         return imp.load_module(module_name, fd, fpath, desc)
       
    39     else:
       
    40         return imp.load_source(module_name, path)
       
    41 
    31 def load(ui, name, path):
    42 def load(ui, name, path):
    32     if name.startswith('hgext.') or name.startswith('hgext/'):
    43     if name.startswith('hgext.') or name.startswith('hgext/'):
    33         shortname = name[6:]
    44         shortname = name[6:]
    34     else:
    45     else:
    35         shortname = name
    46         shortname = name
    38     _extensions[shortname] = None
    49     _extensions[shortname] = None
    39     if path:
    50     if path:
    40         # the module will be loaded in sys.modules
    51         # the module will be loaded in sys.modules
    41         # choose an unique name so that it doesn't
    52         # choose an unique name so that it doesn't
    42         # conflicts with other modules
    53         # conflicts with other modules
    43         module_name = "hgext_%s" % name.replace('.', '_')
    54         mod = loadpath(path, 'hgext.%s' % name)
    44         if os.path.isdir(path):
       
    45             # module/__init__.py style
       
    46             d, f = os.path.split(path)
       
    47             fd, fpath, desc = imp.find_module(f, [d])
       
    48             mod = imp.load_module(module_name, fd, fpath, desc)
       
    49         else:
       
    50             mod = imp.load_source(module_name, path)
       
    51     else:
    55     else:
    52         def importh(name):
    56         def importh(name):
    53             mod = __import__(name)
    57             mod = __import__(name)
    54             components = name.split('.')
    58             components = name.split('.')
    55             for comp in components[1:]:
    59             for comp in components[1:]:
    70     result = ui.configitems("extensions")
    74     result = ui.configitems("extensions")
    71     for (name, path) in result:
    75     for (name, path) in result:
    72         if path:
    76         if path:
    73             if path[0] == '!':
    77             if path[0] == '!':
    74                 continue
    78                 continue
    75             path = os.path.expanduser(path)
       
    76         try:
    79         try:
    77             load(ui, name, path)
    80             load(ui, name, path)
    78         except KeyboardInterrupt:
    81         except KeyboardInterrupt:
    79             raise
    82             raise
    80         except Exception, inst:
    83         except Exception, inst: