--- Documentation/git-am.txt | 7 ++++++- builtin/am.c | 13 +++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/Documentation/git-am.txt b/Documentation/git-am.txt index fc3b993c33..bc01e87d85 100644 --- a/Documentation/git-am.txt +++ b/Documentation/git-am.txt @@ -9,7 +9,7 @@ git-am - Apply a series of patches from a mailbox SYNOPSIS -------- [verse] -'git am' [--signoff] [--keep] [--[no-]keep-cr] [--[no-]utf8] +'git am' [--signoff] [--keep] [--check] [--[no-]keep-cr] [--[no-]utf8] [--[no-]3way] [--interactive] [--committer-date-is-author-date] [--ignore-date] [--ignore-space-change | --ignore-whitespace] [--whitespace=<option>] [-C<n>] [-p<n>] [--directory=<dir>] @@ -44,6 +44,11 @@ OPTIONS --keep-non-patch:: Pass `-b` flag to 'git mailinfo' (see linkgit:git-mailinfo[1]). +--check:: + Instead of applying the patch(es), see if they are + applicable to the current working tree and/or the index + file and detects errors. + --[no-]keep-cr:: With `--keep-cr`, call 'git mailsplit' (see linkgit:git-mailsplit[1]) with the same option, to prevent it from stripping CR at the end of diff --git a/builtin/am.c b/builtin/am.c index 912d9821b1..9ae90dec28 100644 --- a/builtin/am.c +++ b/builtin/am.c @@ -112,6 +112,7 @@ struct am_state { int keep; /* enum keep_type */ int message_id; int scissors; /* enum scissors_type */ + int check; struct argv_array git_apply_opts; const char *resolvemsg; int committer_date_is_author_date; @@ -1422,6 +1423,8 @@ static int run_apply(const struct am_state *state, const char *index_file) } else apply_state.check_index = 1; + apply_state.check = state->check; + /* * If we are allowed to fall back on 3-way merge, don't give false * errors during the initial attempt. @@ -1565,6 +1568,9 @@ static void do_commit(const struct am_state *state) const char *reflog_msg, *author; struct strbuf sb = STRBUF_INIT; + if (state->check) + return; + if (run_hook_le(NULL, "pre-applypatch", NULL)) exit(1); @@ -1775,6 +1781,11 @@ static void am_run(struct am_state *state, int resume) printf_ln(_("Patch failed at %s %.*s"), msgnum(state), linelen(state->msg), state->msg); + if (state->check) { + am_destroy(state); + exit(128); + } + if (advice_amworkdir) advise(_("Use 'git am --show-current-patch' to see the failed patch")); @@ -2195,6 +2206,8 @@ int cmd_am(int argc, const char **argv, const char *prefix) 0, PARSE_OPT_NONEG), OPT_BOOL('c', "scissors", &state.scissors, N_("strip everything before a scissors line")), + OPT_BOOL(0, "check", &state.check, + N_("instead of applying the patch, see if the patch is applicable")), OPT_PASSTHRU_ARGV(0, "whitespace", &state.git_apply_opts, N_("action"), N_("pass it through git-apply"), 0), -- 2.21.0