mirror of
https://github.com/git/git.git
synced 2024-11-28 04:23:30 +08:00
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>
This commit is contained in:
parent
240bfd2de9
commit
8c7b1563ee
34
builtin/am.c
34
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);
|
||||
|
Loading…
Reference in New Issue
Block a user