--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/extensions.py Mon Jun 11 21:09:23 2007 -0500
@@ -0,0 +1,69 @@
+# extensions.py - extension handling for mercurial
+#
+# Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
+#
+# This software may be used and distributed according to the terms
+# of the GNU General Public License, incorporated herein by reference.
+
+import imp, commands, hg, util
+from i18n import _
+
+_extensions = {}
+
+def find(name):
+ '''return module with given extension name'''
+ try:
+ return _extensions[name]
+ except KeyError:
+ for k, v in _extensions.iteritems():
+ if k.endswith('.' + name) or k.endswith('/' + name) or v == name:
+ return sys.modules[v]
+ raise KeyError(name)
+
+def load(ui, name, path):
+ if name in _extensions:
+ return
+ if path:
+ # 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, path)
+ 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" % name)
+ except ImportError:
+ mod = importh(name)
+ _extensions[name] = mod
+
+ 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 commands.table]
+ if overrides:
+ ui.warn(_("extension '%s' overrides commands: %s\n")
+ % (name, " ".join(overrides)))
+ commands.table.update(cmdtable)
+
+def loadall(ui):
+ for name, path in ui.extensions():
+ try:
+ load(ui, name, path)
+ except (util.SignalInterrupt, KeyboardInterrupt):
+ raise
+ except Exception, inst:
+ ui.warn(_("*** failed to import extension %s: %s\n") %
+ (name, inst))
+ if ui.print_exc():
+ return 1
+