extensions: separate function for loading single extensions
authorMatt Mackall <mpm@selenic.com>
Mon, 11 Jun 2007 21:09:23 -0500
changeset 4543 6b4e8a75d5fc
parent 4542 af02e6078d08
child 4544 930ed513c864
extensions: separate function for loading single extensions
mercurial/commands.py
--- a/mercurial/commands.py	Mon Jun 11 21:09:23 2007 -0500
+++ b/mercurial/commands.py	Mon Jun 11 21:09:23 2007 -0500
@@ -3149,53 +3149,53 @@
                 return sys.modules[v]
         raise KeyError(name)
 
-def load_extensions(ui):
-    added = []
-    for ext_name, load_from_name in ui.extensions():
-        if ext_name in external:
-            continue
+def load_extension(ui, name, load):
+    if name in external:
+        return
+    if load:
+        # the module will be loaded in sys.modules
+        # choose an unique name so that it doesn't
+        # conflicts with other modules
+        module_name = "hgext_%s" % name.replace('.', '_')
+        mod = imp.load_source(module_name, load)
+    else:
+        def importh(name):
+            mod = __import__(name)
+            components = name.split('.')
+            for comp in components[1:]:
+                mod = getattr(mod, comp)
+            return mod
         try:
-            if load_from_name:
-                # the module will be loaded in sys.modules
-                # choose an unique name so that it doesn't
-                # conflicts with other modules
-                module_name = "hgext_%s" % ext_name.replace('.', '_')
-                mod = imp.load_source(module_name, load_from_name)
-            else:
-                def importh(name):
-                    mod = __import__(name)
-                    components = name.split('.')
-                    for comp in components[1:]:
-                        mod = getattr(mod, comp)
-                    return mod
-                try:
-                    mod = importh("hgext.%s" % ext_name)
-                except ImportError:
-                    mod = importh(ext_name)
-            external[ext_name] = mod.__name__
-            added.append((mod, ext_name))
+            mod = importh("hgext.%s" % name)
+        except ImportError:
+            mod = importh(name)
+    external[name] = mod.__name__
+
+    uisetup = getattr(mod, 'uisetup', None)
+    if uisetup:
+        uisetup(ui)
+    reposetup = getattr(mod, 'reposetup', None)
+    if reposetup:
+        hg.repo_setup_hooks.append(reposetup)
+    cmdtable = getattr(mod, 'cmdtable', {})
+    overrides = [cmd for cmd in cmdtable if cmd in table]
+    if overrides:
+        ui.warn(_("extension '%s' overrides commands: %s\n")
+                % (name, " ".join(overrides)))
+    table.update(cmdtable)
+
+def load_extensions(ui):
+    for name, load in ui.extensions():
+        try:
+            load_extension(ui, name, load)
         except (util.SignalInterrupt, KeyboardInterrupt):
             raise
         except Exception, inst:
             ui.warn(_("*** failed to import extension %s: %s\n") %
-                    (ext_name, inst))
+                    (name, inst))
             if ui.print_exc():
                 return 1
 
-    for mod, name in added:
-        uisetup = getattr(mod, 'uisetup', None)
-        if uisetup:
-            uisetup(ui)
-        reposetup = getattr(mod, 'reposetup', None)
-        if reposetup:
-            hg.repo_setup_hooks.append(reposetup)
-        cmdtable = getattr(mod, 'cmdtable', {})
-        overrides = [cmd for cmd in cmdtable if cmd in table]
-        if overrides:
-            ui.warn(_("extension '%s' overrides commands: %s\n")
-                    % (name, " ".join(overrides)))
-        table.update(cmdtable)
-
 def catchterm(*args):
     raise util.SignalInterrupt