revset: parse alias declaration strictly by _parsealiasdecl
Before this patch, alias declaration is parsed by string base
operations: matching against "^([^(]+)\(([^)]+)\)$" and splitting by
",".
This overlooks many syntax errors like below (see the previous patch
introducing "_parsealiasdecl" for detail):
- un-closed parenthesis causes being treated as "alias symbol"
- symbol/function name aren't examined whether they are valid or not
- invalid argument list causes unexpected argument names
To parse alias declaration strictly, this patch replaces parsing
implementation by "_parsealiasdecl".
This patch tests only one typical declaration error case, because
error detection itself is already tested in the doctest of
"_parsealiasdecl".
This also removes class property "args" and "error", because these are
certainly initialized in "revsetalias.__init__".
$ hg init
$ touch a
$ hg add a
$ hg ci -m "a"
$ echo 123 > b
$ hg add b
$ hg diff --nodates
diff -r 3903775176ed b
--- /dev/null
+++ b/b
@@ -0,0 +1,1 @@
+123
$ hg diff --nodates -r tip
diff -r 3903775176ed b
--- /dev/null
+++ b/b
@@ -0,0 +1,1 @@
+123
$ echo foo > a
$ hg diff --nodates
diff -r 3903775176ed a
--- a/a
+++ b/a
@@ -0,0 +1,1 @@
+foo
diff -r 3903775176ed b
--- /dev/null
+++ b/b
@@ -0,0 +1,1 @@
+123
$ hg diff -r ""
hg: parse error: empty query
[255]
$ hg diff -r tip -r ""
hg: parse error: empty query
[255]