[PATCH v6 3/3] am: throw an error when passing --empty option without value
From: Aleen <aleen42@vip.qq.com>
Signed-off-by: Aleen <aleen42@vip.qq.com>
---
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