Merge branch 'pw/rebase-i-more-options'
[git] / builtin / am.c
1 /*
2  * Builtin "git am"
3  *
4  * Based on git-am.sh by Junio C Hamano.
5  */
6 #define USE_THE_INDEX_COMPATIBILITY_MACROS
7 #include "cache.h"
8 #include "config.h"
9 #include "builtin.h"
10 #include "exec-cmd.h"
11 #include "parse-options.h"
12 #include "dir.h"
13 #include "run-command.h"
14 #include "quote.h"
15 #include "tempfile.h"
16 #include "lockfile.h"
17 #include "cache-tree.h"
18 #include "refs.h"
19 #include "commit.h"
20 #include "diff.h"
21 #include "diffcore.h"
22 #include "unpack-trees.h"
23 #include "branch.h"
24 #include "sequencer.h"
25 #include "revision.h"
26 #include "merge-recursive.h"
27 #include "log-tree.h"
28 #include "notes-utils.h"
29 #include "rerere.h"
30 #include "prompt.h"
31 #include "mailinfo.h"
32 #include "apply.h"
33 #include "string-list.h"
34 #include "packfile.h"
35 #include "repository.h"
36
37 /**
38  * Returns the length of the first line of msg.
39  */
40 static int linelen(const char *msg)
41 {
42         return strchrnul(msg, '\n') - msg;
43 }
44
45 /**
46  * Returns true if `str` consists of only whitespace, false otherwise.
47  */
48 static int str_isspace(const char *str)
49 {
50         for (; *str; str++)
51                 if (!isspace(*str))
52                         return 0;
53
54         return 1;
55 }
56
57 enum patch_format {
58         PATCH_FORMAT_UNKNOWN = 0,
59         PATCH_FORMAT_MBOX,
60         PATCH_FORMAT_STGIT,
61         PATCH_FORMAT_STGIT_SERIES,
62         PATCH_FORMAT_HG,
63         PATCH_FORMAT_MBOXRD
64 };
65
66 enum keep_type {
67         KEEP_FALSE = 0,
68         KEEP_TRUE,      /* pass -k flag to git-mailinfo */
69         KEEP_NON_PATCH  /* pass -b flag to git-mailinfo */
70 };
71
72 enum scissors_type {
73         SCISSORS_UNSET = -1,
74         SCISSORS_FALSE = 0,  /* pass --no-scissors to git-mailinfo */
75         SCISSORS_TRUE        /* pass --scissors to git-mailinfo */
76 };
77
78 enum signoff_type {
79         SIGNOFF_FALSE = 0,
80         SIGNOFF_TRUE = 1,
81         SIGNOFF_EXPLICIT /* --signoff was set on the command-line */
82 };
83
84 enum show_patch_type {
85         SHOW_PATCH_RAW = 0,
86         SHOW_PATCH_DIFF = 1,
87 };
88
89 struct am_state {
90         /* state directory path */
91         char *dir;
92
93         /* current and last patch numbers, 1-indexed */
94         int cur;
95         int last;
96
97         /* commit metadata and message */
98         char *author_name;
99         char *author_email;
100         char *author_date;
101         char *committer_name;
102         char *committer_email;
103         char *msg;
104         size_t msg_len;
105
106         /* when --rebasing, records the original commit the patch came from */
107         struct object_id orig_commit;
108
109         /* number of digits in patch filename */
110         int prec;
111
112         /* various operating modes and command line options */
113         int interactive;
114         int threeway;
115         int quiet;
116         int signoff; /* enum signoff_type */
117         int utf8;
118         int keep; /* enum keep_type */
119         int message_id;
120         int scissors; /* enum scissors_type */
121         struct strvec git_apply_opts;
122         const char *resolvemsg;
123         int committer_date_is_author_date;
124         int ignore_date;
125         int allow_rerere_autoupdate;
126         const char *sign_commit;
127         int rebasing;
128 };
129
130 /**
131  * Initializes am_state with the default values.
132  */
133 static void am_state_init(struct am_state *state)
134 {
135         const char *committer;
136         struct ident_split id;
137         int gpgsign;
138
139         memset(state, 0, sizeof(*state));
140
141         state->dir = git_pathdup("rebase-apply");
142
143         state->prec = 4;
144
145         git_config_get_bool("am.threeway", &state->threeway);
146
147         state->utf8 = 1;
148
149         git_config_get_bool("am.messageid", &state->message_id);
150
151         state->scissors = SCISSORS_UNSET;
152
153         strvec_init(&state->git_apply_opts);
154
155         if (!git_config_get_bool("commit.gpgsign", &gpgsign))
156                 state->sign_commit = gpgsign ? "" : NULL;
157
158         committer = git_committer_info(IDENT_STRICT);
159         if (split_ident_line(&id, committer, strlen(committer)) < 0)
160                 die(_("invalid committer: %s"), committer);
161         state->committer_name =
162                 xmemdupz(id.name_begin, id.name_end - id.name_begin);
163         state->committer_email =
164                 xmemdupz(id.mail_begin, id.mail_end - id.mail_end);
165 }
166
167 /**
168  * Releases memory allocated by an am_state.
169  */
170 static void am_state_release(struct am_state *state)
171 {
172         free(state->dir);
173         free(state->author_name);
174         free(state->author_email);
175         free(state->author_date);
176         free(state->committer_name);
177         free(state->committer_email);
178         free(state->msg);
179         strvec_clear(&state->git_apply_opts);
180 }
181
182 /**
183  * Returns path relative to the am_state directory.
184  */
185 static inline const char *am_path(const struct am_state *state, const char *path)
186 {
187         return mkpath("%s/%s", state->dir, path);
188 }
189
190 /**
191  * For convenience to call write_file()
192  */
193 static void write_state_text(const struct am_state *state,
194                              const char *name, const char *string)
195 {
196         write_file(am_path(state, name), "%s", string);
197 }
198
199 static void write_state_count(const struct am_state *state,
200                               const char *name, int value)
201 {
202         write_file(am_path(state, name), "%d", value);
203 }
204
205 static void write_state_bool(const struct am_state *state,
206                              const char *name, int value)
207 {
208         write_state_text(state, name, value ? "t" : "f");
209 }
210
211 /**
212  * If state->quiet is false, calls fprintf(fp, fmt, ...), and appends a newline
213  * at the end.
214  */
215 static void say(const struct am_state *state, FILE *fp, const char *fmt, ...)
216 {
217         va_list ap;
218
219         va_start(ap, fmt);
220         if (!state->quiet) {
221                 vfprintf(fp, fmt, ap);
222                 putc('\n', fp);
223         }
224         va_end(ap);
225 }
226
227 /**
228  * Returns 1 if there is an am session in progress, 0 otherwise.
229  */
230 static int am_in_progress(const struct am_state *state)
231 {
232         struct stat st;
233
234         if (lstat(state->dir, &st) < 0 || !S_ISDIR(st.st_mode))
235                 return 0;
236         if (lstat(am_path(state, "last"), &st) || !S_ISREG(st.st_mode))
237                 return 0;
238         if (lstat(am_path(state, "next"), &st) || !S_ISREG(st.st_mode))
239                 return 0;
240         return 1;
241 }
242
243 /**
244  * Reads the contents of `file` in the `state` directory into `sb`. Returns the
245  * number of bytes read on success, -1 if the file does not exist. If `trim` is
246  * set, trailing whitespace will be removed.
247  */
248 static int read_state_file(struct strbuf *sb, const struct am_state *state,
249                         const char *file, int trim)
250 {
251         strbuf_reset(sb);
252
253         if (strbuf_read_file(sb, am_path(state, file), 0) >= 0) {
254                 if (trim)
255                         strbuf_trim(sb);
256
257                 return sb->len;
258         }
259
260         if (errno == ENOENT)
261                 return -1;
262
263         die_errno(_("could not read '%s'"), am_path(state, file));
264 }
265
266 /**
267  * Reads and parses the state directory's "author-script" file, and sets
268  * state->author_name, state->author_email and state->author_date accordingly.
269  * Returns 0 on success, -1 if the file could not be parsed.
270  *
271  * The author script is of the format:
272  *
273  *      GIT_AUTHOR_NAME='$author_name'
274  *      GIT_AUTHOR_EMAIL='$author_email'
275  *      GIT_AUTHOR_DATE='$author_date'
276  *
277  * where $author_name, $author_email and $author_date are quoted. We are strict
278  * with our parsing, as the file was meant to be eval'd in the old git-am.sh
279  * script, and thus if the file differs from what this function expects, it is
280  * better to bail out than to do something that the user does not expect.
281  */
282 static int read_am_author_script(struct am_state *state)
283 {
284         const char *filename = am_path(state, "author-script");
285
286         assert(!state->author_name);
287         assert(!state->author_email);
288         assert(!state->author_date);
289
290         return read_author_script(filename, &state->author_name,
291                                   &state->author_email, &state->author_date, 1);
292 }
293
294 /**
295  * Saves state->author_name, state->author_email and state->author_date in the
296  * state directory's "author-script" file.
297  */
298 static void write_author_script(const struct am_state *state)
299 {
300         struct strbuf sb = STRBUF_INIT;
301
302         strbuf_addstr(&sb, "GIT_AUTHOR_NAME=");
303         sq_quote_buf(&sb, state->author_name);
304         strbuf_addch(&sb, '\n');
305
306         strbuf_addstr(&sb, "GIT_AUTHOR_EMAIL=");
307         sq_quote_buf(&sb, state->author_email);
308         strbuf_addch(&sb, '\n');
309
310         strbuf_addstr(&sb, "GIT_AUTHOR_DATE=");
311         sq_quote_buf(&sb, state->author_date);
312         strbuf_addch(&sb, '\n');
313
314         write_state_text(state, "author-script", sb.buf);
315
316         strbuf_release(&sb);
317 }
318
319 /**
320  * Reads the commit message from the state directory's "final-commit" file,
321  * setting state->msg to its contents and state->msg_len to the length of its
322  * contents in bytes.
323  *
324  * Returns 0 on success, -1 if the file does not exist.
325  */
326 static int read_commit_msg(struct am_state *state)
327 {
328         struct strbuf sb = STRBUF_INIT;
329
330         assert(!state->msg);
331
332         if (read_state_file(&sb, state, "final-commit", 0) < 0) {
333                 strbuf_release(&sb);
334                 return -1;
335         }
336
337         state->msg = strbuf_detach(&sb, &state->msg_len);
338         return 0;
339 }
340
341 /**
342  * Saves state->msg in the state directory's "final-commit" file.
343  */
344 static void write_commit_msg(const struct am_state *state)
345 {
346         const char *filename = am_path(state, "final-commit");
347         write_file_buf(filename, state->msg, state->msg_len);
348 }
349
350 /**
351  * Loads state from disk.
352  */
353 static void am_load(struct am_state *state)
354 {
355         struct strbuf sb = STRBUF_INIT;
356
357         if (read_state_file(&sb, state, "next", 1) < 0)
358                 BUG("state file 'next' does not exist");
359         state->cur = strtol(sb.buf, NULL, 10);
360
361         if (read_state_file(&sb, state, "last", 1) < 0)
362                 BUG("state file 'last' does not exist");
363         state->last = strtol(sb.buf, NULL, 10);
364
365         if (read_am_author_script(state) < 0)
366                 die(_("could not parse author script"));
367
368         read_commit_msg(state);
369
370         if (read_state_file(&sb, state, "original-commit", 1) < 0)
371                 oidclr(&state->orig_commit);
372         else if (get_oid_hex(sb.buf, &state->orig_commit) < 0)
373                 die(_("could not parse %s"), am_path(state, "original-commit"));
374
375         read_state_file(&sb, state, "threeway", 1);
376         state->threeway = !strcmp(sb.buf, "t");
377
378         read_state_file(&sb, state, "quiet", 1);
379         state->quiet = !strcmp(sb.buf, "t");
380
381         read_state_file(&sb, state, "sign", 1);
382         state->signoff = !strcmp(sb.buf, "t");
383
384         read_state_file(&sb, state, "utf8", 1);
385         state->utf8 = !strcmp(sb.buf, "t");
386
387         if (file_exists(am_path(state, "rerere-autoupdate"))) {
388                 read_state_file(&sb, state, "rerere-autoupdate", 1);
389                 state->allow_rerere_autoupdate = strcmp(sb.buf, "t") ?
390                         RERERE_NOAUTOUPDATE : RERERE_AUTOUPDATE;
391         } else {
392                 state->allow_rerere_autoupdate = 0;
393         }
394
395         read_state_file(&sb, state, "keep", 1);
396         if (!strcmp(sb.buf, "t"))
397                 state->keep = KEEP_TRUE;
398         else if (!strcmp(sb.buf, "b"))
399                 state->keep = KEEP_NON_PATCH;
400         else
401                 state->keep = KEEP_FALSE;
402
403         read_state_file(&sb, state, "messageid", 1);
404         state->message_id = !strcmp(sb.buf, "t");
405
406         read_state_file(&sb, state, "scissors", 1);
407         if (!strcmp(sb.buf, "t"))
408                 state->scissors = SCISSORS_TRUE;
409         else if (!strcmp(sb.buf, "f"))
410                 state->scissors = SCISSORS_FALSE;
411         else
412                 state->scissors = SCISSORS_UNSET;
413
414         read_state_file(&sb, state, "apply-opt", 1);
415         strvec_clear(&state->git_apply_opts);
416         if (sq_dequote_to_strvec(sb.buf, &state->git_apply_opts) < 0)
417                 die(_("could not parse %s"), am_path(state, "apply-opt"));
418
419         state->rebasing = !!file_exists(am_path(state, "rebasing"));
420
421         strbuf_release(&sb);
422 }
423
424 /**
425  * Removes the am_state directory, forcefully terminating the current am
426  * session.
427  */
428 static void am_destroy(const struct am_state *state)
429 {
430         struct strbuf sb = STRBUF_INIT;
431
432         strbuf_addstr(&sb, state->dir);
433         remove_dir_recursively(&sb, 0);
434         strbuf_release(&sb);
435 }
436
437 /**
438  * Runs applypatch-msg hook. Returns its exit code.
439  */
440 static int run_applypatch_msg_hook(struct am_state *state)
441 {
442         int ret;
443
444         assert(state->msg);
445         ret = run_hook_le(NULL, "applypatch-msg", am_path(state, "final-commit"), NULL);
446
447         if (!ret) {
448                 FREE_AND_NULL(state->msg);
449                 if (read_commit_msg(state) < 0)
450                         die(_("'%s' was deleted by the applypatch-msg hook"),
451                                 am_path(state, "final-commit"));
452         }
453
454         return ret;
455 }
456
457 /**
458  * Runs post-rewrite hook. Returns it exit code.
459  */
460 static int run_post_rewrite_hook(const struct am_state *state)
461 {
462         struct child_process cp = CHILD_PROCESS_INIT;
463         const char *hook = find_hook("post-rewrite");
464         int ret;
465
466         if (!hook)
467                 return 0;
468
469         strvec_push(&cp.args, hook);
470         strvec_push(&cp.args, "rebase");
471
472         cp.in = xopen(am_path(state, "rewritten"), O_RDONLY);
473         cp.stdout_to_stderr = 1;
474         cp.trace2_hook_name = "post-rewrite";
475
476         ret = run_command(&cp);
477
478         close(cp.in);
479         return ret;
480 }
481
482 /**
483  * Reads the state directory's "rewritten" file, and copies notes from the old
484  * commits listed in the file to their rewritten commits.
485  *
486  * Returns 0 on success, -1 on failure.
487  */
488 static int copy_notes_for_rebase(const struct am_state *state)
489 {
490         struct notes_rewrite_cfg *c;
491         struct strbuf sb = STRBUF_INIT;
492         const char *invalid_line = _("Malformed input line: '%s'.");
493         const char *msg = "Notes added by 'git rebase'";
494         FILE *fp;
495         int ret = 0;
496
497         assert(state->rebasing);
498
499         c = init_copy_notes_for_rewrite("rebase");
500         if (!c)
501                 return 0;
502
503         fp = xfopen(am_path(state, "rewritten"), "r");
504
505         while (!strbuf_getline_lf(&sb, fp)) {
506                 struct object_id from_obj, to_obj;
507                 const char *p;
508
509                 if (sb.len != the_hash_algo->hexsz * 2 + 1) {
510                         ret = error(invalid_line, sb.buf);
511                         goto finish;
512                 }
513
514                 if (parse_oid_hex(sb.buf, &from_obj, &p)) {
515                         ret = error(invalid_line, sb.buf);
516                         goto finish;
517                 }
518
519                 if (*p != ' ') {
520                         ret = error(invalid_line, sb.buf);
521                         goto finish;
522                 }
523
524                 if (get_oid_hex(p + 1, &to_obj)) {
525                         ret = error(invalid_line, sb.buf);
526                         goto finish;
527                 }
528
529                 if (copy_note_for_rewrite(c, &from_obj, &to_obj))
530                         ret = error(_("Failed to copy notes from '%s' to '%s'"),
531                                         oid_to_hex(&from_obj), oid_to_hex(&to_obj));
532         }
533
534 finish:
535         finish_copy_notes_for_rewrite(the_repository, c, msg);
536         fclose(fp);
537         strbuf_release(&sb);
538         return ret;
539 }
540
541 /**
542  * Determines if the file looks like a piece of RFC2822 mail by grabbing all
543  * non-indented lines and checking if they look like they begin with valid
544  * header field names.
545  *
546  * Returns 1 if the file looks like a piece of mail, 0 otherwise.
547  */
548 static int is_mail(FILE *fp)
549 {
550         const char *header_regex = "^[!-9;-~]+:";
551         struct strbuf sb = STRBUF_INIT;
552         regex_t regex;
553         int ret = 1;
554
555         if (fseek(fp, 0L, SEEK_SET))
556                 die_errno(_("fseek failed"));
557
558         if (regcomp(&regex, header_regex, REG_NOSUB | REG_EXTENDED))
559                 die("invalid pattern: %s", header_regex);
560
561         while (!strbuf_getline(&sb, fp)) {
562                 if (!sb.len)
563                         break; /* End of header */
564
565                 /* Ignore indented folded lines */
566                 if (*sb.buf == '\t' || *sb.buf == ' ')
567                         continue;
568
569                 /* It's a header if it matches header_regex */
570                 if (regexec(&regex, sb.buf, 0, NULL, 0)) {
571                         ret = 0;
572                         goto done;
573                 }
574         }
575
576 done:
577         regfree(&regex);
578         strbuf_release(&sb);
579         return ret;
580 }
581
582 /**
583  * Attempts to detect the patch_format of the patches contained in `paths`,
584  * returning the PATCH_FORMAT_* enum value. Returns PATCH_FORMAT_UNKNOWN if
585  * detection fails.
586  */
587 static int detect_patch_format(const char **paths)
588 {
589         enum patch_format ret = PATCH_FORMAT_UNKNOWN;
590         struct strbuf l1 = STRBUF_INIT;
591         struct strbuf l2 = STRBUF_INIT;
592         struct strbuf l3 = STRBUF_INIT;
593         FILE *fp;
594
595         /*
596          * We default to mbox format if input is from stdin and for directories
597          */
598         if (!*paths || !strcmp(*paths, "-") || is_directory(*paths))
599                 return PATCH_FORMAT_MBOX;
600
601         /*
602          * Otherwise, check the first few lines of the first patch, starting
603          * from the first non-blank line, to try to detect its format.
604          */
605
606         fp = xfopen(*paths, "r");
607
608         while (!strbuf_getline(&l1, fp)) {
609                 if (l1.len)
610                         break;
611         }
612
613         if (starts_with(l1.buf, "From ") || starts_with(l1.buf, "From: ")) {
614                 ret = PATCH_FORMAT_MBOX;
615                 goto done;
616         }
617
618         if (starts_with(l1.buf, "# This series applies on GIT commit")) {
619                 ret = PATCH_FORMAT_STGIT_SERIES;
620                 goto done;
621         }
622
623         if (!strcmp(l1.buf, "# HG changeset patch")) {
624                 ret = PATCH_FORMAT_HG;
625                 goto done;
626         }
627
628         strbuf_getline(&l2, fp);
629         strbuf_getline(&l3, fp);
630
631         /*
632          * If the second line is empty and the third is a From, Author or Date
633          * entry, this is likely an StGit patch.
634          */
635         if (l1.len && !l2.len &&
636                 (starts_with(l3.buf, "From:") ||
637                  starts_with(l3.buf, "Author:") ||
638                  starts_with(l3.buf, "Date:"))) {
639                 ret = PATCH_FORMAT_STGIT;
640                 goto done;
641         }
642
643         if (l1.len && is_mail(fp)) {
644                 ret = PATCH_FORMAT_MBOX;
645                 goto done;
646         }
647
648 done:
649         fclose(fp);
650         strbuf_release(&l1);
651         strbuf_release(&l2);
652         strbuf_release(&l3);
653         return ret;
654 }
655
656 /**
657  * Splits out individual email patches from `paths`, where each path is either
658  * a mbox file or a Maildir. Returns 0 on success, -1 on failure.
659  */
660 static int split_mail_mbox(struct am_state *state, const char **paths,
661                                 int keep_cr, int mboxrd)
662 {
663         struct child_process cp = CHILD_PROCESS_INIT;
664         struct strbuf last = STRBUF_INIT;
665         int ret;
666
667         cp.git_cmd = 1;
668         strvec_push(&cp.args, "mailsplit");
669         strvec_pushf(&cp.args, "-d%d", state->prec);
670         strvec_pushf(&cp.args, "-o%s", state->dir);
671         strvec_push(&cp.args, "-b");
672         if (keep_cr)
673                 strvec_push(&cp.args, "--keep-cr");
674         if (mboxrd)
675                 strvec_push(&cp.args, "--mboxrd");
676         strvec_push(&cp.args, "--");
677         strvec_pushv(&cp.args, paths);
678
679         ret = capture_command(&cp, &last, 8);
680         if (ret)
681                 goto exit;
682
683         state->cur = 1;
684         state->last = strtol(last.buf, NULL, 10);
685
686 exit:
687         strbuf_release(&last);
688         return ret ? -1 : 0;
689 }
690
691 /**
692  * Callback signature for split_mail_conv(). The foreign patch should be
693  * read from `in`, and the converted patch (in RFC2822 mail format) should be
694  * written to `out`. Return 0 on success, or -1 on failure.
695  */
696 typedef int (*mail_conv_fn)(FILE *out, FILE *in, int keep_cr);
697
698 /**
699  * Calls `fn` for each file in `paths` to convert the foreign patch to the
700  * RFC2822 mail format suitable for parsing with git-mailinfo.
701  *
702  * Returns 0 on success, -1 on failure.
703  */
704 static int split_mail_conv(mail_conv_fn fn, struct am_state *state,
705                         const char **paths, int keep_cr)
706 {
707         static const char *stdin_only[] = {"-", NULL};
708         int i;
709
710         if (!*paths)
711                 paths = stdin_only;
712
713         for (i = 0; *paths; paths++, i++) {
714                 FILE *in, *out;
715                 const char *mail;
716                 int ret;
717
718                 if (!strcmp(*paths, "-"))
719                         in = stdin;
720                 else
721                         in = fopen(*paths, "r");
722
723                 if (!in)
724                         return error_errno(_("could not open '%s' for reading"),
725                                            *paths);
726
727                 mail = mkpath("%s/%0*d", state->dir, state->prec, i + 1);
728
729                 out = fopen(mail, "w");
730                 if (!out) {
731                         if (in != stdin)
732                                 fclose(in);
733                         return error_errno(_("could not open '%s' for writing"),
734                                            mail);
735                 }
736
737                 ret = fn(out, in, keep_cr);
738
739                 fclose(out);
740                 if (in != stdin)
741                         fclose(in);
742
743                 if (ret)
744                         return error(_("could not parse patch '%s'"), *paths);
745         }
746
747         state->cur = 1;
748         state->last = i;
749         return 0;
750 }
751
752 /**
753  * A split_mail_conv() callback that converts an StGit patch to an RFC2822
754  * message suitable for parsing with git-mailinfo.
755  */
756 static int stgit_patch_to_mail(FILE *out, FILE *in, int keep_cr)
757 {
758         struct strbuf sb = STRBUF_INIT;
759         int subject_printed = 0;
760
761         while (!strbuf_getline_lf(&sb, in)) {
762                 const char *str;
763
764                 if (str_isspace(sb.buf))
765                         continue;
766                 else if (skip_prefix(sb.buf, "Author:", &str))
767                         fprintf(out, "From:%s\n", str);
768                 else if (starts_with(sb.buf, "From") || starts_with(sb.buf, "Date"))
769                         fprintf(out, "%s\n", sb.buf);
770                 else if (!subject_printed) {
771                         fprintf(out, "Subject: %s\n", sb.buf);
772                         subject_printed = 1;
773                 } else {
774                         fprintf(out, "\n%s\n", sb.buf);
775                         break;
776                 }
777         }
778
779         strbuf_reset(&sb);
780         while (strbuf_fread(&sb, 8192, in) > 0) {
781                 fwrite(sb.buf, 1, sb.len, out);
782                 strbuf_reset(&sb);
783         }
784
785         strbuf_release(&sb);
786         return 0;
787 }
788
789 /**
790  * This function only supports a single StGit series file in `paths`.
791  *
792  * Given an StGit series file, converts the StGit patches in the series into
793  * RFC2822 messages suitable for parsing with git-mailinfo, and queues them in
794  * the state directory.
795  *
796  * Returns 0 on success, -1 on failure.
797  */
798 static int split_mail_stgit_series(struct am_state *state, const char **paths,
799                                         int keep_cr)
800 {
801         const char *series_dir;
802         char *series_dir_buf;
803         FILE *fp;
804         struct strvec patches = STRVEC_INIT;
805         struct strbuf sb = STRBUF_INIT;
806         int ret;
807
808         if (!paths[0] || paths[1])
809                 return error(_("Only one StGIT patch series can be applied at once"));
810
811         series_dir_buf = xstrdup(*paths);
812         series_dir = dirname(series_dir_buf);
813
814         fp = fopen(*paths, "r");
815         if (!fp)
816                 return error_errno(_("could not open '%s' for reading"), *paths);
817
818         while (!strbuf_getline_lf(&sb, fp)) {
819                 if (*sb.buf == '#')
820                         continue; /* skip comment lines */
821
822                 strvec_push(&patches, mkpath("%s/%s", series_dir, sb.buf));
823         }
824
825         fclose(fp);
826         strbuf_release(&sb);
827         free(series_dir_buf);
828
829         ret = split_mail_conv(stgit_patch_to_mail, state, patches.v, keep_cr);
830
831         strvec_clear(&patches);
832         return ret;
833 }
834
835 /**
836  * A split_patches_conv() callback that converts a mercurial patch to a RFC2822
837  * message suitable for parsing with git-mailinfo.
838  */
839 static int hg_patch_to_mail(FILE *out, FILE *in, int keep_cr)
840 {
841         struct strbuf sb = STRBUF_INIT;
842         int rc = 0;
843
844         while (!strbuf_getline_lf(&sb, in)) {
845                 const char *str;
846
847                 if (skip_prefix(sb.buf, "# User ", &str))
848                         fprintf(out, "From: %s\n", str);
849                 else if (skip_prefix(sb.buf, "# Date ", &str)) {
850                         timestamp_t timestamp;
851                         long tz, tz2;
852                         char *end;
853
854                         errno = 0;
855                         timestamp = parse_timestamp(str, &end, 10);
856                         if (errno) {
857                                 rc = error(_("invalid timestamp"));
858                                 goto exit;
859                         }
860
861                         if (!skip_prefix(end, " ", &str)) {
862                                 rc = error(_("invalid Date line"));
863                                 goto exit;
864                         }
865
866                         errno = 0;
867                         tz = strtol(str, &end, 10);
868                         if (errno) {
869                                 rc = error(_("invalid timezone offset"));
870                                 goto exit;
871                         }
872
873                         if (*end) {
874                                 rc = error(_("invalid Date line"));
875                                 goto exit;
876                         }
877
878                         /*
879                          * mercurial's timezone is in seconds west of UTC,
880                          * however git's timezone is in hours + minutes east of
881                          * UTC. Convert it.
882                          */
883                         tz2 = labs(tz) / 3600 * 100 + labs(tz) % 3600 / 60;
884                         if (tz > 0)
885                                 tz2 = -tz2;
886
887                         fprintf(out, "Date: %s\n", show_date(timestamp, tz2, DATE_MODE(RFC2822)));
888                 } else if (starts_with(sb.buf, "# ")) {
889                         continue;
890                 } else {
891                         fprintf(out, "\n%s\n", sb.buf);
892                         break;
893                 }
894         }
895
896         strbuf_reset(&sb);
897         while (strbuf_fread(&sb, 8192, in) > 0) {
898                 fwrite(sb.buf, 1, sb.len, out);
899                 strbuf_reset(&sb);
900         }
901 exit:
902         strbuf_release(&sb);
903         return rc;
904 }
905
906 /**
907  * Splits a list of files/directories into individual email patches. Each path
908  * in `paths` must be a file/directory that is formatted according to
909  * `patch_format`.
910  *
911  * Once split out, the individual email patches will be stored in the state
912  * directory, with each patch's filename being its index, padded to state->prec
913  * digits.
914  *
915  * state->cur will be set to the index of the first mail, and state->last will
916  * be set to the index of the last mail.
917  *
918  * Set keep_cr to 0 to convert all lines ending with \r\n to end with \n, 1
919  * to disable this behavior, -1 to use the default configured setting.
920  *
921  * Returns 0 on success, -1 on failure.
922  */
923 static int split_mail(struct am_state *state, enum patch_format patch_format,
924                         const char **paths, int keep_cr)
925 {
926         if (keep_cr < 0) {
927                 keep_cr = 0;
928                 git_config_get_bool("am.keepcr", &keep_cr);
929         }
930
931         switch (patch_format) {
932         case PATCH_FORMAT_MBOX:
933                 return split_mail_mbox(state, paths, keep_cr, 0);
934         case PATCH_FORMAT_STGIT:
935                 return split_mail_conv(stgit_patch_to_mail, state, paths, keep_cr);
936         case PATCH_FORMAT_STGIT_SERIES:
937                 return split_mail_stgit_series(state, paths, keep_cr);
938         case PATCH_FORMAT_HG:
939                 return split_mail_conv(hg_patch_to_mail, state, paths, keep_cr);
940         case PATCH_FORMAT_MBOXRD:
941                 return split_mail_mbox(state, paths, keep_cr, 1);
942         default:
943                 BUG("invalid patch_format");
944         }
945         return -1;
946 }
947
948 /**
949  * Setup a new am session for applying patches
950  */
951 static void am_setup(struct am_state *state, enum patch_format patch_format,
952                         const char **paths, int keep_cr)
953 {
954         struct object_id curr_head;
955         const char *str;
956         struct strbuf sb = STRBUF_INIT;
957
958         if (!patch_format)
959                 patch_format = detect_patch_format(paths);
960
961         if (!patch_format) {
962                 fprintf_ln(stderr, _("Patch format detection failed."));
963                 exit(128);
964         }
965
966         if (mkdir(state->dir, 0777) < 0 && errno != EEXIST)
967                 die_errno(_("failed to create directory '%s'"), state->dir);
968         delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
969
970         if (split_mail(state, patch_format, paths, keep_cr) < 0) {
971                 am_destroy(state);
972                 die(_("Failed to split patches."));
973         }
974
975         if (state->rebasing)
976                 state->threeway = 1;
977
978         write_state_bool(state, "threeway", state->threeway);
979         write_state_bool(state, "quiet", state->quiet);
980         write_state_bool(state, "sign", state->signoff);
981         write_state_bool(state, "utf8", state->utf8);
982
983         if (state->allow_rerere_autoupdate)
984                 write_state_bool(state, "rerere-autoupdate",
985                          state->allow_rerere_autoupdate == RERERE_AUTOUPDATE);
986
987         switch (state->keep) {
988         case KEEP_FALSE:
989                 str = "f";
990                 break;
991         case KEEP_TRUE:
992                 str = "t";
993                 break;
994         case KEEP_NON_PATCH:
995                 str = "b";
996                 break;
997         default:
998                 BUG("invalid value for state->keep");
999         }
1000
1001         write_state_text(state, "keep", str);
1002         write_state_bool(state, "messageid", state->message_id);
1003
1004         switch (state->scissors) {
1005         case SCISSORS_UNSET:
1006                 str = "";
1007                 break;
1008         case SCISSORS_FALSE:
1009                 str = "f";
1010                 break;
1011         case SCISSORS_TRUE:
1012                 str = "t";
1013                 break;
1014         default:
1015                 BUG("invalid value for state->scissors");
1016         }
1017         write_state_text(state, "scissors", str);
1018
1019         sq_quote_argv(&sb, state->git_apply_opts.v);
1020         write_state_text(state, "apply-opt", sb.buf);
1021
1022         if (state->rebasing)
1023                 write_state_text(state, "rebasing", "");
1024         else
1025                 write_state_text(state, "applying", "");
1026
1027         if (!get_oid("HEAD", &curr_head)) {
1028                 write_state_text(state, "abort-safety", oid_to_hex(&curr_head));
1029                 if (!state->rebasing)
1030                         update_ref("am", "ORIG_HEAD", &curr_head, NULL, 0,
1031                                    UPDATE_REFS_DIE_ON_ERR);
1032         } else {
1033                 write_state_text(state, "abort-safety", "");
1034                 if (!state->rebasing)
1035                         delete_ref(NULL, "ORIG_HEAD", NULL, 0);
1036         }
1037
1038         /*
1039          * NOTE: Since the "next" and "last" files determine if an am_state
1040          * session is in progress, they should be written last.
1041          */
1042
1043         write_state_count(state, "next", state->cur);
1044         write_state_count(state, "last", state->last);
1045
1046         strbuf_release(&sb);
1047 }
1048
1049 /**
1050  * Increments the patch pointer, and cleans am_state for the application of the
1051  * next patch.
1052  */
1053 static void am_next(struct am_state *state)
1054 {
1055         struct object_id head;
1056
1057         FREE_AND_NULL(state->author_name);
1058         FREE_AND_NULL(state->author_email);
1059         FREE_AND_NULL(state->author_date);
1060         FREE_AND_NULL(state->msg);
1061         state->msg_len = 0;
1062
1063         unlink(am_path(state, "author-script"));
1064         unlink(am_path(state, "final-commit"));
1065
1066         oidclr(&state->orig_commit);
1067         unlink(am_path(state, "original-commit"));
1068         delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
1069
1070         if (!get_oid("HEAD", &head))
1071                 write_state_text(state, "abort-safety", oid_to_hex(&head));
1072         else
1073                 write_state_text(state, "abort-safety", "");
1074
1075         state->cur++;
1076         write_state_count(state, "next", state->cur);
1077 }
1078
1079 /**
1080  * Returns the filename of the current patch email.
1081  */
1082 static const char *msgnum(const struct am_state *state)
1083 {
1084         static struct strbuf sb = STRBUF_INIT;
1085
1086         strbuf_reset(&sb);
1087         strbuf_addf(&sb, "%0*d", state->prec, state->cur);
1088
1089         return sb.buf;
1090 }
1091
1092 /**
1093  * Dies with a user-friendly message on how to proceed after resolving the
1094  * problem. This message can be overridden with state->resolvemsg.
1095  */
1096 static void NORETURN die_user_resolve(const struct am_state *state)
1097 {
1098         if (state->resolvemsg) {
1099                 printf_ln("%s", state->resolvemsg);
1100         } else {
1101                 const char *cmdline = state->interactive ? "git am -i" : "git am";
1102
1103                 printf_ln(_("When you have resolved this problem, run \"%s --continue\"."), cmdline);
1104                 printf_ln(_("If you prefer to skip this patch, run \"%s --skip\" instead."), cmdline);
1105                 printf_ln(_("To restore the original branch and stop patching, run \"%s --abort\"."), cmdline);
1106         }
1107
1108         exit(128);
1109 }
1110
1111 /**
1112  * Appends signoff to the "msg" field of the am_state.
1113  */
1114 static void am_append_signoff(struct am_state *state)
1115 {
1116         struct strbuf sb = STRBUF_INIT;
1117
1118         strbuf_attach(&sb, state->msg, state->msg_len, state->msg_len);
1119         append_signoff(&sb, 0, 0);
1120         state->msg = strbuf_detach(&sb, &state->msg_len);
1121 }
1122
1123 /**
1124  * Parses `mail` using git-mailinfo, extracting its patch and authorship info.
1125  * state->msg will be set to the patch message. state->author_name,
1126  * state->author_email and state->author_date will be set to the patch author's
1127  * name, email and date respectively. The patch body will be written to the
1128  * state directory's "patch" file.
1129  *
1130  * Returns 1 if the patch should be skipped, 0 otherwise.
1131  */
1132 static int parse_mail(struct am_state *state, const char *mail)
1133 {
1134         FILE *fp;
1135         struct strbuf sb = STRBUF_INIT;
1136         struct strbuf msg = STRBUF_INIT;
1137         struct strbuf author_name = STRBUF_INIT;
1138         struct strbuf author_date = STRBUF_INIT;
1139         struct strbuf author_email = STRBUF_INIT;
1140         int ret = 0;
1141         struct mailinfo mi;
1142
1143         setup_mailinfo(&mi);
1144
1145         if (state->utf8)
1146                 mi.metainfo_charset = get_commit_output_encoding();
1147         else
1148                 mi.metainfo_charset = NULL;
1149
1150         switch (state->keep) {
1151         case KEEP_FALSE:
1152                 break;
1153         case KEEP_TRUE:
1154                 mi.keep_subject = 1;
1155                 break;
1156         case KEEP_NON_PATCH:
1157                 mi.keep_non_patch_brackets_in_subject = 1;
1158                 break;
1159         default:
1160                 BUG("invalid value for state->keep");
1161         }
1162
1163         if (state->message_id)
1164                 mi.add_message_id = 1;
1165
1166         switch (state->scissors) {
1167         case SCISSORS_UNSET:
1168                 break;
1169         case SCISSORS_FALSE:
1170                 mi.use_scissors = 0;
1171                 break;
1172         case SCISSORS_TRUE:
1173                 mi.use_scissors = 1;
1174                 break;
1175         default:
1176                 BUG("invalid value for state->scissors");
1177         }
1178
1179         mi.input = xfopen(mail, "r");
1180         mi.output = xfopen(am_path(state, "info"), "w");
1181         if (mailinfo(&mi, am_path(state, "msg"), am_path(state, "patch")))
1182                 die("could not parse patch");
1183
1184         fclose(mi.input);
1185         fclose(mi.output);
1186
1187         if (mi.format_flowed)
1188                 warning(_("Patch sent with format=flowed; "
1189                           "space at the end of lines might be lost."));
1190
1191         /* Extract message and author information */
1192         fp = xfopen(am_path(state, "info"), "r");
1193         while (!strbuf_getline_lf(&sb, fp)) {
1194                 const char *x;
1195
1196                 if (skip_prefix(sb.buf, "Subject: ", &x)) {
1197                         if (msg.len)
1198                                 strbuf_addch(&msg, '\n');
1199                         strbuf_addstr(&msg, x);
1200                 } else if (skip_prefix(sb.buf, "Author: ", &x))
1201                         strbuf_addstr(&author_name, x);
1202                 else if (skip_prefix(sb.buf, "Email: ", &x))
1203                         strbuf_addstr(&author_email, x);
1204                 else if (skip_prefix(sb.buf, "Date: ", &x))
1205                         strbuf_addstr(&author_date, x);
1206         }
1207         fclose(fp);
1208
1209         /* Skip pine's internal folder data */
1210         if (!strcmp(author_name.buf, "Mail System Internal Data")) {
1211                 ret = 1;
1212                 goto finish;
1213         }
1214
1215         if (is_empty_or_missing_file(am_path(state, "patch"))) {
1216                 printf_ln(_("Patch is empty."));
1217                 die_user_resolve(state);
1218         }
1219
1220         strbuf_addstr(&msg, "\n\n");
1221         strbuf_addbuf(&msg, &mi.log_message);
1222         strbuf_stripspace(&msg, 0);
1223
1224         assert(!state->author_name);
1225         state->author_name = strbuf_detach(&author_name, NULL);
1226
1227         assert(!state->author_email);
1228         state->author_email = strbuf_detach(&author_email, NULL);
1229
1230         assert(!state->author_date);
1231         state->author_date = strbuf_detach(&author_date, NULL);
1232
1233         assert(!state->msg);
1234         state->msg = strbuf_detach(&msg, &state->msg_len);
1235
1236 finish:
1237         strbuf_release(&msg);
1238         strbuf_release(&author_date);
1239         strbuf_release(&author_email);
1240         strbuf_release(&author_name);
1241         strbuf_release(&sb);
1242         clear_mailinfo(&mi);
1243         return ret;
1244 }
1245
1246 /**
1247  * Sets commit_id to the commit hash where the mail was generated from.
1248  * Returns 0 on success, -1 on failure.
1249  */
1250 static int get_mail_commit_oid(struct object_id *commit_id, const char *mail)
1251 {
1252         struct strbuf sb = STRBUF_INIT;
1253         FILE *fp = xfopen(mail, "r");
1254         const char *x;
1255         int ret = 0;
1256
1257         if (strbuf_getline_lf(&sb, fp) ||
1258             !skip_prefix(sb.buf, "From ", &x) ||
1259             get_oid_hex(x, commit_id) < 0)
1260                 ret = -1;
1261
1262         strbuf_release(&sb);
1263         fclose(fp);
1264         return ret;
1265 }
1266
1267 /**
1268  * Sets state->msg, state->author_name, state->author_email, state->author_date
1269  * to the commit's respective info.
1270  */
1271 static void get_commit_info(struct am_state *state, struct commit *commit)
1272 {
1273         const char *buffer, *ident_line, *msg;
1274         size_t ident_len;
1275         struct ident_split id;
1276
1277         buffer = logmsg_reencode(commit, NULL, get_commit_output_encoding());
1278
1279         ident_line = find_commit_header(buffer, "author", &ident_len);
1280         if (!ident_line)
1281                 die(_("missing author line in commit %s"),
1282                       oid_to_hex(&commit->object.oid));
1283         if (split_ident_line(&id, ident_line, ident_len) < 0)
1284                 die(_("invalid ident line: %.*s"), (int)ident_len, ident_line);
1285
1286         assert(!state->author_name);
1287         if (id.name_begin)
1288                 state->author_name =
1289                         xmemdupz(id.name_begin, id.name_end - id.name_begin);
1290         else
1291                 state->author_name = xstrdup("");
1292
1293         assert(!state->author_email);
1294         if (id.mail_begin)
1295                 state->author_email =
1296                         xmemdupz(id.mail_begin, id.mail_end - id.mail_begin);
1297         else
1298                 state->author_email = xstrdup("");
1299
1300         assert(!state->author_date);
1301         state->author_date = xstrdup(show_ident_date(&id, DATE_MODE(NORMAL)));
1302
1303         assert(!state->msg);
1304         msg = strstr(buffer, "\n\n");
1305         if (!msg)
1306                 die(_("unable to parse commit %s"), oid_to_hex(&commit->object.oid));
1307         state->msg = xstrdup(msg + 2);
1308         state->msg_len = strlen(state->msg);
1309         unuse_commit_buffer(commit, buffer);
1310 }
1311
1312 /**
1313  * Writes `commit` as a patch to the state directory's "patch" file.
1314  */
1315 static void write_commit_patch(const struct am_state *state, struct commit *commit)
1316 {
1317         struct rev_info rev_info;
1318         FILE *fp;
1319
1320         fp = xfopen(am_path(state, "patch"), "w");
1321         repo_init_revisions(the_repository, &rev_info, NULL);
1322         rev_info.diff = 1;
1323         rev_info.abbrev = 0;
1324         rev_info.disable_stdin = 1;
1325         rev_info.show_root_diff = 1;
1326         rev_info.diffopt.output_format = DIFF_FORMAT_PATCH;
1327         rev_info.no_commit_id = 1;
1328         rev_info.diffopt.flags.binary = 1;
1329         rev_info.diffopt.flags.full_index = 1;
1330         rev_info.diffopt.use_color = 0;
1331         rev_info.diffopt.file = fp;
1332         rev_info.diffopt.close_file = 1;
1333         add_pending_object(&rev_info, &commit->object, "");
1334         diff_setup_done(&rev_info.diffopt);
1335         log_tree_commit(&rev_info, commit);
1336 }
1337
1338 /**
1339  * Writes the diff of the index against HEAD as a patch to the state
1340  * directory's "patch" file.
1341  */
1342 static void write_index_patch(const struct am_state *state)
1343 {
1344         struct tree *tree;
1345         struct object_id head;
1346         struct rev_info rev_info;
1347         FILE *fp;
1348
1349         if (!get_oid("HEAD", &head)) {
1350                 struct commit *commit = lookup_commit_or_die(&head, "HEAD");
1351                 tree = get_commit_tree(commit);
1352         } else
1353                 tree = lookup_tree(the_repository,
1354                                    the_repository->hash_algo->empty_tree);
1355
1356         fp = xfopen(am_path(state, "patch"), "w");
1357         repo_init_revisions(the_repository, &rev_info, NULL);
1358         rev_info.diff = 1;
1359         rev_info.disable_stdin = 1;
1360         rev_info.no_commit_id = 1;
1361         rev_info.diffopt.output_format = DIFF_FORMAT_PATCH;
1362         rev_info.diffopt.use_color = 0;
1363         rev_info.diffopt.file = fp;
1364         rev_info.diffopt.close_file = 1;
1365         add_pending_object(&rev_info, &tree->object, "");
1366         diff_setup_done(&rev_info.diffopt);
1367         run_diff_index(&rev_info, 1);
1368 }
1369
1370 /**
1371  * Like parse_mail(), but parses the mail by looking up its commit ID
1372  * directly. This is used in --rebasing mode to bypass git-mailinfo's munging
1373  * of patches.
1374  *
1375  * state->orig_commit will be set to the original commit ID.
1376  *
1377  * Will always return 0 as the patch should never be skipped.
1378  */
1379 static int parse_mail_rebase(struct am_state *state, const char *mail)
1380 {
1381         struct commit *commit;
1382         struct object_id commit_oid;
1383
1384         if (get_mail_commit_oid(&commit_oid, mail) < 0)
1385                 die(_("could not parse %s"), mail);
1386
1387         commit = lookup_commit_or_die(&commit_oid, mail);
1388
1389         get_commit_info(state, commit);
1390
1391         write_commit_patch(state, commit);
1392
1393         oidcpy(&state->orig_commit, &commit_oid);
1394         write_state_text(state, "original-commit", oid_to_hex(&commit_oid));
1395         update_ref("am", "REBASE_HEAD", &commit_oid,
1396                    NULL, REF_NO_DEREF, UPDATE_REFS_DIE_ON_ERR);
1397
1398         return 0;
1399 }
1400
1401 /**
1402  * Applies current patch with git-apply. Returns 0 on success, -1 otherwise. If
1403  * `index_file` is not NULL, the patch will be applied to that index.
1404  */
1405 static int run_apply(const struct am_state *state, const char *index_file)
1406 {
1407         struct strvec apply_paths = STRVEC_INIT;
1408         struct strvec apply_opts = STRVEC_INIT;
1409         struct apply_state apply_state;
1410         int res, opts_left;
1411         int force_apply = 0;
1412         int options = 0;
1413
1414         if (init_apply_state(&apply_state, the_repository, NULL))
1415                 BUG("init_apply_state() failed");
1416
1417         strvec_push(&apply_opts, "apply");
1418         strvec_pushv(&apply_opts, state->git_apply_opts.v);
1419
1420         opts_left = apply_parse_options(apply_opts.nr, apply_opts.v,
1421                                         &apply_state, &force_apply, &options,
1422                                         NULL);
1423
1424         if (opts_left != 0)
1425                 die("unknown option passed through to git apply");
1426
1427         if (index_file) {
1428                 apply_state.index_file = index_file;
1429                 apply_state.cached = 1;
1430         } else
1431                 apply_state.check_index = 1;
1432
1433         /*
1434          * If we are allowed to fall back on 3-way merge, don't give false
1435          * errors during the initial attempt.
1436          */
1437         if (state->threeway && !index_file)
1438                 apply_state.apply_verbosity = verbosity_silent;
1439
1440         if (check_apply_state(&apply_state, force_apply))
1441                 BUG("check_apply_state() failed");
1442
1443         strvec_push(&apply_paths, am_path(state, "patch"));
1444
1445         res = apply_all_patches(&apply_state, apply_paths.nr, apply_paths.v, options);
1446
1447         strvec_clear(&apply_paths);
1448         strvec_clear(&apply_opts);
1449         clear_apply_state(&apply_state);
1450
1451         if (res)
1452                 return res;
1453
1454         if (index_file) {
1455                 /* Reload index as apply_all_patches() will have modified it. */
1456                 discard_cache();
1457                 read_cache_from(index_file);
1458         }
1459
1460         return 0;
1461 }
1462
1463 /**
1464  * Builds an index that contains just the blobs needed for a 3way merge.
1465  */
1466 static int build_fake_ancestor(const struct am_state *state, const char *index_file)
1467 {
1468         struct child_process cp = CHILD_PROCESS_INIT;
1469
1470         cp.git_cmd = 1;
1471         strvec_push(&cp.args, "apply");
1472         strvec_pushv(&cp.args, state->git_apply_opts.v);
1473         strvec_pushf(&cp.args, "--build-fake-ancestor=%s", index_file);
1474         strvec_push(&cp.args, am_path(state, "patch"));
1475
1476         if (run_command(&cp))
1477                 return -1;
1478
1479         return 0;
1480 }
1481
1482 /**
1483  * Attempt a threeway merge, using index_path as the temporary index.
1484  */
1485 static int fall_back_threeway(const struct am_state *state, const char *index_path)
1486 {
1487         struct object_id orig_tree, their_tree, our_tree;
1488         const struct object_id *bases[1] = { &orig_tree };
1489         struct merge_options o;
1490         struct commit *result;
1491         char *their_tree_name;
1492
1493         if (get_oid("HEAD", &our_tree) < 0)
1494                 oidcpy(&our_tree, the_hash_algo->empty_tree);
1495
1496         if (build_fake_ancestor(state, index_path))
1497                 return error("could not build fake ancestor");
1498
1499         discard_cache();
1500         read_cache_from(index_path);
1501
1502         if (write_index_as_tree(&orig_tree, &the_index, index_path, 0, NULL))
1503                 return error(_("Repository lacks necessary blobs to fall back on 3-way merge."));
1504
1505         say(state, stdout, _("Using index info to reconstruct a base tree..."));
1506
1507         if (!state->quiet) {
1508                 /*
1509                  * List paths that needed 3-way fallback, so that the user can
1510                  * review them with extra care to spot mismerges.
1511                  */
1512                 struct rev_info rev_info;
1513
1514                 repo_init_revisions(the_repository, &rev_info, NULL);
1515                 rev_info.diffopt.output_format = DIFF_FORMAT_NAME_STATUS;
1516                 rev_info.diffopt.filter |= diff_filter_bit('A');
1517                 rev_info.diffopt.filter |= diff_filter_bit('M');
1518                 add_pending_oid(&rev_info, "HEAD", &our_tree, 0);
1519                 diff_setup_done(&rev_info.diffopt);
1520                 run_diff_index(&rev_info, 1);
1521         }
1522
1523         if (run_apply(state, index_path))
1524                 return error(_("Did you hand edit your patch?\n"
1525                                 "It does not apply to blobs recorded in its index."));
1526
1527         if (write_index_as_tree(&their_tree, &the_index, index_path, 0, NULL))
1528                 return error("could not write tree");
1529
1530         say(state, stdout, _("Falling back to patching base and 3-way merge..."));
1531
1532         discard_cache();
1533         read_cache();
1534
1535         /*
1536          * This is not so wrong. Depending on which base we picked, orig_tree
1537          * may be wildly different from ours, but their_tree has the same set of
1538          * wildly different changes in parts the patch did not touch, so
1539          * recursive ends up canceling them, saying that we reverted all those
1540          * changes.
1541          */
1542
1543         init_merge_options(&o, the_repository);
1544
1545         o.branch1 = "HEAD";
1546         their_tree_name = xstrfmt("%.*s", linelen(state->msg), state->msg);
1547         o.branch2 = their_tree_name;
1548         o.detect_directory_renames = MERGE_DIRECTORY_RENAMES_NONE;
1549
1550         if (state->quiet)
1551                 o.verbosity = 0;
1552
1553         if (merge_recursive_generic(&o, &our_tree, &their_tree, 1, bases, &result)) {
1554                 repo_rerere(the_repository, state->allow_rerere_autoupdate);
1555                 free(their_tree_name);
1556                 return error(_("Failed to merge in the changes."));
1557         }
1558
1559         free(their_tree_name);
1560         return 0;
1561 }
1562
1563 /**
1564  * Commits the current index with state->msg as the commit message and
1565  * state->author_name, state->author_email and state->author_date as the author
1566  * information.
1567  */
1568 static void do_commit(const struct am_state *state)
1569 {
1570         struct object_id tree, parent, commit;
1571         const struct object_id *old_oid;
1572         struct commit_list *parents = NULL;
1573         const char *reflog_msg, *author, *committer = NULL;
1574         struct strbuf sb = STRBUF_INIT;
1575
1576         if (run_hook_le(NULL, "pre-applypatch", NULL))
1577                 exit(1);
1578
1579         if (write_cache_as_tree(&tree, 0, NULL))
1580                 die(_("git write-tree failed to write a tree"));
1581
1582         if (!get_oid_commit("HEAD", &parent)) {
1583                 old_oid = &parent;
1584                 commit_list_insert(lookup_commit(the_repository, &parent),
1585                                    &parents);
1586         } else {
1587                 old_oid = NULL;
1588                 say(state, stderr, _("applying to an empty history"));
1589         }
1590
1591         author = fmt_ident(state->author_name, state->author_email,
1592                 WANT_AUTHOR_IDENT,
1593                         state->ignore_date ? NULL : state->author_date,
1594                         IDENT_STRICT);
1595
1596         if (state->committer_date_is_author_date)
1597                 committer = fmt_ident(state->committer_name,
1598                                       state->author_email, WANT_COMMITTER_IDENT,
1599                                       state->ignore_date ? NULL
1600                                                          : state->author_date,
1601                                       IDENT_STRICT);
1602
1603         if (commit_tree_extended(state->msg, state->msg_len, &tree, parents,
1604                                  &commit, author, committer, state->sign_commit,
1605                                  NULL))
1606                 die(_("failed to write commit object"));
1607
1608         reflog_msg = getenv("GIT_REFLOG_ACTION");
1609         if (!reflog_msg)
1610                 reflog_msg = "am";
1611
1612         strbuf_addf(&sb, "%s: %.*s", reflog_msg, linelen(state->msg),
1613                         state->msg);
1614
1615         update_ref(sb.buf, "HEAD", &commit, old_oid, 0,
1616                    UPDATE_REFS_DIE_ON_ERR);
1617
1618         if (state->rebasing) {
1619                 FILE *fp = xfopen(am_path(state, "rewritten"), "a");
1620
1621                 assert(!is_null_oid(&state->orig_commit));
1622                 fprintf(fp, "%s ", oid_to_hex(&state->orig_commit));
1623                 fprintf(fp, "%s\n", oid_to_hex(&commit));
1624                 fclose(fp);
1625         }
1626
1627         run_hook_le(NULL, "post-applypatch", NULL);
1628
1629         strbuf_release(&sb);
1630 }
1631
1632 /**
1633  * Validates the am_state for resuming -- the "msg" and authorship fields must
1634  * be filled up.
1635  */
1636 static void validate_resume_state(const struct am_state *state)
1637 {
1638         if (!state->msg)
1639                 die(_("cannot resume: %s does not exist."),
1640                         am_path(state, "final-commit"));
1641
1642         if (!state->author_name || !state->author_email || !state->author_date)
1643                 die(_("cannot resume: %s does not exist."),
1644                         am_path(state, "author-script"));
1645 }
1646
1647 /**
1648  * Interactively prompt the user on whether the current patch should be
1649  * applied.
1650  *
1651  * Returns 0 if the user chooses to apply the patch, 1 if the user chooses to
1652  * skip it.
1653  */
1654 static int do_interactive(struct am_state *state)
1655 {
1656         assert(state->msg);
1657
1658         for (;;) {
1659                 char reply[64];
1660
1661                 puts(_("Commit Body is:"));
1662                 puts("--------------------------");
1663                 printf("%s", state->msg);
1664                 puts("--------------------------");
1665
1666                 /*
1667                  * TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a]
1668                  * in your translation. The program will only accept English
1669                  * input at this point.
1670                  */
1671                 printf(_("Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "));
1672                 if (!fgets(reply, sizeof(reply), stdin))
1673                         die("unable to read from stdin; aborting");
1674
1675                 if (*reply == 'y' || *reply == 'Y') {
1676                         return 0;
1677                 } else if (*reply == 'a' || *reply == 'A') {
1678                         state->interactive = 0;
1679                         return 0;
1680                 } else if (*reply == 'n' || *reply == 'N') {
1681                         return 1;
1682                 } else if (*reply == 'e' || *reply == 'E') {
1683                         struct strbuf msg = STRBUF_INIT;
1684
1685                         if (!launch_editor(am_path(state, "final-commit"), &msg, NULL)) {
1686                                 free(state->msg);
1687                                 state->msg = strbuf_detach(&msg, &state->msg_len);
1688                         }
1689                         strbuf_release(&msg);
1690                 } else if (*reply == 'v' || *reply == 'V') {
1691                         const char *pager = git_pager(1);
1692                         struct child_process cp = CHILD_PROCESS_INIT;
1693
1694                         if (!pager)
1695                                 pager = "cat";
1696                         prepare_pager_args(&cp, pager);
1697                         strvec_push(&cp.args, am_path(state, "patch"));
1698                         run_command(&cp);
1699                 }
1700         }
1701 }
1702
1703 /**
1704  * Applies all queued mail.
1705  *
1706  * If `resume` is true, we are "resuming". The "msg" and authorship fields, as
1707  * well as the state directory's "patch" file is used as-is for applying the
1708  * patch and committing it.
1709  */
1710 static void am_run(struct am_state *state, int resume)
1711 {
1712         struct strbuf sb = STRBUF_INIT;
1713
1714         unlink(am_path(state, "dirtyindex"));
1715
1716         if (refresh_and_write_cache(REFRESH_QUIET, 0, 0) < 0)
1717                 die(_("unable to write index file"));
1718
1719         if (repo_index_has_changes(the_repository, NULL, &sb)) {
1720                 write_state_bool(state, "dirtyindex", 1);
1721                 die(_("Dirty index: cannot apply patches (dirty: %s)"), sb.buf);
1722         }
1723
1724         strbuf_release(&sb);
1725
1726         while (state->cur <= state->last) {
1727                 const char *mail = am_path(state, msgnum(state));
1728                 int apply_status;
1729
1730                 reset_ident_date();
1731
1732                 if (!file_exists(mail))
1733                         goto next;
1734
1735                 if (resume) {
1736                         validate_resume_state(state);
1737                 } else {
1738                         int skip;
1739
1740                         if (state->rebasing)
1741                                 skip = parse_mail_rebase(state, mail);
1742                         else
1743                                 skip = parse_mail(state, mail);
1744
1745                         if (skip)
1746                                 goto next; /* mail should be skipped */
1747
1748                         if (state->signoff)
1749                                 am_append_signoff(state);
1750
1751                         write_author_script(state);
1752                         write_commit_msg(state);
1753                 }
1754
1755                 if (state->interactive && do_interactive(state))
1756                         goto next;
1757
1758                 if (run_applypatch_msg_hook(state))
1759                         exit(1);
1760
1761                 say(state, stdout, _("Applying: %.*s"), linelen(state->msg), state->msg);
1762
1763                 apply_status = run_apply(state, NULL);
1764
1765                 if (apply_status && state->threeway) {
1766                         struct strbuf sb = STRBUF_INIT;
1767
1768                         strbuf_addstr(&sb, am_path(state, "patch-merge-index"));
1769                         apply_status = fall_back_threeway(state, sb.buf);
1770                         strbuf_release(&sb);
1771
1772                         /*
1773                          * Applying the patch to an earlier tree and merging
1774                          * the result may have produced the same tree as ours.
1775                          */
1776                         if (!apply_status &&
1777                             !repo_index_has_changes(the_repository, NULL, NULL)) {
1778                                 say(state, stdout, _("No changes -- Patch already applied."));
1779                                 goto next;
1780                         }
1781                 }
1782
1783                 if (apply_status) {
1784                         printf_ln(_("Patch failed at %s %.*s"), msgnum(state),
1785                                 linelen(state->msg), state->msg);
1786
1787                         if (advice_amworkdir)
1788                                 advise(_("Use 'git am --show-current-patch=diff' to see the failed patch"));
1789
1790                         die_user_resolve(state);
1791                 }
1792
1793                 do_commit(state);
1794
1795 next:
1796                 am_next(state);
1797
1798                 if (resume)
1799                         am_load(state);
1800                 resume = 0;
1801         }
1802
1803         if (!is_empty_or_missing_file(am_path(state, "rewritten"))) {
1804                 assert(state->rebasing);
1805                 copy_notes_for_rebase(state);
1806                 run_post_rewrite_hook(state);
1807         }
1808
1809         /*
1810          * In rebasing mode, it's up to the caller to take care of
1811          * housekeeping.
1812          */
1813         if (!state->rebasing) {
1814                 am_destroy(state);
1815                 close_object_store(the_repository->objects);
1816                 run_auto_gc(state->quiet);
1817         }
1818 }
1819
1820 /**
1821  * Resume the current am session after patch application failure. The user did
1822  * all the hard work, and we do not have to do any patch application. Just
1823  * trust and commit what the user has in the index and working tree.
1824  */
1825 static void am_resolve(struct am_state *state)
1826 {
1827         validate_resume_state(state);
1828
1829         say(state, stdout, _("Applying: %.*s"), linelen(state->msg), state->msg);
1830
1831         if (!repo_index_has_changes(the_repository, NULL, NULL)) {
1832                 printf_ln(_("No changes - did you forget to use 'git add'?\n"
1833                         "If there is nothing left to stage, chances are that something else\n"
1834                         "already introduced the same changes; you might want to skip this patch."));
1835                 die_user_resolve(state);
1836         }
1837
1838         if (unmerged_cache()) {
1839                 printf_ln(_("You still have unmerged paths in your index.\n"
1840                         "You should 'git add' each file with resolved conflicts to mark them as such.\n"
1841                         "You might run `git rm` on a file to accept \"deleted by them\" for it."));
1842                 die_user_resolve(state);
1843         }
1844
1845         if (state->interactive) {
1846                 write_index_patch(state);
1847                 if (do_interactive(state))
1848                         goto next;
1849         }
1850
1851         repo_rerere(the_repository, 0);
1852
1853         do_commit(state);
1854
1855 next:
1856         am_next(state);
1857         am_load(state);
1858         am_run(state, 0);
1859 }
1860
1861 /**
1862  * Performs a checkout fast-forward from `head` to `remote`. If `reset` is
1863  * true, any unmerged entries will be discarded. Returns 0 on success, -1 on
1864  * failure.
1865  */
1866 static int fast_forward_to(struct tree *head, struct tree *remote, int reset)
1867 {
1868         struct lock_file lock_file = LOCK_INIT;
1869         struct unpack_trees_options opts;
1870         struct tree_desc t[2];
1871
1872         if (parse_tree(head) || parse_tree(remote))
1873                 return -1;
1874
1875         hold_locked_index(&lock_file, LOCK_DIE_ON_ERROR);
1876
1877         refresh_cache(REFRESH_QUIET);
1878
1879         memset(&opts, 0, sizeof(opts));
1880         opts.head_idx = 1;
1881         opts.src_index = &the_index;
1882         opts.dst_index = &the_index;
1883         opts.update = 1;
1884         opts.merge = 1;
1885         opts.reset = reset;
1886         opts.fn = twoway_merge;
1887         init_tree_desc(&t[0], head->buffer, head->size);
1888         init_tree_desc(&t[1], remote->buffer, remote->size);
1889
1890         if (unpack_trees(2, t, &opts)) {
1891                 rollback_lock_file(&lock_file);
1892                 return -1;
1893         }
1894
1895         if (write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
1896                 die(_("unable to write new index file"));
1897
1898         return 0;
1899 }
1900
1901 /**
1902  * Merges a tree into the index. The index's stat info will take precedence
1903  * over the merged tree's. Returns 0 on success, -1 on failure.
1904  */
1905 static int merge_tree(struct tree *tree)
1906 {
1907         struct lock_file lock_file = LOCK_INIT;
1908         struct unpack_trees_options opts;
1909         struct tree_desc t[1];
1910
1911         if (parse_tree(tree))
1912                 return -1;
1913
1914         hold_locked_index(&lock_file, LOCK_DIE_ON_ERROR);
1915
1916         memset(&opts, 0, sizeof(opts));
1917         opts.head_idx = 1;
1918         opts.src_index = &the_index;
1919         opts.dst_index = &the_index;
1920         opts.merge = 1;
1921         opts.fn = oneway_merge;
1922         init_tree_desc(&t[0], tree->buffer, tree->size);
1923
1924         if (unpack_trees(1, t, &opts)) {
1925                 rollback_lock_file(&lock_file);
1926                 return -1;
1927         }
1928
1929         if (write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
1930                 die(_("unable to write new index file"));
1931
1932         return 0;
1933 }
1934
1935 /**
1936  * Clean the index without touching entries that are not modified between
1937  * `head` and `remote`.
1938  */
1939 static int clean_index(const struct object_id *head, const struct object_id *remote)
1940 {
1941         struct tree *head_tree, *remote_tree, *index_tree;
1942         struct object_id index;
1943
1944         head_tree = parse_tree_indirect(head);
1945         if (!head_tree)
1946                 return error(_("Could not parse object '%s'."), oid_to_hex(head));
1947
1948         remote_tree = parse_tree_indirect(remote);
1949         if (!remote_tree)
1950                 return error(_("Could not parse object '%s'."), oid_to_hex(remote));
1951
1952         read_cache_unmerged();
1953
1954         if (fast_forward_to(head_tree, head_tree, 1))
1955                 return -1;
1956
1957         if (write_cache_as_tree(&index, 0, NULL))
1958                 return -1;
1959
1960         index_tree = parse_tree_indirect(&index);
1961         if (!index_tree)
1962                 return error(_("Could not parse object '%s'."), oid_to_hex(&index));
1963
1964         if (fast_forward_to(index_tree, remote_tree, 0))
1965                 return -1;
1966
1967         if (merge_tree(remote_tree))
1968                 return -1;
1969
1970         remove_branch_state(the_repository, 0);
1971
1972         return 0;
1973 }
1974
1975 /**
1976  * Resets rerere's merge resolution metadata.
1977  */
1978 static void am_rerere_clear(void)
1979 {
1980         struct string_list merge_rr = STRING_LIST_INIT_DUP;
1981         rerere_clear(the_repository, &merge_rr);
1982         string_list_clear(&merge_rr, 1);
1983 }
1984
1985 /**
1986  * Resume the current am session by skipping the current patch.
1987  */
1988 static void am_skip(struct am_state *state)
1989 {
1990         struct object_id head;
1991
1992         am_rerere_clear();
1993
1994         if (get_oid("HEAD", &head))
1995                 oidcpy(&head, the_hash_algo->empty_tree);
1996
1997         if (clean_index(&head, &head))
1998                 die(_("failed to clean index"));
1999
2000         if (state->rebasing) {
2001                 FILE *fp = xfopen(am_path(state, "rewritten"), "a");
2002
2003                 assert(!is_null_oid(&state->orig_commit));
2004                 fprintf(fp, "%s ", oid_to_hex(&state->orig_commit));
2005                 fprintf(fp, "%s\n", oid_to_hex(&head));
2006                 fclose(fp);
2007         }
2008
2009         am_next(state);
2010         am_load(state);
2011         am_run(state, 0);
2012 }
2013
2014 /**
2015  * Returns true if it is safe to reset HEAD to the ORIG_HEAD, false otherwise.
2016  *
2017  * It is not safe to reset HEAD when:
2018  * 1. git-am previously failed because the index was dirty.
2019  * 2. HEAD has moved since git-am previously failed.
2020  */
2021 static int safe_to_abort(const struct am_state *state)
2022 {
2023         struct strbuf sb = STRBUF_INIT;
2024         struct object_id abort_safety, head;
2025
2026         if (file_exists(am_path(state, "dirtyindex")))
2027                 return 0;
2028
2029         if (read_state_file(&sb, state, "abort-safety", 1) > 0) {
2030                 if (get_oid_hex(sb.buf, &abort_safety))
2031                         die(_("could not parse %s"), am_path(state, "abort-safety"));
2032         } else
2033                 oidclr(&abort_safety);
2034         strbuf_release(&sb);
2035
2036         if (get_oid("HEAD", &head))
2037                 oidclr(&head);
2038
2039         if (oideq(&head, &abort_safety))
2040                 return 1;
2041
2042         warning(_("You seem to have moved HEAD since the last 'am' failure.\n"
2043                 "Not rewinding to ORIG_HEAD"));
2044
2045         return 0;
2046 }
2047
2048 /**
2049  * Aborts the current am session if it is safe to do so.
2050  */
2051 static void am_abort(struct am_state *state)
2052 {
2053         struct object_id curr_head, orig_head;
2054         int has_curr_head, has_orig_head;
2055         char *curr_branch;
2056
2057         if (!safe_to_abort(state)) {
2058                 am_destroy(state);
2059                 return;
2060         }
2061
2062         am_rerere_clear();
2063
2064         curr_branch = resolve_refdup("HEAD", 0, &curr_head, NULL);
2065         has_curr_head = curr_branch && !is_null_oid(&curr_head);
2066         if (!has_curr_head)
2067                 oidcpy(&curr_head, the_hash_algo->empty_tree);
2068
2069         has_orig_head = !get_oid("ORIG_HEAD", &orig_head);
2070         if (!has_orig_head)
2071                 oidcpy(&orig_head, the_hash_algo->empty_tree);
2072
2073         clean_index(&curr_head, &orig_head);
2074
2075         if (has_orig_head)
2076                 update_ref("am --abort", "HEAD", &orig_head,
2077                            has_curr_head ? &curr_head : NULL, 0,
2078                            UPDATE_REFS_DIE_ON_ERR);
2079         else if (curr_branch)
2080                 delete_ref(NULL, curr_branch, NULL, REF_NO_DEREF);
2081
2082         free(curr_branch);
2083         am_destroy(state);
2084 }
2085
2086 static int show_patch(struct am_state *state, enum show_patch_type sub_mode)
2087 {
2088         struct strbuf sb = STRBUF_INIT;
2089         const char *patch_path;
2090         int len;
2091
2092         if (!is_null_oid(&state->orig_commit)) {
2093                 const char *av[4] = { "show", NULL, "--", NULL };
2094                 char *new_oid_str;
2095                 int ret;
2096
2097                 av[1] = new_oid_str = xstrdup(oid_to_hex(&state->orig_commit));
2098                 ret = run_command_v_opt(av, RUN_GIT_CMD);
2099                 free(new_oid_str);
2100                 return ret;
2101         }
2102
2103         switch (sub_mode) {
2104         case SHOW_PATCH_RAW:
2105                 patch_path = am_path(state, msgnum(state));
2106                 break;
2107         case SHOW_PATCH_DIFF:
2108                 patch_path = am_path(state, "patch");
2109                 break;
2110         default:
2111                 BUG("invalid mode for --show-current-patch");
2112         }
2113
2114         len = strbuf_read_file(&sb, patch_path, 0);
2115         if (len < 0)
2116                 die_errno(_("failed to read '%s'"), patch_path);
2117
2118         setup_pager();
2119         write_in_full(1, sb.buf, sb.len);
2120         strbuf_release(&sb);
2121         return 0;
2122 }
2123
2124 /**
2125  * parse_options() callback that validates and sets opt->value to the
2126  * PATCH_FORMAT_* enum value corresponding to `arg`.
2127  */
2128 static int parse_opt_patchformat(const struct option *opt, const char *arg, int unset)
2129 {
2130         int *opt_value = opt->value;
2131
2132         if (unset)
2133                 *opt_value = PATCH_FORMAT_UNKNOWN;
2134         else if (!strcmp(arg, "mbox"))
2135                 *opt_value = PATCH_FORMAT_MBOX;
2136         else if (!strcmp(arg, "stgit"))
2137                 *opt_value = PATCH_FORMAT_STGIT;
2138         else if (!strcmp(arg, "stgit-series"))
2139                 *opt_value = PATCH_FORMAT_STGIT_SERIES;
2140         else if (!strcmp(arg, "hg"))
2141                 *opt_value = PATCH_FORMAT_HG;
2142         else if (!strcmp(arg, "mboxrd"))
2143                 *opt_value = PATCH_FORMAT_MBOXRD;
2144         /*
2145          * Please update $__git_patchformat in git-completion.bash
2146          * when you add new options
2147          */
2148         else
2149                 return error(_("Invalid value for --patch-format: %s"), arg);
2150         return 0;
2151 }
2152
2153 enum resume_type {
2154         RESUME_FALSE = 0,
2155         RESUME_APPLY,
2156         RESUME_RESOLVED,
2157         RESUME_SKIP,
2158         RESUME_ABORT,
2159         RESUME_QUIT,
2160         RESUME_SHOW_PATCH
2161 };
2162
2163 struct resume_mode {
2164         enum resume_type mode;
2165         enum show_patch_type sub_mode;
2166 };
2167
2168 static int parse_opt_show_current_patch(const struct option *opt, const char *arg, int unset)
2169 {
2170         int *opt_value = opt->value;
2171         struct resume_mode *resume = container_of(opt_value, struct resume_mode, mode);
2172
2173         /*
2174          * Please update $__git_showcurrentpatch in git-completion.bash
2175          * when you add new options
2176          */
2177         const char *valid_modes[] = {
2178                 [SHOW_PATCH_DIFF] = "diff",
2179                 [SHOW_PATCH_RAW] = "raw"
2180         };
2181         int new_value = SHOW_PATCH_RAW;
2182
2183         if (arg) {
2184                 for (new_value = 0; new_value < ARRAY_SIZE(valid_modes); new_value++) {
2185                         if (!strcmp(arg, valid_modes[new_value]))
2186                                 break;
2187                 }
2188                 if (new_value >= ARRAY_SIZE(valid_modes))
2189                         return error(_("Invalid value for --show-current-patch: %s"), arg);
2190         }
2191
2192         if (resume->mode == RESUME_SHOW_PATCH && new_value != resume->sub_mode)
2193                 return error(_("--show-current-patch=%s is incompatible with "
2194                                "--show-current-patch=%s"),
2195                              arg, valid_modes[resume->sub_mode]);
2196
2197         resume->mode = RESUME_SHOW_PATCH;
2198         resume->sub_mode = new_value;
2199         return 0;
2200 }
2201
2202 static int git_am_config(const char *k, const char *v, void *cb)
2203 {
2204         int status;
2205
2206         status = git_gpg_config(k, v, NULL);
2207         if (status)
2208                 return status;
2209
2210         return git_default_config(k, v, NULL);
2211 }
2212
2213 int cmd_am(int argc, const char **argv, const char *prefix)
2214 {
2215         struct am_state state;
2216         int binary = -1;
2217         int keep_cr = -1;
2218         int patch_format = PATCH_FORMAT_UNKNOWN;
2219         struct resume_mode resume = { .mode = RESUME_FALSE };
2220         int in_progress;
2221         int ret = 0;
2222
2223         const char * const usage[] = {
2224                 N_("git am [<options>] [(<mbox> | <Maildir>)...]"),
2225                 N_("git am [<options>] (--continue | --skip | --abort)"),
2226                 NULL
2227         };
2228
2229         struct option options[] = {
2230                 OPT_BOOL('i', "interactive", &state.interactive,
2231                         N_("run interactively")),
2232                 OPT_HIDDEN_BOOL('b', "binary", &binary,
2233                         N_("historical option -- no-op")),
2234                 OPT_BOOL('3', "3way", &state.threeway,
2235                         N_("allow fall back on 3way merging if needed")),
2236                 OPT__QUIET(&state.quiet, N_("be quiet")),
2237                 OPT_SET_INT('s', "signoff", &state.signoff,
2238                         N_("add a Signed-off-by line to the commit message"),
2239                         SIGNOFF_EXPLICIT),
2240                 OPT_BOOL('u', "utf8", &state.utf8,
2241                         N_("recode into utf8 (default)")),
2242                 OPT_SET_INT('k', "keep", &state.keep,
2243                         N_("pass -k flag to git-mailinfo"), KEEP_TRUE),
2244                 OPT_SET_INT(0, "keep-non-patch", &state.keep,
2245                         N_("pass -b flag to git-mailinfo"), KEEP_NON_PATCH),
2246                 OPT_BOOL('m', "message-id", &state.message_id,
2247                         N_("pass -m flag to git-mailinfo")),
2248                 OPT_SET_INT_F(0, "keep-cr", &keep_cr,
2249                         N_("pass --keep-cr flag to git-mailsplit for mbox format"),
2250                         1, PARSE_OPT_NONEG),
2251                 OPT_SET_INT_F(0, "no-keep-cr", &keep_cr,
2252                         N_("do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"),
2253                         0, PARSE_OPT_NONEG),
2254                 OPT_BOOL('c', "scissors", &state.scissors,
2255                         N_("strip everything before a scissors line")),
2256                 OPT_PASSTHRU_ARGV(0, "whitespace", &state.git_apply_opts, N_("action"),
2257                         N_("pass it through git-apply"),
2258                         0),
2259                 OPT_PASSTHRU_ARGV(0, "ignore-space-change", &state.git_apply_opts, NULL,
2260                         N_("pass it through git-apply"),
2261                         PARSE_OPT_NOARG),
2262                 OPT_PASSTHRU_ARGV(0, "ignore-whitespace", &state.git_apply_opts, NULL,
2263                         N_("pass it through git-apply"),
2264                         PARSE_OPT_NOARG),
2265                 OPT_PASSTHRU_ARGV(0, "directory", &state.git_apply_opts, N_("root"),
2266                         N_("pass it through git-apply"),
2267                         0),
2268                 OPT_PASSTHRU_ARGV(0, "exclude", &state.git_apply_opts, N_("path"),
2269                         N_("pass it through git-apply"),
2270                         0),
2271                 OPT_PASSTHRU_ARGV(0, "include", &state.git_apply_opts, N_("path"),
2272                         N_("pass it through git-apply"),
2273                         0),
2274                 OPT_PASSTHRU_ARGV('C', NULL, &state.git_apply_opts, N_("n"),
2275                         N_("pass it through git-apply"),
2276                         0),
2277                 OPT_PASSTHRU_ARGV('p', NULL, &state.git_apply_opts, N_("num"),
2278                         N_("pass it through git-apply"),
2279                         0),
2280                 OPT_CALLBACK(0, "patch-format", &patch_format, N_("format"),
2281                         N_("format the patch(es) are in"),
2282                         parse_opt_patchformat),
2283                 OPT_PASSTHRU_ARGV(0, "reject", &state.git_apply_opts, NULL,
2284                         N_("pass it through git-apply"),
2285                         PARSE_OPT_NOARG),
2286                 OPT_STRING(0, "resolvemsg", &state.resolvemsg, NULL,
2287                         N_("override error message when patch failure occurs")),
2288                 OPT_CMDMODE(0, "continue", &resume.mode,
2289                         N_("continue applying patches after resolving a conflict"),
2290                         RESUME_RESOLVED),
2291                 OPT_CMDMODE('r', "resolved", &resume.mode,
2292                         N_("synonyms for --continue"),
2293                         RESUME_RESOLVED),
2294                 OPT_CMDMODE(0, "skip", &resume.mode,
2295                         N_("skip the current patch"),
2296                         RESUME_SKIP),
2297                 OPT_CMDMODE(0, "abort", &resume.mode,
2298                         N_("restore the original branch and abort the patching operation."),
2299                         RESUME_ABORT),
2300                 OPT_CMDMODE(0, "quit", &resume.mode,
2301                         N_("abort the patching operation but keep HEAD where it is."),
2302                         RESUME_QUIT),
2303                 { OPTION_CALLBACK, 0, "show-current-patch", &resume.mode,
2304                   "(diff|raw)",
2305                   N_("show the patch being applied"),
2306                   PARSE_OPT_CMDMODE | PARSE_OPT_OPTARG | PARSE_OPT_NONEG | PARSE_OPT_LITERAL_ARGHELP,
2307                   parse_opt_show_current_patch, RESUME_SHOW_PATCH },
2308                 OPT_BOOL(0, "committer-date-is-author-date",
2309                         &state.committer_date_is_author_date,
2310                         N_("lie about committer date")),
2311                 OPT_BOOL(0, "ignore-date", &state.ignore_date,
2312                         N_("use current timestamp for author date")),
2313                 OPT_RERERE_AUTOUPDATE(&state.allow_rerere_autoupdate),
2314                 { OPTION_STRING, 'S', "gpg-sign", &state.sign_commit, N_("key-id"),
2315                   N_("GPG-sign commits"),
2316                   PARSE_OPT_OPTARG, NULL, (intptr_t) "" },
2317                 OPT_HIDDEN_BOOL(0, "rebasing", &state.rebasing,
2318                         N_("(internal use for git-rebase)")),
2319                 OPT_END()
2320         };
2321
2322         if (argc == 2 && !strcmp(argv[1], "-h"))
2323                 usage_with_options(usage, options);
2324
2325         git_config(git_am_config, NULL);
2326
2327         am_state_init(&state);
2328
2329         in_progress = am_in_progress(&state);
2330         if (in_progress)
2331                 am_load(&state);
2332
2333         argc = parse_options(argc, argv, prefix, options, usage, 0);
2334
2335         if (binary >= 0)
2336                 fprintf_ln(stderr, _("The -b/--binary option has been a no-op for long time, and\n"
2337                                 "it will be removed. Please do not use it anymore."));
2338
2339         /* Ensure a valid committer ident can be constructed */
2340         git_committer_info(IDENT_STRICT);
2341
2342         if (repo_read_index_preload(the_repository, NULL, 0) < 0)
2343                 die(_("failed to read the index"));
2344
2345         if (in_progress) {
2346                 /*
2347                  * Catch user error to feed us patches when there is a session
2348                  * in progress:
2349                  *
2350                  * 1. mbox path(s) are provided on the command-line.
2351                  * 2. stdin is not a tty: the user is trying to feed us a patch
2352                  *    from standard input. This is somewhat unreliable -- stdin
2353                  *    could be /dev/null for example and the caller did not
2354                  *    intend to feed us a patch but wanted to continue
2355                  *    unattended.
2356                  */
2357                 if (argc || (resume.mode == RESUME_FALSE && !isatty(0)))
2358                         die(_("previous rebase directory %s still exists but mbox given."),
2359                                 state.dir);
2360
2361                 if (resume.mode == RESUME_FALSE)
2362                         resume.mode = RESUME_APPLY;
2363
2364                 if (state.signoff == SIGNOFF_EXPLICIT)
2365                         am_append_signoff(&state);
2366         } else {
2367                 struct strvec paths = STRVEC_INIT;
2368                 int i;
2369
2370                 /*
2371                  * Handle stray state directory in the independent-run case. In
2372                  * the --rebasing case, it is up to the caller to take care of
2373                  * stray directories.
2374                  */
2375                 if (file_exists(state.dir) && !state.rebasing) {
2376                         if (resume.mode == RESUME_ABORT || resume.mode == RESUME_QUIT) {
2377                                 am_destroy(&state);
2378                                 am_state_release(&state);
2379                                 return 0;
2380                         }
2381
2382                         die(_("Stray %s directory found.\n"
2383                                 "Use \"git am --abort\" to remove it."),
2384                                 state.dir);
2385                 }
2386
2387                 if (resume.mode)
2388                         die(_("Resolve operation not in progress, we are not resuming."));
2389
2390                 for (i = 0; i < argc; i++) {
2391                         if (is_absolute_path(argv[i]) || !prefix)
2392                                 strvec_push(&paths, argv[i]);
2393                         else
2394                                 strvec_push(&paths, mkpath("%s/%s", prefix, argv[i]));
2395                 }
2396
2397                 if (state.interactive && !paths.nr)
2398                         die(_("interactive mode requires patches on the command line"));
2399
2400                 am_setup(&state, patch_format, paths.v, keep_cr);
2401
2402                 strvec_clear(&paths);
2403         }
2404
2405         switch (resume.mode) {
2406         case RESUME_FALSE:
2407                 am_run(&state, 0);
2408                 break;
2409         case RESUME_APPLY:
2410                 am_run(&state, 1);
2411                 break;
2412         case RESUME_RESOLVED:
2413                 am_resolve(&state);
2414                 break;
2415         case RESUME_SKIP:
2416                 am_skip(&state);
2417                 break;
2418         case RESUME_ABORT:
2419                 am_abort(&state);
2420                 break;
2421         case RESUME_QUIT:
2422                 am_rerere_clear();
2423                 am_destroy(&state);
2424                 break;
2425         case RESUME_SHOW_PATCH:
2426                 ret = show_patch(&state, resume.sub_mode);
2427                 break;
2428         default:
2429                 BUG("invalid resume value");
2430         }
2431
2432         am_state_release(&state);
2433
2434         return ret;
2435 }