diff options
author | Paul Tan <pyokagan@gmail.com> | 2015-08-04 21:51:33 +0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-08-04 22:02:11 -0700 |
commit | 8c7b1563eeb2dd42eef0c5ab1a65b7a93300908c (patch) | |
tree | 2e9b399056e5090d37dd0a110323fb3749569395 /builtin | |
parent | builtin-am: implement --resolved/--continue (diff) | |
download | tgif-8c7b1563eeb2dd42eef0c5ab1a65b7a93300908c.tar.xz |
builtin-am: don't parse mail when resuming
Since 271440e (git-am: make it easier after fixing up an unapplicable
patch., 2005-10-25), when "git am" is run again after being paused, the
current mail message will not be re-parsed, but instead the contents of
the state directory's patch, msg and author-script files will be used
as-is instead.
Re-implement this in builtin/am.c.
Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/am.c | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/builtin/am.c b/builtin/am.c index fd267213aa..ec579a606f 100644 --- a/builtin/am.c +++ b/builtin/am.c @@ -776,8 +776,12 @@ static void validate_resume_state(const struct am_state *state) /** * Applies all queued mail. + * + * If `resume` is true, we are "resuming". The "msg" and authorship fields, as + * well as the state directory's "patch" file is used as-is for applying the + * patch and committing it. */ -static void am_run(struct am_state *state) +static void am_run(struct am_state *state, int resume) { const char *argv_gc_auto[] = {"gc", "--auto", NULL}; struct strbuf sb = STRBUF_INIT; @@ -795,11 +799,16 @@ static void am_run(struct am_state *state) if (!file_exists(mail)) goto next; - if (parse_mail(state, mail)) - goto next; /* mail should be skipped */ + if (resume) { + validate_resume_state(state); + resume = 0; + } else { + if (parse_mail(state, mail)) + goto next; /* mail should be skipped */ - write_author_script(state); - write_commit_msg(state); + write_author_script(state); + write_commit_msg(state); + } printf_ln(_("Applying: %.*s"), linelen(state->msg), state->msg); @@ -855,7 +864,7 @@ static void am_resolve(struct am_state *state) do_commit(state); am_next(state); - am_run(state); + am_run(state, 0); } /** @@ -875,6 +884,7 @@ static int parse_opt_patchformat(const struct option *opt, const char *arg, int enum resume_mode { RESUME_FALSE = 0, + RESUME_APPLY, RESUME_RESOLVED }; @@ -927,9 +937,12 @@ int cmd_am(int argc, const char **argv, const char *prefix) if (read_index_preload(&the_index, NULL) < 0) die(_("failed to read the index")); - if (am_in_progress(&state)) + if (am_in_progress(&state)) { + if (resume == RESUME_FALSE) + resume = RESUME_APPLY; + am_load(&state); - else { + } else { struct argv_array paths = ARGV_ARRAY_INIT; int i; @@ -950,7 +963,10 @@ int cmd_am(int argc, const char **argv, const char *prefix) switch (resume) { case RESUME_FALSE: - am_run(&state); + am_run(&state, 0); + break; + case RESUME_APPLY: + am_run(&state, 1); break; case RESUME_RESOLVED: am_resolve(&state); |