mercurial/extensions.py
changeset 37974 b45f4c1532c0
parent 37973 5b60f7d652f2
child 37975 6e526b0961a8
equal deleted inserted replaced
37973:5b60f7d652f2 37974:b45f4c1532c0
   653 
   653 
   654     paths = _disabledpaths()
   654     paths = _disabledpaths()
   655     if name in paths:
   655     if name in paths:
   656         return _disabledhelp(paths[name])
   656         return _disabledhelp(paths[name])
   657 
   657 
       
   658 def _finddisabledcmd(ui, cmd, name, path, strict):
       
   659     try:
       
   660         mod = loadpath(path, 'hgext.%s' % name)
       
   661     except Exception:
       
   662         return
       
   663     try:
       
   664         aliases, entry = cmdutil.findcmd(cmd,
       
   665             getattr(mod, 'cmdtable', {}), strict)
       
   666     except (error.AmbiguousCommand, error.UnknownCommand):
       
   667         return
       
   668     except Exception:
       
   669         ui.warn(_('warning: error finding commands in %s\n') % path)
       
   670         ui.traceback()
       
   671         return
       
   672     for c in aliases:
       
   673         if c.startswith(cmd):
       
   674             cmd = c
       
   675             break
       
   676     else:
       
   677         cmd = aliases[0]
       
   678     return (cmd, name, mod)
       
   679 
   658 def disabledcmd(ui, cmd, strict=False):
   680 def disabledcmd(ui, cmd, strict=False):
   659     '''import disabled extensions until cmd is found.
   681     '''import disabled extensions until cmd is found.
   660     returns (cmdname, extname, module)'''
   682     returns (cmdname, extname, module)'''
   661 
   683 
   662     paths = _disabledpaths(strip_init=True)
   684     paths = _disabledpaths(strip_init=True)
   663     if not paths:
   685     if not paths:
   664         raise error.UnknownCommand(cmd)
   686         raise error.UnknownCommand(cmd)
   665 
       
   666     def findcmd(cmd, name, path):
       
   667         try:
       
   668             mod = loadpath(path, 'hgext.%s' % name)
       
   669         except Exception:
       
   670             return
       
   671         try:
       
   672             aliases, entry = cmdutil.findcmd(cmd,
       
   673                 getattr(mod, 'cmdtable', {}), strict)
       
   674         except (error.AmbiguousCommand, error.UnknownCommand):
       
   675             return
       
   676         except Exception:
       
   677             ui.warn(_('warning: error finding commands in %s\n') % path)
       
   678             ui.traceback()
       
   679             return
       
   680         for c in aliases:
       
   681             if c.startswith(cmd):
       
   682                 cmd = c
       
   683                 break
       
   684         else:
       
   685             cmd = aliases[0]
       
   686         return (cmd, name, mod)
       
   687 
   687 
   688     ext = None
   688     ext = None
   689     # first, search for an extension with the same name as the command
   689     # first, search for an extension with the same name as the command
   690     path = paths.pop(cmd, None)
   690     path = paths.pop(cmd, None)
   691     if path:
   691     if path:
   692         ext = findcmd(cmd, cmd, path)
   692         ext = _finddisabledcmd(ui, cmd, cmd, path, strict=strict)
   693     if not ext:
   693     if not ext:
   694         # otherwise, interrogate each extension until there's a match
   694         # otherwise, interrogate each extension until there's a match
   695         for name, path in paths.iteritems():
   695         for name, path in paths.iteritems():
   696             ext = findcmd(cmd, name, path)
   696             ext = _finddisabledcmd(ui, cmd, name, path, strict=strict)
   697             if ext:
   697             if ext:
   698                 break
   698                 break
   699     if ext:
   699     if ext:
   700         return ext
   700         return ext
   701 
   701