##// END OF EJS Templates
mq: regularize patch header creation....
mq: regularize patch header creation. Do not prefix qnew patches with [mq]: when a message has been given. Always use [mq]: as the prefix for generated commit messages.

File last commit:

r4635:63b9d2de default
r4722:487943b5 default
Show More
extensions.py
79 lines | 2.5 KiB | text/x-python | PythonLexer
Matt Mackall
Create a separate module for managing extensions
r4544 # extensions.py - extension handling for mercurial
#
Thomas Arendsen Hein
Updated copyright notices and add "and others" to "hg version"
r4635 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
Matt Mackall
Create a separate module for managing extensions
r4544 #
# This software may be used and distributed according to the terms
# of the GNU General Public License, incorporated herein by reference.
Brendan Cully
extensions: load modules in module/__init__.py form....
r4569 import imp, os
import commands, hg, util, sys
Matt Mackall
Create a separate module for managing extensions
r4544 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():
Matt Mackall
extensions: fix lookup of hgext.foo modules
r4560 if k.endswith('.' + name) or k.endswith('/' + name):
return v
Matt Mackall
Create a separate module for managing extensions
r4544 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('.', '_')
Brendan Cully
extensions: load modules in module/__init__.py form....
r4569 if os.path.isdir(path):
# module/__init__.py style
Brendan Cully
extensions: fix load of module/__init__.py on OS X
r4580 d, f = os.path.split(path)
fd, fpath, desc = imp.find_module(f, [d])
Brendan Cully
extensions: load modules in module/__init__.py form....
r4569 mod = imp.load_module(module_name, fd, fpath, desc)
else:
mod = imp.load_source(module_name, path)
Matt Mackall
Create a separate module for managing extensions
r4544 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):
Matt Mackall
extensions: pull extension-aware bits out of ui
r4617 result = ui.configitems("extensions")
for i, (name, path) in enumerate(result):
if path:
Thomas Arendsen Hein
Cleanup of whitespace, indentation and line continuation.
r4633 path = os.path.expanduser(path)
Matt Mackall
Create a separate module for managing extensions
r4544 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