From: Aleen <aleen42@xxxxxxxxxx> Signed-off-by: Aleen <aleen42@xxxxxxxxxx> --- builtin/am.c | 13 +++++++------ t/t4150-am.sh | 8 +++++++- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/builtin/am.c b/builtin/am.c index 1a3ed87b445..5d487b5256b 100644 --- a/builtin/am.c +++ b/builtin/am.c @@ -185,12 +185,14 @@ static int am_option_parse_quoted_cr(const struct option *opt, return 0; } -static int am_option_parse_empty_commit(const struct option *opt, +static int am_option_parse_empty(const struct option *opt, const char *arg, int unset) { int *opt_value = opt->value; - if (unset || !strcmp(arg, "die")) + BUG_ON_OPT_NEG(unset); + + if (!strcmp(arg, "die")) *opt_value = DIE_EMPTY_COMMIT; else if (!strcmp(arg, "drop")) *opt_value = DROP_EMPTY_COMMIT; @@ -2391,10 +2393,9 @@ int cmd_am(int argc, const char **argv, const char *prefix) { OPTION_STRING, 'S', "gpg-sign", &state.sign_commit, N_("key-id"), N_("GPG-sign commits"), PARSE_OPT_OPTARG, NULL, (intptr_t) "" }, - { OPTION_CALLBACK, 0, "empty", &state.empty_type, - "(die|drop|keep)", - N_("specify how to handle empty patches"), - PARSE_OPT_OPTARG, am_option_parse_empty_commit }, + OPT_CALLBACK_F(0, "empty", &state.empty_type, "{drop,keep,die}", + N_("how to handle empty patches"), + PARSE_OPT_NONEG, am_option_parse_empty), OPT_HIDDEN_BOOL(0, "rebasing", &state.rebasing, N_("(internal use for git-rebase)")), OPT_END() diff --git a/t/t4150-am.sh b/t/t4150-am.sh index 3119556884d..c32d21e80da 100755 --- a/t/t4150-am.sh +++ b/t/t4150-am.sh @@ -1165,8 +1165,14 @@ test_expect_success 'still output error with --empty when meeting empty files' ' test_cmp expected actual ' -test_expect_success 'error when meeting e-mail message that lacks a patch by default' ' +test_expect_success 'invalid when passing no value for the --empty option' ' git checkout empty-commit^ && + test_must_fail git am --empty empty-commit.patch 2>err && + echo "error: Invalid value for --empty: empty-commit.patch" >expected && + test_cmp expected err +' + +test_expect_success 'error when meeting e-mail message that lacks a patch by default' ' test_must_fail git am empty-commit.patch >err && test_path_is_dir .git/rebase-apply && test_i18ngrep "Patch is empty." err && -- gitgitgadget