Merge branch 'js/rebase-i-clean-msg-after-fixup-continue'
[git] / sequencer.c
1 #include "cache.h"
2 #include "config.h"
3 #include "lockfile.h"
4 #include "dir.h"
5 #include "object.h"
6 #include "commit.h"
7 #include "sequencer.h"
8 #include "tag.h"
9 #include "run-command.h"
10 #include "exec-cmd.h"
11 #include "utf8.h"
12 #include "cache-tree.h"
13 #include "diff.h"
14 #include "revision.h"
15 #include "rerere.h"
16 #include "merge-recursive.h"
17 #include "refs.h"
18 #include "argv-array.h"
19 #include "quote.h"
20 #include "trailer.h"
21 #include "log-tree.h"
22 #include "wt-status.h"
23 #include "hashmap.h"
24 #include "notes-utils.h"
25 #include "sigchain.h"
26
27 #define GIT_REFLOG_ACTION "GIT_REFLOG_ACTION"
28
29 const char sign_off_header[] = "Signed-off-by: ";
30 static const char cherry_picked_prefix[] = "(cherry picked from commit ";
31
32 GIT_PATH_FUNC(git_path_commit_editmsg, "COMMIT_EDITMSG")
33
34 GIT_PATH_FUNC(git_path_seq_dir, "sequencer")
35
36 static GIT_PATH_FUNC(git_path_todo_file, "sequencer/todo")
37 static GIT_PATH_FUNC(git_path_opts_file, "sequencer/opts")
38 static GIT_PATH_FUNC(git_path_head_file, "sequencer/head")
39 static GIT_PATH_FUNC(git_path_abort_safety_file, "sequencer/abort-safety")
40
41 static GIT_PATH_FUNC(rebase_path, "rebase-merge")
42 /*
43  * The file containing rebase commands, comments, and empty lines.
44  * This file is created by "git rebase -i" then edited by the user. As
45  * the lines are processed, they are removed from the front of this
46  * file and written to the tail of 'done'.
47  */
48 static GIT_PATH_FUNC(rebase_path_todo, "rebase-merge/git-rebase-todo")
49 /*
50  * The rebase command lines that have already been processed. A line
51  * is moved here when it is first handled, before any associated user
52  * actions.
53  */
54 static GIT_PATH_FUNC(rebase_path_done, "rebase-merge/done")
55 /*
56  * The file to keep track of how many commands were already processed (e.g.
57  * for the prompt).
58  */
59 static GIT_PATH_FUNC(rebase_path_msgnum, "rebase-merge/msgnum");
60 /*
61  * The file to keep track of how many commands are to be processed in total
62  * (e.g. for the prompt).
63  */
64 static GIT_PATH_FUNC(rebase_path_msgtotal, "rebase-merge/end");
65 /*
66  * The commit message that is planned to be used for any changes that
67  * need to be committed following a user interaction.
68  */
69 static GIT_PATH_FUNC(rebase_path_message, "rebase-merge/message")
70 /*
71  * The file into which is accumulated the suggested commit message for
72  * squash/fixup commands. When the first of a series of squash/fixups
73  * is seen, the file is created and the commit message from the
74  * previous commit and from the first squash/fixup commit are written
75  * to it. The commit message for each subsequent squash/fixup commit
76  * is appended to the file as it is processed.
77  */
78 static GIT_PATH_FUNC(rebase_path_squash_msg, "rebase-merge/message-squash")
79 /*
80  * If the current series of squash/fixups has not yet included a squash
81  * command, then this file exists and holds the commit message of the
82  * original "pick" commit.  (If the series ends without a "squash"
83  * command, then this can be used as the commit message of the combined
84  * commit without opening the editor.)
85  */
86 static GIT_PATH_FUNC(rebase_path_fixup_msg, "rebase-merge/message-fixup")
87 /*
88  * This file contains the list fixup/squash commands that have been
89  * accumulated into message-fixup or message-squash so far.
90  */
91 static GIT_PATH_FUNC(rebase_path_current_fixups, "rebase-merge/current-fixups")
92 /*
93  * A script to set the GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, and
94  * GIT_AUTHOR_DATE that will be used for the commit that is currently
95  * being rebased.
96  */
97 static GIT_PATH_FUNC(rebase_path_author_script, "rebase-merge/author-script")
98 /*
99  * When an "edit" rebase command is being processed, the SHA1 of the
100  * commit to be edited is recorded in this file.  When "git rebase
101  * --continue" is executed, if there are any staged changes then they
102  * will be amended to the HEAD commit, but only provided the HEAD
103  * commit is still the commit to be edited.  When any other rebase
104  * command is processed, this file is deleted.
105  */
106 static GIT_PATH_FUNC(rebase_path_amend, "rebase-merge/amend")
107 /*
108  * When we stop at a given patch via the "edit" command, this file contains
109  * the abbreviated commit name of the corresponding patch.
110  */
111 static GIT_PATH_FUNC(rebase_path_stopped_sha, "rebase-merge/stopped-sha")
112 /*
113  * For the post-rewrite hook, we make a list of rewritten commits and
114  * their new sha1s.  The rewritten-pending list keeps the sha1s of
115  * commits that have been processed, but not committed yet,
116  * e.g. because they are waiting for a 'squash' command.
117  */
118 static GIT_PATH_FUNC(rebase_path_rewritten_list, "rebase-merge/rewritten-list")
119 static GIT_PATH_FUNC(rebase_path_rewritten_pending,
120         "rebase-merge/rewritten-pending")
121 /*
122  * The following files are written by git-rebase just after parsing the
123  * command-line (and are only consumed, not modified, by the sequencer).
124  */
125 static GIT_PATH_FUNC(rebase_path_gpg_sign_opt, "rebase-merge/gpg_sign_opt")
126 static GIT_PATH_FUNC(rebase_path_orig_head, "rebase-merge/orig-head")
127 static GIT_PATH_FUNC(rebase_path_verbose, "rebase-merge/verbose")
128 static GIT_PATH_FUNC(rebase_path_signoff, "rebase-merge/signoff")
129 static GIT_PATH_FUNC(rebase_path_head_name, "rebase-merge/head-name")
130 static GIT_PATH_FUNC(rebase_path_onto, "rebase-merge/onto")
131 static GIT_PATH_FUNC(rebase_path_autostash, "rebase-merge/autostash")
132 static GIT_PATH_FUNC(rebase_path_strategy, "rebase-merge/strategy")
133 static GIT_PATH_FUNC(rebase_path_strategy_opts, "rebase-merge/strategy_opts")
134 static GIT_PATH_FUNC(rebase_path_allow_rerere_autoupdate, "rebase-merge/allow_rerere_autoupdate")
135
136 static int git_sequencer_config(const char *k, const char *v, void *cb)
137 {
138         struct replay_opts *opts = cb;
139         int status;
140
141         if (!strcmp(k, "commit.cleanup")) {
142                 const char *s;
143
144                 status = git_config_string(&s, k, v);
145                 if (status)
146                         return status;
147
148                 if (!strcmp(s, "verbatim"))
149                         opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_NONE;
150                 else if (!strcmp(s, "whitespace"))
151                         opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_SPACE;
152                 else if (!strcmp(s, "strip"))
153                         opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_ALL;
154                 else if (!strcmp(s, "scissors"))
155                         opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_SPACE;
156                 else
157                         warning(_("invalid commit message cleanup mode '%s'"),
158                                   s);
159
160                 return status;
161         }
162
163         if (!strcmp(k, "commit.gpgsign")) {
164                 opts->gpg_sign = git_config_bool(k, v) ? xstrdup("") : NULL;
165                 return 0;
166         }
167
168         status = git_gpg_config(k, v, NULL);
169         if (status)
170                 return status;
171
172         return git_diff_basic_config(k, v, NULL);
173 }
174
175 void sequencer_init_config(struct replay_opts *opts)
176 {
177         opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_NONE;
178         git_config(git_sequencer_config, opts);
179 }
180
181 static inline int is_rebase_i(const struct replay_opts *opts)
182 {
183         return opts->action == REPLAY_INTERACTIVE_REBASE;
184 }
185
186 static const char *get_dir(const struct replay_opts *opts)
187 {
188         if (is_rebase_i(opts))
189                 return rebase_path();
190         return git_path_seq_dir();
191 }
192
193 static const char *get_todo_path(const struct replay_opts *opts)
194 {
195         if (is_rebase_i(opts))
196                 return rebase_path_todo();
197         return git_path_todo_file();
198 }
199
200 /*
201  * Returns 0 for non-conforming footer
202  * Returns 1 for conforming footer
203  * Returns 2 when sob exists within conforming footer
204  * Returns 3 when sob exists within conforming footer as last entry
205  */
206 static int has_conforming_footer(struct strbuf *sb, struct strbuf *sob,
207         int ignore_footer)
208 {
209         struct trailer_info info;
210         int i;
211         int found_sob = 0, found_sob_last = 0;
212
213         trailer_info_get(&info, sb->buf);
214
215         if (info.trailer_start == info.trailer_end)
216                 return 0;
217
218         for (i = 0; i < info.trailer_nr; i++)
219                 if (sob && !strncmp(info.trailers[i], sob->buf, sob->len)) {
220                         found_sob = 1;
221                         if (i == info.trailer_nr - 1)
222                                 found_sob_last = 1;
223                 }
224
225         trailer_info_release(&info);
226
227         if (found_sob_last)
228                 return 3;
229         if (found_sob)
230                 return 2;
231         return 1;
232 }
233
234 static const char *gpg_sign_opt_quoted(struct replay_opts *opts)
235 {
236         static struct strbuf buf = STRBUF_INIT;
237
238         strbuf_reset(&buf);
239         if (opts->gpg_sign)
240                 sq_quotef(&buf, "-S%s", opts->gpg_sign);
241         return buf.buf;
242 }
243
244 int sequencer_remove_state(struct replay_opts *opts)
245 {
246         struct strbuf dir = STRBUF_INIT;
247         int i;
248
249         free(opts->gpg_sign);
250         free(opts->strategy);
251         for (i = 0; i < opts->xopts_nr; i++)
252                 free(opts->xopts[i]);
253         free(opts->xopts);
254         strbuf_release(&opts->current_fixups);
255
256         strbuf_addstr(&dir, get_dir(opts));
257         remove_dir_recursively(&dir, 0);
258         strbuf_release(&dir);
259
260         return 0;
261 }
262
263 static const char *action_name(const struct replay_opts *opts)
264 {
265         switch (opts->action) {
266         case REPLAY_REVERT:
267                 return N_("revert");
268         case REPLAY_PICK:
269                 return N_("cherry-pick");
270         case REPLAY_INTERACTIVE_REBASE:
271                 return N_("rebase -i");
272         }
273         die(_("Unknown action: %d"), opts->action);
274 }
275
276 struct commit_message {
277         char *parent_label;
278         char *label;
279         char *subject;
280         const char *message;
281 };
282
283 static const char *short_commit_name(struct commit *commit)
284 {
285         return find_unique_abbrev(&commit->object.oid, DEFAULT_ABBREV);
286 }
287
288 static int get_message(struct commit *commit, struct commit_message *out)
289 {
290         const char *abbrev, *subject;
291         int subject_len;
292
293         out->message = logmsg_reencode(commit, NULL, get_commit_output_encoding());
294         abbrev = short_commit_name(commit);
295
296         subject_len = find_commit_subject(out->message, &subject);
297
298         out->subject = xmemdupz(subject, subject_len);
299         out->label = xstrfmt("%s... %s", abbrev, out->subject);
300         out->parent_label = xstrfmt("parent of %s", out->label);
301
302         return 0;
303 }
304
305 static void free_message(struct commit *commit, struct commit_message *msg)
306 {
307         free(msg->parent_label);
308         free(msg->label);
309         free(msg->subject);
310         unuse_commit_buffer(commit, msg->message);
311 }
312
313 static void print_advice(int show_hint, struct replay_opts *opts)
314 {
315         char *msg = getenv("GIT_CHERRY_PICK_HELP");
316
317         if (msg) {
318                 fprintf(stderr, "%s\n", msg);
319                 /*
320                  * A conflict has occurred but the porcelain
321                  * (typically rebase --interactive) wants to take care
322                  * of the commit itself so remove CHERRY_PICK_HEAD
323                  */
324                 unlink(git_path_cherry_pick_head());
325                 return;
326         }
327
328         if (show_hint) {
329                 if (opts->no_commit)
330                         advise(_("after resolving the conflicts, mark the corrected paths\n"
331                                  "with 'git add <paths>' or 'git rm <paths>'"));
332                 else
333                         advise(_("after resolving the conflicts, mark the corrected paths\n"
334                                  "with 'git add <paths>' or 'git rm <paths>'\n"
335                                  "and commit the result with 'git commit'"));
336         }
337 }
338
339 static int write_message(const void *buf, size_t len, const char *filename,
340                          int append_eol)
341 {
342         struct lock_file msg_file = LOCK_INIT;
343
344         int msg_fd = hold_lock_file_for_update(&msg_file, filename, 0);
345         if (msg_fd < 0)
346                 return error_errno(_("could not lock '%s'"), filename);
347         if (write_in_full(msg_fd, buf, len) < 0) {
348                 rollback_lock_file(&msg_file);
349                 return error_errno(_("could not write to '%s'"), filename);
350         }
351         if (append_eol && write(msg_fd, "\n", 1) < 0) {
352                 rollback_lock_file(&msg_file);
353                 return error_errno(_("could not write eol to '%s'"), filename);
354         }
355         if (commit_lock_file(&msg_file) < 0)
356                 return error(_("failed to finalize '%s'"), filename);
357
358         return 0;
359 }
360
361 /*
362  * Reads a file that was presumably written by a shell script, i.e. with an
363  * end-of-line marker that needs to be stripped.
364  *
365  * Note that only the last end-of-line marker is stripped, consistent with the
366  * behavior of "$(cat path)" in a shell script.
367  *
368  * Returns 1 if the file was read, 0 if it could not be read or does not exist.
369  */
370 static int read_oneliner(struct strbuf *buf,
371         const char *path, int skip_if_empty)
372 {
373         int orig_len = buf->len;
374
375         if (!file_exists(path))
376                 return 0;
377
378         if (strbuf_read_file(buf, path, 0) < 0) {
379                 warning_errno(_("could not read '%s'"), path);
380                 return 0;
381         }
382
383         if (buf->len > orig_len && buf->buf[buf->len - 1] == '\n') {
384                 if (--buf->len > orig_len && buf->buf[buf->len - 1] == '\r')
385                         --buf->len;
386                 buf->buf[buf->len] = '\0';
387         }
388
389         if (skip_if_empty && buf->len == orig_len)
390                 return 0;
391
392         return 1;
393 }
394
395 static struct tree *empty_tree(void)
396 {
397         return lookup_tree(the_hash_algo->empty_tree);
398 }
399
400 static int error_dirty_index(struct replay_opts *opts)
401 {
402         if (read_cache_unmerged())
403                 return error_resolve_conflict(_(action_name(opts)));
404
405         error(_("your local changes would be overwritten by %s."),
406                 _(action_name(opts)));
407
408         if (advice_commit_before_merge)
409                 advise(_("commit your changes or stash them to proceed."));
410         return -1;
411 }
412
413 static void update_abort_safety_file(void)
414 {
415         struct object_id head;
416
417         /* Do nothing on a single-pick */
418         if (!file_exists(git_path_seq_dir()))
419                 return;
420
421         if (!get_oid("HEAD", &head))
422                 write_file(git_path_abort_safety_file(), "%s", oid_to_hex(&head));
423         else
424                 write_file(git_path_abort_safety_file(), "%s", "");
425 }
426
427 static int fast_forward_to(const struct object_id *to, const struct object_id *from,
428                         int unborn, struct replay_opts *opts)
429 {
430         struct ref_transaction *transaction;
431         struct strbuf sb = STRBUF_INIT;
432         struct strbuf err = STRBUF_INIT;
433
434         read_cache();
435         if (checkout_fast_forward(from, to, 1))
436                 return -1; /* the callee should have complained already */
437
438         strbuf_addf(&sb, _("%s: fast-forward"), _(action_name(opts)));
439
440         transaction = ref_transaction_begin(&err);
441         if (!transaction ||
442             ref_transaction_update(transaction, "HEAD",
443                                    to, unborn ? &null_oid : from,
444                                    0, sb.buf, &err) ||
445             ref_transaction_commit(transaction, &err)) {
446                 ref_transaction_free(transaction);
447                 error("%s", err.buf);
448                 strbuf_release(&sb);
449                 strbuf_release(&err);
450                 return -1;
451         }
452
453         strbuf_release(&sb);
454         strbuf_release(&err);
455         ref_transaction_free(transaction);
456         update_abort_safety_file();
457         return 0;
458 }
459
460 void append_conflicts_hint(struct strbuf *msgbuf)
461 {
462         int i;
463
464         strbuf_addch(msgbuf, '\n');
465         strbuf_commented_addf(msgbuf, "Conflicts:\n");
466         for (i = 0; i < active_nr;) {
467                 const struct cache_entry *ce = active_cache[i++];
468                 if (ce_stage(ce)) {
469                         strbuf_commented_addf(msgbuf, "\t%s\n", ce->name);
470                         while (i < active_nr && !strcmp(ce->name,
471                                                         active_cache[i]->name))
472                                 i++;
473                 }
474         }
475 }
476
477 static int do_recursive_merge(struct commit *base, struct commit *next,
478                               const char *base_label, const char *next_label,
479                               struct object_id *head, struct strbuf *msgbuf,
480                               struct replay_opts *opts)
481 {
482         struct merge_options o;
483         struct tree *result, *next_tree, *base_tree, *head_tree;
484         int clean;
485         char **xopt;
486         struct lock_file index_lock = LOCK_INIT;
487
488         if (hold_locked_index(&index_lock, LOCK_REPORT_ON_ERROR) < 0)
489                 return -1;
490
491         read_cache();
492
493         init_merge_options(&o);
494         o.ancestor = base ? base_label : "(empty tree)";
495         o.branch1 = "HEAD";
496         o.branch2 = next ? next_label : "(empty tree)";
497         if (is_rebase_i(opts))
498                 o.buffer_output = 2;
499         o.show_rename_progress = 1;
500
501         head_tree = parse_tree_indirect(head);
502         next_tree = next ? get_commit_tree(next) : empty_tree();
503         base_tree = base ? get_commit_tree(base) : empty_tree();
504
505         for (xopt = opts->xopts; xopt != opts->xopts + opts->xopts_nr; xopt++)
506                 parse_merge_opt(&o, *xopt);
507
508         clean = merge_trees(&o,
509                             head_tree,
510                             next_tree, base_tree, &result);
511         if (is_rebase_i(opts) && clean <= 0)
512                 fputs(o.obuf.buf, stdout);
513         strbuf_release(&o.obuf);
514         diff_warn_rename_limit("merge.renamelimit", o.needed_rename_limit, 0);
515         if (clean < 0) {
516                 rollback_lock_file(&index_lock);
517                 return clean;
518         }
519
520         if (write_locked_index(&the_index, &index_lock,
521                                COMMIT_LOCK | SKIP_IF_UNCHANGED))
522                 /*
523                  * TRANSLATORS: %s will be "revert", "cherry-pick" or
524                  * "rebase -i".
525                  */
526                 return error(_("%s: Unable to write new index file"),
527                         _(action_name(opts)));
528
529         if (!clean)
530                 append_conflicts_hint(msgbuf);
531
532         return !clean;
533 }
534
535 static int is_index_unchanged(void)
536 {
537         struct object_id head_oid;
538         struct commit *head_commit;
539
540         if (!resolve_ref_unsafe("HEAD", RESOLVE_REF_READING, &head_oid, NULL))
541                 return error(_("could not resolve HEAD commit"));
542
543         head_commit = lookup_commit(&head_oid);
544
545         /*
546          * If head_commit is NULL, check_commit, called from
547          * lookup_commit, would have indicated that head_commit is not
548          * a commit object already.  parse_commit() will return failure
549          * without further complaints in such a case.  Otherwise, if
550          * the commit is invalid, parse_commit() will complain.  So
551          * there is nothing for us to say here.  Just return failure.
552          */
553         if (parse_commit(head_commit))
554                 return -1;
555
556         if (!active_cache_tree)
557                 active_cache_tree = cache_tree();
558
559         if (!cache_tree_fully_valid(active_cache_tree))
560                 if (cache_tree_update(&the_index, 0))
561                         return error(_("unable to update cache tree"));
562
563         return !oidcmp(&active_cache_tree->oid,
564                        get_commit_tree_oid(head_commit));
565 }
566
567 static int write_author_script(const char *message)
568 {
569         struct strbuf buf = STRBUF_INIT;
570         const char *eol;
571         int res;
572
573         for (;;)
574                 if (!*message || starts_with(message, "\n")) {
575 missing_author:
576                         /* Missing 'author' line? */
577                         unlink(rebase_path_author_script());
578                         return 0;
579                 } else if (skip_prefix(message, "author ", &message))
580                         break;
581                 else if ((eol = strchr(message, '\n')))
582                         message = eol + 1;
583                 else
584                         goto missing_author;
585
586         strbuf_addstr(&buf, "GIT_AUTHOR_NAME='");
587         while (*message && *message != '\n' && *message != '\r')
588                 if (skip_prefix(message, " <", &message))
589                         break;
590                 else if (*message != '\'')
591                         strbuf_addch(&buf, *(message++));
592                 else
593                         strbuf_addf(&buf, "'\\\\%c'", *(message++));
594         strbuf_addstr(&buf, "'\nGIT_AUTHOR_EMAIL='");
595         while (*message && *message != '\n' && *message != '\r')
596                 if (skip_prefix(message, "> ", &message))
597                         break;
598                 else if (*message != '\'')
599                         strbuf_addch(&buf, *(message++));
600                 else
601                         strbuf_addf(&buf, "'\\\\%c'", *(message++));
602         strbuf_addstr(&buf, "'\nGIT_AUTHOR_DATE='@");
603         while (*message && *message != '\n' && *message != '\r')
604                 if (*message != '\'')
605                         strbuf_addch(&buf, *(message++));
606                 else
607                         strbuf_addf(&buf, "'\\\\%c'", *(message++));
608         res = write_message(buf.buf, buf.len, rebase_path_author_script(), 1);
609         strbuf_release(&buf);
610         return res;
611 }
612
613 /*
614  * Read a list of environment variable assignments (such as the author-script
615  * file) into an environment block. Returns -1 on error, 0 otherwise.
616  */
617 static int read_env_script(struct argv_array *env)
618 {
619         struct strbuf script = STRBUF_INIT;
620         int i, count = 0;
621         char *p, *p2;
622
623         if (strbuf_read_file(&script, rebase_path_author_script(), 256) <= 0)
624                 return -1;
625
626         for (p = script.buf; *p; p++)
627                 if (skip_prefix(p, "'\\\\''", (const char **)&p2))
628                         strbuf_splice(&script, p - script.buf, p2 - p, "'", 1);
629                 else if (*p == '\'')
630                         strbuf_splice(&script, p-- - script.buf, 1, "", 0);
631                 else if (*p == '\n') {
632                         *p = '\0';
633                         count++;
634                 }
635
636         for (i = 0, p = script.buf; i < count; i++) {
637                 argv_array_push(env, p);
638                 p += strlen(p) + 1;
639         }
640
641         return 0;
642 }
643
644 static char *get_author(const char *message)
645 {
646         size_t len;
647         const char *a;
648
649         a = find_commit_header(message, "author", &len);
650         if (a)
651                 return xmemdupz(a, len);
652
653         return NULL;
654 }
655
656 static const char staged_changes_advice[] =
657 N_("you have staged changes in your working tree\n"
658 "If these changes are meant to be squashed into the previous commit, run:\n"
659 "\n"
660 "  git commit --amend %s\n"
661 "\n"
662 "If they are meant to go into a new commit, run:\n"
663 "\n"
664 "  git commit %s\n"
665 "\n"
666 "In both cases, once you're done, continue with:\n"
667 "\n"
668 "  git rebase --continue\n");
669
670 #define ALLOW_EMPTY (1<<0)
671 #define EDIT_MSG    (1<<1)
672 #define AMEND_MSG   (1<<2)
673 #define CLEANUP_MSG (1<<3)
674 #define VERIFY_MSG  (1<<4)
675
676 /*
677  * If we are cherry-pick, and if the merge did not result in
678  * hand-editing, we will hit this commit and inherit the original
679  * author date and name.
680  *
681  * If we are revert, or if our cherry-pick results in a hand merge,
682  * we had better say that the current user is responsible for that.
683  *
684  * An exception is when run_git_commit() is called during an
685  * interactive rebase: in that case, we will want to retain the
686  * author metadata.
687  */
688 static int run_git_commit(const char *defmsg, struct replay_opts *opts,
689                           unsigned int flags)
690 {
691         struct child_process cmd = CHILD_PROCESS_INIT;
692         const char *value;
693
694         cmd.git_cmd = 1;
695
696         if (is_rebase_i(opts)) {
697                 if (!(flags & EDIT_MSG)) {
698                         cmd.stdout_to_stderr = 1;
699                         cmd.err = -1;
700                 }
701
702                 if (read_env_script(&cmd.env_array)) {
703                         const char *gpg_opt = gpg_sign_opt_quoted(opts);
704
705                         return error(_(staged_changes_advice),
706                                      gpg_opt, gpg_opt);
707                 }
708         }
709
710         argv_array_push(&cmd.args, "commit");
711
712         if (!(flags & VERIFY_MSG))
713                 argv_array_push(&cmd.args, "-n");
714         if ((flags & AMEND_MSG))
715                 argv_array_push(&cmd.args, "--amend");
716         if (opts->gpg_sign)
717                 argv_array_pushf(&cmd.args, "-S%s", opts->gpg_sign);
718         if (defmsg)
719                 argv_array_pushl(&cmd.args, "-F", defmsg, NULL);
720         else if (!(flags & EDIT_MSG))
721                 argv_array_pushl(&cmd.args, "-C", "HEAD", NULL);
722         if ((flags & CLEANUP_MSG))
723                 argv_array_push(&cmd.args, "--cleanup=strip");
724         if ((flags & EDIT_MSG))
725                 argv_array_push(&cmd.args, "-e");
726         else if (!(flags & CLEANUP_MSG) &&
727                  !opts->signoff && !opts->record_origin &&
728                  git_config_get_value("commit.cleanup", &value))
729                 argv_array_push(&cmd.args, "--cleanup=verbatim");
730
731         if ((flags & ALLOW_EMPTY))
732                 argv_array_push(&cmd.args, "--allow-empty");
733
734         if (opts->allow_empty_message)
735                 argv_array_push(&cmd.args, "--allow-empty-message");
736
737         if (cmd.err == -1) {
738                 /* hide stderr on success */
739                 struct strbuf buf = STRBUF_INIT;
740                 int rc = pipe_command(&cmd,
741                                       NULL, 0,
742                                       /* stdout is already redirected */
743                                       NULL, 0,
744                                       &buf, 0);
745                 if (rc)
746                         fputs(buf.buf, stderr);
747                 strbuf_release(&buf);
748                 return rc;
749         }
750
751         return run_command(&cmd);
752 }
753
754 static int rest_is_empty(const struct strbuf *sb, int start)
755 {
756         int i, eol;
757         const char *nl;
758
759         /* Check if the rest is just whitespace and Signed-off-by's. */
760         for (i = start; i < sb->len; i++) {
761                 nl = memchr(sb->buf + i, '\n', sb->len - i);
762                 if (nl)
763                         eol = nl - sb->buf;
764                 else
765                         eol = sb->len;
766
767                 if (strlen(sign_off_header) <= eol - i &&
768                     starts_with(sb->buf + i, sign_off_header)) {
769                         i = eol;
770                         continue;
771                 }
772                 while (i < eol)
773                         if (!isspace(sb->buf[i++]))
774                                 return 0;
775         }
776
777         return 1;
778 }
779
780 /*
781  * Find out if the message in the strbuf contains only whitespace and
782  * Signed-off-by lines.
783  */
784 int message_is_empty(const struct strbuf *sb,
785                      enum commit_msg_cleanup_mode cleanup_mode)
786 {
787         if (cleanup_mode == COMMIT_MSG_CLEANUP_NONE && sb->len)
788                 return 0;
789         return rest_is_empty(sb, 0);
790 }
791
792 /*
793  * See if the user edited the message in the editor or left what
794  * was in the template intact
795  */
796 int template_untouched(const struct strbuf *sb, const char *template_file,
797                        enum commit_msg_cleanup_mode cleanup_mode)
798 {
799         struct strbuf tmpl = STRBUF_INIT;
800         const char *start;
801
802         if (cleanup_mode == COMMIT_MSG_CLEANUP_NONE && sb->len)
803                 return 0;
804
805         if (!template_file || strbuf_read_file(&tmpl, template_file, 0) <= 0)
806                 return 0;
807
808         strbuf_stripspace(&tmpl, cleanup_mode == COMMIT_MSG_CLEANUP_ALL);
809         if (!skip_prefix(sb->buf, tmpl.buf, &start))
810                 start = sb->buf;
811         strbuf_release(&tmpl);
812         return rest_is_empty(sb, start - sb->buf);
813 }
814
815 int update_head_with_reflog(const struct commit *old_head,
816                             const struct object_id *new_head,
817                             const char *action, const struct strbuf *msg,
818                             struct strbuf *err)
819 {
820         struct ref_transaction *transaction;
821         struct strbuf sb = STRBUF_INIT;
822         const char *nl;
823         int ret = 0;
824
825         if (action) {
826                 strbuf_addstr(&sb, action);
827                 strbuf_addstr(&sb, ": ");
828         }
829
830         nl = strchr(msg->buf, '\n');
831         if (nl) {
832                 strbuf_add(&sb, msg->buf, nl + 1 - msg->buf);
833         } else {
834                 strbuf_addbuf(&sb, msg);
835                 strbuf_addch(&sb, '\n');
836         }
837
838         transaction = ref_transaction_begin(err);
839         if (!transaction ||
840             ref_transaction_update(transaction, "HEAD", new_head,
841                                    old_head ? &old_head->object.oid : &null_oid,
842                                    0, sb.buf, err) ||
843             ref_transaction_commit(transaction, err)) {
844                 ret = -1;
845         }
846         ref_transaction_free(transaction);
847         strbuf_release(&sb);
848
849         return ret;
850 }
851
852 static int run_rewrite_hook(const struct object_id *oldoid,
853                             const struct object_id *newoid)
854 {
855         struct child_process proc = CHILD_PROCESS_INIT;
856         const char *argv[3];
857         int code;
858         struct strbuf sb = STRBUF_INIT;
859
860         argv[0] = find_hook("post-rewrite");
861         if (!argv[0])
862                 return 0;
863
864         argv[1] = "amend";
865         argv[2] = NULL;
866
867         proc.argv = argv;
868         proc.in = -1;
869         proc.stdout_to_stderr = 1;
870
871         code = start_command(&proc);
872         if (code)
873                 return code;
874         strbuf_addf(&sb, "%s %s\n", oid_to_hex(oldoid), oid_to_hex(newoid));
875         sigchain_push(SIGPIPE, SIG_IGN);
876         write_in_full(proc.in, sb.buf, sb.len);
877         close(proc.in);
878         strbuf_release(&sb);
879         sigchain_pop(SIGPIPE);
880         return finish_command(&proc);
881 }
882
883 void commit_post_rewrite(const struct commit *old_head,
884                          const struct object_id *new_head)
885 {
886         struct notes_rewrite_cfg *cfg;
887
888         cfg = init_copy_notes_for_rewrite("amend");
889         if (cfg) {
890                 /* we are amending, so old_head is not NULL */
891                 copy_note_for_rewrite(cfg, &old_head->object.oid, new_head);
892                 finish_copy_notes_for_rewrite(cfg, "Notes added by 'git commit --amend'");
893         }
894         run_rewrite_hook(&old_head->object.oid, new_head);
895 }
896
897 static int run_prepare_commit_msg_hook(struct strbuf *msg, const char *commit)
898 {
899         struct argv_array hook_env = ARGV_ARRAY_INIT;
900         int ret;
901         const char *name;
902
903         name = git_path_commit_editmsg();
904         if (write_message(msg->buf, msg->len, name, 0))
905                 return -1;
906
907         argv_array_pushf(&hook_env, "GIT_INDEX_FILE=%s", get_index_file());
908         argv_array_push(&hook_env, "GIT_EDITOR=:");
909         if (commit)
910                 ret = run_hook_le(hook_env.argv, "prepare-commit-msg", name,
911                                   "commit", commit, NULL);
912         else
913                 ret = run_hook_le(hook_env.argv, "prepare-commit-msg", name,
914                                   "message", NULL);
915         if (ret)
916                 ret = error(_("'prepare-commit-msg' hook failed"));
917         argv_array_clear(&hook_env);
918
919         return ret;
920 }
921
922 static const char implicit_ident_advice_noconfig[] =
923 N_("Your name and email address were configured automatically based\n"
924 "on your username and hostname. Please check that they are accurate.\n"
925 "You can suppress this message by setting them explicitly. Run the\n"
926 "following command and follow the instructions in your editor to edit\n"
927 "your configuration file:\n"
928 "\n"
929 "    git config --global --edit\n"
930 "\n"
931 "After doing this, you may fix the identity used for this commit with:\n"
932 "\n"
933 "    git commit --amend --reset-author\n");
934
935 static const char implicit_ident_advice_config[] =
936 N_("Your name and email address were configured automatically based\n"
937 "on your username and hostname. Please check that they are accurate.\n"
938 "You can suppress this message by setting them explicitly:\n"
939 "\n"
940 "    git config --global user.name \"Your Name\"\n"
941 "    git config --global user.email you@example.com\n"
942 "\n"
943 "After doing this, you may fix the identity used for this commit with:\n"
944 "\n"
945 "    git commit --amend --reset-author\n");
946
947 static const char *implicit_ident_advice(void)
948 {
949         char *user_config = expand_user_path("~/.gitconfig", 0);
950         char *xdg_config = xdg_config_home("config");
951         int config_exists = file_exists(user_config) || file_exists(xdg_config);
952
953         free(user_config);
954         free(xdg_config);
955
956         if (config_exists)
957                 return _(implicit_ident_advice_config);
958         else
959                 return _(implicit_ident_advice_noconfig);
960
961 }
962
963 void print_commit_summary(const char *prefix, const struct object_id *oid,
964                           unsigned int flags)
965 {
966         struct rev_info rev;
967         struct commit *commit;
968         struct strbuf format = STRBUF_INIT;
969         const char *head;
970         struct pretty_print_context pctx = {0};
971         struct strbuf author_ident = STRBUF_INIT;
972         struct strbuf committer_ident = STRBUF_INIT;
973
974         commit = lookup_commit(oid);
975         if (!commit)
976                 die(_("couldn't look up newly created commit"));
977         if (parse_commit(commit))
978                 die(_("could not parse newly created commit"));
979
980         strbuf_addstr(&format, "format:%h] %s");
981
982         format_commit_message(commit, "%an <%ae>", &author_ident, &pctx);
983         format_commit_message(commit, "%cn <%ce>", &committer_ident, &pctx);
984         if (strbuf_cmp(&author_ident, &committer_ident)) {
985                 strbuf_addstr(&format, "\n Author: ");
986                 strbuf_addbuf_percentquote(&format, &author_ident);
987         }
988         if (flags & SUMMARY_SHOW_AUTHOR_DATE) {
989                 struct strbuf date = STRBUF_INIT;
990
991                 format_commit_message(commit, "%ad", &date, &pctx);
992                 strbuf_addstr(&format, "\n Date: ");
993                 strbuf_addbuf_percentquote(&format, &date);
994                 strbuf_release(&date);
995         }
996         if (!committer_ident_sufficiently_given()) {
997                 strbuf_addstr(&format, "\n Committer: ");
998                 strbuf_addbuf_percentquote(&format, &committer_ident);
999                 if (advice_implicit_identity) {
1000                         strbuf_addch(&format, '\n');
1001                         strbuf_addstr(&format, implicit_ident_advice());
1002                 }
1003         }
1004         strbuf_release(&author_ident);
1005         strbuf_release(&committer_ident);
1006
1007         init_revisions(&rev, prefix);
1008         setup_revisions(0, NULL, &rev, NULL);
1009
1010         rev.diff = 1;
1011         rev.diffopt.output_format =
1012                 DIFF_FORMAT_SHORTSTAT | DIFF_FORMAT_SUMMARY;
1013
1014         rev.verbose_header = 1;
1015         rev.show_root_diff = 1;
1016         get_commit_format(format.buf, &rev);
1017         rev.always_show_header = 0;
1018         rev.diffopt.detect_rename = DIFF_DETECT_RENAME;
1019         rev.diffopt.break_opt = 0;
1020         diff_setup_done(&rev.diffopt);
1021
1022         head = resolve_ref_unsafe("HEAD", 0, NULL, NULL);
1023         if (!head)
1024                 die_errno(_("unable to resolve HEAD after creating commit"));
1025         if (!strcmp(head, "HEAD"))
1026                 head = _("detached HEAD");
1027         else
1028                 skip_prefix(head, "refs/heads/", &head);
1029         printf("[%s%s ", head, (flags & SUMMARY_INITIAL_COMMIT) ?
1030                                                 _(" (root-commit)") : "");
1031
1032         if (!log_tree_commit(&rev, commit)) {
1033                 rev.always_show_header = 1;
1034                 rev.use_terminator = 1;
1035                 log_tree_commit(&rev, commit);
1036         }
1037
1038         strbuf_release(&format);
1039 }
1040
1041 static int parse_head(struct commit **head)
1042 {
1043         struct commit *current_head;
1044         struct object_id oid;
1045
1046         if (get_oid("HEAD", &oid)) {
1047                 current_head = NULL;
1048         } else {
1049                 current_head = lookup_commit_reference(&oid);
1050                 if (!current_head)
1051                         return error(_("could not parse HEAD"));
1052                 if (oidcmp(&oid, &current_head->object.oid)) {
1053                         warning(_("HEAD %s is not a commit!"),
1054                                 oid_to_hex(&oid));
1055                 }
1056                 if (parse_commit(current_head))
1057                         return error(_("could not parse HEAD commit"));
1058         }
1059         *head = current_head;
1060
1061         return 0;
1062 }
1063
1064 /*
1065  * Try to commit without forking 'git commit'. In some cases we need
1066  * to run 'git commit' to display an error message
1067  *
1068  * Returns:
1069  *  -1 - error unable to commit
1070  *   0 - success
1071  *   1 - run 'git commit'
1072  */
1073 static int try_to_commit(struct strbuf *msg, const char *author,
1074                          struct replay_opts *opts, unsigned int flags,
1075                          struct object_id *oid)
1076 {
1077         struct object_id tree;
1078         struct commit *current_head;
1079         struct commit_list *parents = NULL;
1080         struct commit_extra_header *extra = NULL;
1081         struct strbuf err = STRBUF_INIT;
1082         struct strbuf commit_msg = STRBUF_INIT;
1083         char *amend_author = NULL;
1084         const char *hook_commit = NULL;
1085         enum commit_msg_cleanup_mode cleanup;
1086         int res = 0;
1087
1088         if (parse_head(&current_head))
1089                 return -1;
1090
1091         if (flags & AMEND_MSG) {
1092                 const char *exclude_gpgsig[] = { "gpgsig", NULL };
1093                 const char *out_enc = get_commit_output_encoding();
1094                 const char *message = logmsg_reencode(current_head, NULL,
1095                                                       out_enc);
1096
1097                 if (!msg) {
1098                         const char *orig_message = NULL;
1099
1100                         find_commit_subject(message, &orig_message);
1101                         msg = &commit_msg;
1102                         strbuf_addstr(msg, orig_message);
1103                         hook_commit = "HEAD";
1104                 }
1105                 author = amend_author = get_author(message);
1106                 unuse_commit_buffer(current_head, message);
1107                 if (!author) {
1108                         res = error(_("unable to parse commit author"));
1109                         goto out;
1110                 }
1111                 parents = copy_commit_list(current_head->parents);
1112                 extra = read_commit_extra_headers(current_head, exclude_gpgsig);
1113         } else if (current_head) {
1114                 commit_list_insert(current_head, &parents);
1115         }
1116
1117         if (write_cache_as_tree(&tree, 0, NULL)) {
1118                 res = error(_("git write-tree failed to write a tree"));
1119                 goto out;
1120         }
1121
1122         if (!(flags & ALLOW_EMPTY) && !oidcmp(current_head ?
1123                                               get_commit_tree_oid(current_head) :
1124                                               &empty_tree_oid, &tree)) {
1125                 res = 1; /* run 'git commit' to display error message */
1126                 goto out;
1127         }
1128
1129         if (find_hook("prepare-commit-msg")) {
1130                 res = run_prepare_commit_msg_hook(msg, hook_commit);
1131                 if (res)
1132                         goto out;
1133                 if (strbuf_read_file(&commit_msg, git_path_commit_editmsg(),
1134                                      2048) < 0) {
1135                         res = error_errno(_("unable to read commit message "
1136                                               "from '%s'"),
1137                                             git_path_commit_editmsg());
1138                         goto out;
1139                 }
1140                 msg = &commit_msg;
1141         }
1142
1143         cleanup = (flags & CLEANUP_MSG) ? COMMIT_MSG_CLEANUP_ALL :
1144                                           opts->default_msg_cleanup;
1145
1146         if (cleanup != COMMIT_MSG_CLEANUP_NONE)
1147                 strbuf_stripspace(msg, cleanup == COMMIT_MSG_CLEANUP_ALL);
1148         if (!opts->allow_empty_message && message_is_empty(msg, cleanup)) {
1149                 res = 1; /* run 'git commit' to display error message */
1150                 goto out;
1151         }
1152
1153         reset_ident_date();
1154
1155         if (commit_tree_extended(msg->buf, msg->len, &tree, parents,
1156                                  oid, author, opts->gpg_sign, extra)) {
1157                 res = error(_("failed to write commit object"));
1158                 goto out;
1159         }
1160
1161         if (update_head_with_reflog(current_head, oid,
1162                                     getenv("GIT_REFLOG_ACTION"), msg, &err)) {
1163                 res = error("%s", err.buf);
1164                 goto out;
1165         }
1166
1167         if (flags & AMEND_MSG)
1168                 commit_post_rewrite(current_head, oid);
1169
1170 out:
1171         free_commit_extra_headers(extra);
1172         strbuf_release(&err);
1173         strbuf_release(&commit_msg);
1174         free(amend_author);
1175
1176         return res;
1177 }
1178
1179 static int do_commit(const char *msg_file, const char *author,
1180                      struct replay_opts *opts, unsigned int flags)
1181 {
1182         int res = 1;
1183
1184         if (!(flags & EDIT_MSG) && !(flags & VERIFY_MSG)) {
1185                 struct object_id oid;
1186                 struct strbuf sb = STRBUF_INIT;
1187
1188                 if (msg_file && strbuf_read_file(&sb, msg_file, 2048) < 0)
1189                         return error_errno(_("unable to read commit message "
1190                                              "from '%s'"),
1191                                            msg_file);
1192
1193                 res = try_to_commit(msg_file ? &sb : NULL, author, opts, flags,
1194                                     &oid);
1195                 strbuf_release(&sb);
1196                 if (!res) {
1197                         unlink(git_path_cherry_pick_head());
1198                         unlink(git_path_merge_msg());
1199                         if (!is_rebase_i(opts))
1200                                 print_commit_summary(NULL, &oid,
1201                                                 SUMMARY_SHOW_AUTHOR_DATE);
1202                         return res;
1203                 }
1204         }
1205         if (res == 1)
1206                 return run_git_commit(msg_file, opts, flags);
1207
1208         return res;
1209 }
1210
1211 static int is_original_commit_empty(struct commit *commit)
1212 {
1213         const struct object_id *ptree_oid;
1214
1215         if (parse_commit(commit))
1216                 return error(_("could not parse commit %s"),
1217                              oid_to_hex(&commit->object.oid));
1218         if (commit->parents) {
1219                 struct commit *parent = commit->parents->item;
1220                 if (parse_commit(parent))
1221                         return error(_("could not parse parent commit %s"),
1222                                 oid_to_hex(&parent->object.oid));
1223                 ptree_oid = get_commit_tree_oid(parent);
1224         } else {
1225                 ptree_oid = the_hash_algo->empty_tree; /* commit is root */
1226         }
1227
1228         return !oidcmp(ptree_oid, get_commit_tree_oid(commit));
1229 }
1230
1231 /*
1232  * Do we run "git commit" with "--allow-empty"?
1233  */
1234 static int allow_empty(struct replay_opts *opts, struct commit *commit)
1235 {
1236         int index_unchanged, empty_commit;
1237
1238         /*
1239          * Three cases:
1240          *
1241          * (1) we do not allow empty at all and error out.
1242          *
1243          * (2) we allow ones that were initially empty, but
1244          * forbid the ones that become empty;
1245          *
1246          * (3) we allow both.
1247          */
1248         if (!opts->allow_empty)
1249                 return 0; /* let "git commit" barf as necessary */
1250
1251         index_unchanged = is_index_unchanged();
1252         if (index_unchanged < 0)
1253                 return index_unchanged;
1254         if (!index_unchanged)
1255                 return 0; /* we do not have to say --allow-empty */
1256
1257         if (opts->keep_redundant_commits)
1258                 return 1;
1259
1260         empty_commit = is_original_commit_empty(commit);
1261         if (empty_commit < 0)
1262                 return empty_commit;
1263         if (!empty_commit)
1264                 return 0;
1265         else
1266                 return 1;
1267 }
1268
1269 /*
1270  * Note that ordering matters in this enum. Not only must it match the mapping
1271  * below, it is also divided into several sections that matter.  When adding
1272  * new commands, make sure you add it in the right section.
1273  */
1274 enum todo_command {
1275         /* commands that handle commits */
1276         TODO_PICK = 0,
1277         TODO_REVERT,
1278         TODO_EDIT,
1279         TODO_REWORD,
1280         TODO_FIXUP,
1281         TODO_SQUASH,
1282         /* commands that do something else than handling a single commit */
1283         TODO_EXEC,
1284         /* commands that do nothing but are counted for reporting progress */
1285         TODO_NOOP,
1286         TODO_DROP,
1287         /* comments (not counted for reporting progress) */
1288         TODO_COMMENT
1289 };
1290
1291 static struct {
1292         char c;
1293         const char *str;
1294 } todo_command_info[] = {
1295         { 'p', "pick" },
1296         { 0,   "revert" },
1297         { 'e', "edit" },
1298         { 'r', "reword" },
1299         { 'f', "fixup" },
1300         { 's', "squash" },
1301         { 'x', "exec" },
1302         { 0,   "noop" },
1303         { 'd', "drop" },
1304         { 0,   NULL }
1305 };
1306
1307 static const char *command_to_string(const enum todo_command command)
1308 {
1309         if (command < TODO_COMMENT)
1310                 return todo_command_info[command].str;
1311         die("Unknown command: %d", command);
1312 }
1313
1314 static char command_to_char(const enum todo_command command)
1315 {
1316         if (command < TODO_COMMENT && todo_command_info[command].c)
1317                 return todo_command_info[command].c;
1318         return comment_line_char;
1319 }
1320
1321 static int is_noop(const enum todo_command command)
1322 {
1323         return TODO_NOOP <= command;
1324 }
1325
1326 static int is_fixup(enum todo_command command)
1327 {
1328         return command == TODO_FIXUP || command == TODO_SQUASH;
1329 }
1330
1331 static int update_squash_messages(enum todo_command command,
1332                 struct commit *commit, struct replay_opts *opts)
1333 {
1334         struct strbuf buf = STRBUF_INIT;
1335         int res;
1336         const char *message, *body;
1337
1338         if (opts->current_fixup_count > 0) {
1339                 struct strbuf header = STRBUF_INIT;
1340                 char *eol;
1341
1342                 if (strbuf_read_file(&buf, rebase_path_squash_msg(), 9) <= 0)
1343                         return error(_("could not read '%s'"),
1344                                 rebase_path_squash_msg());
1345
1346                 eol = buf.buf[0] != comment_line_char ?
1347                         buf.buf : strchrnul(buf.buf, '\n');
1348
1349                 strbuf_addf(&header, "%c ", comment_line_char);
1350                 strbuf_addf(&header, _("This is a combination of %d commits."),
1351                             opts->current_fixup_count + 2);
1352                 strbuf_splice(&buf, 0, eol - buf.buf, header.buf, header.len);
1353                 strbuf_release(&header);
1354         } else {
1355                 struct object_id head;
1356                 struct commit *head_commit;
1357                 const char *head_message, *body;
1358
1359                 if (get_oid("HEAD", &head))
1360                         return error(_("need a HEAD to fixup"));
1361                 if (!(head_commit = lookup_commit_reference(&head)))
1362                         return error(_("could not read HEAD"));
1363                 if (!(head_message = get_commit_buffer(head_commit, NULL)))
1364                         return error(_("could not read HEAD's commit message"));
1365
1366                 find_commit_subject(head_message, &body);
1367                 if (write_message(body, strlen(body),
1368                                   rebase_path_fixup_msg(), 0)) {
1369                         unuse_commit_buffer(head_commit, head_message);
1370                         return error(_("cannot write '%s'"),
1371                                      rebase_path_fixup_msg());
1372                 }
1373
1374                 strbuf_addf(&buf, "%c ", comment_line_char);
1375                 strbuf_addf(&buf, _("This is a combination of %d commits."), 2);
1376                 strbuf_addf(&buf, "\n%c ", comment_line_char);
1377                 strbuf_addstr(&buf, _("This is the 1st commit message:"));
1378                 strbuf_addstr(&buf, "\n\n");
1379                 strbuf_addstr(&buf, body);
1380
1381                 unuse_commit_buffer(head_commit, head_message);
1382         }
1383
1384         if (!(message = get_commit_buffer(commit, NULL)))
1385                 return error(_("could not read commit message of %s"),
1386                              oid_to_hex(&commit->object.oid));
1387         find_commit_subject(message, &body);
1388
1389         if (command == TODO_SQUASH) {
1390                 unlink(rebase_path_fixup_msg());
1391                 strbuf_addf(&buf, "\n%c ", comment_line_char);
1392                 strbuf_addf(&buf, _("This is the commit message #%d:"),
1393                             ++opts->current_fixup_count);
1394                 strbuf_addstr(&buf, "\n\n");
1395                 strbuf_addstr(&buf, body);
1396         } else if (command == TODO_FIXUP) {
1397                 strbuf_addf(&buf, "\n%c ", comment_line_char);
1398                 strbuf_addf(&buf, _("The commit message #%d will be skipped:"),
1399                             ++opts->current_fixup_count);
1400                 strbuf_addstr(&buf, "\n\n");
1401                 strbuf_add_commented_lines(&buf, body, strlen(body));
1402         } else
1403                 return error(_("unknown command: %d"), command);
1404         unuse_commit_buffer(commit, message);
1405
1406         res = write_message(buf.buf, buf.len, rebase_path_squash_msg(), 0);
1407         strbuf_release(&buf);
1408
1409         if (!res) {
1410                 strbuf_addf(&opts->current_fixups, "%s%s %s",
1411                             opts->current_fixups.len ? "\n" : "",
1412                             command_to_string(command),
1413                             oid_to_hex(&commit->object.oid));
1414                 res = write_message(opts->current_fixups.buf,
1415                                     opts->current_fixups.len,
1416                                     rebase_path_current_fixups(), 0);
1417         }
1418
1419         return res;
1420 }
1421
1422 static void flush_rewritten_pending(void) {
1423         struct strbuf buf = STRBUF_INIT;
1424         struct object_id newoid;
1425         FILE *out;
1426
1427         if (strbuf_read_file(&buf, rebase_path_rewritten_pending(), (GIT_MAX_HEXSZ + 1) * 2) > 0 &&
1428             !get_oid("HEAD", &newoid) &&
1429             (out = fopen_or_warn(rebase_path_rewritten_list(), "a"))) {
1430                 char *bol = buf.buf, *eol;
1431
1432                 while (*bol) {
1433                         eol = strchrnul(bol, '\n');
1434                         fprintf(out, "%.*s %s\n", (int)(eol - bol),
1435                                         bol, oid_to_hex(&newoid));
1436                         if (!*eol)
1437                                 break;
1438                         bol = eol + 1;
1439                 }
1440                 fclose(out);
1441                 unlink(rebase_path_rewritten_pending());
1442         }
1443         strbuf_release(&buf);
1444 }
1445
1446 static void record_in_rewritten(struct object_id *oid,
1447                 enum todo_command next_command) {
1448         FILE *out = fopen_or_warn(rebase_path_rewritten_pending(), "a");
1449
1450         if (!out)
1451                 return;
1452
1453         fprintf(out, "%s\n", oid_to_hex(oid));
1454         fclose(out);
1455
1456         if (!is_fixup(next_command))
1457                 flush_rewritten_pending();
1458 }
1459
1460 static int do_pick_commit(enum todo_command command, struct commit *commit,
1461                 struct replay_opts *opts, int final_fixup)
1462 {
1463         unsigned int flags = opts->edit ? EDIT_MSG : 0;
1464         const char *msg_file = opts->edit ? NULL : git_path_merge_msg();
1465         struct object_id head;
1466         struct commit *base, *next, *parent;
1467         const char *base_label, *next_label;
1468         char *author = NULL;
1469         struct commit_message msg = { NULL, NULL, NULL, NULL };
1470         struct strbuf msgbuf = STRBUF_INIT;
1471         int res, unborn = 0, allow;
1472
1473         if (opts->no_commit) {
1474                 /*
1475                  * We do not intend to commit immediately.  We just want to
1476                  * merge the differences in, so let's compute the tree
1477                  * that represents the "current" state for merge-recursive
1478                  * to work on.
1479                  */
1480                 if (write_cache_as_tree(&head, 0, NULL))
1481                         return error(_("your index file is unmerged."));
1482         } else {
1483                 unborn = get_oid("HEAD", &head);
1484                 if (unborn)
1485                         oidcpy(&head, the_hash_algo->empty_tree);
1486                 if (index_differs_from(unborn ? EMPTY_TREE_SHA1_HEX : "HEAD",
1487                                        NULL, 0))
1488                         return error_dirty_index(opts);
1489         }
1490         discard_cache();
1491
1492         if (!commit->parents)
1493                 parent = NULL;
1494         else if (commit->parents->next) {
1495                 /* Reverting or cherry-picking a merge commit */
1496                 int cnt;
1497                 struct commit_list *p;
1498
1499                 if (!opts->mainline)
1500                         return error(_("commit %s is a merge but no -m option was given."),
1501                                 oid_to_hex(&commit->object.oid));
1502
1503                 for (cnt = 1, p = commit->parents;
1504                      cnt != opts->mainline && p;
1505                      cnt++)
1506                         p = p->next;
1507                 if (cnt != opts->mainline || !p)
1508                         return error(_("commit %s does not have parent %d"),
1509                                 oid_to_hex(&commit->object.oid), opts->mainline);
1510                 parent = p->item;
1511         } else if (0 < opts->mainline)
1512                 return error(_("mainline was specified but commit %s is not a merge."),
1513                         oid_to_hex(&commit->object.oid));
1514         else
1515                 parent = commit->parents->item;
1516
1517         if (get_message(commit, &msg) != 0)
1518                 return error(_("cannot get commit message for %s"),
1519                         oid_to_hex(&commit->object.oid));
1520
1521         if (opts->allow_ff && !is_fixup(command) &&
1522             ((parent && !oidcmp(&parent->object.oid, &head)) ||
1523              (!parent && unborn))) {
1524                 if (is_rebase_i(opts))
1525                         write_author_script(msg.message);
1526                 res = fast_forward_to(&commit->object.oid, &head, unborn,
1527                         opts);
1528                 if (res || command != TODO_REWORD)
1529                         goto leave;
1530                 flags |= EDIT_MSG | AMEND_MSG | VERIFY_MSG;
1531                 msg_file = NULL;
1532                 goto fast_forward_edit;
1533         }
1534         if (parent && parse_commit(parent) < 0)
1535                 /* TRANSLATORS: The first %s will be a "todo" command like
1536                    "revert" or "pick", the second %s a SHA1. */
1537                 return error(_("%s: cannot parse parent commit %s"),
1538                         command_to_string(command),
1539                         oid_to_hex(&parent->object.oid));
1540
1541         /*
1542          * "commit" is an existing commit.  We would want to apply
1543          * the difference it introduces since its first parent "prev"
1544          * on top of the current HEAD if we are cherry-pick.  Or the
1545          * reverse of it if we are revert.
1546          */
1547
1548         if (command == TODO_REVERT) {
1549                 base = commit;
1550                 base_label = msg.label;
1551                 next = parent;
1552                 next_label = msg.parent_label;
1553                 strbuf_addstr(&msgbuf, "Revert \"");
1554                 strbuf_addstr(&msgbuf, msg.subject);
1555                 strbuf_addstr(&msgbuf, "\"\n\nThis reverts commit ");
1556                 strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1557
1558                 if (commit->parents && commit->parents->next) {
1559                         strbuf_addstr(&msgbuf, ", reversing\nchanges made to ");
1560                         strbuf_addstr(&msgbuf, oid_to_hex(&parent->object.oid));
1561                 }
1562                 strbuf_addstr(&msgbuf, ".\n");
1563         } else {
1564                 const char *p;
1565
1566                 base = parent;
1567                 base_label = msg.parent_label;
1568                 next = commit;
1569                 next_label = msg.label;
1570
1571                 /* Append the commit log message to msgbuf. */
1572                 if (find_commit_subject(msg.message, &p))
1573                         strbuf_addstr(&msgbuf, p);
1574
1575                 if (opts->record_origin) {
1576                         strbuf_complete_line(&msgbuf);
1577                         if (!has_conforming_footer(&msgbuf, NULL, 0))
1578                                 strbuf_addch(&msgbuf, '\n');
1579                         strbuf_addstr(&msgbuf, cherry_picked_prefix);
1580                         strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1581                         strbuf_addstr(&msgbuf, ")\n");
1582                 }
1583                 if (!is_fixup(command))
1584                         author = get_author(msg.message);
1585         }
1586
1587         if (command == TODO_REWORD)
1588                 flags |= EDIT_MSG | VERIFY_MSG;
1589         else if (is_fixup(command)) {
1590                 if (update_squash_messages(command, commit, opts))
1591                         return -1;
1592                 flags |= AMEND_MSG;
1593                 if (!final_fixup)
1594                         msg_file = rebase_path_squash_msg();
1595                 else if (file_exists(rebase_path_fixup_msg())) {
1596                         flags |= CLEANUP_MSG;
1597                         msg_file = rebase_path_fixup_msg();
1598                 } else {
1599                         const char *dest = git_path_squash_msg();
1600                         unlink(dest);
1601                         if (copy_file(dest, rebase_path_squash_msg(), 0666))
1602                                 return error(_("could not rename '%s' to '%s'"),
1603                                              rebase_path_squash_msg(), dest);
1604                         unlink(git_path_merge_msg());
1605                         msg_file = dest;
1606                         flags |= EDIT_MSG;
1607                 }
1608         }
1609
1610         if (opts->signoff && !is_fixup(command))
1611                 append_signoff(&msgbuf, 0, 0);
1612
1613         if (is_rebase_i(opts) && write_author_script(msg.message) < 0)
1614                 res = -1;
1615         else if (!opts->strategy || !strcmp(opts->strategy, "recursive") || command == TODO_REVERT) {
1616                 res = do_recursive_merge(base, next, base_label, next_label,
1617                                          &head, &msgbuf, opts);
1618                 if (res < 0)
1619                         return res;
1620                 res |= write_message(msgbuf.buf, msgbuf.len,
1621                                      git_path_merge_msg(), 0);
1622         } else {
1623                 struct commit_list *common = NULL;
1624                 struct commit_list *remotes = NULL;
1625
1626                 res = write_message(msgbuf.buf, msgbuf.len,
1627                                     git_path_merge_msg(), 0);
1628
1629                 commit_list_insert(base, &common);
1630                 commit_list_insert(next, &remotes);
1631                 res |= try_merge_command(opts->strategy,
1632                                          opts->xopts_nr, (const char **)opts->xopts,
1633                                         common, oid_to_hex(&head), remotes);
1634                 free_commit_list(common);
1635                 free_commit_list(remotes);
1636         }
1637         strbuf_release(&msgbuf);
1638
1639         /*
1640          * If the merge was clean or if it failed due to conflict, we write
1641          * CHERRY_PICK_HEAD for the subsequent invocation of commit to use.
1642          * However, if the merge did not even start, then we don't want to
1643          * write it at all.
1644          */
1645         if (command == TODO_PICK && !opts->no_commit && (res == 0 || res == 1) &&
1646             update_ref(NULL, "CHERRY_PICK_HEAD", &commit->object.oid, NULL,
1647                        REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1648                 res = -1;
1649         if (command == TODO_REVERT && ((opts->no_commit && res == 0) || res == 1) &&
1650             update_ref(NULL, "REVERT_HEAD", &commit->object.oid, NULL,
1651                        REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1652                 res = -1;
1653
1654         if (res) {
1655                 error(command == TODO_REVERT
1656                       ? _("could not revert %s... %s")
1657                       : _("could not apply %s... %s"),
1658                       short_commit_name(commit), msg.subject);
1659                 print_advice(res == 1, opts);
1660                 rerere(opts->allow_rerere_auto);
1661                 goto leave;
1662         }
1663
1664         allow = allow_empty(opts, commit);
1665         if (allow < 0) {
1666                 res = allow;
1667                 goto leave;
1668         } else if (allow)
1669                 flags |= ALLOW_EMPTY;
1670         if (!opts->no_commit) {
1671 fast_forward_edit:
1672                 if (author || command == TODO_REVERT || (flags & AMEND_MSG))
1673                         res = do_commit(msg_file, author, opts, flags);
1674                 else
1675                         res = error(_("unable to parse commit author"));
1676         }
1677
1678         if (!res && final_fixup) {
1679                 unlink(rebase_path_fixup_msg());
1680                 unlink(rebase_path_squash_msg());
1681                 unlink(rebase_path_current_fixups());
1682                 strbuf_reset(&opts->current_fixups);
1683                 opts->current_fixup_count = 0;
1684         }
1685
1686 leave:
1687         free_message(commit, &msg);
1688         free(author);
1689         update_abort_safety_file();
1690
1691         return res;
1692 }
1693
1694 static int prepare_revs(struct replay_opts *opts)
1695 {
1696         /*
1697          * picking (but not reverting) ranges (but not individual revisions)
1698          * should be done in reverse
1699          */
1700         if (opts->action == REPLAY_PICK && !opts->revs->no_walk)
1701                 opts->revs->reverse ^= 1;
1702
1703         if (prepare_revision_walk(opts->revs))
1704                 return error(_("revision walk setup failed"));
1705
1706         if (!opts->revs->commits)
1707                 return error(_("empty commit set passed"));
1708         return 0;
1709 }
1710
1711 static int read_and_refresh_cache(struct replay_opts *opts)
1712 {
1713         struct lock_file index_lock = LOCK_INIT;
1714         int index_fd = hold_locked_index(&index_lock, 0);
1715         if (read_index_preload(&the_index, NULL) < 0) {
1716                 rollback_lock_file(&index_lock);
1717                 return error(_("git %s: failed to read the index"),
1718                         _(action_name(opts)));
1719         }
1720         refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED, NULL, NULL, NULL);
1721         if (index_fd >= 0) {
1722                 if (write_locked_index(&the_index, &index_lock,
1723                                        COMMIT_LOCK | SKIP_IF_UNCHANGED)) {
1724                         return error(_("git %s: failed to refresh the index"),
1725                                 _(action_name(opts)));
1726                 }
1727         }
1728         return 0;
1729 }
1730
1731 struct todo_item {
1732         enum todo_command command;
1733         struct commit *commit;
1734         const char *arg;
1735         int arg_len;
1736         size_t offset_in_buf;
1737 };
1738
1739 struct todo_list {
1740         struct strbuf buf;
1741         struct todo_item *items;
1742         int nr, alloc, current;
1743         int done_nr, total_nr;
1744         struct stat_data stat;
1745 };
1746
1747 #define TODO_LIST_INIT { STRBUF_INIT }
1748
1749 static void todo_list_release(struct todo_list *todo_list)
1750 {
1751         strbuf_release(&todo_list->buf);
1752         FREE_AND_NULL(todo_list->items);
1753         todo_list->nr = todo_list->alloc = 0;
1754 }
1755
1756 static struct todo_item *append_new_todo(struct todo_list *todo_list)
1757 {
1758         ALLOC_GROW(todo_list->items, todo_list->nr + 1, todo_list->alloc);
1759         return todo_list->items + todo_list->nr++;
1760 }
1761
1762 static int parse_insn_line(struct todo_item *item, const char *bol, char *eol)
1763 {
1764         struct object_id commit_oid;
1765         char *end_of_object_name;
1766         int i, saved, status, padding;
1767
1768         /* left-trim */
1769         bol += strspn(bol, " \t");
1770
1771         if (bol == eol || *bol == '\r' || *bol == comment_line_char) {
1772                 item->command = TODO_COMMENT;
1773                 item->commit = NULL;
1774                 item->arg = bol;
1775                 item->arg_len = eol - bol;
1776                 return 0;
1777         }
1778
1779         for (i = 0; i < TODO_COMMENT; i++)
1780                 if (skip_prefix(bol, todo_command_info[i].str, &bol)) {
1781                         item->command = i;
1782                         break;
1783                 } else if (bol[1] == ' ' && *bol == todo_command_info[i].c) {
1784                         bol++;
1785                         item->command = i;
1786                         break;
1787                 }
1788         if (i >= TODO_COMMENT)
1789                 return -1;
1790
1791         /* Eat up extra spaces/ tabs before object name */
1792         padding = strspn(bol, " \t");
1793         bol += padding;
1794
1795         if (item->command == TODO_NOOP) {
1796                 if (bol != eol)
1797                         return error(_("%s does not accept arguments: '%s'"),
1798                                      command_to_string(item->command), bol);
1799                 item->commit = NULL;
1800                 item->arg = bol;
1801                 item->arg_len = eol - bol;
1802                 return 0;
1803         }
1804
1805         if (!padding)
1806                 return error(_("missing arguments for %s"),
1807                              command_to_string(item->command));
1808
1809         if (item->command == TODO_EXEC) {
1810                 item->commit = NULL;
1811                 item->arg = bol;
1812                 item->arg_len = (int)(eol - bol);
1813                 return 0;
1814         }
1815
1816         end_of_object_name = (char *) bol + strcspn(bol, " \t\n");
1817         saved = *end_of_object_name;
1818         *end_of_object_name = '\0';
1819         status = get_oid(bol, &commit_oid);
1820         *end_of_object_name = saved;
1821
1822         item->arg = end_of_object_name + strspn(end_of_object_name, " \t");
1823         item->arg_len = (int)(eol - item->arg);
1824
1825         if (status < 0)
1826                 return -1;
1827
1828         item->commit = lookup_commit_reference(&commit_oid);
1829         return !item->commit;
1830 }
1831
1832 static int parse_insn_buffer(char *buf, struct todo_list *todo_list)
1833 {
1834         struct todo_item *item;
1835         char *p = buf, *next_p;
1836         int i, res = 0, fixup_okay = file_exists(rebase_path_done());
1837
1838         for (i = 1; *p; i++, p = next_p) {
1839                 char *eol = strchrnul(p, '\n');
1840
1841                 next_p = *eol ? eol + 1 /* skip LF */ : eol;
1842
1843                 if (p != eol && eol[-1] == '\r')
1844                         eol--; /* strip Carriage Return */
1845
1846                 item = append_new_todo(todo_list);
1847                 item->offset_in_buf = p - todo_list->buf.buf;
1848                 if (parse_insn_line(item, p, eol)) {
1849                         res = error(_("invalid line %d: %.*s"),
1850                                 i, (int)(eol - p), p);
1851                         item->command = TODO_NOOP;
1852                 }
1853
1854                 if (fixup_okay)
1855                         ; /* do nothing */
1856                 else if (is_fixup(item->command))
1857                         return error(_("cannot '%s' without a previous commit"),
1858                                 command_to_string(item->command));
1859                 else if (!is_noop(item->command))
1860                         fixup_okay = 1;
1861         }
1862
1863         return res;
1864 }
1865
1866 static int count_commands(struct todo_list *todo_list)
1867 {
1868         int count = 0, i;
1869
1870         for (i = 0; i < todo_list->nr; i++)
1871                 if (todo_list->items[i].command != TODO_COMMENT)
1872                         count++;
1873
1874         return count;
1875 }
1876
1877 static ssize_t strbuf_read_file_or_whine(struct strbuf *sb, const char *path)
1878 {
1879         int fd;
1880         ssize_t len;
1881
1882         fd = open(path, O_RDONLY);
1883         if (fd < 0)
1884                 return error_errno(_("could not open '%s'"), path);
1885         len = strbuf_read(sb, fd, 0);
1886         close(fd);
1887         if (len < 0)
1888                 return error(_("could not read '%s'."), path);
1889         return len;
1890 }
1891
1892 static int read_populate_todo(struct todo_list *todo_list,
1893                         struct replay_opts *opts)
1894 {
1895         struct stat st;
1896         const char *todo_file = get_todo_path(opts);
1897         int res;
1898
1899         strbuf_reset(&todo_list->buf);
1900         if (strbuf_read_file_or_whine(&todo_list->buf, todo_file) < 0)
1901                 return -1;
1902
1903         res = stat(todo_file, &st);
1904         if (res)
1905                 return error(_("could not stat '%s'"), todo_file);
1906         fill_stat_data(&todo_list->stat, &st);
1907
1908         res = parse_insn_buffer(todo_list->buf.buf, todo_list);
1909         if (res) {
1910                 if (is_rebase_i(opts))
1911                         return error(_("please fix this using "
1912                                        "'git rebase --edit-todo'."));
1913                 return error(_("unusable instruction sheet: '%s'"), todo_file);
1914         }
1915
1916         if (!todo_list->nr &&
1917             (!is_rebase_i(opts) || !file_exists(rebase_path_done())))
1918                 return error(_("no commits parsed."));
1919
1920         if (!is_rebase_i(opts)) {
1921                 enum todo_command valid =
1922                         opts->action == REPLAY_PICK ? TODO_PICK : TODO_REVERT;
1923                 int i;
1924
1925                 for (i = 0; i < todo_list->nr; i++)
1926                         if (valid == todo_list->items[i].command)
1927                                 continue;
1928                         else if (valid == TODO_PICK)
1929                                 return error(_("cannot cherry-pick during a revert."));
1930                         else
1931                                 return error(_("cannot revert during a cherry-pick."));
1932         }
1933
1934         if (is_rebase_i(opts)) {
1935                 struct todo_list done = TODO_LIST_INIT;
1936                 FILE *f = fopen_or_warn(rebase_path_msgtotal(), "w");
1937
1938                 if (strbuf_read_file(&done.buf, rebase_path_done(), 0) > 0 &&
1939                                 !parse_insn_buffer(done.buf.buf, &done))
1940                         todo_list->done_nr = count_commands(&done);
1941                 else
1942                         todo_list->done_nr = 0;
1943
1944                 todo_list->total_nr = todo_list->done_nr
1945                         + count_commands(todo_list);
1946                 todo_list_release(&done);
1947
1948                 if (f) {
1949                         fprintf(f, "%d\n", todo_list->total_nr);
1950                         fclose(f);
1951                 }
1952         }
1953
1954         return 0;
1955 }
1956
1957 static int git_config_string_dup(char **dest,
1958                                  const char *var, const char *value)
1959 {
1960         if (!value)
1961                 return config_error_nonbool(var);
1962         free(*dest);
1963         *dest = xstrdup(value);
1964         return 0;
1965 }
1966
1967 static int populate_opts_cb(const char *key, const char *value, void *data)
1968 {
1969         struct replay_opts *opts = data;
1970         int error_flag = 1;
1971
1972         if (!value)
1973                 error_flag = 0;
1974         else if (!strcmp(key, "options.no-commit"))
1975                 opts->no_commit = git_config_bool_or_int(key, value, &error_flag);
1976         else if (!strcmp(key, "options.edit"))
1977                 opts->edit = git_config_bool_or_int(key, value, &error_flag);
1978         else if (!strcmp(key, "options.signoff"))
1979                 opts->signoff = git_config_bool_or_int(key, value, &error_flag);
1980         else if (!strcmp(key, "options.record-origin"))
1981                 opts->record_origin = git_config_bool_or_int(key, value, &error_flag);
1982         else if (!strcmp(key, "options.allow-ff"))
1983                 opts->allow_ff = git_config_bool_or_int(key, value, &error_flag);
1984         else if (!strcmp(key, "options.mainline"))
1985                 opts->mainline = git_config_int(key, value);
1986         else if (!strcmp(key, "options.strategy"))
1987                 git_config_string_dup(&opts->strategy, key, value);
1988         else if (!strcmp(key, "options.gpg-sign"))
1989                 git_config_string_dup(&opts->gpg_sign, key, value);
1990         else if (!strcmp(key, "options.strategy-option")) {
1991                 ALLOC_GROW(opts->xopts, opts->xopts_nr + 1, opts->xopts_alloc);
1992                 opts->xopts[opts->xopts_nr++] = xstrdup(value);
1993         } else if (!strcmp(key, "options.allow-rerere-auto"))
1994                 opts->allow_rerere_auto =
1995                         git_config_bool_or_int(key, value, &error_flag) ?
1996                                 RERERE_AUTOUPDATE : RERERE_NOAUTOUPDATE;
1997         else
1998                 return error(_("invalid key: %s"), key);
1999
2000         if (!error_flag)
2001                 return error(_("invalid value for %s: %s"), key, value);
2002
2003         return 0;
2004 }
2005
2006 static void read_strategy_opts(struct replay_opts *opts, struct strbuf *buf)
2007 {
2008         int i;
2009
2010         strbuf_reset(buf);
2011         if (!read_oneliner(buf, rebase_path_strategy(), 0))
2012                 return;
2013         opts->strategy = strbuf_detach(buf, NULL);
2014         if (!read_oneliner(buf, rebase_path_strategy_opts(), 0))
2015                 return;
2016
2017         opts->xopts_nr = split_cmdline(buf->buf, (const char ***)&opts->xopts);
2018         for (i = 0; i < opts->xopts_nr; i++) {
2019                 const char *arg = opts->xopts[i];
2020
2021                 skip_prefix(arg, "--", &arg);
2022                 opts->xopts[i] = xstrdup(arg);
2023         }
2024 }
2025
2026 static int read_populate_opts(struct replay_opts *opts)
2027 {
2028         if (is_rebase_i(opts)) {
2029                 struct strbuf buf = STRBUF_INIT;
2030
2031                 if (read_oneliner(&buf, rebase_path_gpg_sign_opt(), 1)) {
2032                         if (!starts_with(buf.buf, "-S"))
2033                                 strbuf_reset(&buf);
2034                         else {
2035                                 free(opts->gpg_sign);
2036                                 opts->gpg_sign = xstrdup(buf.buf + 2);
2037                         }
2038                         strbuf_reset(&buf);
2039                 }
2040
2041                 if (read_oneliner(&buf, rebase_path_allow_rerere_autoupdate(), 1)) {
2042                         if (!strcmp(buf.buf, "--rerere-autoupdate"))
2043                                 opts->allow_rerere_auto = RERERE_AUTOUPDATE;
2044                         else if (!strcmp(buf.buf, "--no-rerere-autoupdate"))
2045                                 opts->allow_rerere_auto = RERERE_NOAUTOUPDATE;
2046                         strbuf_reset(&buf);
2047                 }
2048
2049                 if (file_exists(rebase_path_verbose()))
2050                         opts->verbose = 1;
2051
2052                 if (file_exists(rebase_path_signoff())) {
2053                         opts->allow_ff = 0;
2054                         opts->signoff = 1;
2055                 }
2056
2057                 read_strategy_opts(opts, &buf);
2058                 strbuf_release(&buf);
2059
2060                 if (read_oneliner(&opts->current_fixups,
2061                                   rebase_path_current_fixups(), 1)) {
2062                         const char *p = opts->current_fixups.buf;
2063                         opts->current_fixup_count = 1;
2064                         while ((p = strchr(p, '\n'))) {
2065                                 opts->current_fixup_count++;
2066                                 p++;
2067                         }
2068                 }
2069
2070                 return 0;
2071         }
2072
2073         if (!file_exists(git_path_opts_file()))
2074                 return 0;
2075         /*
2076          * The function git_parse_source(), called from git_config_from_file(),
2077          * may die() in case of a syntactically incorrect file. We do not care
2078          * about this case, though, because we wrote that file ourselves, so we
2079          * are pretty certain that it is syntactically correct.
2080          */
2081         if (git_config_from_file(populate_opts_cb, git_path_opts_file(), opts) < 0)
2082                 return error(_("malformed options sheet: '%s'"),
2083                         git_path_opts_file());
2084         return 0;
2085 }
2086
2087 static int walk_revs_populate_todo(struct todo_list *todo_list,
2088                                 struct replay_opts *opts)
2089 {
2090         enum todo_command command = opts->action == REPLAY_PICK ?
2091                 TODO_PICK : TODO_REVERT;
2092         const char *command_string = todo_command_info[command].str;
2093         struct commit *commit;
2094
2095         if (prepare_revs(opts))
2096                 return -1;
2097
2098         while ((commit = get_revision(opts->revs))) {
2099                 struct todo_item *item = append_new_todo(todo_list);
2100                 const char *commit_buffer = get_commit_buffer(commit, NULL);
2101                 const char *subject;
2102                 int subject_len;
2103
2104                 item->command = command;
2105                 item->commit = commit;
2106                 item->arg = NULL;
2107                 item->arg_len = 0;
2108                 item->offset_in_buf = todo_list->buf.len;
2109                 subject_len = find_commit_subject(commit_buffer, &subject);
2110                 strbuf_addf(&todo_list->buf, "%s %s %.*s\n", command_string,
2111                         short_commit_name(commit), subject_len, subject);
2112                 unuse_commit_buffer(commit, commit_buffer);
2113         }
2114         return 0;
2115 }
2116
2117 static int create_seq_dir(void)
2118 {
2119         if (file_exists(git_path_seq_dir())) {
2120                 error(_("a cherry-pick or revert is already in progress"));
2121                 advise(_("try \"git cherry-pick (--continue | --quit | --abort)\""));
2122                 return -1;
2123         } else if (mkdir(git_path_seq_dir(), 0777) < 0)
2124                 return error_errno(_("could not create sequencer directory '%s'"),
2125                                    git_path_seq_dir());
2126         return 0;
2127 }
2128
2129 static int save_head(const char *head)
2130 {
2131         struct lock_file head_lock = LOCK_INIT;
2132         struct strbuf buf = STRBUF_INIT;
2133         int fd;
2134         ssize_t written;
2135
2136         fd = hold_lock_file_for_update(&head_lock, git_path_head_file(), 0);
2137         if (fd < 0)
2138                 return error_errno(_("could not lock HEAD"));
2139         strbuf_addf(&buf, "%s\n", head);
2140         written = write_in_full(fd, buf.buf, buf.len);
2141         strbuf_release(&buf);
2142         if (written < 0) {
2143                 rollback_lock_file(&head_lock);
2144                 return error_errno(_("could not write to '%s'"),
2145                                    git_path_head_file());
2146         }
2147         if (commit_lock_file(&head_lock) < 0)
2148                 return error(_("failed to finalize '%s'"), git_path_head_file());
2149         return 0;
2150 }
2151
2152 static int rollback_is_safe(void)
2153 {
2154         struct strbuf sb = STRBUF_INIT;
2155         struct object_id expected_head, actual_head;
2156
2157         if (strbuf_read_file(&sb, git_path_abort_safety_file(), 0) >= 0) {
2158                 strbuf_trim(&sb);
2159                 if (get_oid_hex(sb.buf, &expected_head)) {
2160                         strbuf_release(&sb);
2161                         die(_("could not parse %s"), git_path_abort_safety_file());
2162                 }
2163                 strbuf_release(&sb);
2164         }
2165         else if (errno == ENOENT)
2166                 oidclr(&expected_head);
2167         else
2168                 die_errno(_("could not read '%s'"), git_path_abort_safety_file());
2169
2170         if (get_oid("HEAD", &actual_head))
2171                 oidclr(&actual_head);
2172
2173         return !oidcmp(&actual_head, &expected_head);
2174 }
2175
2176 static int reset_for_rollback(const struct object_id *oid)
2177 {
2178         const char *argv[4];    /* reset --merge <arg> + NULL */
2179
2180         argv[0] = "reset";
2181         argv[1] = "--merge";
2182         argv[2] = oid_to_hex(oid);
2183         argv[3] = NULL;
2184         return run_command_v_opt(argv, RUN_GIT_CMD);
2185 }
2186
2187 static int rollback_single_pick(void)
2188 {
2189         struct object_id head_oid;
2190
2191         if (!file_exists(git_path_cherry_pick_head()) &&
2192             !file_exists(git_path_revert_head()))
2193                 return error(_("no cherry-pick or revert in progress"));
2194         if (read_ref_full("HEAD", 0, &head_oid, NULL))
2195                 return error(_("cannot resolve HEAD"));
2196         if (is_null_oid(&head_oid))
2197                 return error(_("cannot abort from a branch yet to be born"));
2198         return reset_for_rollback(&head_oid);
2199 }
2200
2201 int sequencer_rollback(struct replay_opts *opts)
2202 {
2203         FILE *f;
2204         struct object_id oid;
2205         struct strbuf buf = STRBUF_INIT;
2206         const char *p;
2207
2208         f = fopen(git_path_head_file(), "r");
2209         if (!f && errno == ENOENT) {
2210                 /*
2211                  * There is no multiple-cherry-pick in progress.
2212                  * If CHERRY_PICK_HEAD or REVERT_HEAD indicates
2213                  * a single-cherry-pick in progress, abort that.
2214                  */
2215                 return rollback_single_pick();
2216         }
2217         if (!f)
2218                 return error_errno(_("cannot open '%s'"), git_path_head_file());
2219         if (strbuf_getline_lf(&buf, f)) {
2220                 error(_("cannot read '%s': %s"), git_path_head_file(),
2221                       ferror(f) ?  strerror(errno) : _("unexpected end of file"));
2222                 fclose(f);
2223                 goto fail;
2224         }
2225         fclose(f);
2226         if (parse_oid_hex(buf.buf, &oid, &p) || *p != '\0') {
2227                 error(_("stored pre-cherry-pick HEAD file '%s' is corrupt"),
2228                         git_path_head_file());
2229                 goto fail;
2230         }
2231         if (is_null_oid(&oid)) {
2232                 error(_("cannot abort from a branch yet to be born"));
2233                 goto fail;
2234         }
2235
2236         if (!rollback_is_safe()) {
2237                 /* Do not error, just do not rollback */
2238                 warning(_("You seem to have moved HEAD. "
2239                           "Not rewinding, check your HEAD!"));
2240         } else
2241         if (reset_for_rollback(&oid))
2242                 goto fail;
2243         strbuf_release(&buf);
2244         return sequencer_remove_state(opts);
2245 fail:
2246         strbuf_release(&buf);
2247         return -1;
2248 }
2249
2250 static int save_todo(struct todo_list *todo_list, struct replay_opts *opts)
2251 {
2252         struct lock_file todo_lock = LOCK_INIT;
2253         const char *todo_path = get_todo_path(opts);
2254         int next = todo_list->current, offset, fd;
2255
2256         /*
2257          * rebase -i writes "git-rebase-todo" without the currently executing
2258          * command, appending it to "done" instead.
2259          */
2260         if (is_rebase_i(opts))
2261                 next++;
2262
2263         fd = hold_lock_file_for_update(&todo_lock, todo_path, 0);
2264         if (fd < 0)
2265                 return error_errno(_("could not lock '%s'"), todo_path);
2266         offset = next < todo_list->nr ?
2267                 todo_list->items[next].offset_in_buf : todo_list->buf.len;
2268         if (write_in_full(fd, todo_list->buf.buf + offset,
2269                         todo_list->buf.len - offset) < 0)
2270                 return error_errno(_("could not write to '%s'"), todo_path);
2271         if (commit_lock_file(&todo_lock) < 0)
2272                 return error(_("failed to finalize '%s'"), todo_path);
2273
2274         if (is_rebase_i(opts)) {
2275                 const char *done_path = rebase_path_done();
2276                 int fd = open(done_path, O_CREAT | O_WRONLY | O_APPEND, 0666);
2277                 int prev_offset = !next ? 0 :
2278                         todo_list->items[next - 1].offset_in_buf;
2279
2280                 if (fd >= 0 && offset > prev_offset &&
2281                     write_in_full(fd, todo_list->buf.buf + prev_offset,
2282                                   offset - prev_offset) < 0) {
2283                         close(fd);
2284                         return error_errno(_("could not write to '%s'"),
2285                                            done_path);
2286                 }
2287                 if (fd >= 0)
2288                         close(fd);
2289         }
2290         return 0;
2291 }
2292
2293 static int save_opts(struct replay_opts *opts)
2294 {
2295         const char *opts_file = git_path_opts_file();
2296         int res = 0;
2297
2298         if (opts->no_commit)
2299                 res |= git_config_set_in_file_gently(opts_file, "options.no-commit", "true");
2300         if (opts->edit)
2301                 res |= git_config_set_in_file_gently(opts_file, "options.edit", "true");
2302         if (opts->signoff)
2303                 res |= git_config_set_in_file_gently(opts_file, "options.signoff", "true");
2304         if (opts->record_origin)
2305                 res |= git_config_set_in_file_gently(opts_file, "options.record-origin", "true");
2306         if (opts->allow_ff)
2307                 res |= git_config_set_in_file_gently(opts_file, "options.allow-ff", "true");
2308         if (opts->mainline) {
2309                 struct strbuf buf = STRBUF_INIT;
2310                 strbuf_addf(&buf, "%d", opts->mainline);
2311                 res |= git_config_set_in_file_gently(opts_file, "options.mainline", buf.buf);
2312                 strbuf_release(&buf);
2313         }
2314         if (opts->strategy)
2315                 res |= git_config_set_in_file_gently(opts_file, "options.strategy", opts->strategy);
2316         if (opts->gpg_sign)
2317                 res |= git_config_set_in_file_gently(opts_file, "options.gpg-sign", opts->gpg_sign);
2318         if (opts->xopts) {
2319                 int i;
2320                 for (i = 0; i < opts->xopts_nr; i++)
2321                         res |= git_config_set_multivar_in_file_gently(opts_file,
2322                                                         "options.strategy-option",
2323                                                         opts->xopts[i], "^$", 0);
2324         }
2325         if (opts->allow_rerere_auto)
2326                 res |= git_config_set_in_file_gently(opts_file, "options.allow-rerere-auto",
2327                                                      opts->allow_rerere_auto == RERERE_AUTOUPDATE ?
2328                                                      "true" : "false");
2329         return res;
2330 }
2331
2332 static int make_patch(struct commit *commit, struct replay_opts *opts)
2333 {
2334         struct strbuf buf = STRBUF_INIT;
2335         struct rev_info log_tree_opt;
2336         const char *subject, *p;
2337         int res = 0;
2338
2339         p = short_commit_name(commit);
2340         if (write_message(p, strlen(p), rebase_path_stopped_sha(), 1) < 0)
2341                 return -1;
2342         if (update_ref("rebase", "REBASE_HEAD", &commit->object.oid,
2343                        NULL, REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
2344                 res |= error(_("could not update %s"), "REBASE_HEAD");
2345
2346         strbuf_addf(&buf, "%s/patch", get_dir(opts));
2347         memset(&log_tree_opt, 0, sizeof(log_tree_opt));
2348         init_revisions(&log_tree_opt, NULL);
2349         log_tree_opt.abbrev = 0;
2350         log_tree_opt.diff = 1;
2351         log_tree_opt.diffopt.output_format = DIFF_FORMAT_PATCH;
2352         log_tree_opt.disable_stdin = 1;
2353         log_tree_opt.no_commit_id = 1;
2354         log_tree_opt.diffopt.file = fopen(buf.buf, "w");
2355         log_tree_opt.diffopt.use_color = GIT_COLOR_NEVER;
2356         if (!log_tree_opt.diffopt.file)
2357                 res |= error_errno(_("could not open '%s'"), buf.buf);
2358         else {
2359                 res |= log_tree_commit(&log_tree_opt, commit);
2360                 fclose(log_tree_opt.diffopt.file);
2361         }
2362         strbuf_reset(&buf);
2363
2364         strbuf_addf(&buf, "%s/message", get_dir(opts));
2365         if (!file_exists(buf.buf)) {
2366                 const char *commit_buffer = get_commit_buffer(commit, NULL);
2367                 find_commit_subject(commit_buffer, &subject);
2368                 res |= write_message(subject, strlen(subject), buf.buf, 1);
2369                 unuse_commit_buffer(commit, commit_buffer);
2370         }
2371         strbuf_release(&buf);
2372
2373         return res;
2374 }
2375
2376 static int intend_to_amend(void)
2377 {
2378         struct object_id head;
2379         char *p;
2380
2381         if (get_oid("HEAD", &head))
2382                 return error(_("cannot read HEAD"));
2383
2384         p = oid_to_hex(&head);
2385         return write_message(p, strlen(p), rebase_path_amend(), 1);
2386 }
2387
2388 static int error_with_patch(struct commit *commit,
2389         const char *subject, int subject_len,
2390         struct replay_opts *opts, int exit_code, int to_amend)
2391 {
2392         if (make_patch(commit, opts))
2393                 return -1;
2394
2395         if (to_amend) {
2396                 if (intend_to_amend())
2397                         return -1;
2398
2399                 fprintf(stderr, "You can amend the commit now, with\n"
2400                         "\n"
2401                         "  git commit --amend %s\n"
2402                         "\n"
2403                         "Once you are satisfied with your changes, run\n"
2404                         "\n"
2405                         "  git rebase --continue\n", gpg_sign_opt_quoted(opts));
2406         } else if (exit_code)
2407                 fprintf(stderr, "Could not apply %s... %.*s\n",
2408                         short_commit_name(commit), subject_len, subject);
2409
2410         return exit_code;
2411 }
2412
2413 static int error_failed_squash(struct commit *commit,
2414         struct replay_opts *opts, int subject_len, const char *subject)
2415 {
2416         if (copy_file(rebase_path_message(), rebase_path_squash_msg(), 0666))
2417                 return error(_("could not copy '%s' to '%s'"),
2418                         rebase_path_squash_msg(), rebase_path_message());
2419         unlink(git_path_merge_msg());
2420         if (copy_file(git_path_merge_msg(), rebase_path_message(), 0666))
2421                 return error(_("could not copy '%s' to '%s'"),
2422                              rebase_path_message(), git_path_merge_msg());
2423         return error_with_patch(commit, subject, subject_len, opts, 1, 0);
2424 }
2425
2426 static int do_exec(const char *command_line)
2427 {
2428         struct argv_array child_env = ARGV_ARRAY_INIT;
2429         const char *child_argv[] = { NULL, NULL };
2430         int dirty, status;
2431
2432         fprintf(stderr, "Executing: %s\n", command_line);
2433         child_argv[0] = command_line;
2434         argv_array_pushf(&child_env, "GIT_DIR=%s", absolute_path(get_git_dir()));
2435         status = run_command_v_opt_cd_env(child_argv, RUN_USING_SHELL, NULL,
2436                                           child_env.argv);
2437
2438         /* force re-reading of the cache */
2439         if (discard_cache() < 0 || read_cache() < 0)
2440                 return error(_("could not read index"));
2441
2442         dirty = require_clean_work_tree("rebase", NULL, 1, 1);
2443
2444         if (status) {
2445                 warning(_("execution failed: %s\n%s"
2446                           "You can fix the problem, and then run\n"
2447                           "\n"
2448                           "  git rebase --continue\n"
2449                           "\n"),
2450                         command_line,
2451                         dirty ? N_("and made changes to the index and/or the "
2452                                 "working tree\n") : "");
2453                 if (status == 127)
2454                         /* command not found */
2455                         status = 1;
2456         } else if (dirty) {
2457                 warning(_("execution succeeded: %s\nbut "
2458                           "left changes to the index and/or the working tree\n"
2459                           "Commit or stash your changes, and then run\n"
2460                           "\n"
2461                           "  git rebase --continue\n"
2462                           "\n"), command_line);
2463                 status = 1;
2464         }
2465
2466         argv_array_clear(&child_env);
2467
2468         return status;
2469 }
2470
2471 static int is_final_fixup(struct todo_list *todo_list)
2472 {
2473         int i = todo_list->current;
2474
2475         if (!is_fixup(todo_list->items[i].command))
2476                 return 0;
2477
2478         while (++i < todo_list->nr)
2479                 if (is_fixup(todo_list->items[i].command))
2480                         return 0;
2481                 else if (!is_noop(todo_list->items[i].command))
2482                         break;
2483         return 1;
2484 }
2485
2486 static enum todo_command peek_command(struct todo_list *todo_list, int offset)
2487 {
2488         int i;
2489
2490         for (i = todo_list->current + offset; i < todo_list->nr; i++)
2491                 if (!is_noop(todo_list->items[i].command))
2492                         return todo_list->items[i].command;
2493
2494         return -1;
2495 }
2496
2497 static int apply_autostash(struct replay_opts *opts)
2498 {
2499         struct strbuf stash_sha1 = STRBUF_INIT;
2500         struct child_process child = CHILD_PROCESS_INIT;
2501         int ret = 0;
2502
2503         if (!read_oneliner(&stash_sha1, rebase_path_autostash(), 1)) {
2504                 strbuf_release(&stash_sha1);
2505                 return 0;
2506         }
2507         strbuf_trim(&stash_sha1);
2508
2509         child.git_cmd = 1;
2510         child.no_stdout = 1;
2511         child.no_stderr = 1;
2512         argv_array_push(&child.args, "stash");
2513         argv_array_push(&child.args, "apply");
2514         argv_array_push(&child.args, stash_sha1.buf);
2515         if (!run_command(&child))
2516                 fprintf(stderr, _("Applied autostash.\n"));
2517         else {
2518                 struct child_process store = CHILD_PROCESS_INIT;
2519
2520                 store.git_cmd = 1;
2521                 argv_array_push(&store.args, "stash");
2522                 argv_array_push(&store.args, "store");
2523                 argv_array_push(&store.args, "-m");
2524                 argv_array_push(&store.args, "autostash");
2525                 argv_array_push(&store.args, "-q");
2526                 argv_array_push(&store.args, stash_sha1.buf);
2527                 if (run_command(&store))
2528                         ret = error(_("cannot store %s"), stash_sha1.buf);
2529                 else
2530                         fprintf(stderr,
2531                                 _("Applying autostash resulted in conflicts.\n"
2532                                   "Your changes are safe in the stash.\n"
2533                                   "You can run \"git stash pop\" or"
2534                                   " \"git stash drop\" at any time.\n"));
2535         }
2536
2537         strbuf_release(&stash_sha1);
2538         return ret;
2539 }
2540
2541 static const char *reflog_message(struct replay_opts *opts,
2542         const char *sub_action, const char *fmt, ...)
2543 {
2544         va_list ap;
2545         static struct strbuf buf = STRBUF_INIT;
2546
2547         va_start(ap, fmt);
2548         strbuf_reset(&buf);
2549         strbuf_addstr(&buf, action_name(opts));
2550         if (sub_action)
2551                 strbuf_addf(&buf, " (%s)", sub_action);
2552         if (fmt) {
2553                 strbuf_addstr(&buf, ": ");
2554                 strbuf_vaddf(&buf, fmt, ap);
2555         }
2556         va_end(ap);
2557
2558         return buf.buf;
2559 }
2560
2561 static int pick_commits(struct todo_list *todo_list, struct replay_opts *opts)
2562 {
2563         int res = 0;
2564
2565         setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
2566         if (opts->allow_ff)
2567                 assert(!(opts->signoff || opts->no_commit ||
2568                                 opts->record_origin || opts->edit));
2569         if (read_and_refresh_cache(opts))
2570                 return -1;
2571
2572         while (todo_list->current < todo_list->nr) {
2573                 struct todo_item *item = todo_list->items + todo_list->current;
2574                 if (save_todo(todo_list, opts))
2575                         return -1;
2576                 if (is_rebase_i(opts)) {
2577                         if (item->command != TODO_COMMENT) {
2578                                 FILE *f = fopen(rebase_path_msgnum(), "w");
2579
2580                                 todo_list->done_nr++;
2581
2582                                 if (f) {
2583                                         fprintf(f, "%d\n", todo_list->done_nr);
2584                                         fclose(f);
2585                                 }
2586                                 fprintf(stderr, "Rebasing (%d/%d)%s",
2587                                         todo_list->done_nr,
2588                                         todo_list->total_nr,
2589                                         opts->verbose ? "\n" : "\r");
2590                         }
2591                         unlink(rebase_path_message());
2592                         unlink(rebase_path_author_script());
2593                         unlink(rebase_path_stopped_sha());
2594                         unlink(rebase_path_amend());
2595                         delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
2596                 }
2597                 if (item->command <= TODO_SQUASH) {
2598                         if (is_rebase_i(opts))
2599                                 setenv("GIT_REFLOG_ACTION", reflog_message(opts,
2600                                         command_to_string(item->command), NULL),
2601                                         1);
2602                         res = do_pick_commit(item->command, item->commit,
2603                                         opts, is_final_fixup(todo_list));
2604                         if (is_rebase_i(opts) && res < 0) {
2605                                 /* Reschedule */
2606                                 todo_list->current--;
2607                                 if (save_todo(todo_list, opts))
2608                                         return -1;
2609                         }
2610                         if (item->command == TODO_EDIT) {
2611                                 struct commit *commit = item->commit;
2612                                 if (!res)
2613                                         fprintf(stderr,
2614                                                 _("Stopped at %s...  %.*s\n"),
2615                                                 short_commit_name(commit),
2616                                                 item->arg_len, item->arg);
2617                                 return error_with_patch(commit,
2618                                         item->arg, item->arg_len, opts, res,
2619                                         !res);
2620                         }
2621                         if (is_rebase_i(opts) && !res)
2622                                 record_in_rewritten(&item->commit->object.oid,
2623                                         peek_command(todo_list, 1));
2624                         if (res && is_fixup(item->command)) {
2625                                 if (res == 1)
2626                                         intend_to_amend();
2627                                 return error_failed_squash(item->commit, opts,
2628                                         item->arg_len, item->arg);
2629                         } else if (res && is_rebase_i(opts))
2630                                 return res | error_with_patch(item->commit,
2631                                         item->arg, item->arg_len, opts, res,
2632                                         item->command == TODO_REWORD);
2633                 } else if (item->command == TODO_EXEC) {
2634                         char *end_of_arg = (char *)(item->arg + item->arg_len);
2635                         int saved = *end_of_arg;
2636                         struct stat st;
2637
2638                         *end_of_arg = '\0';
2639                         res = do_exec(item->arg);
2640                         *end_of_arg = saved;
2641
2642                         /* Reread the todo file if it has changed. */
2643                         if (res)
2644                                 ; /* fall through */
2645                         else if (stat(get_todo_path(opts), &st))
2646                                 res = error_errno(_("could not stat '%s'"),
2647                                                   get_todo_path(opts));
2648                         else if (match_stat_data(&todo_list->stat, &st)) {
2649                                 todo_list_release(todo_list);
2650                                 if (read_populate_todo(todo_list, opts))
2651                                         res = -1; /* message was printed */
2652                                 /* `current` will be incremented below */
2653                                 todo_list->current = -1;
2654                         }
2655                 } else if (!is_noop(item->command))
2656                         return error(_("unknown command %d"), item->command);
2657
2658                 todo_list->current++;
2659                 if (res)
2660                         return res;
2661         }
2662
2663         if (is_rebase_i(opts)) {
2664                 struct strbuf head_ref = STRBUF_INIT, buf = STRBUF_INIT;
2665                 struct stat st;
2666
2667                 /* Stopped in the middle, as planned? */
2668                 if (todo_list->current < todo_list->nr)
2669                         return 0;
2670
2671                 if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
2672                                 starts_with(head_ref.buf, "refs/")) {
2673                         const char *msg;
2674                         struct object_id head, orig;
2675                         int res;
2676
2677                         if (get_oid("HEAD", &head)) {
2678                                 res = error(_("cannot read HEAD"));
2679 cleanup_head_ref:
2680                                 strbuf_release(&head_ref);
2681                                 strbuf_release(&buf);
2682                                 return res;
2683                         }
2684                         if (!read_oneliner(&buf, rebase_path_orig_head(), 0) ||
2685                                         get_oid_hex(buf.buf, &orig)) {
2686                                 res = error(_("could not read orig-head"));
2687                                 goto cleanup_head_ref;
2688                         }
2689                         strbuf_reset(&buf);
2690                         if (!read_oneliner(&buf, rebase_path_onto(), 0)) {
2691                                 res = error(_("could not read 'onto'"));
2692                                 goto cleanup_head_ref;
2693                         }
2694                         msg = reflog_message(opts, "finish", "%s onto %s",
2695                                 head_ref.buf, buf.buf);
2696                         if (update_ref(msg, head_ref.buf, &head, &orig,
2697                                        REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR)) {
2698                                 res = error(_("could not update %s"),
2699                                         head_ref.buf);
2700                                 goto cleanup_head_ref;
2701                         }
2702                         msg = reflog_message(opts, "finish", "returning to %s",
2703                                 head_ref.buf);
2704                         if (create_symref("HEAD", head_ref.buf, msg)) {
2705                                 res = error(_("could not update HEAD to %s"),
2706                                         head_ref.buf);
2707                                 goto cleanup_head_ref;
2708                         }
2709                         strbuf_reset(&buf);
2710                 }
2711
2712                 if (opts->verbose) {
2713                         struct rev_info log_tree_opt;
2714                         struct object_id orig, head;
2715
2716                         memset(&log_tree_opt, 0, sizeof(log_tree_opt));
2717                         init_revisions(&log_tree_opt, NULL);
2718                         log_tree_opt.diff = 1;
2719                         log_tree_opt.diffopt.output_format =
2720                                 DIFF_FORMAT_DIFFSTAT;
2721                         log_tree_opt.disable_stdin = 1;
2722
2723                         if (read_oneliner(&buf, rebase_path_orig_head(), 0) &&
2724                             !get_oid(buf.buf, &orig) &&
2725                             !get_oid("HEAD", &head)) {
2726                                 diff_tree_oid(&orig, &head, "",
2727                                               &log_tree_opt.diffopt);
2728                                 log_tree_diff_flush(&log_tree_opt);
2729                         }
2730                 }
2731                 flush_rewritten_pending();
2732                 if (!stat(rebase_path_rewritten_list(), &st) &&
2733                                 st.st_size > 0) {
2734                         struct child_process child = CHILD_PROCESS_INIT;
2735                         const char *post_rewrite_hook =
2736                                 find_hook("post-rewrite");
2737
2738                         child.in = open(rebase_path_rewritten_list(), O_RDONLY);
2739                         child.git_cmd = 1;
2740                         argv_array_push(&child.args, "notes");
2741                         argv_array_push(&child.args, "copy");
2742                         argv_array_push(&child.args, "--for-rewrite=rebase");
2743                         /* we don't care if this copying failed */
2744                         run_command(&child);
2745
2746                         if (post_rewrite_hook) {
2747                                 struct child_process hook = CHILD_PROCESS_INIT;
2748
2749                                 hook.in = open(rebase_path_rewritten_list(),
2750                                         O_RDONLY);
2751                                 hook.stdout_to_stderr = 1;
2752                                 argv_array_push(&hook.args, post_rewrite_hook);
2753                                 argv_array_push(&hook.args, "rebase");
2754                                 /* we don't care if this hook failed */
2755                                 run_command(&hook);
2756                         }
2757                 }
2758                 apply_autostash(opts);
2759
2760                 fprintf(stderr, "Successfully rebased and updated %s.\n",
2761                         head_ref.buf);
2762
2763                 strbuf_release(&buf);
2764                 strbuf_release(&head_ref);
2765         }
2766
2767         /*
2768          * Sequence of picks finished successfully; cleanup by
2769          * removing the .git/sequencer directory
2770          */
2771         return sequencer_remove_state(opts);
2772 }
2773
2774 static int continue_single_pick(void)
2775 {
2776         const char *argv[] = { "commit", NULL };
2777
2778         if (!file_exists(git_path_cherry_pick_head()) &&
2779             !file_exists(git_path_revert_head()))
2780                 return error(_("no cherry-pick or revert in progress"));
2781         return run_command_v_opt(argv, RUN_GIT_CMD);
2782 }
2783
2784 static int commit_staged_changes(struct replay_opts *opts,
2785                                  struct todo_list *todo_list)
2786 {
2787         unsigned int flags = ALLOW_EMPTY | EDIT_MSG;
2788         unsigned int final_fixup = 0, is_clean;
2789
2790         if (has_unstaged_changes(1))
2791                 return error(_("cannot rebase: You have unstaged changes."));
2792
2793         is_clean = !has_uncommitted_changes(0);
2794
2795         if (file_exists(rebase_path_amend())) {
2796                 struct strbuf rev = STRBUF_INIT;
2797                 struct object_id head, to_amend;
2798
2799                 if (get_oid("HEAD", &head))
2800                         return error(_("cannot amend non-existing commit"));
2801                 if (!read_oneliner(&rev, rebase_path_amend(), 0))
2802                         return error(_("invalid file: '%s'"), rebase_path_amend());
2803                 if (get_oid_hex(rev.buf, &to_amend))
2804                         return error(_("invalid contents: '%s'"),
2805                                 rebase_path_amend());
2806                 if (!is_clean && oidcmp(&head, &to_amend))
2807                         return error(_("\nYou have uncommitted changes in your "
2808                                        "working tree. Please, commit them\n"
2809                                        "first and then run 'git rebase "
2810                                        "--continue' again."));
2811                 /*
2812                  * When skipping a failed fixup/squash, we need to edit the
2813                  * commit message, the current fixup list and count, and if it
2814                  * was the last fixup/squash in the chain, we need to clean up
2815                  * the commit message and if there was a squash, let the user
2816                  * edit it.
2817                  */
2818                 if (is_clean && !oidcmp(&head, &to_amend) &&
2819                     opts->current_fixup_count > 0 &&
2820                     file_exists(rebase_path_stopped_sha())) {
2821                         const char *p = opts->current_fixups.buf;
2822                         int len = opts->current_fixups.len;
2823
2824                         opts->current_fixup_count--;
2825                         if (!len)
2826                                 BUG("Incorrect current_fixups:\n%s", p);
2827                         while (len && p[len - 1] != '\n')
2828                                 len--;
2829                         strbuf_setlen(&opts->current_fixups, len);
2830                         if (write_message(p, len, rebase_path_current_fixups(),
2831                                           0) < 0)
2832                                 return error(_("could not write file: '%s'"),
2833                                              rebase_path_current_fixups());
2834
2835                         /*
2836                          * If a fixup/squash in a fixup/squash chain failed, the
2837                          * commit message is already correct, no need to commit
2838                          * it again.
2839                          *
2840                          * Only if it is the final command in the fixup/squash
2841                          * chain, and only if the chain is longer than a single
2842                          * fixup/squash command (which was just skipped), do we
2843                          * actually need to re-commit with a cleaned up commit
2844                          * message.
2845                          */
2846                         if (opts->current_fixup_count > 0 &&
2847                             !is_fixup(peek_command(todo_list, 0))) {
2848                                 final_fixup = 1;
2849                                 /*
2850                                  * If there was not a single "squash" in the
2851                                  * chain, we only need to clean up the commit
2852                                  * message, no need to bother the user with
2853                                  * opening the commit message in the editor.
2854                                  */
2855                                 if (!starts_with(p, "squash ") &&
2856                                     !strstr(p, "\nsquash "))
2857                                         flags = (flags & ~EDIT_MSG) | CLEANUP_MSG;
2858                         } else if (is_fixup(peek_command(todo_list, 0))) {
2859                                 /*
2860                                  * We need to update the squash message to skip
2861                                  * the latest commit message.
2862                                  */
2863                                 struct commit *commit;
2864                                 const char *path = rebase_path_squash_msg();
2865
2866                                 if (parse_head(&commit) ||
2867                                     !(p = get_commit_buffer(commit, NULL)) ||
2868                                     write_message(p, strlen(p), path, 0)) {
2869                                         unuse_commit_buffer(commit, p);
2870                                         return error(_("could not write file: "
2871                                                        "'%s'"), path);
2872                                 }
2873                                 unuse_commit_buffer(commit, p);
2874                         }
2875                 }
2876
2877                 strbuf_release(&rev);
2878                 flags |= AMEND_MSG;
2879         }
2880
2881         if (is_clean) {
2882                 const char *cherry_pick_head = git_path_cherry_pick_head();
2883
2884                 if (file_exists(cherry_pick_head) && unlink(cherry_pick_head))
2885                         return error(_("could not remove CHERRY_PICK_HEAD"));
2886                 if (!final_fixup)
2887                         return 0;
2888         }
2889
2890         if (run_git_commit(final_fixup ? NULL : rebase_path_message(),
2891                            opts, flags))
2892                 return error(_("could not commit staged changes."));
2893         unlink(rebase_path_amend());
2894         if (final_fixup) {
2895                 unlink(rebase_path_fixup_msg());
2896                 unlink(rebase_path_squash_msg());
2897         }
2898         if (opts->current_fixup_count > 0) {
2899                 /*
2900                  * Whether final fixup or not, we just cleaned up the commit
2901                  * message...
2902                  */
2903                 unlink(rebase_path_current_fixups());
2904                 strbuf_reset(&opts->current_fixups);
2905                 opts->current_fixup_count = 0;
2906         }
2907         return 0;
2908 }
2909
2910 int sequencer_continue(struct replay_opts *opts)
2911 {
2912         struct todo_list todo_list = TODO_LIST_INIT;
2913         int res;
2914
2915         if (read_and_refresh_cache(opts))
2916                 return -1;
2917
2918         if (read_populate_opts(opts))
2919                 return -1;
2920         if (is_rebase_i(opts)) {
2921                 if ((res = read_populate_todo(&todo_list, opts)))
2922                         goto release_todo_list;
2923                 if (commit_staged_changes(opts, &todo_list))
2924                         return -1;
2925         } else if (!file_exists(get_todo_path(opts)))
2926                 return continue_single_pick();
2927         else if ((res = read_populate_todo(&todo_list, opts)))
2928                 goto release_todo_list;
2929
2930         if (!is_rebase_i(opts)) {
2931                 /* Verify that the conflict has been resolved */
2932                 if (file_exists(git_path_cherry_pick_head()) ||
2933                     file_exists(git_path_revert_head())) {
2934                         res = continue_single_pick();
2935                         if (res)
2936                                 goto release_todo_list;
2937                 }
2938                 if (index_differs_from("HEAD", NULL, 0)) {
2939                         res = error_dirty_index(opts);
2940                         goto release_todo_list;
2941                 }
2942                 todo_list.current++;
2943         } else if (file_exists(rebase_path_stopped_sha())) {
2944                 struct strbuf buf = STRBUF_INIT;
2945                 struct object_id oid;
2946
2947                 if (read_oneliner(&buf, rebase_path_stopped_sha(), 1) &&
2948                     !get_oid_committish(buf.buf, &oid))
2949                         record_in_rewritten(&oid, peek_command(&todo_list, 0));
2950                 strbuf_release(&buf);
2951         }
2952
2953         res = pick_commits(&todo_list, opts);
2954 release_todo_list:
2955         todo_list_release(&todo_list);
2956         return res;
2957 }
2958
2959 static int single_pick(struct commit *cmit, struct replay_opts *opts)
2960 {
2961         setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
2962         return do_pick_commit(opts->action == REPLAY_PICK ?
2963                 TODO_PICK : TODO_REVERT, cmit, opts, 0);
2964 }
2965
2966 int sequencer_pick_revisions(struct replay_opts *opts)
2967 {
2968         struct todo_list todo_list = TODO_LIST_INIT;
2969         struct object_id oid;
2970         int i, res;
2971
2972         assert(opts->revs);
2973         if (read_and_refresh_cache(opts))
2974                 return -1;
2975
2976         for (i = 0; i < opts->revs->pending.nr; i++) {
2977                 struct object_id oid;
2978                 const char *name = opts->revs->pending.objects[i].name;
2979
2980                 /* This happens when using --stdin. */
2981                 if (!strlen(name))
2982                         continue;
2983
2984                 if (!get_oid(name, &oid)) {
2985                         if (!lookup_commit_reference_gently(&oid, 1)) {
2986                                 enum object_type type = oid_object_info(the_repository,
2987                                                                         &oid,
2988                                                                         NULL);
2989                                 return error(_("%s: can't cherry-pick a %s"),
2990                                         name, type_name(type));
2991                         }
2992                 } else
2993                         return error(_("%s: bad revision"), name);
2994         }
2995
2996         /*
2997          * If we were called as "git cherry-pick <commit>", just
2998          * cherry-pick/revert it, set CHERRY_PICK_HEAD /
2999          * REVERT_HEAD, and don't touch the sequencer state.
3000          * This means it is possible to cherry-pick in the middle
3001          * of a cherry-pick sequence.
3002          */
3003         if (opts->revs->cmdline.nr == 1 &&
3004             opts->revs->cmdline.rev->whence == REV_CMD_REV &&
3005             opts->revs->no_walk &&
3006             !opts->revs->cmdline.rev->flags) {
3007                 struct commit *cmit;
3008                 if (prepare_revision_walk(opts->revs))
3009                         return error(_("revision walk setup failed"));
3010                 cmit = get_revision(opts->revs);
3011                 if (!cmit || get_revision(opts->revs))
3012                         return error("BUG: expected exactly one commit from walk");
3013                 return single_pick(cmit, opts);
3014         }
3015
3016         /*
3017          * Start a new cherry-pick/ revert sequence; but
3018          * first, make sure that an existing one isn't in
3019          * progress
3020          */
3021
3022         if (walk_revs_populate_todo(&todo_list, opts) ||
3023                         create_seq_dir() < 0)
3024                 return -1;
3025         if (get_oid("HEAD", &oid) && (opts->action == REPLAY_REVERT))
3026                 return error(_("can't revert as initial commit"));
3027         if (save_head(oid_to_hex(&oid)))
3028                 return -1;
3029         if (save_opts(opts))
3030                 return -1;
3031         update_abort_safety_file();
3032         res = pick_commits(&todo_list, opts);
3033         todo_list_release(&todo_list);
3034         return res;
3035 }
3036
3037 void append_signoff(struct strbuf *msgbuf, int ignore_footer, unsigned flag)
3038 {
3039         unsigned no_dup_sob = flag & APPEND_SIGNOFF_DEDUP;
3040         struct strbuf sob = STRBUF_INIT;
3041         int has_footer;
3042
3043         strbuf_addstr(&sob, sign_off_header);
3044         strbuf_addstr(&sob, fmt_name(getenv("GIT_COMMITTER_NAME"),
3045                                 getenv("GIT_COMMITTER_EMAIL")));
3046         strbuf_addch(&sob, '\n');
3047
3048         if (!ignore_footer)
3049                 strbuf_complete_line(msgbuf);
3050
3051         /*
3052          * If the whole message buffer is equal to the sob, pretend that we
3053          * found a conforming footer with a matching sob
3054          */
3055         if (msgbuf->len - ignore_footer == sob.len &&
3056             !strncmp(msgbuf->buf, sob.buf, sob.len))
3057                 has_footer = 3;
3058         else
3059                 has_footer = has_conforming_footer(msgbuf, &sob, ignore_footer);
3060
3061         if (!has_footer) {
3062                 const char *append_newlines = NULL;
3063                 size_t len = msgbuf->len - ignore_footer;
3064
3065                 if (!len) {
3066                         /*
3067                          * The buffer is completely empty.  Leave foom for
3068                          * the title and body to be filled in by the user.
3069                          */
3070                         append_newlines = "\n\n";
3071                 } else if (len == 1) {
3072                         /*
3073                          * Buffer contains a single newline.  Add another
3074                          * so that we leave room for the title and body.
3075                          */
3076                         append_newlines = "\n";
3077                 } else if (msgbuf->buf[len - 2] != '\n') {
3078                         /*
3079                          * Buffer ends with a single newline.  Add another
3080                          * so that there is an empty line between the message
3081                          * body and the sob.
3082                          */
3083                         append_newlines = "\n";
3084                 } /* else, the buffer already ends with two newlines. */
3085
3086                 if (append_newlines)
3087                         strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
3088                                 append_newlines, strlen(append_newlines));
3089         }
3090
3091         if (has_footer != 3 && (!no_dup_sob || has_footer != 2))
3092                 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
3093                                 sob.buf, sob.len);
3094
3095         strbuf_release(&sob);
3096 }
3097
3098 int sequencer_make_script(FILE *out, int argc, const char **argv,
3099                           unsigned flags)
3100 {
3101         char *format = NULL;
3102         struct pretty_print_context pp = {0};
3103         struct strbuf buf = STRBUF_INIT;
3104         struct rev_info revs;
3105         struct commit *commit;
3106         int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
3107         const char *insn = flags & TODO_LIST_ABBREVIATE_CMDS ? "p" : "pick";
3108
3109         init_revisions(&revs, NULL);
3110         revs.verbose_header = 1;
3111         revs.max_parents = 1;
3112         revs.cherry_mark = 1;
3113         revs.limited = 1;
3114         revs.reverse = 1;
3115         revs.right_only = 1;
3116         revs.sort_order = REV_SORT_IN_GRAPH_ORDER;
3117         revs.topo_order = 1;
3118
3119         revs.pretty_given = 1;
3120         git_config_get_string("rebase.instructionFormat", &format);
3121         if (!format || !*format) {
3122                 free(format);
3123                 format = xstrdup("%s");
3124         }
3125         get_commit_format(format, &revs);
3126         free(format);
3127         pp.fmt = revs.commit_format;
3128         pp.output_encoding = get_log_output_encoding();
3129
3130         if (setup_revisions(argc, argv, &revs, NULL) > 1)
3131                 return error(_("make_script: unhandled options"));
3132
3133         if (prepare_revision_walk(&revs) < 0)
3134                 return error(_("make_script: error preparing revisions"));
3135
3136         while ((commit = get_revision(&revs))) {
3137                 int is_empty  = is_original_commit_empty(commit);
3138
3139                 if (!is_empty && (commit->object.flags & PATCHSAME))
3140                         continue;
3141                 strbuf_reset(&buf);
3142                 if (!keep_empty && is_empty)
3143                         strbuf_addf(&buf, "%c ", comment_line_char);
3144                 strbuf_addf(&buf, "%s %s ", insn,
3145                             oid_to_hex(&commit->object.oid));
3146                 pretty_print_commit(&pp, commit, &buf);
3147                 strbuf_addch(&buf, '\n');
3148                 fputs(buf.buf, out);
3149         }
3150         strbuf_release(&buf);
3151         return 0;
3152 }
3153
3154 /*
3155  * Add commands after pick and (series of) squash/fixup commands
3156  * in the todo list.
3157  */
3158 int sequencer_add_exec_commands(const char *commands)
3159 {
3160         const char *todo_file = rebase_path_todo();
3161         struct todo_list todo_list = TODO_LIST_INIT;
3162         struct todo_item *item;
3163         struct strbuf *buf = &todo_list.buf;
3164         size_t offset = 0, commands_len = strlen(commands);
3165         int i, first;
3166
3167         if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0)
3168                 return error(_("could not read '%s'."), todo_file);
3169
3170         if (parse_insn_buffer(todo_list.buf.buf, &todo_list)) {
3171                 todo_list_release(&todo_list);
3172                 return error(_("unusable todo list: '%s'"), todo_file);
3173         }
3174
3175         first = 1;
3176         /* insert <commands> before every pick except the first one */
3177         for (item = todo_list.items, i = 0; i < todo_list.nr; i++, item++) {
3178                 if (item->command == TODO_PICK && !first) {
3179                         strbuf_insert(buf, item->offset_in_buf + offset,
3180                                       commands, commands_len);
3181                         offset += commands_len;
3182                 }
3183                 first = 0;
3184         }
3185
3186         /* append final <commands> */
3187         strbuf_add(buf, commands, commands_len);
3188
3189         i = write_message(buf->buf, buf->len, todo_file, 0);
3190         todo_list_release(&todo_list);
3191         return i;
3192 }
3193
3194 int transform_todos(unsigned flags)
3195 {
3196         const char *todo_file = rebase_path_todo();
3197         struct todo_list todo_list = TODO_LIST_INIT;
3198         struct strbuf buf = STRBUF_INIT;
3199         struct todo_item *item;
3200         int i;
3201
3202         if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0)
3203                 return error(_("could not read '%s'."), todo_file);
3204
3205         if (parse_insn_buffer(todo_list.buf.buf, &todo_list)) {
3206                 todo_list_release(&todo_list);
3207                 return error(_("unusable todo list: '%s'"), todo_file);
3208         }
3209
3210         for (item = todo_list.items, i = 0; i < todo_list.nr; i++, item++) {
3211                 /* if the item is not a command write it and continue */
3212                 if (item->command >= TODO_COMMENT) {
3213                         strbuf_addf(&buf, "%.*s\n", item->arg_len, item->arg);
3214                         continue;
3215                 }
3216
3217                 /* add command to the buffer */
3218                 if (flags & TODO_LIST_ABBREVIATE_CMDS)
3219                         strbuf_addch(&buf, command_to_char(item->command));
3220                 else
3221                         strbuf_addstr(&buf, command_to_string(item->command));
3222
3223                 /* add commit id */
3224                 if (item->commit) {
3225                         const char *oid = flags & TODO_LIST_SHORTEN_IDS ?
3226                                           short_commit_name(item->commit) :
3227                                           oid_to_hex(&item->commit->object.oid);
3228
3229                         strbuf_addf(&buf, " %s", oid);
3230                 }
3231                 /* add all the rest */
3232                 if (!item->arg_len)
3233                         strbuf_addch(&buf, '\n');
3234                 else
3235                         strbuf_addf(&buf, " %.*s\n", item->arg_len, item->arg);
3236         }
3237
3238         i = write_message(buf.buf, buf.len, todo_file, 0);
3239         todo_list_release(&todo_list);
3240         return i;
3241 }
3242
3243 enum check_level {
3244         CHECK_IGNORE = 0, CHECK_WARN, CHECK_ERROR
3245 };
3246
3247 static enum check_level get_missing_commit_check_level(void)
3248 {
3249         const char *value;
3250
3251         if (git_config_get_value("rebase.missingcommitscheck", &value) ||
3252                         !strcasecmp("ignore", value))
3253                 return CHECK_IGNORE;
3254         if (!strcasecmp("warn", value))
3255                 return CHECK_WARN;
3256         if (!strcasecmp("error", value))
3257                 return CHECK_ERROR;
3258         warning(_("unrecognized setting %s for option "
3259                   "rebase.missingCommitsCheck. Ignoring."), value);
3260         return CHECK_IGNORE;
3261 }
3262
3263 /*
3264  * Check if the user dropped some commits by mistake
3265  * Behaviour determined by rebase.missingCommitsCheck.
3266  * Check if there is an unrecognized command or a
3267  * bad SHA-1 in a command.
3268  */
3269 int check_todo_list(void)
3270 {
3271         enum check_level check_level = get_missing_commit_check_level();
3272         struct strbuf todo_file = STRBUF_INIT;
3273         struct todo_list todo_list = TODO_LIST_INIT;
3274         struct strbuf missing = STRBUF_INIT;
3275         int advise_to_edit_todo = 0, res = 0, i;
3276
3277         strbuf_addstr(&todo_file, rebase_path_todo());
3278         if (strbuf_read_file_or_whine(&todo_list.buf, todo_file.buf) < 0) {
3279                 res = -1;
3280                 goto leave_check;
3281         }
3282         advise_to_edit_todo = res =
3283                 parse_insn_buffer(todo_list.buf.buf, &todo_list);
3284
3285         if (res || check_level == CHECK_IGNORE)
3286                 goto leave_check;
3287
3288         /* Mark the commits in git-rebase-todo as seen */
3289         for (i = 0; i < todo_list.nr; i++) {
3290                 struct commit *commit = todo_list.items[i].commit;
3291                 if (commit)
3292                         commit->util = (void *)1;
3293         }
3294
3295         todo_list_release(&todo_list);
3296         strbuf_addstr(&todo_file, ".backup");
3297         if (strbuf_read_file_or_whine(&todo_list.buf, todo_file.buf) < 0) {
3298                 res = -1;
3299                 goto leave_check;
3300         }
3301         strbuf_release(&todo_file);
3302         res = !!parse_insn_buffer(todo_list.buf.buf, &todo_list);
3303
3304         /* Find commits in git-rebase-todo.backup yet unseen */
3305         for (i = todo_list.nr - 1; i >= 0; i--) {
3306                 struct todo_item *item = todo_list.items + i;
3307                 struct commit *commit = item->commit;
3308                 if (commit && !commit->util) {
3309                         strbuf_addf(&missing, " - %s %.*s\n",
3310                                     short_commit_name(commit),
3311                                     item->arg_len, item->arg);
3312                         commit->util = (void *)1;
3313                 }
3314         }
3315
3316         /* Warn about missing commits */
3317         if (!missing.len)
3318                 goto leave_check;
3319
3320         if (check_level == CHECK_ERROR)
3321                 advise_to_edit_todo = res = 1;
3322
3323         fprintf(stderr,
3324                 _("Warning: some commits may have been dropped accidentally.\n"
3325                 "Dropped commits (newer to older):\n"));
3326
3327         /* Make the list user-friendly and display */
3328         fputs(missing.buf, stderr);
3329         strbuf_release(&missing);
3330
3331         fprintf(stderr, _("To avoid this message, use \"drop\" to "
3332                 "explicitly remove a commit.\n\n"
3333                 "Use 'git config rebase.missingCommitsCheck' to change "
3334                 "the level of warnings.\n"
3335                 "The possible behaviours are: ignore, warn, error.\n\n"));
3336
3337 leave_check:
3338         strbuf_release(&todo_file);
3339         todo_list_release(&todo_list);
3340
3341         if (advise_to_edit_todo)
3342                 fprintf(stderr,
3343                         _("You can fix this with 'git rebase --edit-todo' "
3344                           "and then run 'git rebase --continue'.\n"
3345                           "Or you can abort the rebase with 'git rebase"
3346                           " --abort'.\n"));
3347
3348         return res;
3349 }
3350
3351 static int rewrite_file(const char *path, const char *buf, size_t len)
3352 {
3353         int rc = 0;
3354         int fd = open(path, O_WRONLY | O_TRUNC);
3355         if (fd < 0)
3356                 return error_errno(_("could not open '%s' for writing"), path);
3357         if (write_in_full(fd, buf, len) < 0)
3358                 rc = error_errno(_("could not write to '%s'"), path);
3359         if (close(fd) && !rc)
3360                 rc = error_errno(_("could not close '%s'"), path);
3361         return rc;
3362 }
3363
3364 /* skip picking commits whose parents are unchanged */
3365 int skip_unnecessary_picks(void)
3366 {
3367         const char *todo_file = rebase_path_todo();
3368         struct strbuf buf = STRBUF_INIT;
3369         struct todo_list todo_list = TODO_LIST_INIT;
3370         struct object_id onto_oid, *oid = &onto_oid, *parent_oid;
3371         int fd, i;
3372
3373         if (!read_oneliner(&buf, rebase_path_onto(), 0))
3374                 return error(_("could not read 'onto'"));
3375         if (get_oid(buf.buf, &onto_oid)) {
3376                 strbuf_release(&buf);
3377                 return error(_("need a HEAD to fixup"));
3378         }
3379         strbuf_release(&buf);
3380
3381         if (strbuf_read_file_or_whine(&todo_list.buf, todo_file) < 0)
3382                 return -1;
3383         if (parse_insn_buffer(todo_list.buf.buf, &todo_list) < 0) {
3384                 todo_list_release(&todo_list);
3385                 return -1;
3386         }
3387
3388         for (i = 0; i < todo_list.nr; i++) {
3389                 struct todo_item *item = todo_list.items + i;
3390
3391                 if (item->command >= TODO_NOOP)
3392                         continue;
3393                 if (item->command != TODO_PICK)
3394                         break;
3395                 if (parse_commit(item->commit)) {
3396                         todo_list_release(&todo_list);
3397                         return error(_("could not parse commit '%s'"),
3398                                 oid_to_hex(&item->commit->object.oid));
3399                 }
3400                 if (!item->commit->parents)
3401                         break; /* root commit */
3402                 if (item->commit->parents->next)
3403                         break; /* merge commit */
3404                 parent_oid = &item->commit->parents->item->object.oid;
3405                 if (hashcmp(parent_oid->hash, oid->hash))
3406                         break;
3407                 oid = &item->commit->object.oid;
3408         }
3409         if (i > 0) {
3410                 int offset = i < todo_list.nr ?
3411                         todo_list.items[i].offset_in_buf : todo_list.buf.len;
3412                 const char *done_path = rebase_path_done();
3413
3414                 fd = open(done_path, O_CREAT | O_WRONLY | O_APPEND, 0666);
3415                 if (fd < 0) {
3416                         error_errno(_("could not open '%s' for writing"),
3417                                     done_path);
3418                         todo_list_release(&todo_list);
3419                         return -1;
3420                 }
3421                 if (write_in_full(fd, todo_list.buf.buf, offset) < 0) {
3422                         error_errno(_("could not write to '%s'"), done_path);
3423                         todo_list_release(&todo_list);
3424                         close(fd);
3425                         return -1;
3426                 }
3427                 close(fd);
3428
3429                 if (rewrite_file(rebase_path_todo(), todo_list.buf.buf + offset,
3430                                  todo_list.buf.len - offset) < 0) {
3431                         todo_list_release(&todo_list);
3432                         return -1;
3433                 }
3434
3435                 todo_list.current = i;
3436                 if (is_fixup(peek_command(&todo_list, 0)))
3437                         record_in_rewritten(oid, peek_command(&todo_list, 0));
3438         }
3439
3440         todo_list_release(&todo_list);
3441         printf("%s\n", oid_to_hex(oid));
3442
3443         return 0;
3444 }
3445
3446 struct subject2item_entry {
3447         struct hashmap_entry entry;
3448         int i;
3449         char subject[FLEX_ARRAY];
3450 };
3451
3452 static int subject2item_cmp(const void *fndata,
3453                             const struct subject2item_entry *a,
3454                             const struct subject2item_entry *b, const void *key)
3455 {
3456         return key ? strcmp(a->subject, key) : strcmp(a->subject, b->subject);
3457 }
3458
3459 /*
3460  * Rearrange the todo list that has both "pick commit-id msg" and "pick
3461  * commit-id fixup!/squash! msg" in it so that the latter is put immediately
3462  * after the former, and change "pick" to "fixup"/"squash".
3463  *
3464  * Note that if the config has specified a custom instruction format, each log
3465  * message will have to be retrieved from the commit (as the oneline in the
3466  * script cannot be trusted) in order to normalize the autosquash arrangement.
3467  */
3468 int rearrange_squash(void)
3469 {
3470         const char *todo_file = rebase_path_todo();
3471         struct todo_list todo_list = TODO_LIST_INIT;
3472         struct hashmap subject2item;
3473         int res = 0, rearranged = 0, *next, *tail, i;
3474         char **subjects;
3475
3476         if (strbuf_read_file_or_whine(&todo_list.buf, todo_file) < 0)
3477                 return -1;
3478         if (parse_insn_buffer(todo_list.buf.buf, &todo_list) < 0) {
3479                 todo_list_release(&todo_list);
3480                 return -1;
3481         }
3482
3483         /*
3484          * The hashmap maps onelines to the respective todo list index.
3485          *
3486          * If any items need to be rearranged, the next[i] value will indicate
3487          * which item was moved directly after the i'th.
3488          *
3489          * In that case, last[i] will indicate the index of the latest item to
3490          * be moved to appear after the i'th.
3491          */
3492         hashmap_init(&subject2item, (hashmap_cmp_fn) subject2item_cmp,
3493                      NULL, todo_list.nr);
3494         ALLOC_ARRAY(next, todo_list.nr);
3495         ALLOC_ARRAY(tail, todo_list.nr);
3496         ALLOC_ARRAY(subjects, todo_list.nr);
3497         for (i = 0; i < todo_list.nr; i++) {
3498                 struct strbuf buf = STRBUF_INIT;
3499                 struct todo_item *item = todo_list.items + i;
3500                 const char *commit_buffer, *subject, *p;
3501                 size_t subject_len;
3502                 int i2 = -1;
3503                 struct subject2item_entry *entry;
3504
3505                 next[i] = tail[i] = -1;
3506                 if (item->command >= TODO_EXEC) {
3507                         subjects[i] = NULL;
3508                         continue;
3509                 }
3510
3511                 if (is_fixup(item->command)) {
3512                         todo_list_release(&todo_list);
3513                         return error(_("the script was already rearranged."));
3514                 }
3515
3516                 item->commit->util = item;
3517
3518                 parse_commit(item->commit);
3519                 commit_buffer = get_commit_buffer(item->commit, NULL);
3520                 find_commit_subject(commit_buffer, &subject);
3521                 format_subject(&buf, subject, " ");
3522                 subject = subjects[i] = strbuf_detach(&buf, &subject_len);
3523                 unuse_commit_buffer(item->commit, commit_buffer);
3524                 if ((skip_prefix(subject, "fixup! ", &p) ||
3525                      skip_prefix(subject, "squash! ", &p))) {
3526                         struct commit *commit2;
3527
3528                         for (;;) {
3529                                 while (isspace(*p))
3530                                         p++;
3531                                 if (!skip_prefix(p, "fixup! ", &p) &&
3532                                     !skip_prefix(p, "squash! ", &p))
3533                                         break;
3534                         }
3535
3536                         if ((entry = hashmap_get_from_hash(&subject2item,
3537                                                            strhash(p), p)))
3538                                 /* found by title */
3539                                 i2 = entry->i;
3540                         else if (!strchr(p, ' ') &&
3541                                  (commit2 =
3542                                   lookup_commit_reference_by_name(p)) &&
3543                                  commit2->util)
3544                                 /* found by commit name */
3545                                 i2 = (struct todo_item *)commit2->util
3546                                         - todo_list.items;
3547                         else {
3548                                 /* copy can be a prefix of the commit subject */
3549                                 for (i2 = 0; i2 < i; i2++)
3550                                         if (subjects[i2] &&
3551                                             starts_with(subjects[i2], p))
3552                                                 break;
3553                                 if (i2 == i)
3554                                         i2 = -1;
3555                         }
3556                 }
3557                 if (i2 >= 0) {
3558                         rearranged = 1;
3559                         todo_list.items[i].command =
3560                                 starts_with(subject, "fixup!") ?
3561                                 TODO_FIXUP : TODO_SQUASH;
3562                         if (next[i2] < 0)
3563                                 next[i2] = i;
3564                         else
3565                                 next[tail[i2]] = i;
3566                         tail[i2] = i;
3567                 } else if (!hashmap_get_from_hash(&subject2item,
3568                                                 strhash(subject), subject)) {
3569                         FLEX_ALLOC_MEM(entry, subject, subject, subject_len);
3570                         entry->i = i;
3571                         hashmap_entry_init(entry, strhash(entry->subject));
3572                         hashmap_put(&subject2item, entry);
3573                 }
3574         }
3575
3576         if (rearranged) {
3577                 struct strbuf buf = STRBUF_INIT;
3578
3579                 for (i = 0; i < todo_list.nr; i++) {
3580                         enum todo_command command = todo_list.items[i].command;
3581                         int cur = i;
3582
3583                         /*
3584                          * Initially, all commands are 'pick's. If it is a
3585                          * fixup or a squash now, we have rearranged it.
3586                          */
3587                         if (is_fixup(command))
3588                                 continue;
3589
3590                         while (cur >= 0) {
3591                                 int offset = todo_list.items[cur].offset_in_buf;
3592                                 int end_offset = cur + 1 < todo_list.nr ?
3593                                         todo_list.items[cur + 1].offset_in_buf :
3594                                         todo_list.buf.len;
3595                                 char *bol = todo_list.buf.buf + offset;
3596                                 char *eol = todo_list.buf.buf + end_offset;
3597
3598                                 /* replace 'pick', by 'fixup' or 'squash' */
3599                                 command = todo_list.items[cur].command;
3600                                 if (is_fixup(command)) {
3601                                         strbuf_addstr(&buf,
3602                                                 todo_command_info[command].str);
3603                                         bol += strcspn(bol, " \t");
3604                                 }
3605
3606                                 strbuf_add(&buf, bol, eol - bol);
3607
3608                                 cur = next[cur];
3609                         }
3610                 }
3611
3612                 res = rewrite_file(todo_file, buf.buf, buf.len);
3613                 strbuf_release(&buf);
3614         }
3615
3616         free(next);
3617         free(tail);
3618         for (i = 0; i < todo_list.nr; i++)
3619                 free(subjects[i]);
3620         free(subjects);
3621         hashmap_free(&subject2item, 1);
3622         todo_list_release(&todo_list);
3623
3624         return res;
3625 }