##// END OF EJS Templates
addremove: correctly handle intermediate symlinks...
addremove: correctly handle intermediate symlinks This fixes problems mentioned in issue660 comments (unrelated to original issue) where directory was renamed, and symlink was added instead. In such situation addremove wasn't able to correctly detect that old files no longer here, but tried to add symlink (and failed due collision with old files).

File last commit:

r6212:e75aab65 default
r6651:7f0dd352 default
Show More
extensions.py
89 lines | 2.6 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
Joel Rosdahl
Remove unused imports
r6212 import util
Matt Mackall
Create a separate module for managing extensions
r4544 from i18n import _
_extensions = {}
Alexis S. L. Carvalho
Move cmdtable and reposetup handling out of extensions.py...
r5192 _order = []
def extensions():
for name in _order:
module = _extensions[name]
if module:
yield name, module
Matt Mackall
Create a separate module for managing extensions
r4544
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):
Bryan O'Sullivan
extensions: don't get confused by aliasing between "foo" and "hgext.foo"
r5031 if name.startswith('hgext.'):
shortname = name[6:]
else:
shortname = name
if shortname in _extensions:
Matt Mackall
Create a separate module for managing extensions
r4544 return
Brendan Cully
Cache extension load failures....
r5087 _extensions[shortname] = None
Matt Mackall
Create a separate module for managing extensions
r4544 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)
Bryan O'Sullivan
extensions: don't get confused by aliasing between "foo" and "hgext.foo"
r5031 _extensions[shortname] = mod
Alexis S. L. Carvalho
Move cmdtable and reposetup handling out of extensions.py...
r5192 _order.append(shortname)
Matt Mackall
Create a separate module for managing extensions
r4544
uisetup = getattr(mod, 'uisetup', None)
if uisetup:
uisetup(ui)
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:
Steve Borho
Allow explicit disabling of extensions...
r5469 if path[0] == '!':
continue
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:
Jesse Glick
When failing to load an extension, show where Hg tried to load it from.
r6204 if path:
ui.warn(_("*** failed to import extension %s from %s: %s\n")
% (name, path, inst))
else:
ui.warn(_("*** failed to import extension %s: %s\n")
% (name, inst))
Matt Mackall
Create a separate module for managing extensions
r4544 if ui.print_exc():
return 1