Skip to content

Commit

Permalink
builtin-am: don't parse mail when resuming
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Paul Tan authored and Junio C Hamano committed Aug 5, 2015
1 parent 240bfd2 commit 8c7b156
Showing 1 changed file with 25 additions and 9 deletions.
34 changes: 25 additions & 9 deletions builtin/am.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);

Expand Down Expand Up @@ -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);
}

/**
Expand All @@ -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
};

Expand Down Expand Up @@ -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;

Expand All @@ -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);
Expand Down

0 comments on commit 8c7b156

Please sign in to comment.