##// END OF EJS Templates
fix problems with external module handling. found by benoit boissinot....
Vadim Gelfer -
r2573:b13a98bd default
parent child Browse files
Show More
@@ -3371,12 +3371,12 b' external = {}'
3371 def findext(name):
3371 def findext(name):
3372 '''return module with given extension name'''
3372 '''return module with given extension name'''
3373 try:
3373 try:
3374 return external[name]
3374 return sys.modules[external[name]]
3375 except KeyError:
3375 except KeyError:
3376 dotname = '.' + name
3376 dotname = '.' + name
3377 for k, v in external.iteritems():
3377 for k, v in external.iteritems():
3378 if k.endswith('.' + name) or v.__name__ == name:
3378 if k.endswith('.' + name) or v == name:
3379 return v
3379 return sys.modules[v]
3380 raise KeyError(name)
3380 raise KeyError(name)
3381
3381
3382 def dispatch(args):
3382 def dispatch(args):
@@ -3390,14 +3390,14 b' def dispatch(args):'
3390 sys.stderr.write(_("abort: %s\n") % inst)
3390 sys.stderr.write(_("abort: %s\n") % inst)
3391 return -1
3391 return -1
3392
3392
3393 for x in u.extensions():
3393 for ext_name, load_from_name in u.extensions():
3394 try:
3394 try:
3395 if x[1]:
3395 if load_from_name:
3396 # the module will be loaded in sys.modules
3396 # the module will be loaded in sys.modules
3397 # choose an unique name so that it doesn't
3397 # choose an unique name so that it doesn't
3398 # conflicts with other modules
3398 # conflicts with other modules
3399 module_name = "hgext_%s" % x[0].replace('.', '_')
3399 module_name = "hgext_%s" % ext_name.replace('.', '_')
3400 mod = imp.load_source(module_name, x[1])
3400 mod = imp.load_source(module_name, load_from_name)
3401 else:
3401 else:
3402 def importh(name):
3402 def importh(name):
3403 mod = __import__(name)
3403 mod = __import__(name)
@@ -3406,12 +3406,10 b' def dispatch(args):'
3406 mod = getattr(mod, comp)
3406 mod = getattr(mod, comp)
3407 return mod
3407 return mod
3408 try:
3408 try:
3409 name = 'hgext.' + x[0]
3409 mod = importh("hgext.%s" % ext_name)
3410 mod = importh(name)
3411 except ImportError:
3410 except ImportError:
3412 name = x[0]
3411 mod = importh(ext_name)
3413 mod = importh(name)
3412 external[ext_name] = mod.__name__
3414 external[name] = mod
3415 except (util.SignalInterrupt, KeyboardInterrupt):
3413 except (util.SignalInterrupt, KeyboardInterrupt):
3416 raise
3414 raise
3417 except Exception, inst:
3415 except Exception, inst:
@@ -3419,14 +3417,15 b' def dispatch(args):'
3419 if u.print_exc():
3417 if u.print_exc():
3420 return 1
3418 return 1
3421
3419
3422 for x in external.itervalues():
3420 for name in external.itervalues():
3423 uisetup = getattr(x, 'uisetup', None)
3421 mod = sys.modules[name]
3422 uisetup = getattr(mod, 'uisetup', None)
3424 if uisetup:
3423 if uisetup:
3425 uisetup(u)
3424 uisetup(u)
3426 cmdtable = getattr(x, 'cmdtable', {})
3425 cmdtable = getattr(mod, 'cmdtable', {})
3427 for t in cmdtable:
3426 for t in cmdtable:
3428 if t in table:
3427 if t in table:
3429 u.warn(_("module %s overrides %s\n") % (x.__name__, t))
3428 u.warn(_("module %s overrides %s\n") % (name, t))
3430 table.update(cmdtable)
3429 table.update(cmdtable)
3431
3430
3432 try:
3431 try:
@@ -3475,9 +3474,10 b' def dispatch(args):'
3475 if not repo:
3474 if not repo:
3476 repo = hg.repository(u, path=path)
3475 repo = hg.repository(u, path=path)
3477 u = repo.ui
3476 u = repo.ui
3478 for x in external.itervalues():
3477 for name in external.itervalues():
3479 if hasattr(x, 'reposetup'):
3478 mod = sys.modules[name]
3480 x.reposetup(u, repo)
3479 if hasattr(mod, 'reposetup'):
3480 mod.reposetup(u, repo)
3481 except hg.RepoError:
3481 except hg.RepoError:
3482 if cmd not in optionalrepo.split():
3482 if cmd not in optionalrepo.split():
3483 raise
3483 raise
General Comments 0
You need to be logged in to leave comments. Login now