AmbiguousCommand is raised too soon.
Right now, hg raises AmbiguousCommand as soon as it finds two
commands/aliases that start with the substring it's searching for, even
though it may still find a full match later on.
This is a bit hard to hit on purpose, because hg checks the list of
commands in whatever order is returned by table.keys(), which will
change when you add an alias to a command. You should be able to hit it
by adding an alias "u" to the "identify" command - not that that makes a
lot of sense...
--- a/mercurial/commands.py Fri Feb 17 17:41:18 2006 -0600
+++ b/mercurial/commands.py Fri Feb 17 17:41:23 2006 -0600
@@ -2548,17 +2548,20 @@
def find(cmd):
"""Return (aliases, command table entry) for command string."""
choice = None
+ count = 0
for e in table.keys():
aliases = e.lstrip("^").split("|")
if cmd in aliases:
return aliases, table[e]
for a in aliases:
if a.startswith(cmd):
- if choice:
- raise AmbiguousCommand(cmd)
- else:
- choice = aliases, table[e]
- break
+ count += 1
+ choice = aliases, table[e]
+ break
+
+ if count > 1:
+ raise AmbiguousCommand(cmd)
+
if choice:
return choice