From: David Bremner <david@tethera.net>
To: notmuch@freelists.org, notmuch@notmuchmail.org
Subject: v3 of spaces command line argument separator
Date: Sat, 1 Jul 2017 12:18:42 -0300 [thread overview]
Message-ID: <20170701151845.10942-1-david@tethera.net> (raw)
This obsoletes:
id:20170605102923.1268-1-david@tethera.net
Compared to the previous version this
- rewrites the switch in parse_option in a less fancy way
- fixes the error message for unrecognize options
- adds some tests for --arg:val
diff --git a/command-line-arguments.c b/command-line-arguments.c
index 91e9e06f..dc517b06 100644
--- a/command-line-arguments.c
+++ b/command-line-arguments.c
@@ -172,22 +172,31 @@ parse_option (int argc, char **argv, const notmuch_opt_desc_t *options, int opt_
if (try->output_var == NULL)
INTERNAL_ERROR ("output pointer NULL for option %s", try->name);
+ notmuch_bool_t opt_status = FALSE;
switch (try->opt_type) {
case NOTMUCH_OPT_KEYWORD:
case NOTMUCH_OPT_KEYWORD_FLAGS:
- return _process_keyword_arg (try, next, value) ? opt_index + 1 : (-1);
+ opt_status = _process_keyword_arg (try, next, value);
+ break;
case NOTMUCH_OPT_BOOLEAN:
- return _process_boolean_arg (try, next, value) ? opt_index + 1 : (-1);
+ opt_status = _process_boolean_arg (try, next, value);
+ break;
case NOTMUCH_OPT_INT:
- return _process_int_arg (try, next, value) ? opt_index + 1 : (-1);
+ opt_status = _process_int_arg (try, next, value);
+ break;
case NOTMUCH_OPT_STRING:
- return _process_string_arg (try, next, value) ? opt_index + 1 : (-1);
+ opt_status = _process_string_arg (try, next, value);
+ break;
case NOTMUCH_OPT_POSITION:
case NOTMUCH_OPT_END:
default:
INTERNAL_ERROR ("unknown or unhandled option type %d", try->opt_type);
/*UNREACHED*/
}
+ if (opt_status)
+ return opt_index+1;
+ else
+ return -1;
}
return -1;
}
@@ -211,13 +220,14 @@ parse_arguments (int argc, char **argv,
}
} else {
+ int prev_opt_index = opt_index;
+
if (strlen (argv[opt_index]) == 2)
return opt_index+1;
opt_index = parse_option (argc, argv, options, opt_index);
- /* this is currently broken as -1 is never returned */
if (opt_index < 0) {
- fprintf (stderr, "Unrecognized option: %s\n", argv[opt_index]);
+ fprintf (stderr, "Unrecognized option: %s\n", argv[prev_opt_index]);
more_args = FALSE;
}
}
diff --git a/test/T690-command-line-args.sh b/test/T690-command-line-args.sh
index 01de88eb..a4f4b5f5 100755
--- a/test/T690-command-line-args.sh
+++ b/test/T690-command-line-args.sh
@@ -6,7 +6,11 @@ test_description="command line arguments"
add_message
test_begin_subtest 'bad option to show'
-test_expect_code 1 'notmuch show --this-is-not-an-option'
+notmuch show --frobnicate >& OUTPUT
+cat <<EOF > EXPECTED
+Unrecognized option: --frobnicate
+EOF
+test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest 'string option with space'
cp /dev/null EXPECTED
@@ -18,6 +22,11 @@ cp /dev/null EXPECTED
notmuch dump --output=foo.txt '*' >& OUTPUT
test_expect_equal_file EXPECTED OUTPUT
+test_begin_subtest 'string option with :'
+cp /dev/null EXPECTED
+notmuch dump --output:foo.txt '*' >& OUTPUT
+test_expect_equal_file EXPECTED OUTPUT
+
test_begin_subtest 'single keyword option with space'
cat <<EOF > EXPECTED
id:msg-001@notmuch-test-suite
@@ -25,6 +34,20 @@ EOF
notmuch search --output messages '*' >& OUTPUT
test_expect_equal_file EXPECTED OUTPUT
+test_begin_subtest 'single keyword option with ='
+cat <<EOF > EXPECTED
+id:msg-001@notmuch-test-suite
+EOF
+notmuch search --output=messages '*' >& OUTPUT
+test_expect_equal_file EXPECTED OUTPUT
+
+test_begin_subtest 'single keyword option with :'
+cat <<EOF > EXPECTED
+id:msg-001@notmuch-test-suite
+EOF
+notmuch search --output:messages '*' >& OUTPUT
+test_expect_equal_file EXPECTED OUTPUT
+
test_begin_subtest 'multiple keyword options with space'
cat <<EOF > EXPECTED
["msg-001@notmuch-test-suite"]
@@ -32,6 +55,13 @@ EOF
notmuch search --output messages --format json '*' >& OUTPUT
test_expect_equal_file EXPECTED OUTPUT
+test_begin_subtest 'multiple keyword options with ='
+cat <<EOF > EXPECTED
+["msg-001@notmuch-test-suite"]
+EOF
+notmuch search --output=messages --format=json '*' >& OUTPUT
+test_expect_equal_file EXPECTED OUTPUT
+
test_begin_subtest 'mixed space and = delimiters'
cat <<EOF > EXPECTED
["msg-001@notmuch-test-suite"]
@@ -39,11 +69,11 @@ EOF
notmuch search --output messages --format=json '*' >& OUTPUT
test_expect_equal_file EXPECTED OUTPUT
-test_begin_subtest 'keyword option with ='
+test_begin_subtest 'mixed space and : delimiters'
cat <<EOF > EXPECTED
["msg-001@notmuch-test-suite"]
EOF
-notmuch search --output=messages --format=json '*' >& OUTPUT
+notmuch search --output:messages --format json '*' >& OUTPUT
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest 'show --entire-thread'
next reply other threads:[~2017-07-01 15:19 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-01 15:18 David Bremner [this message]
2017-07-01 15:18 ` [PATCH 1/3] cli/show: convert keyword options to booleans David Bremner
2017-07-01 15:18 ` [PATCH 2/3] cli: change api of parse_option David Bremner
2017-07-01 15:18 ` [PATCH 3/3] cli: add space separator for keyword, string, and int arguments David Bremner
2017-07-12 20:50 ` v3 of spaces command line argument separator David Bremner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://notmuchmail.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170701151845.10942-1-david@tethera.net \
--to=david@tethera.net \
--cc=notmuch@freelists.org \
--cc=notmuch@notmuchmail.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://yhetil.org/notmuch.git/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).