summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2020-02-27 12:32:01 +0100
committerWerner Koch <wk@gnupg.org>2020-02-27 14:33:45 +0100
commit2d1969ab465bad62f73a7c24ddc8bb490ff9fd40 (patch)
tree1abee93d70cd7ebbae54eb12512258dee5771430 /tests
parentffa21bf5b7066f7fa437119ce6b508b324ea2611 (diff)
downloadlibgpg-error-2d1969ab465bad62f73a7c24ddc8bb490ff9fd40.tar.gz
core: Implement meta commands for the argparser.
* src/argparse.c (opttable_t): Add new flags forced, ignore, and explicit_ignore. (struct _gpgrt_argparse_internal_s): Change flags to bitflags. Add several flags to support meta commands. (initialize): Clear them. (handle_meta_user): Use the new verbose flag. (handle_meta_force): Implement. (handle_meta_ignore): Implement. (handle_meta_echo): Support "-echo". (handle_meta_verbose): New. (handle_metacmd): New meta command verbose. Add always flag and move the detection of unexpected meta commands to here. (_gpgrt_argparse): Make use of the ignore and forced meta commands. (finish_read_sys): New. (_gpgrt_argparser): Support the verbose flag. Call finish_read_sys. (arg_parse): Ignore non-explicit ignored and all forced options. * tests/t-argparse.c (main): Fix printing of the ARGPARSE_CONFFILE case. New option 'M'. * tests/t-argparse.conf, tests/etc/t-argparse.conf: Various changes to test the new meta commands. -- For the command line we print a diagnostic if an ignored or forced options is used. However, we do not ignore options which are only set via [ignore-all]. The rationale for the latter is that an administrator can't be be required to unignore all options used by all modes, of say gpgme. Documentation of the meta commands will for now be added to GnuPG. GnuPG-bug-id: 4788 Signed-off-by: Werner Koch <wk@gnupg.org>
Diffstat (limited to 'tests')
-rw-r--r--tests/etc/t-argparse.conf14
-rw-r--r--tests/t-argparse.c4
-rw-r--r--tests/t-argparse.conf5
3 files changed, 17 insertions, 6 deletions
diff --git a/tests/etc/t-argparse.conf b/tests/etc/t-argparse.conf
index c556466..90b9935 100644
--- a/tests/etc/t-argparse.conf
+++ b/tests/etc/t-argparse.conf
@@ -3,12 +3,12 @@
# Options applied to all user's config files
#verbose
-[echo Begin global config]
-
+[-echo Begin global config]
+[verbose]
[group :staff]
# These option are applied to all users of the group staff up until
# the next [group] or [user] statement.
-
+[-verbose]
[+force]
# All following option are forced and thus ignored when set in user
# config files. Valid until the next [user] statement. Take care
@@ -21,11 +21,14 @@
# The compliance is set immutable for these users
verbose
+[-force]
+not-my-option
+
# The next shall raise an error due to the garpage at the end.
#<off>[+ignore] fooo
-#[+ignore-all]
+[+ignore-all]
# All options are ignored.
@@ -55,4 +58,5 @@ my-option 42
# The default algorithm for new keys is set to this.
a-long-option
-[echo End global config]
+
+[-echo End global config]
diff --git a/tests/t-argparse.c b/tests/t-argparse.c
index 4719819..46b7258 100644
--- a/tests/t-argparse.c
+++ b/tests/t-argparse.c
@@ -74,6 +74,7 @@ main (int argc, char **argv)
/* Note that on a non-utf8 terminal the ß might garble the output. */
ARGPARSE_s_n('s', "street","|Straße|set the name of the street to Straße"),
ARGPARSE_o_i('m', "my-option", 0),
+ ARGPARSE_o_i('M', "not-my-option", 0),
ARGPARSE_s_n(500, "a-long-option", 0 ),
ARGPARSE_conffile(501, "options", "|FILE|read options from FILE"),
ARGPARSE_noconffile(502, "no-options", "Ignore conf files"),
@@ -108,7 +109,7 @@ main (int argc, char **argv)
{
case ARGPARSE_CONFFILE:
printf ("current conffile='%s'\n",
- pargs.r.ret_str? pargs.r.ret_str: "[cmdline]");
+ pargs.r_type? pargs.r.ret_str: "[cmdline]");
break;
case ARGPARSE_IS_ARG :
printf ("arg='%s'\n", pargs.r.ret_str);
@@ -120,6 +121,7 @@ main (int argc, char **argv)
case 'o': opt.outfile = pargs.r.ret_str; break;
case 'c': opt.crf = pargs.r_type? pargs.r.ret_str:"a.crf"; break;
case 'm': opt.myopt = pargs.r_type? pargs.r.ret_int : 1; break;
+ case 'M': opt.myopt = 0; break;
case 500: opt.a_long_one++; break;
default : pargs.err = ARGPARSE_PRINT_WARNING; any_warn = 1; break;
}
diff --git a/tests/t-argparse.conf b/tests/t-argparse.conf
index e2c96e2..c689a63 100644
--- a/tests/t-argparse.conf
+++ b/tests/t-argparse.conf
@@ -1,5 +1,7 @@
# User test config file for t-argparse
+[-echo begin of user config]
+[+verbose]
# Options applied to all user's config files
echo
@@ -8,4 +10,7 @@ echo
my-option 4711
+not-my-option
+
verbose
+[-echo end of user config] \ No newline at end of file