Mercurial > public > mercurial-scm > hg-stable
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 |