comparison mercurial/commands.py @ 1517:b582dbc16165

Canonicalize command when using aliases or prefix matching. This makes the norepo check and the help and version command work when not using the canonical name.
author Thomas Arendsen Hein <thomas@intevation.de>
date Mon, 07 Nov 2005 18:39:25 +0100
parents cd8fadd8c689
children ac4ca6bf2383
comparison
equal deleted inserted replaced
1508:b254243b7159 1517:b582dbc16165
385 option_lists = [] 385 option_lists = []
386 if cmd and cmd != 'shortlist': 386 if cmd and cmd != 'shortlist':
387 if with_version: 387 if with_version:
388 show_version(ui) 388 show_version(ui)
389 ui.write('\n') 389 ui.write('\n')
390 key, i = find(cmd) 390 aliases, i = find(cmd)
391 # synopsis 391 # synopsis
392 ui.write("%s\n\n" % i[2]) 392 ui.write("%s\n\n" % i[2])
393 393
394 # description 394 # description
395 doc = i[0].__doc__ 395 doc = i[0].__doc__
397 doc = doc.splitlines(0)[0] 397 doc = doc.splitlines(0)[0]
398 ui.write("%s\n" % doc.rstrip()) 398 ui.write("%s\n" % doc.rstrip())
399 399
400 if not ui.quiet: 400 if not ui.quiet:
401 # aliases 401 # aliases
402 aliases = ', '.join(key.split('|')[1:]) 402 if len(aliases) > 1:
403 if aliases: 403 ui.write(_("\naliases: %s\n") % ', '.join(aliases[1:]))
404 ui.write(_("\naliases: %s\n") % aliases)
405 404
406 # options 405 # options
407 if i[1]: 406 if i[1]:
408 option_lists.append(("options", i[1])) 407 option_lists.append(("options", i[1]))
409 408
2372 2371
2373 norepo = ("clone init version help debugancestor debugconfig debugdata" 2372 norepo = ("clone init version help debugancestor debugconfig debugdata"
2374 " debugindex debugindexdot paths") 2373 " debugindex debugindexdot paths")
2375 2374
2376 def find(cmd): 2375 def find(cmd):
2377 choice = [] 2376 """Return (aliases, command table entry) for command string."""
2377 choice = None
2378 for e in table.keys(): 2378 for e in table.keys():
2379 aliases = e.lstrip("^").split("|") 2379 aliases = e.lstrip("^").split("|")
2380 if cmd in aliases: 2380 if cmd in aliases:
2381 return e, table[e] 2381 return aliases, table[e]
2382 for a in aliases: 2382 for a in aliases:
2383 if a.startswith(cmd): 2383 if a.startswith(cmd):
2384 choice.append(e) 2384 if choice:
2385 if len(choice) == 1: 2385 raise UnknownCommand(cmd)
2386 e = choice[0] 2386 else:
2387 return e, table[e] 2387 choice = aliases, table[e]
2388 if choice:
2389 return choice
2388 2390
2389 raise UnknownCommand(cmd) 2391 raise UnknownCommand(cmd)
2390 2392
2391 class SignalInterrupt(Exception): 2393 class SignalInterrupt(Exception):
2392 """Exception raised on SIGTERM and SIGHUP.""" 2394 """Exception raised on SIGTERM and SIGHUP."""
2420 except fancyopts.getopt.GetoptError, inst: 2422 except fancyopts.getopt.GetoptError, inst:
2421 raise ParseError(None, inst) 2423 raise ParseError(None, inst)
2422 2424
2423 cmd, args = args[0], args[1:] 2425 cmd, args = args[0], args[1:]
2424 2426
2425 i = find(cmd)[1] 2427 aliases, i = find(cmd)
2428 cmd = aliases[0]
2426 c = list(i[1]) 2429 c = list(i[1])
2427 else: 2430 else:
2428 cmd = None 2431 cmd = None
2429 c = [] 2432 c = []
2430 2433