mercurial/commands.py
changeset 2945 731f6b3d27c2
parent 2942 f4fc0575e8fa
parent 2944 2efa9b8aed30
child 2956 6dddcba7596a
equal deleted inserted replaced
2942:f4fc0575e8fa 2945:731f6b3d27c2
  3240         for k, v in external.iteritems():
  3240         for k, v in external.iteritems():
  3241             if k.endswith('.' + name) or k.endswith('/' + name) or v == name:
  3241             if k.endswith('.' + name) or k.endswith('/' + name) or v == name:
  3242                 return sys.modules[v]
  3242                 return sys.modules[v]
  3243         raise KeyError(name)
  3243         raise KeyError(name)
  3244 
  3244 
  3245 def dispatch(args):
  3245 def load_extensions(ui):
  3246     for name in 'SIGBREAK', 'SIGHUP', 'SIGTERM':
  3246     added = []
  3247         num = getattr(signal, name, None)
  3247     for ext_name, load_from_name in ui.extensions():
  3248         if num: signal.signal(num, catchterm)
  3248         if ext_name in external:
  3249 
  3249             continue
  3250     try:
       
  3251         u = ui.ui(traceback='--traceback' in sys.argv[1:])
       
  3252     except util.Abort, inst:
       
  3253         sys.stderr.write(_("abort: %s\n") % inst)
       
  3254         return -1
       
  3255 
       
  3256     for ext_name, load_from_name in u.extensions():
       
  3257         try:
  3250         try:
  3258             if load_from_name:
  3251             if load_from_name:
  3259                 # the module will be loaded in sys.modules
  3252                 # the module will be loaded in sys.modules
  3260                 # choose an unique name so that it doesn't
  3253                 # choose an unique name so that it doesn't
  3261                 # conflicts with other modules
  3254                 # conflicts with other modules
  3271                 try:
  3264                 try:
  3272                     mod = importh("hgext.%s" % ext_name)
  3265                     mod = importh("hgext.%s" % ext_name)
  3273                 except ImportError:
  3266                 except ImportError:
  3274                     mod = importh(ext_name)
  3267                     mod = importh(ext_name)
  3275             external[ext_name] = mod.__name__
  3268             external[ext_name] = mod.__name__
       
  3269             added.append((mod, ext_name))
  3276         except (util.SignalInterrupt, KeyboardInterrupt):
  3270         except (util.SignalInterrupt, KeyboardInterrupt):
  3277             raise
  3271             raise
  3278         except Exception, inst:
  3272         except Exception, inst:
  3279             u.warn(_("*** failed to import extension %s: %s\n") % (ext_name, inst))
  3273             ui.warn(_("*** failed to import extension %s: %s\n") %
  3280             if u.print_exc():
  3274                     (ext_name, inst))
       
  3275             if ui.print_exc():
  3281                 return 1
  3276                 return 1
  3282 
  3277 
  3283     for name in external.itervalues():
  3278     for mod, name in added:
  3284         mod = sys.modules[name]
       
  3285         uisetup = getattr(mod, 'uisetup', None)
  3279         uisetup = getattr(mod, 'uisetup', None)
  3286         if uisetup:
  3280         if uisetup:
  3287             uisetup(u)
  3281             uisetup(ui)
  3288         cmdtable = getattr(mod, 'cmdtable', {})
  3282         cmdtable = getattr(mod, 'cmdtable', {})
  3289         for t in cmdtable:
  3283         for t in cmdtable:
  3290             if t in table:
  3284             if t in table:
  3291                 u.warn(_("module %s overrides %s\n") % (name, t))
  3285                 ui.warn(_("module %s overrides %s\n") % (name, t))
  3292         table.update(cmdtable)
  3286         table.update(cmdtable)
       
  3287     
       
  3288 def dispatch(args):
       
  3289     for name in 'SIGBREAK', 'SIGHUP', 'SIGTERM':
       
  3290         num = getattr(signal, name, None)
       
  3291         if num: signal.signal(num, catchterm)
       
  3292 
       
  3293     try:
       
  3294         u = ui.ui(traceback='--traceback' in sys.argv[1:],
       
  3295                   readhooks=[load_extensions])
       
  3296     except util.Abort, inst:
       
  3297         sys.stderr.write(_("abort: %s\n") % inst)
       
  3298         return -1
  3293 
  3299 
  3294     try:
  3300     try:
  3295         cmd, func, args, options, cmdoptions = parse(u, args)
  3301         cmd, func, args, options, cmdoptions = parse(u, args)
  3296         if options["time"]:
  3302         if options["time"]:
  3297             def get_times():
  3303             def get_times():