From: Junio C Hamano <gitster@pobox.com>
To: git@vger.kernel.org
Subject: [PATCH 1/3] test-parse-options: fix output when callback option fails
Date: Thu, 5 May 2016 14:50:54 -0700 [thread overview]
Message-ID: <20160505215056.28224-2-gitster@pobox.com> (raw)
In-Reply-To: <20160505215056.28224-1-gitster@pobox.com>
When test-parse-options detects an error on the command line, it
gives the usage string just like any parse-options API users do,
without showing any "variable dump". An exception is the callback
test, where a "variable dump" for the option is done before the
command line options are fully parsed.
Do not expose this implementation detail by separating the handling
of callback test into two phases, one to capture the fact that an
option was given during the option parsing phase, and the other to
show that fact as a part of normal "variable dump".
The effect of this fix is seen in the patch to t/t0040 where it
tried "test-parse-options --no-length" where "--length" is a callback
that does not take a negative form.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
t/t0040-parse-options.sh | 4 +---
test-parse-options.c | 18 ++++++++++++++++--
2 files changed, 17 insertions(+), 5 deletions(-)
diff --git a/t/t0040-parse-options.sh b/t/t0040-parse-options.sh
index fec3fef..dbaee55 100755
--- a/t/t0040-parse-options.sh
+++ b/t/t0040-parse-options.sh
@@ -356,9 +356,7 @@ test_expect_success 'OPT_CALLBACK() and OPT_BIT() work' '
test_cmp expect output
'
-cat >expect <<\EOF
-Callback: "not set", 1
-EOF
+>expect
test_expect_success 'OPT_CALLBACK() and callback errors work' '
test_must_fail test-parse-options --no-length >output 2>output.err &&
diff --git a/test-parse-options.c b/test-parse-options.c
index f02c275..b5f4e90 100644
--- a/test-parse-options.c
+++ b/test-parse-options.c
@@ -14,10 +14,18 @@ static char *file = NULL;
static int ambiguous;
static struct string_list list;
+static struct {
+ int called;
+ const char *arg;
+ int unset;
+} length_cb;
+
static int length_callback(const struct option *opt, const char *arg, int unset)
{
- printf("Callback: \"%s\", %d\n",
- (arg ? arg : "not set"), unset);
+ length_cb.called = 1;
+ length_cb.arg = arg;
+ length_cb.unset = unset;
+
if (unset)
return 1; /* do not support unset */
@@ -84,6 +92,12 @@ int main(int argc, char **argv)
argc = parse_options(argc, (const char **)argv, prefix, options, usage, 0);
+ if (length_cb.called) {
+ const char *arg = length_cb.arg;
+ int unset = length_cb.unset;
+ printf("Callback: \"%s\", %d\n",
+ (arg ? arg : "not set"), unset);
+ }
printf("boolean: %d\n", boolean);
printf("integer: %d\n", integer);
printf("magnitude: %lu\n", magnitude);
--
2.8.2-505-gdbd0e1d
next prev parent reply other threads:[~2016-05-05 21:51 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-30 20:03 [PATCH v15 1/7] t0040-test-parse-options.sh: fix style issues Pranit Bauva
2016-04-30 20:03 ` [PATCH v15 2/7] test-parse-options: print quiet as integer Pranit Bauva
2016-04-30 20:03 ` [PATCH v15 3/7] t0040-parse-options: improve test coverage Pranit Bauva
2016-05-04 8:36 ` Eric Sunshine
2016-05-05 4:46 ` Pranit Bauva
2016-04-30 20:03 ` [PATCH v15 4/7] parse-options.c: make OPTION_COUNTUP respect "unspecified" values Pranit Bauva
2016-04-30 20:03 ` [PATCH v15 5/7] t7507-commit-verbose: improve test coverage by testing number of diffs Pranit Bauva
2016-04-30 20:03 ` [PATCH v15 6/7] commit: add a commit.verbose config variable Pranit Bauva
2016-04-30 20:03 ` [PATCH v15 7/7] t/t7507: tests for broken behavior of status Pranit Bauva
2016-05-02 23:07 ` Junio C Hamano
2016-05-03 3:39 ` Pranit Bauva
2016-05-03 5:12 ` Eric Sunshine
2016-05-03 6:42 ` Pranit Bauva
2016-05-03 6:49 ` Eric Sunshine
2016-05-03 9:18 ` Pranit Bauva
2016-05-03 16:17 ` Eric Sunshine
2016-05-03 16:18 ` Pranit Bauva
2016-05-03 15:47 ` Junio C Hamano
2016-05-05 9:49 ` [PATCH v16 0/7] config commit verbose Pranit Bauva
2016-05-05 9:49 ` [PATCH v16 1/7] t0040-test-parse-options.sh: fix style issues Pranit Bauva
2016-05-05 9:49 ` [PATCH v16 2/7] test-parse-options: print quiet as integer Pranit Bauva
2016-05-05 9:49 ` [PATCH v16 3/7] t0040-parse-options: improve test coverage Pranit Bauva
2016-05-05 9:49 ` [PATCH v16 4/7] t/t7507: " Pranit Bauva
2016-05-05 9:50 ` [PATCH v16 5/7] parse-options.c: make OPTION_COUNTUP respect "unspecified" values Pranit Bauva
2016-05-05 9:50 ` [PATCH v16 6/7] t7507-commit-verbose: improve test coverage by testing number of diffs Pranit Bauva
2016-05-05 9:50 ` [PATCH v16 7/7] commit: add a commit.verbose config variable Pranit Bauva
2016-05-05 19:14 ` Junio C Hamano
2016-05-06 5:05 ` Pranit Bauva
2016-05-06 6:40 ` Pranit Bauva
2016-05-06 5:07 ` Eric Sunshine
2016-05-05 19:21 ` [PATCH v16 0/7] config commit verbose Junio C Hamano
2016-05-05 21:50 ` [PATCH 0/3] test-parse-options update Junio C Hamano
2016-05-05 21:50 ` Junio C Hamano [this message]
2016-05-05 21:50 ` [PATCH 2/3] test-parse-options: hold output in a strbuf Junio C Hamano
2016-05-05 21:50 ` [PATCH 3/3] test-parse-options: --expect=<string> option to simplify tests Junio C Hamano
2016-05-06 0:41 ` Stefan Beller
2016-05-06 1:27 ` Eric Sunshine
2016-05-06 2:57 ` Junio C Hamano
2016-05-06 5:51 ` Stefan Beller
2016-05-06 7:18 ` Junio C Hamano
2016-05-06 17:34 ` Junio C Hamano
2016-05-06 18:00 ` [PATCH] t0040: remove unused test helpers Junio C Hamano
2016-05-06 5:30 ` [PATCH v16 0/7] config commit verbose Eric Sunshine
2016-05-06 14:20 ` SZEDER Gábor
2016-05-06 15:33 ` Junio C Hamano
2016-05-07 5:32 ` Jeff King
2016-05-07 19:28 ` Ævar Arnfjörð Bjarmason
2016-05-08 18:48 ` Junio C Hamano
2016-05-09 14:28 ` Jeff King
2016-05-09 16:01 ` Junio C Hamano
[not found] ` <CACBZZX5ssO2EiuxR7wotGowMaPhtioaJVSDpQDUwUkv1rLJJWw@mail.gmail.com>
2016-05-06 16:16 ` Pranit Bauva
2016-05-06 19:47 ` Ævar Arnfjörð Bjarmason
2016-05-06 20:51 ` Junio C Hamano
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160505215056.28224-2-gitster@pobox.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.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.
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 NNTP newsgroup(s).