mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-25 20:38:08 +01:00
cli: add space separator for keyword, string, and int arguments
Defer the complication of optional boolean arguments for later (never?).
This commit is contained in:
parent
de9baa29dc
commit
a32dd81a55
4 changed files with 104 additions and 1 deletions
|
@ -133,6 +133,11 @@ parse_option (int argc, char **argv, const notmuch_opt_desc_t *options, int opt_
|
||||||
|
|
||||||
const char *arg = _arg + 2; /* _arg starts with -- */
|
const char *arg = _arg + 2; /* _arg starts with -- */
|
||||||
const notmuch_opt_desc_t *try;
|
const notmuch_opt_desc_t *try;
|
||||||
|
|
||||||
|
const char *next_arg = NULL;
|
||||||
|
if (opt_index < argc - 1 && strncmp (argv[opt_index + 1], "--", 2) != 0)
|
||||||
|
next_arg = argv[opt_index + 1];
|
||||||
|
|
||||||
for (try = options; try->opt_type != NOTMUCH_OPT_END; try++) {
|
for (try = options; try->opt_type != NOTMUCH_OPT_END; try++) {
|
||||||
if (try->opt_type == NOTMUCH_OPT_INHERIT) {
|
if (try->opt_type == NOTMUCH_OPT_INHERIT) {
|
||||||
int new_index = parse_option (argc, argv, try->output_var, opt_index);
|
int new_index = parse_option (argc, argv, try->output_var, opt_index);
|
||||||
|
@ -158,6 +163,12 @@ parse_option (int argc, char **argv, const notmuch_opt_desc_t *options, int opt_
|
||||||
if (next != '=' && next != ':' && next != '\0')
|
if (next != '=' && next != ':' && next != '\0')
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (next == '\0' && next_arg != NULL && try->opt_type != NOTMUCH_OPT_BOOLEAN) {
|
||||||
|
next = ' ';
|
||||||
|
value = next_arg;
|
||||||
|
opt_index ++;
|
||||||
|
}
|
||||||
|
|
||||||
if (try->output_var == NULL)
|
if (try->output_var == NULL)
|
||||||
INTERNAL_ERROR ("output pointer NULL for option %s", try->name);
|
INTERNAL_ERROR ("output pointer NULL for option %s", try->name);
|
||||||
|
|
||||||
|
|
|
@ -125,6 +125,20 @@ users to have their own notmuch related tools to be run via the
|
||||||
notmuch command. By design, this does not allow notmuch's own commands
|
notmuch command. By design, this does not allow notmuch's own commands
|
||||||
to be overriden using external commands.
|
to be overriden using external commands.
|
||||||
|
|
||||||
|
OPTION SYNTAX
|
||||||
|
-------------
|
||||||
|
|
||||||
|
All options accepting an argument can be used with '=' or ':' as a
|
||||||
|
separator. For the cases where it's not ambiguous (in particular
|
||||||
|
excluding boolean options), a space can also be used. The following
|
||||||
|
are all equivalent:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
notmuch --config=alt-config config get user.name
|
||||||
|
notmuch --config:alt-config config get user.name
|
||||||
|
notmuch --config alt-config config get user.name
|
||||||
|
|
||||||
ENVIRONMENT
|
ENVIRONMENT
|
||||||
===========
|
===========
|
||||||
|
|
||||||
|
|
|
@ -69,6 +69,14 @@ notmuch --config=alt-config config set user.name "Another Name"
|
||||||
test_expect_equal "$(notmuch --config=alt-config config get user.name)" \
|
test_expect_equal "$(notmuch --config=alt-config config get user.name)" \
|
||||||
"Another Name"
|
"Another Name"
|
||||||
|
|
||||||
|
test_begin_subtest "Top level --config:FILE option"
|
||||||
|
test_expect_equal "$(notmuch --config:alt-config config get user.name)" \
|
||||||
|
"Another Name"
|
||||||
|
|
||||||
|
test_begin_subtest "Top level --config<space>FILE option"
|
||||||
|
test_expect_equal "$(notmuch --config alt-config config get user.name)" \
|
||||||
|
"Another Name"
|
||||||
|
|
||||||
test_begin_subtest "Top level --config=FILE option changed the right file"
|
test_begin_subtest "Top level --config=FILE option changed the right file"
|
||||||
test_expect_equal "$(notmuch config get user.name)" \
|
test_expect_equal "$(notmuch config get user.name)" \
|
||||||
"Notmuch Test Suite"
|
"Notmuch Test Suite"
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
test_description="command line arguments"
|
test_description="command line arguments"
|
||||||
. ./test-lib.sh || exit 1
|
. ./test-lib.sh || exit 1
|
||||||
|
|
||||||
NOTMUCH_NEW > /dev/null
|
add_message
|
||||||
|
|
||||||
test_begin_subtest 'bad option to show'
|
test_begin_subtest 'bad option to show'
|
||||||
notmuch show --frobnicate >& OUTPUT
|
notmuch show --frobnicate >& OUTPUT
|
||||||
|
@ -12,4 +12,74 @@ Unrecognized option: --frobnicate
|
||||||
EOF
|
EOF
|
||||||
test_expect_equal_file EXPECTED OUTPUT
|
test_expect_equal_file EXPECTED OUTPUT
|
||||||
|
|
||||||
|
test_begin_subtest 'string option with space'
|
||||||
|
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 '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
|
||||||
|
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"]
|
||||||
|
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"]
|
||||||
|
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"]
|
||||||
|
EOF
|
||||||
|
notmuch search --output:messages --format json '*' >& OUTPUT
|
||||||
|
test_expect_equal_file EXPECTED OUTPUT
|
||||||
|
|
||||||
|
test_begin_subtest 'show --entire-thread'
|
||||||
|
test_expect_success 'notmuch show --entire-thread tag:test > /dev/null'
|
||||||
|
|
||||||
|
test_begin_subtest 'show --exclude'
|
||||||
|
test_expect_success 'notmuch show --exclude tag:test > /dev/null'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|
Loading…
Reference in a new issue