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: |
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'): |