mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-22 09:24:54 +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 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++) {
|
||||
if (try->opt_type == NOTMUCH_OPT_INHERIT) {
|
||||
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')
|
||||
continue;
|
||||
|
||||
if (next == '\0' && next_arg != NULL && try->opt_type != NOTMUCH_OPT_BOOLEAN) {
|
||||
next = ' ';
|
||||
value = next_arg;
|
||||
opt_index ++;
|
||||
}
|
||||
|
||||
if (try->output_var == NULL)
|
||||
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
|
||||
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
|
||||
===========
|
||||
|
||||
|
|
|
@ -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)" \
|
||||
"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_expect_equal "$(notmuch config get user.name)" \
|
||||
"Notmuch Test Suite"
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
test_description="command line arguments"
|
||||
. ./test-lib.sh || exit 1
|
||||
|
||||
NOTMUCH_NEW > /dev/null
|
||||
add_message
|
||||
|
||||
test_begin_subtest 'bad option to show'
|
||||
notmuch show --frobnicate >& OUTPUT
|
||||
|
@ -12,4 +12,74 @@ Unrecognized option: --frobnicate
|
|||
EOF
|
||||
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
|
||||
|
|
Loading…
Reference in a new issue