mercurial/dispatch.py
changeset 22160 645457f73aa6
parent 22158 bc2132dfc0a4
child 22161 063628423fd1
equal deleted inserted replaced
22159:db7921812f56 22160:645457f73aa6
   355 class cmdalias(object):
   355 class cmdalias(object):
   356     def __init__(self, name, definition, cmdtable):
   356     def __init__(self, name, definition, cmdtable):
   357         self.name = self.cmd = name
   357         self.name = self.cmd = name
   358         self.cmdname = ''
   358         self.cmdname = ''
   359         self.definition = definition
   359         self.definition = definition
       
   360         self.fn = None
   360         self.args = []
   361         self.args = []
   361         self.opts = []
   362         self.opts = []
   362         self.help = ''
   363         self.help = ''
   363         self.norepo = True
   364         self.norepo = True
   364         self.optionalrepo = False
   365         self.optionalrepo = False
   365         self.badalias = False
   366         self.badalias = None
   366 
   367 
   367         try:
   368         try:
   368             aliases, entry = cmdutil.findcmd(self.name, cmdtable)
   369             aliases, entry = cmdutil.findcmd(self.name, cmdtable)
   369             for alias, e in cmdtable.iteritems():
   370             for alias, e in cmdtable.iteritems():
   370                 if e is entry:
   371                 if e is entry:
   373             self.shadows = True
   374             self.shadows = True
   374         except error.UnknownCommand:
   375         except error.UnknownCommand:
   375             self.shadows = False
   376             self.shadows = False
   376 
   377 
   377         if not self.definition:
   378         if not self.definition:
   378             def fn(ui, *args):
   379             self.badalias = _("no definition for alias '%s'") % self.name
   379                 ui.warn(_("no definition for alias '%s'\n") % self.name)
       
   380                 return -1
       
   381             self.fn = fn
       
   382             self.badalias = True
       
   383             return
   380             return
   384 
   381 
   385         if self.definition.startswith('!'):
   382         if self.definition.startswith('!'):
   386             self.shell = True
   383             self.shell = True
   387             def fn(ui, *args):
   384             def fn(ui, *args):
   403             return
   400             return
   404 
   401 
   405         try:
   402         try:
   406             args = shlex.split(self.definition)
   403             args = shlex.split(self.definition)
   407         except ValueError, inst:
   404         except ValueError, inst:
   408             def fn(ui, *args):
   405             self.badalias = (_("error in definition for alias '%s': %s")
   409                 ui.warn(_("error in definition for alias '%s': %s\n")
   406                              % (self.name, inst))
   410                         % (self.name, inst))
       
   411                 return -1
       
   412             self.fn = fn
       
   413             self.badalias = True
       
   414             return
   407             return
   415         self.cmdname = cmd = args.pop(0)
   408         self.cmdname = cmd = args.pop(0)
   416         args = map(util.expandpath, args)
   409         args = map(util.expandpath, args)
   417 
   410 
   418         for invalidarg in ("--cwd", "-R", "--repository", "--repo", "--config"):
   411         for invalidarg in ("--cwd", "-R", "--repository", "--repo", "--config"):
   419             if _earlygetopt([invalidarg], args):
   412             if _earlygetopt([invalidarg], args):
   420                 def fn(ui, *args):
   413                 self.badalias = (_("error in definition for alias '%s': %s may "
   421                     ui.warn(_("error in definition for alias '%s': %s may only "
   414                                    "only be given on the command line")
   422                               "be given on the command line\n")
   415                                  % (self.name, invalidarg))
   423                             % (self.name, invalidarg))
       
   424                     return -1
       
   425 
       
   426                 self.fn = fn
       
   427                 self.badalias = True
       
   428                 return
   416                 return
   429 
   417 
   430         try:
   418         try:
   431             tableentry = cmdutil.findcmd(cmd, cmdtable, False)[1]
   419             tableentry = cmdutil.findcmd(cmd, cmdtable, False)[1]
   432             if len(tableentry) > 2:
   420             if len(tableentry) > 2:
   444                 self.help = self.help[4 + len(cmd):]
   432                 self.help = self.help[4 + len(cmd):]
   445             self.__doc__ = self.fn.__doc__
   433             self.__doc__ = self.fn.__doc__
   446 
   434 
   447         except error.UnknownCommand:
   435         except error.UnknownCommand:
   448             def fn(ui, *args):
   436             def fn(ui, *args):
   449                 ui.warn(_("alias '%s' resolves to unknown command '%s'\n") \
       
   450                             % (self.name, cmd))
       
   451                 try:
   437                 try:
   452                     # check if the command is in a disabled extension
   438                     # check if the command is in a disabled extension
   453                     commands.help_(ui, cmd, unknowncmd=True)
   439                     commands.help_(ui, cmd, unknowncmd=True)
   454                 except error.UnknownCommand:
   440                 except error.UnknownCommand:
   455                     pass
   441                     pass
   456                 return -1
   442                 return -1
   457             self.fn = fn
   443             self.fn = fn
   458             self.badalias = True
   444             self.badalias = (_("alias '%s' resolves to unknown command '%s'")
       
   445                              % (self.name, cmd))
   459         except error.AmbiguousCommand:
   446         except error.AmbiguousCommand:
   460             def fn(ui, *args):
   447             self.badalias = (_("alias '%s' resolves to ambiguous command '%s'")
   461                 ui.warn(_("alias '%s' resolves to ambiguous command '%s'\n") \
   448                              % (self.name, cmd))
   462                             % (self.name, cmd))
       
   463                 return -1
       
   464             self.fn = fn
       
   465             self.badalias = True
       
   466 
   449 
   467     def __call__(self, ui, *args, **opts):
   450     def __call__(self, ui, *args, **opts):
       
   451         if self.badalias:
       
   452             ui.warn(self.badalias + '\n')
       
   453             if self.fn:
       
   454                 return self.fn(ui, *args, **opts)
       
   455             return -1
   468         if self.shadows:
   456         if self.shadows:
   469             ui.debug("alias '%s' shadows command '%s'\n" %
   457             ui.debug("alias '%s' shadows command '%s'\n" %
   470                      (self.name, self.cmdname))
   458                      (self.name, self.cmdname))
   471 
   459 
   472         if util.safehasattr(self, 'shell'):
   460         if util.safehasattr(self, 'shell'):