[PATCH stable] alias: ensure checksignature() is applied directly to the command (issue2286)

Brodie Rao brodie at bitheap.org
Thu Jul 22 14:27:06 CDT 2010


# HG changeset patch
# User Brodie Rao <brodie at bitheap.org>
# Date 1279826786 14400
# Branch stable
# Node ID a528db2e61ca4f035cc90ccb54a10c62ad949b89
# Parent  ebaf117c2642aec0b0c2a794a39cf7608db8c805
alias: ensure checksignature() is applied directly to the command (issue2286)

Aliased commands that received bad arguments would raise TypeError instead of
SignatureError. This only affected commands that weren't wrapped by extensions.
Using util.checksignature() in cmdalias.__call__() ensures SignatureError is
raised correctly.

diff -r ebaf117c2642 -r a528db2e61ca mercurial/dispatch.py
--- a/mercurial/dispatch.py	Thu Jul 22 08:17:38 2010 -0500
+++ b/mercurial/dispatch.py	Thu Jul 22 15:26:26 2010 -0400
@@ -248,7 +248,7 @@ class cmdalias(object):
         if self.shadows:
             ui.debug("alias '%s' shadows command\n" % self.name)
 
-        return self.fn(ui, *args, **opts)
+        return util.checksignature(self.fn)(ui, *args, **opts)
 
 def addaliases(ui, cmdtable):
     # aliases are processed after extensions have been loaded, so they
diff -r ebaf117c2642 -r a528db2e61ca tests/test-alias
--- a/tests/test-alias	Thu Jul 22 08:17:38 2010 -0500
+++ b/tests/test-alias	Thu Jul 22 15:26:26 2010 -0400
@@ -14,6 +14,7 @@ shortlog = log --template '{rev} {node|s
 dln = lognull --debug
 nousage = rollback
 put = export -r 0 -o "\$FOO/%R.diff"
+rt = root
 
 [defaults]
 mylog = -q
@@ -64,3 +65,8 @@ hg dln
 echo '% path expanding'
 FOO=`pwd` hg put
 cat 0.diff
+
+echo '% invalid arguments'
+hg rt foo
+
+exit 0
diff -r ebaf117c2642 -r a528db2e61ca tests/test-alias.out
--- a/tests/test-alias.out	Thu Jul 22 08:17:38 2010 -0500
+++ b/tests/test-alias.out	Thu Jul 22 15:26:26 2010 -0400
@@ -43,3 +43,16 @@ diff -r 000000000000 -r e63c23eaa88a foo
 +++ b/foo	Thu Jan 01 00:00:00 1970 +0000
 @@ -0,0 +1,1 @@
 +foo
+% invalid arguments
+hg rt: invalid arguments
+hg rt 
+
+alias for: hg root
+
+print the root (top) of the current working directory
+
+    Print the root directory of the current repository.
+
+    Returns 0 on success.
+
+use "hg -v help rt" to show global options


More information about the Mercurial-devel mailing list