AmbiguousCommand is raised too soon.
authorAlexis S. L. Carvalho <alexis@cecm.usp.br>
Fri, 17 Feb 2006 17:41:23 -0600
changeset 1739 57de7e1a81d2
parent 1738 f293ad87f928
child 1743 813f9f5fe837
child 1779 a1e6e02e9d05
child 1923 7d83a351a936
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...
mercurial/commands.py
--- 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