From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from localhost (localhost [127.0.0.1]) by arlo.cworth.org (Postfix) with ESMTP id 9C17C6DE13C4 for ; Tue, 28 Mar 2017 05:01:07 -0700 (PDT) X-Virus-Scanned: Debian amavisd-new at cworth.org X-Spam-Flag: NO X-Spam-Score: -0.005 X-Spam-Level: X-Spam-Status: No, score=-0.005 tagged_above=-999 required=5 tests=[AWL=0.006, SPF_PASS=-0.001, T_RP_MATCHES_RCVD=-0.01] autolearn=disabled Received: from arlo.cworth.org ([127.0.0.1]) by localhost (arlo.cworth.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ORALKLiAdWSS for ; Tue, 28 Mar 2017 05:01:07 -0700 (PDT) Received: from fethera.tethera.net (fethera.tethera.net [198.245.60.197]) by arlo.cworth.org (Postfix) with ESMTPS id 0DF8E6DE13D2 for ; Tue, 28 Mar 2017 05:01:04 -0700 (PDT) Received: from remotemail by fethera.tethera.net with local (Exim 4.84_2) (envelope-from ) id 1cspnP-00021e-Fe; Tue, 28 Mar 2017 08:00:19 -0400 Received: (nullmailer pid 22796 invoked by uid 1000); Tue, 28 Mar 2017 12:01:02 -0000 From: David Bremner To: notmuch@notmuchmail.org Subject: [rfc patch 2/2] cli: add space seperator for keyword, string, and int arguments Date: Tue, 28 Mar 2017 09:00:42 -0300 Message-Id: <20170328120042.22686-3-david@tethera.net> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170328120042.22686-1-david@tethera.net> References: <20170328120042.22686-1-david@tethera.net> X-BeenThere: notmuch@notmuchmail.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 28 Mar 2017 12:01:07 -0000 Defer the complication of optional boolean arguments for later (never?). --- command-line-arguments.c | 11 +++++++++++ test/T690-command-line-args.sh | 40 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/command-line-arguments.c b/command-line-arguments.c index 72b950e9..91e9e06f 100644 --- a/command-line-arguments.c +++ b/command-line-arguments.c @@ -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); diff --git a/test/T690-command-line-args.sh b/test/T690-command-line-args.sh index 01592749..8d98abe0 100755 --- a/test/T690-command-line-args.sh +++ b/test/T690-command-line-args.sh @@ -3,9 +3,47 @@ test_description="command line arguments" . ./test-lib.sh || exit 1 -NOTMUCH_NEW > /dev/null +add_message test_begin_subtest 'bad option to show' test_expect_code 1 'notmuch show --this-is-not-an-option' +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 'single keyword option with space' +cat < 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 < 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 < EXPECTED +["msg-001@notmuch-test-suite"] +EOF +notmuch search --output messages --format=json '*' >& OUTPUT +test_expect_equal_file EXPECTED OUTPUT + +test_begin_subtest 'keyword option with =' +cat < EXPECTED +["msg-001@notmuch-test-suite"] +EOF +notmuch search --output=messages --format=json '*' >& OUTPUT +test_expect_equal_file EXPECTED OUTPUT + test_done -- 2.11.0