Merge branch 'jk/cleanup-object-parsing-and-fsck'
[git] / sequencer.c
1 #include "cache.h"
2 #include "config.h"
3 #include "lockfile.h"
4 #include "dir.h"
5 #include "object-store.h"
6 #include "object.h"
7 #include "commit.h"
8 #include "sequencer.h"
9 #include "tag.h"
10 #include "run-command.h"
11 #include "exec-cmd.h"
12 #include "utf8.h"
13 #include "cache-tree.h"
14 #include "diff.h"
15 #include "revision.h"
16 #include "rerere.h"
17 #include "merge-recursive.h"
18 #include "refs.h"
19 #include "argv-array.h"
20 #include "quote.h"
21 #include "trailer.h"
22 #include "log-tree.h"
23 #include "wt-status.h"
24 #include "hashmap.h"
25 #include "notes-utils.h"
26 #include "sigchain.h"
27 #include "unpack-trees.h"
28 #include "worktree.h"
29 #include "oidmap.h"
30 #include "oidset.h"
31 #include "commit-slab.h"
32 #include "alias.h"
33 #include "commit-reach.h"
34 #include "rebase-interactive.h"
35
36 #define GIT_REFLOG_ACTION "GIT_REFLOG_ACTION"
37
38 static const char sign_off_header[] = "Signed-off-by: ";
39 static const char cherry_picked_prefix[] = "(cherry picked from commit ";
40
41 GIT_PATH_FUNC(git_path_commit_editmsg, "COMMIT_EDITMSG")
42
43 GIT_PATH_FUNC(git_path_seq_dir, "sequencer")
44
45 static GIT_PATH_FUNC(git_path_todo_file, "sequencer/todo")
46 static GIT_PATH_FUNC(git_path_opts_file, "sequencer/opts")
47 static GIT_PATH_FUNC(git_path_head_file, "sequencer/head")
48 static GIT_PATH_FUNC(git_path_abort_safety_file, "sequencer/abort-safety")
49
50 static GIT_PATH_FUNC(rebase_path, "rebase-merge")
51 /*
52  * The file containing rebase commands, comments, and empty lines.
53  * This file is created by "git rebase -i" then edited by the user. As
54  * the lines are processed, they are removed from the front of this
55  * file and written to the tail of 'done'.
56  */
57 GIT_PATH_FUNC(rebase_path_todo, "rebase-merge/git-rebase-todo")
58 GIT_PATH_FUNC(rebase_path_todo_backup, "rebase-merge/git-rebase-todo.backup")
59
60 /*
61  * The rebase command lines that have already been processed. A line
62  * is moved here when it is first handled, before any associated user
63  * actions.
64  */
65 static GIT_PATH_FUNC(rebase_path_done, "rebase-merge/done")
66 /*
67  * The file to keep track of how many commands were already processed (e.g.
68  * for the prompt).
69  */
70 static GIT_PATH_FUNC(rebase_path_msgnum, "rebase-merge/msgnum")
71 /*
72  * The file to keep track of how many commands are to be processed in total
73  * (e.g. for the prompt).
74  */
75 static GIT_PATH_FUNC(rebase_path_msgtotal, "rebase-merge/end")
76 /*
77  * The commit message that is planned to be used for any changes that
78  * need to be committed following a user interaction.
79  */
80 static GIT_PATH_FUNC(rebase_path_message, "rebase-merge/message")
81 /*
82  * The file into which is accumulated the suggested commit message for
83  * squash/fixup commands. When the first of a series of squash/fixups
84  * is seen, the file is created and the commit message from the
85  * previous commit and from the first squash/fixup commit are written
86  * to it. The commit message for each subsequent squash/fixup commit
87  * is appended to the file as it is processed.
88  */
89 static GIT_PATH_FUNC(rebase_path_squash_msg, "rebase-merge/message-squash")
90 /*
91  * If the current series of squash/fixups has not yet included a squash
92  * command, then this file exists and holds the commit message of the
93  * original "pick" commit.  (If the series ends without a "squash"
94  * command, then this can be used as the commit message of the combined
95  * commit without opening the editor.)
96  */
97 static GIT_PATH_FUNC(rebase_path_fixup_msg, "rebase-merge/message-fixup")
98 /*
99  * This file contains the list fixup/squash commands that have been
100  * accumulated into message-fixup or message-squash so far.
101  */
102 static GIT_PATH_FUNC(rebase_path_current_fixups, "rebase-merge/current-fixups")
103 /*
104  * A script to set the GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, and
105  * GIT_AUTHOR_DATE that will be used for the commit that is currently
106  * being rebased.
107  */
108 static GIT_PATH_FUNC(rebase_path_author_script, "rebase-merge/author-script")
109 /*
110  * When an "edit" rebase command is being processed, the SHA1 of the
111  * commit to be edited is recorded in this file.  When "git rebase
112  * --continue" is executed, if there are any staged changes then they
113  * will be amended to the HEAD commit, but only provided the HEAD
114  * commit is still the commit to be edited.  When any other rebase
115  * command is processed, this file is deleted.
116  */
117 static GIT_PATH_FUNC(rebase_path_amend, "rebase-merge/amend")
118 /*
119  * When we stop at a given patch via the "edit" command, this file contains
120  * the abbreviated commit name of the corresponding patch.
121  */
122 static GIT_PATH_FUNC(rebase_path_stopped_sha, "rebase-merge/stopped-sha")
123 /*
124  * For the post-rewrite hook, we make a list of rewritten commits and
125  * their new sha1s.  The rewritten-pending list keeps the sha1s of
126  * commits that have been processed, but not committed yet,
127  * e.g. because they are waiting for a 'squash' command.
128  */
129 static GIT_PATH_FUNC(rebase_path_rewritten_list, "rebase-merge/rewritten-list")
130 static GIT_PATH_FUNC(rebase_path_rewritten_pending,
131         "rebase-merge/rewritten-pending")
132
133 /*
134  * The path of the file containig the OID of the "squash onto" commit, i.e.
135  * the dummy commit used for `reset [new root]`.
136  */
137 static GIT_PATH_FUNC(rebase_path_squash_onto, "rebase-merge/squash-onto")
138
139 /*
140  * The path of the file listing refs that need to be deleted after the rebase
141  * finishes. This is used by the `label` command to record the need for cleanup.
142  */
143 static GIT_PATH_FUNC(rebase_path_refs_to_delete, "rebase-merge/refs-to-delete")
144
145 /*
146  * The following files are written by git-rebase just after parsing the
147  * command-line.
148  */
149 static GIT_PATH_FUNC(rebase_path_gpg_sign_opt, "rebase-merge/gpg_sign_opt")
150 static GIT_PATH_FUNC(rebase_path_orig_head, "rebase-merge/orig-head")
151 static GIT_PATH_FUNC(rebase_path_verbose, "rebase-merge/verbose")
152 static GIT_PATH_FUNC(rebase_path_quiet, "rebase-merge/quiet")
153 static GIT_PATH_FUNC(rebase_path_signoff, "rebase-merge/signoff")
154 static GIT_PATH_FUNC(rebase_path_head_name, "rebase-merge/head-name")
155 static GIT_PATH_FUNC(rebase_path_onto, "rebase-merge/onto")
156 static GIT_PATH_FUNC(rebase_path_autostash, "rebase-merge/autostash")
157 static GIT_PATH_FUNC(rebase_path_strategy, "rebase-merge/strategy")
158 static GIT_PATH_FUNC(rebase_path_strategy_opts, "rebase-merge/strategy_opts")
159 static GIT_PATH_FUNC(rebase_path_allow_rerere_autoupdate, "rebase-merge/allow_rerere_autoupdate")
160 static GIT_PATH_FUNC(rebase_path_reschedule_failed_exec, "rebase-merge/reschedule-failed-exec")
161
162 static int git_sequencer_config(const char *k, const char *v, void *cb)
163 {
164         struct replay_opts *opts = cb;
165         int status;
166
167         if (!strcmp(k, "commit.cleanup")) {
168                 const char *s;
169
170                 status = git_config_string(&s, k, v);
171                 if (status)
172                         return status;
173
174                 if (!strcmp(s, "verbatim")) {
175                         opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_NONE;
176                         opts->explicit_cleanup = 1;
177                 } else if (!strcmp(s, "whitespace")) {
178                         opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_SPACE;
179                         opts->explicit_cleanup = 1;
180                 } else if (!strcmp(s, "strip")) {
181                         opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_ALL;
182                         opts->explicit_cleanup = 1;
183                 } else if (!strcmp(s, "scissors")) {
184                         opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_SCISSORS;
185                         opts->explicit_cleanup = 1;
186                 } else {
187                         warning(_("invalid commit message cleanup mode '%s'"),
188                                   s);
189                 }
190
191                 free((char *)s);
192                 return status;
193         }
194
195         if (!strcmp(k, "commit.gpgsign")) {
196                 opts->gpg_sign = git_config_bool(k, v) ? xstrdup("") : NULL;
197                 return 0;
198         }
199
200         status = git_gpg_config(k, v, NULL);
201         if (status)
202                 return status;
203
204         return git_diff_basic_config(k, v, NULL);
205 }
206
207 void sequencer_init_config(struct replay_opts *opts)
208 {
209         opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_NONE;
210         git_config(git_sequencer_config, opts);
211 }
212
213 static inline int is_rebase_i(const struct replay_opts *opts)
214 {
215         return opts->action == REPLAY_INTERACTIVE_REBASE;
216 }
217
218 static const char *get_dir(const struct replay_opts *opts)
219 {
220         if (is_rebase_i(opts))
221                 return rebase_path();
222         return git_path_seq_dir();
223 }
224
225 static const char *get_todo_path(const struct replay_opts *opts)
226 {
227         if (is_rebase_i(opts))
228                 return rebase_path_todo();
229         return git_path_todo_file();
230 }
231
232 /*
233  * Returns 0 for non-conforming footer
234  * Returns 1 for conforming footer
235  * Returns 2 when sob exists within conforming footer
236  * Returns 3 when sob exists within conforming footer as last entry
237  */
238 static int has_conforming_footer(struct strbuf *sb, struct strbuf *sob,
239         size_t ignore_footer)
240 {
241         struct process_trailer_options opts = PROCESS_TRAILER_OPTIONS_INIT;
242         struct trailer_info info;
243         size_t i;
244         int found_sob = 0, found_sob_last = 0;
245
246         opts.no_divider = 1;
247
248         trailer_info_get(&info, sb->buf, &opts);
249
250         if (info.trailer_start == info.trailer_end)
251                 return 0;
252
253         for (i = 0; i < info.trailer_nr; i++)
254                 if (sob && !strncmp(info.trailers[i], sob->buf, sob->len)) {
255                         found_sob = 1;
256                         if (i == info.trailer_nr - 1)
257                                 found_sob_last = 1;
258                 }
259
260         trailer_info_release(&info);
261
262         if (found_sob_last)
263                 return 3;
264         if (found_sob)
265                 return 2;
266         return 1;
267 }
268
269 static const char *gpg_sign_opt_quoted(struct replay_opts *opts)
270 {
271         static struct strbuf buf = STRBUF_INIT;
272
273         strbuf_reset(&buf);
274         if (opts->gpg_sign)
275                 sq_quotef(&buf, "-S%s", opts->gpg_sign);
276         return buf.buf;
277 }
278
279 int sequencer_remove_state(struct replay_opts *opts)
280 {
281         struct strbuf buf = STRBUF_INIT;
282         int i, ret = 0;
283
284         if (is_rebase_i(opts) &&
285             strbuf_read_file(&buf, rebase_path_refs_to_delete(), 0) > 0) {
286                 char *p = buf.buf;
287                 while (*p) {
288                         char *eol = strchr(p, '\n');
289                         if (eol)
290                                 *eol = '\0';
291                         if (delete_ref("(rebase -i) cleanup", p, NULL, 0) < 0) {
292                                 warning(_("could not delete '%s'"), p);
293                                 ret = -1;
294                         }
295                         if (!eol)
296                                 break;
297                         p = eol + 1;
298                 }
299         }
300
301         free(opts->gpg_sign);
302         free(opts->strategy);
303         for (i = 0; i < opts->xopts_nr; i++)
304                 free(opts->xopts[i]);
305         free(opts->xopts);
306         strbuf_release(&opts->current_fixups);
307
308         strbuf_reset(&buf);
309         strbuf_addstr(&buf, get_dir(opts));
310         if (remove_dir_recursively(&buf, 0))
311                 ret = error(_("could not remove '%s'"), buf.buf);
312         strbuf_release(&buf);
313
314         return ret;
315 }
316
317 static const char *action_name(const struct replay_opts *opts)
318 {
319         switch (opts->action) {
320         case REPLAY_REVERT:
321                 return N_("revert");
322         case REPLAY_PICK:
323                 return N_("cherry-pick");
324         case REPLAY_INTERACTIVE_REBASE:
325                 return N_("rebase -i");
326         }
327         die(_("unknown action: %d"), opts->action);
328 }
329
330 struct commit_message {
331         char *parent_label;
332         char *label;
333         char *subject;
334         const char *message;
335 };
336
337 static const char *short_commit_name(struct commit *commit)
338 {
339         return find_unique_abbrev(&commit->object.oid, DEFAULT_ABBREV);
340 }
341
342 static int get_message(struct commit *commit, struct commit_message *out)
343 {
344         const char *abbrev, *subject;
345         int subject_len;
346
347         out->message = logmsg_reencode(commit, NULL, get_commit_output_encoding());
348         abbrev = short_commit_name(commit);
349
350         subject_len = find_commit_subject(out->message, &subject);
351
352         out->subject = xmemdupz(subject, subject_len);
353         out->label = xstrfmt("%s... %s", abbrev, out->subject);
354         out->parent_label = xstrfmt("parent of %s", out->label);
355
356         return 0;
357 }
358
359 static void free_message(struct commit *commit, struct commit_message *msg)
360 {
361         free(msg->parent_label);
362         free(msg->label);
363         free(msg->subject);
364         unuse_commit_buffer(commit, msg->message);
365 }
366
367 static void print_advice(struct repository *r, int show_hint,
368                          struct replay_opts *opts)
369 {
370         char *msg = getenv("GIT_CHERRY_PICK_HELP");
371
372         if (msg) {
373                 fprintf(stderr, "%s\n", msg);
374                 /*
375                  * A conflict has occurred but the porcelain
376                  * (typically rebase --interactive) wants to take care
377                  * of the commit itself so remove CHERRY_PICK_HEAD
378                  */
379                 unlink(git_path_cherry_pick_head(r));
380                 return;
381         }
382
383         if (show_hint) {
384                 if (opts->no_commit)
385                         advise(_("after resolving the conflicts, mark the corrected paths\n"
386                                  "with 'git add <paths>' or 'git rm <paths>'"));
387                 else
388                         advise(_("after resolving the conflicts, mark the corrected paths\n"
389                                  "with 'git add <paths>' or 'git rm <paths>'\n"
390                                  "and commit the result with 'git commit'"));
391         }
392 }
393
394 static int write_message(const void *buf, size_t len, const char *filename,
395                          int append_eol)
396 {
397         struct lock_file msg_file = LOCK_INIT;
398
399         int msg_fd = hold_lock_file_for_update(&msg_file, filename, 0);
400         if (msg_fd < 0)
401                 return error_errno(_("could not lock '%s'"), filename);
402         if (write_in_full(msg_fd, buf, len) < 0) {
403                 error_errno(_("could not write to '%s'"), filename);
404                 rollback_lock_file(&msg_file);
405                 return -1;
406         }
407         if (append_eol && write(msg_fd, "\n", 1) < 0) {
408                 error_errno(_("could not write eol to '%s'"), filename);
409                 rollback_lock_file(&msg_file);
410                 return -1;
411         }
412         if (commit_lock_file(&msg_file) < 0)
413                 return error(_("failed to finalize '%s'"), filename);
414
415         return 0;
416 }
417
418 /*
419  * Reads a file that was presumably written by a shell script, i.e. with an
420  * end-of-line marker that needs to be stripped.
421  *
422  * Note that only the last end-of-line marker is stripped, consistent with the
423  * behavior of "$(cat path)" in a shell script.
424  *
425  * Returns 1 if the file was read, 0 if it could not be read or does not exist.
426  */
427 static int read_oneliner(struct strbuf *buf,
428         const char *path, int skip_if_empty)
429 {
430         int orig_len = buf->len;
431
432         if (!file_exists(path))
433                 return 0;
434
435         if (strbuf_read_file(buf, path, 0) < 0) {
436                 warning_errno(_("could not read '%s'"), path);
437                 return 0;
438         }
439
440         if (buf->len > orig_len && buf->buf[buf->len - 1] == '\n') {
441                 if (--buf->len > orig_len && buf->buf[buf->len - 1] == '\r')
442                         --buf->len;
443                 buf->buf[buf->len] = '\0';
444         }
445
446         if (skip_if_empty && buf->len == orig_len)
447                 return 0;
448
449         return 1;
450 }
451
452 static struct tree *empty_tree(struct repository *r)
453 {
454         return lookup_tree(r, the_hash_algo->empty_tree);
455 }
456
457 static int error_dirty_index(struct repository *repo, struct replay_opts *opts)
458 {
459         if (repo_read_index_unmerged(repo))
460                 return error_resolve_conflict(_(action_name(opts)));
461
462         error(_("your local changes would be overwritten by %s."),
463                 _(action_name(opts)));
464
465         if (advice_commit_before_merge)
466                 advise(_("commit your changes or stash them to proceed."));
467         return -1;
468 }
469
470 static void update_abort_safety_file(void)
471 {
472         struct object_id head;
473
474         /* Do nothing on a single-pick */
475         if (!file_exists(git_path_seq_dir()))
476                 return;
477
478         if (!get_oid("HEAD", &head))
479                 write_file(git_path_abort_safety_file(), "%s", oid_to_hex(&head));
480         else
481                 write_file(git_path_abort_safety_file(), "%s", "");
482 }
483
484 static int fast_forward_to(struct repository *r,
485                            const struct object_id *to,
486                            const struct object_id *from,
487                            int unborn,
488                            struct replay_opts *opts)
489 {
490         struct ref_transaction *transaction;
491         struct strbuf sb = STRBUF_INIT;
492         struct strbuf err = STRBUF_INIT;
493
494         repo_read_index(r);
495         if (checkout_fast_forward(r, from, to, 1))
496                 return -1; /* the callee should have complained already */
497
498         strbuf_addf(&sb, _("%s: fast-forward"), _(action_name(opts)));
499
500         transaction = ref_transaction_begin(&err);
501         if (!transaction ||
502             ref_transaction_update(transaction, "HEAD",
503                                    to, unborn && !is_rebase_i(opts) ?
504                                    &null_oid : from,
505                                    0, sb.buf, &err) ||
506             ref_transaction_commit(transaction, &err)) {
507                 ref_transaction_free(transaction);
508                 error("%s", err.buf);
509                 strbuf_release(&sb);
510                 strbuf_release(&err);
511                 return -1;
512         }
513
514         strbuf_release(&sb);
515         strbuf_release(&err);
516         ref_transaction_free(transaction);
517         update_abort_safety_file();
518         return 0;
519 }
520
521 enum commit_msg_cleanup_mode get_cleanup_mode(const char *cleanup_arg,
522         int use_editor)
523 {
524         if (!cleanup_arg || !strcmp(cleanup_arg, "default"))
525                 return use_editor ? COMMIT_MSG_CLEANUP_ALL :
526                                     COMMIT_MSG_CLEANUP_SPACE;
527         else if (!strcmp(cleanup_arg, "verbatim"))
528                 return COMMIT_MSG_CLEANUP_NONE;
529         else if (!strcmp(cleanup_arg, "whitespace"))
530                 return COMMIT_MSG_CLEANUP_SPACE;
531         else if (!strcmp(cleanup_arg, "strip"))
532                 return COMMIT_MSG_CLEANUP_ALL;
533         else if (!strcmp(cleanup_arg, "scissors"))
534                 return use_editor ? COMMIT_MSG_CLEANUP_SCISSORS :
535                                     COMMIT_MSG_CLEANUP_SPACE;
536         else
537                 die(_("Invalid cleanup mode %s"), cleanup_arg);
538 }
539
540 /*
541  * NB using int rather than enum cleanup_mode to stop clang's
542  * -Wtautological-constant-out-of-range-compare complaining that the comparison
543  * is always true.
544  */
545 static const char *describe_cleanup_mode(int cleanup_mode)
546 {
547         static const char *modes[] = { "whitespace",
548                                        "verbatim",
549                                        "scissors",
550                                        "strip" };
551
552         if (cleanup_mode < ARRAY_SIZE(modes))
553                 return modes[cleanup_mode];
554
555         BUG("invalid cleanup_mode provided (%d)", cleanup_mode);
556 }
557
558 void append_conflicts_hint(struct index_state *istate,
559         struct strbuf *msgbuf, enum commit_msg_cleanup_mode cleanup_mode)
560 {
561         int i;
562
563         if (cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS) {
564                 strbuf_addch(msgbuf, '\n');
565                 wt_status_append_cut_line(msgbuf);
566                 strbuf_addch(msgbuf, comment_line_char);
567         }
568
569         strbuf_addch(msgbuf, '\n');
570         strbuf_commented_addf(msgbuf, "Conflicts:\n");
571         for (i = 0; i < istate->cache_nr;) {
572                 const struct cache_entry *ce = istate->cache[i++];
573                 if (ce_stage(ce)) {
574                         strbuf_commented_addf(msgbuf, "\t%s\n", ce->name);
575                         while (i < istate->cache_nr &&
576                                !strcmp(ce->name, istate->cache[i]->name))
577                                 i++;
578                 }
579         }
580 }
581
582 static int do_recursive_merge(struct repository *r,
583                               struct commit *base, struct commit *next,
584                               const char *base_label, const char *next_label,
585                               struct object_id *head, struct strbuf *msgbuf,
586                               struct replay_opts *opts)
587 {
588         struct merge_options o;
589         struct tree *next_tree, *base_tree, *head_tree;
590         int clean;
591         char **xopt;
592         struct lock_file index_lock = LOCK_INIT;
593
594         if (repo_hold_locked_index(r, &index_lock, LOCK_REPORT_ON_ERROR) < 0)
595                 return -1;
596
597         repo_read_index(r);
598
599         init_merge_options(&o, r);
600         o.ancestor = base ? base_label : "(empty tree)";
601         o.branch1 = "HEAD";
602         o.branch2 = next ? next_label : "(empty tree)";
603         if (is_rebase_i(opts))
604                 o.buffer_output = 2;
605         o.show_rename_progress = 1;
606
607         head_tree = parse_tree_indirect(head);
608         next_tree = next ? get_commit_tree(next) : empty_tree(r);
609         base_tree = base ? get_commit_tree(base) : empty_tree(r);
610
611         for (xopt = opts->xopts; xopt != opts->xopts + opts->xopts_nr; xopt++)
612                 parse_merge_opt(&o, *xopt);
613
614         clean = merge_trees(&o,
615                             head_tree,
616                             next_tree, base_tree);
617         if (is_rebase_i(opts) && clean <= 0)
618                 fputs(o.obuf.buf, stdout);
619         strbuf_release(&o.obuf);
620         if (clean < 0) {
621                 rollback_lock_file(&index_lock);
622                 return clean;
623         }
624
625         if (write_locked_index(r->index, &index_lock,
626                                COMMIT_LOCK | SKIP_IF_UNCHANGED))
627                 /*
628                  * TRANSLATORS: %s will be "revert", "cherry-pick" or
629                  * "rebase -i".
630                  */
631                 return error(_("%s: Unable to write new index file"),
632                         _(action_name(opts)));
633
634         if (!clean)
635                 append_conflicts_hint(r->index, msgbuf,
636                                       opts->default_msg_cleanup);
637
638         return !clean;
639 }
640
641 static struct object_id *get_cache_tree_oid(struct index_state *istate)
642 {
643         if (!istate->cache_tree)
644                 istate->cache_tree = cache_tree();
645
646         if (!cache_tree_fully_valid(istate->cache_tree))
647                 if (cache_tree_update(istate, 0)) {
648                         error(_("unable to update cache tree"));
649                         return NULL;
650                 }
651
652         return &istate->cache_tree->oid;
653 }
654
655 static int is_index_unchanged(struct repository *r)
656 {
657         struct object_id head_oid, *cache_tree_oid;
658         struct commit *head_commit;
659         struct index_state *istate = r->index;
660
661         if (!resolve_ref_unsafe("HEAD", RESOLVE_REF_READING, &head_oid, NULL))
662                 return error(_("could not resolve HEAD commit"));
663
664         head_commit = lookup_commit(r, &head_oid);
665
666         /*
667          * If head_commit is NULL, check_commit, called from
668          * lookup_commit, would have indicated that head_commit is not
669          * a commit object already.  parse_commit() will return failure
670          * without further complaints in such a case.  Otherwise, if
671          * the commit is invalid, parse_commit() will complain.  So
672          * there is nothing for us to say here.  Just return failure.
673          */
674         if (parse_commit(head_commit))
675                 return -1;
676
677         if (!(cache_tree_oid = get_cache_tree_oid(istate)))
678                 return -1;
679
680         return oideq(cache_tree_oid, get_commit_tree_oid(head_commit));
681 }
682
683 static int write_author_script(const char *message)
684 {
685         struct strbuf buf = STRBUF_INIT;
686         const char *eol;
687         int res;
688
689         for (;;)
690                 if (!*message || starts_with(message, "\n")) {
691 missing_author:
692                         /* Missing 'author' line? */
693                         unlink(rebase_path_author_script());
694                         return 0;
695                 } else if (skip_prefix(message, "author ", &message))
696                         break;
697                 else if ((eol = strchr(message, '\n')))
698                         message = eol + 1;
699                 else
700                         goto missing_author;
701
702         strbuf_addstr(&buf, "GIT_AUTHOR_NAME='");
703         while (*message && *message != '\n' && *message != '\r')
704                 if (skip_prefix(message, " <", &message))
705                         break;
706                 else if (*message != '\'')
707                         strbuf_addch(&buf, *(message++));
708                 else
709                         strbuf_addf(&buf, "'\\%c'", *(message++));
710         strbuf_addstr(&buf, "'\nGIT_AUTHOR_EMAIL='");
711         while (*message && *message != '\n' && *message != '\r')
712                 if (skip_prefix(message, "> ", &message))
713                         break;
714                 else if (*message != '\'')
715                         strbuf_addch(&buf, *(message++));
716                 else
717                         strbuf_addf(&buf, "'\\%c'", *(message++));
718         strbuf_addstr(&buf, "'\nGIT_AUTHOR_DATE='@");
719         while (*message && *message != '\n' && *message != '\r')
720                 if (*message != '\'')
721                         strbuf_addch(&buf, *(message++));
722                 else
723                         strbuf_addf(&buf, "'\\%c'", *(message++));
724         strbuf_addch(&buf, '\'');
725         res = write_message(buf.buf, buf.len, rebase_path_author_script(), 1);
726         strbuf_release(&buf);
727         return res;
728 }
729
730 /**
731  * Take a series of KEY='VALUE' lines where VALUE part is
732  * sq-quoted, and append <KEY, VALUE> at the end of the string list
733  */
734 static int parse_key_value_squoted(char *buf, struct string_list *list)
735 {
736         while (*buf) {
737                 struct string_list_item *item;
738                 char *np;
739                 char *cp = strchr(buf, '=');
740                 if (!cp) {
741                         np = strchrnul(buf, '\n');
742                         return error(_("no key present in '%.*s'"),
743                                      (int) (np - buf), buf);
744                 }
745                 np = strchrnul(cp, '\n');
746                 *cp++ = '\0';
747                 item = string_list_append(list, buf);
748
749                 buf = np + (*np == '\n');
750                 *np = '\0';
751                 cp = sq_dequote(cp);
752                 if (!cp)
753                         return error(_("unable to dequote value of '%s'"),
754                                      item->string);
755                 item->util = xstrdup(cp);
756         }
757         return 0;
758 }
759
760 /**
761  * Reads and parses the state directory's "author-script" file, and sets name,
762  * email and date accordingly.
763  * Returns 0 on success, -1 if the file could not be parsed.
764  *
765  * The author script is of the format:
766  *
767  *      GIT_AUTHOR_NAME='$author_name'
768  *      GIT_AUTHOR_EMAIL='$author_email'
769  *      GIT_AUTHOR_DATE='$author_date'
770  *
771  * where $author_name, $author_email and $author_date are quoted. We are strict
772  * with our parsing, as the file was meant to be eval'd in the now-removed
773  * git-am.sh/git-rebase--interactive.sh scripts, and thus if the file differs
774  * from what this function expects, it is better to bail out than to do
775  * something that the user does not expect.
776  */
777 int read_author_script(const char *path, char **name, char **email, char **date,
778                        int allow_missing)
779 {
780         struct strbuf buf = STRBUF_INIT;
781         struct string_list kv = STRING_LIST_INIT_DUP;
782         int retval = -1; /* assume failure */
783         int i, name_i = -2, email_i = -2, date_i = -2, err = 0;
784
785         if (strbuf_read_file(&buf, path, 256) <= 0) {
786                 strbuf_release(&buf);
787                 if (errno == ENOENT && allow_missing)
788                         return 0;
789                 else
790                         return error_errno(_("could not open '%s' for reading"),
791                                            path);
792         }
793
794         if (parse_key_value_squoted(buf.buf, &kv))
795                 goto finish;
796
797         for (i = 0; i < kv.nr; i++) {
798                 if (!strcmp(kv.items[i].string, "GIT_AUTHOR_NAME")) {
799                         if (name_i != -2)
800                                 name_i = error(_("'GIT_AUTHOR_NAME' already given"));
801                         else
802                                 name_i = i;
803                 } else if (!strcmp(kv.items[i].string, "GIT_AUTHOR_EMAIL")) {
804                         if (email_i != -2)
805                                 email_i = error(_("'GIT_AUTHOR_EMAIL' already given"));
806                         else
807                                 email_i = i;
808                 } else if (!strcmp(kv.items[i].string, "GIT_AUTHOR_DATE")) {
809                         if (date_i != -2)
810                                 date_i = error(_("'GIT_AUTHOR_DATE' already given"));
811                         else
812                                 date_i = i;
813                 } else {
814                         err = error(_("unknown variable '%s'"),
815                                     kv.items[i].string);
816                 }
817         }
818         if (name_i == -2)
819                 error(_("missing 'GIT_AUTHOR_NAME'"));
820         if (email_i == -2)
821                 error(_("missing 'GIT_AUTHOR_EMAIL'"));
822         if (date_i == -2)
823                 error(_("missing 'GIT_AUTHOR_DATE'"));
824         if (date_i < 0 || email_i < 0 || date_i < 0 || err)
825                 goto finish;
826         *name = kv.items[name_i].util;
827         *email = kv.items[email_i].util;
828         *date = kv.items[date_i].util;
829         retval = 0;
830 finish:
831         string_list_clear(&kv, !!retval);
832         strbuf_release(&buf);
833         return retval;
834 }
835
836 /*
837  * Read a GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL AND GIT_AUTHOR_DATE from a
838  * file with shell quoting into struct argv_array. Returns -1 on
839  * error, 0 otherwise.
840  */
841 static int read_env_script(struct argv_array *env)
842 {
843         char *name, *email, *date;
844
845         if (read_author_script(rebase_path_author_script(),
846                                &name, &email, &date, 0))
847                 return -1;
848
849         argv_array_pushf(env, "GIT_AUTHOR_NAME=%s", name);
850         argv_array_pushf(env, "GIT_AUTHOR_EMAIL=%s", email);
851         argv_array_pushf(env, "GIT_AUTHOR_DATE=%s", date);
852         free(name);
853         free(email);
854         free(date);
855
856         return 0;
857 }
858
859 static char *get_author(const char *message)
860 {
861         size_t len;
862         const char *a;
863
864         a = find_commit_header(message, "author", &len);
865         if (a)
866                 return xmemdupz(a, len);
867
868         return NULL;
869 }
870
871 static const char staged_changes_advice[] =
872 N_("you have staged changes in your working tree\n"
873 "If these changes are meant to be squashed into the previous commit, run:\n"
874 "\n"
875 "  git commit --amend %s\n"
876 "\n"
877 "If they are meant to go into a new commit, run:\n"
878 "\n"
879 "  git commit %s\n"
880 "\n"
881 "In both cases, once you're done, continue with:\n"
882 "\n"
883 "  git rebase --continue\n");
884
885 #define ALLOW_EMPTY (1<<0)
886 #define EDIT_MSG    (1<<1)
887 #define AMEND_MSG   (1<<2)
888 #define CLEANUP_MSG (1<<3)
889 #define VERIFY_MSG  (1<<4)
890 #define CREATE_ROOT_COMMIT (1<<5)
891
892 static int run_command_silent_on_success(struct child_process *cmd)
893 {
894         struct strbuf buf = STRBUF_INIT;
895         int rc;
896
897         cmd->stdout_to_stderr = 1;
898         rc = pipe_command(cmd,
899                           NULL, 0,
900                           NULL, 0,
901                           &buf, 0);
902
903         if (rc)
904                 fputs(buf.buf, stderr);
905         strbuf_release(&buf);
906         return rc;
907 }
908
909 /*
910  * If we are cherry-pick, and if the merge did not result in
911  * hand-editing, we will hit this commit and inherit the original
912  * author date and name.
913  *
914  * If we are revert, or if our cherry-pick results in a hand merge,
915  * we had better say that the current user is responsible for that.
916  *
917  * An exception is when run_git_commit() is called during an
918  * interactive rebase: in that case, we will want to retain the
919  * author metadata.
920  */
921 static int run_git_commit(struct repository *r,
922                           const char *defmsg,
923                           struct replay_opts *opts,
924                           unsigned int flags)
925 {
926         struct child_process cmd = CHILD_PROCESS_INIT;
927
928         cmd.git_cmd = 1;
929
930         if (is_rebase_i(opts) && read_env_script(&cmd.env_array)) {
931                 const char *gpg_opt = gpg_sign_opt_quoted(opts);
932
933                 return error(_(staged_changes_advice),
934                              gpg_opt, gpg_opt);
935         }
936
937         argv_array_push(&cmd.args, "commit");
938
939         if (!(flags & VERIFY_MSG))
940                 argv_array_push(&cmd.args, "-n");
941         if ((flags & AMEND_MSG))
942                 argv_array_push(&cmd.args, "--amend");
943         if (opts->gpg_sign)
944                 argv_array_pushf(&cmd.args, "-S%s", opts->gpg_sign);
945         if (defmsg)
946                 argv_array_pushl(&cmd.args, "-F", defmsg, NULL);
947         else if (!(flags & EDIT_MSG))
948                 argv_array_pushl(&cmd.args, "-C", "HEAD", NULL);
949         if ((flags & CLEANUP_MSG))
950                 argv_array_push(&cmd.args, "--cleanup=strip");
951         if ((flags & EDIT_MSG))
952                 argv_array_push(&cmd.args, "-e");
953         else if (!(flags & CLEANUP_MSG) &&
954                  !opts->signoff && !opts->record_origin &&
955                  !opts->explicit_cleanup)
956                 argv_array_push(&cmd.args, "--cleanup=verbatim");
957
958         if ((flags & ALLOW_EMPTY))
959                 argv_array_push(&cmd.args, "--allow-empty");
960
961         if (!(flags & EDIT_MSG))
962                 argv_array_push(&cmd.args, "--allow-empty-message");
963
964         if (is_rebase_i(opts) && !(flags & EDIT_MSG))
965                 return run_command_silent_on_success(&cmd);
966         else
967                 return run_command(&cmd);
968 }
969
970 static int rest_is_empty(const struct strbuf *sb, int start)
971 {
972         int i, eol;
973         const char *nl;
974
975         /* Check if the rest is just whitespace and Signed-off-by's. */
976         for (i = start; i < sb->len; i++) {
977                 nl = memchr(sb->buf + i, '\n', sb->len - i);
978                 if (nl)
979                         eol = nl - sb->buf;
980                 else
981                         eol = sb->len;
982
983                 if (strlen(sign_off_header) <= eol - i &&
984                     starts_with(sb->buf + i, sign_off_header)) {
985                         i = eol;
986                         continue;
987                 }
988                 while (i < eol)
989                         if (!isspace(sb->buf[i++]))
990                                 return 0;
991         }
992
993         return 1;
994 }
995
996 void cleanup_message(struct strbuf *msgbuf,
997         enum commit_msg_cleanup_mode cleanup_mode, int verbose)
998 {
999         if (verbose || /* Truncate the message just before the diff, if any. */
1000             cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS)
1001                 strbuf_setlen(msgbuf, wt_status_locate_end(msgbuf->buf, msgbuf->len));
1002         if (cleanup_mode != COMMIT_MSG_CLEANUP_NONE)
1003                 strbuf_stripspace(msgbuf, cleanup_mode == COMMIT_MSG_CLEANUP_ALL);
1004 }
1005
1006 /*
1007  * Find out if the message in the strbuf contains only whitespace and
1008  * Signed-off-by lines.
1009  */
1010 int message_is_empty(const struct strbuf *sb,
1011                      enum commit_msg_cleanup_mode cleanup_mode)
1012 {
1013         if (cleanup_mode == COMMIT_MSG_CLEANUP_NONE && sb->len)
1014                 return 0;
1015         return rest_is_empty(sb, 0);
1016 }
1017
1018 /*
1019  * See if the user edited the message in the editor or left what
1020  * was in the template intact
1021  */
1022 int template_untouched(const struct strbuf *sb, const char *template_file,
1023                        enum commit_msg_cleanup_mode cleanup_mode)
1024 {
1025         struct strbuf tmpl = STRBUF_INIT;
1026         const char *start;
1027
1028         if (cleanup_mode == COMMIT_MSG_CLEANUP_NONE && sb->len)
1029                 return 0;
1030
1031         if (!template_file || strbuf_read_file(&tmpl, template_file, 0) <= 0)
1032                 return 0;
1033
1034         strbuf_stripspace(&tmpl, cleanup_mode == COMMIT_MSG_CLEANUP_ALL);
1035         if (!skip_prefix(sb->buf, tmpl.buf, &start))
1036                 start = sb->buf;
1037         strbuf_release(&tmpl);
1038         return rest_is_empty(sb, start - sb->buf);
1039 }
1040
1041 int update_head_with_reflog(const struct commit *old_head,
1042                             const struct object_id *new_head,
1043                             const char *action, const struct strbuf *msg,
1044                             struct strbuf *err)
1045 {
1046         struct ref_transaction *transaction;
1047         struct strbuf sb = STRBUF_INIT;
1048         const char *nl;
1049         int ret = 0;
1050
1051         if (action) {
1052                 strbuf_addstr(&sb, action);
1053                 strbuf_addstr(&sb, ": ");
1054         }
1055
1056         nl = strchr(msg->buf, '\n');
1057         if (nl) {
1058                 strbuf_add(&sb, msg->buf, nl + 1 - msg->buf);
1059         } else {
1060                 strbuf_addbuf(&sb, msg);
1061                 strbuf_addch(&sb, '\n');
1062         }
1063
1064         transaction = ref_transaction_begin(err);
1065         if (!transaction ||
1066             ref_transaction_update(transaction, "HEAD", new_head,
1067                                    old_head ? &old_head->object.oid : &null_oid,
1068                                    0, sb.buf, err) ||
1069             ref_transaction_commit(transaction, err)) {
1070                 ret = -1;
1071         }
1072         ref_transaction_free(transaction);
1073         strbuf_release(&sb);
1074
1075         return ret;
1076 }
1077
1078 static int run_rewrite_hook(const struct object_id *oldoid,
1079                             const struct object_id *newoid)
1080 {
1081         struct child_process proc = CHILD_PROCESS_INIT;
1082         const char *argv[3];
1083         int code;
1084         struct strbuf sb = STRBUF_INIT;
1085
1086         argv[0] = find_hook("post-rewrite");
1087         if (!argv[0])
1088                 return 0;
1089
1090         argv[1] = "amend";
1091         argv[2] = NULL;
1092
1093         proc.argv = argv;
1094         proc.in = -1;
1095         proc.stdout_to_stderr = 1;
1096         proc.trace2_hook_name = "post-rewrite";
1097
1098         code = start_command(&proc);
1099         if (code)
1100                 return code;
1101         strbuf_addf(&sb, "%s %s\n", oid_to_hex(oldoid), oid_to_hex(newoid));
1102         sigchain_push(SIGPIPE, SIG_IGN);
1103         write_in_full(proc.in, sb.buf, sb.len);
1104         close(proc.in);
1105         strbuf_release(&sb);
1106         sigchain_pop(SIGPIPE);
1107         return finish_command(&proc);
1108 }
1109
1110 void commit_post_rewrite(struct repository *r,
1111                          const struct commit *old_head,
1112                          const struct object_id *new_head)
1113 {
1114         struct notes_rewrite_cfg *cfg;
1115
1116         cfg = init_copy_notes_for_rewrite("amend");
1117         if (cfg) {
1118                 /* we are amending, so old_head is not NULL */
1119                 copy_note_for_rewrite(cfg, &old_head->object.oid, new_head);
1120                 finish_copy_notes_for_rewrite(r, cfg, "Notes added by 'git commit --amend'");
1121         }
1122         run_rewrite_hook(&old_head->object.oid, new_head);
1123 }
1124
1125 static int run_prepare_commit_msg_hook(struct repository *r,
1126                                        struct strbuf *msg,
1127                                        const char *commit)
1128 {
1129         int ret = 0;
1130         const char *name, *arg1 = NULL, *arg2 = NULL;
1131
1132         name = git_path_commit_editmsg();
1133         if (write_message(msg->buf, msg->len, name, 0))
1134                 return -1;
1135
1136         if (commit) {
1137                 arg1 = "commit";
1138                 arg2 = commit;
1139         } else {
1140                 arg1 = "message";
1141         }
1142         if (run_commit_hook(0, r->index_file, "prepare-commit-msg", name,
1143                             arg1, arg2, NULL))
1144                 ret = error(_("'prepare-commit-msg' hook failed"));
1145
1146         return ret;
1147 }
1148
1149 static const char implicit_ident_advice_noconfig[] =
1150 N_("Your name and email address were configured automatically based\n"
1151 "on your username and hostname. Please check that they are accurate.\n"
1152 "You can suppress this message by setting them explicitly. Run the\n"
1153 "following command and follow the instructions in your editor to edit\n"
1154 "your configuration file:\n"
1155 "\n"
1156 "    git config --global --edit\n"
1157 "\n"
1158 "After doing this, you may fix the identity used for this commit with:\n"
1159 "\n"
1160 "    git commit --amend --reset-author\n");
1161
1162 static const char implicit_ident_advice_config[] =
1163 N_("Your name and email address were configured automatically based\n"
1164 "on your username and hostname. Please check that they are accurate.\n"
1165 "You can suppress this message by setting them explicitly:\n"
1166 "\n"
1167 "    git config --global user.name \"Your Name\"\n"
1168 "    git config --global user.email you@example.com\n"
1169 "\n"
1170 "After doing this, you may fix the identity used for this commit with:\n"
1171 "\n"
1172 "    git commit --amend --reset-author\n");
1173
1174 static const char *implicit_ident_advice(void)
1175 {
1176         char *user_config = expand_user_path("~/.gitconfig", 0);
1177         char *xdg_config = xdg_config_home("config");
1178         int config_exists = file_exists(user_config) || file_exists(xdg_config);
1179
1180         free(user_config);
1181         free(xdg_config);
1182
1183         if (config_exists)
1184                 return _(implicit_ident_advice_config);
1185         else
1186                 return _(implicit_ident_advice_noconfig);
1187
1188 }
1189
1190 void print_commit_summary(struct repository *r,
1191                           const char *prefix,
1192                           const struct object_id *oid,
1193                           unsigned int flags)
1194 {
1195         struct rev_info rev;
1196         struct commit *commit;
1197         struct strbuf format = STRBUF_INIT;
1198         const char *head;
1199         struct pretty_print_context pctx = {0};
1200         struct strbuf author_ident = STRBUF_INIT;
1201         struct strbuf committer_ident = STRBUF_INIT;
1202
1203         commit = lookup_commit(r, oid);
1204         if (!commit)
1205                 die(_("couldn't look up newly created commit"));
1206         if (parse_commit(commit))
1207                 die(_("could not parse newly created commit"));
1208
1209         strbuf_addstr(&format, "format:%h] %s");
1210
1211         format_commit_message(commit, "%an <%ae>", &author_ident, &pctx);
1212         format_commit_message(commit, "%cn <%ce>", &committer_ident, &pctx);
1213         if (strbuf_cmp(&author_ident, &committer_ident)) {
1214                 strbuf_addstr(&format, "\n Author: ");
1215                 strbuf_addbuf_percentquote(&format, &author_ident);
1216         }
1217         if (flags & SUMMARY_SHOW_AUTHOR_DATE) {
1218                 struct strbuf date = STRBUF_INIT;
1219
1220                 format_commit_message(commit, "%ad", &date, &pctx);
1221                 strbuf_addstr(&format, "\n Date: ");
1222                 strbuf_addbuf_percentquote(&format, &date);
1223                 strbuf_release(&date);
1224         }
1225         if (!committer_ident_sufficiently_given()) {
1226                 strbuf_addstr(&format, "\n Committer: ");
1227                 strbuf_addbuf_percentquote(&format, &committer_ident);
1228                 if (advice_implicit_identity) {
1229                         strbuf_addch(&format, '\n');
1230                         strbuf_addstr(&format, implicit_ident_advice());
1231                 }
1232         }
1233         strbuf_release(&author_ident);
1234         strbuf_release(&committer_ident);
1235
1236         repo_init_revisions(r, &rev, prefix);
1237         setup_revisions(0, NULL, &rev, NULL);
1238
1239         rev.diff = 1;
1240         rev.diffopt.output_format =
1241                 DIFF_FORMAT_SHORTSTAT | DIFF_FORMAT_SUMMARY;
1242
1243         rev.verbose_header = 1;
1244         rev.show_root_diff = 1;
1245         get_commit_format(format.buf, &rev);
1246         rev.always_show_header = 0;
1247         rev.diffopt.detect_rename = DIFF_DETECT_RENAME;
1248         rev.diffopt.break_opt = 0;
1249         diff_setup_done(&rev.diffopt);
1250
1251         head = resolve_ref_unsafe("HEAD", 0, NULL, NULL);
1252         if (!head)
1253                 die_errno(_("unable to resolve HEAD after creating commit"));
1254         if (!strcmp(head, "HEAD"))
1255                 head = _("detached HEAD");
1256         else
1257                 skip_prefix(head, "refs/heads/", &head);
1258         printf("[%s%s ", head, (flags & SUMMARY_INITIAL_COMMIT) ?
1259                                                 _(" (root-commit)") : "");
1260
1261         if (!log_tree_commit(&rev, commit)) {
1262                 rev.always_show_header = 1;
1263                 rev.use_terminator = 1;
1264                 log_tree_commit(&rev, commit);
1265         }
1266
1267         strbuf_release(&format);
1268 }
1269
1270 static int parse_head(struct repository *r, struct commit **head)
1271 {
1272         struct commit *current_head;
1273         struct object_id oid;
1274
1275         if (get_oid("HEAD", &oid)) {
1276                 current_head = NULL;
1277         } else {
1278                 current_head = lookup_commit_reference(r, &oid);
1279                 if (!current_head)
1280                         return error(_("could not parse HEAD"));
1281                 if (!oideq(&oid, &current_head->object.oid)) {
1282                         warning(_("HEAD %s is not a commit!"),
1283                                 oid_to_hex(&oid));
1284                 }
1285                 if (parse_commit(current_head))
1286                         return error(_("could not parse HEAD commit"));
1287         }
1288         *head = current_head;
1289
1290         return 0;
1291 }
1292
1293 /*
1294  * Try to commit without forking 'git commit'. In some cases we need
1295  * to run 'git commit' to display an error message
1296  *
1297  * Returns:
1298  *  -1 - error unable to commit
1299  *   0 - success
1300  *   1 - run 'git commit'
1301  */
1302 static int try_to_commit(struct repository *r,
1303                          struct strbuf *msg, const char *author,
1304                          struct replay_opts *opts, unsigned int flags,
1305                          struct object_id *oid)
1306 {
1307         struct object_id tree;
1308         struct commit *current_head = NULL;
1309         struct commit_list *parents = NULL;
1310         struct commit_extra_header *extra = NULL;
1311         struct strbuf err = STRBUF_INIT;
1312         struct strbuf commit_msg = STRBUF_INIT;
1313         char *amend_author = NULL;
1314         const char *hook_commit = NULL;
1315         enum commit_msg_cleanup_mode cleanup;
1316         int res = 0;
1317
1318         if (parse_head(r, &current_head))
1319                 return -1;
1320
1321         if (flags & AMEND_MSG) {
1322                 const char *exclude_gpgsig[] = { "gpgsig", NULL };
1323                 const char *out_enc = get_commit_output_encoding();
1324                 const char *message = logmsg_reencode(current_head, NULL,
1325                                                       out_enc);
1326
1327                 if (!msg) {
1328                         const char *orig_message = NULL;
1329
1330                         find_commit_subject(message, &orig_message);
1331                         msg = &commit_msg;
1332                         strbuf_addstr(msg, orig_message);
1333                         hook_commit = "HEAD";
1334                 }
1335                 author = amend_author = get_author(message);
1336                 unuse_commit_buffer(current_head, message);
1337                 if (!author) {
1338                         res = error(_("unable to parse commit author"));
1339                         goto out;
1340                 }
1341                 parents = copy_commit_list(current_head->parents);
1342                 extra = read_commit_extra_headers(current_head, exclude_gpgsig);
1343         } else if (current_head &&
1344                    (!(flags & CREATE_ROOT_COMMIT) || (flags & AMEND_MSG))) {
1345                 commit_list_insert(current_head, &parents);
1346         }
1347
1348         if (write_index_as_tree(&tree, r->index, r->index_file, 0, NULL)) {
1349                 res = error(_("git write-tree failed to write a tree"));
1350                 goto out;
1351         }
1352
1353         if (!(flags & ALLOW_EMPTY) && oideq(current_head ?
1354                                             get_commit_tree_oid(current_head) :
1355                                             the_hash_algo->empty_tree, &tree)) {
1356                 res = 1; /* run 'git commit' to display error message */
1357                 goto out;
1358         }
1359
1360         if (find_hook("prepare-commit-msg")) {
1361                 res = run_prepare_commit_msg_hook(r, msg, hook_commit);
1362                 if (res)
1363                         goto out;
1364                 if (strbuf_read_file(&commit_msg, git_path_commit_editmsg(),
1365                                      2048) < 0) {
1366                         res = error_errno(_("unable to read commit message "
1367                                               "from '%s'"),
1368                                             git_path_commit_editmsg());
1369                         goto out;
1370                 }
1371                 msg = &commit_msg;
1372         }
1373
1374         if (flags & CLEANUP_MSG)
1375                 cleanup = COMMIT_MSG_CLEANUP_ALL;
1376         else if ((opts->signoff || opts->record_origin) &&
1377                  !opts->explicit_cleanup)
1378                 cleanup = COMMIT_MSG_CLEANUP_SPACE;
1379         else
1380                 cleanup = opts->default_msg_cleanup;
1381
1382         if (cleanup != COMMIT_MSG_CLEANUP_NONE)
1383                 strbuf_stripspace(msg, cleanup == COMMIT_MSG_CLEANUP_ALL);
1384         if ((flags & EDIT_MSG) && message_is_empty(msg, cleanup)) {
1385                 res = 1; /* run 'git commit' to display error message */
1386                 goto out;
1387         }
1388
1389         reset_ident_date();
1390
1391         if (commit_tree_extended(msg->buf, msg->len, &tree, parents,
1392                                  oid, author, opts->gpg_sign, extra)) {
1393                 res = error(_("failed to write commit object"));
1394                 goto out;
1395         }
1396
1397         if (update_head_with_reflog(current_head, oid,
1398                                     getenv("GIT_REFLOG_ACTION"), msg, &err)) {
1399                 res = error("%s", err.buf);
1400                 goto out;
1401         }
1402
1403         run_commit_hook(0, r->index_file, "post-commit", NULL);
1404         if (flags & AMEND_MSG)
1405                 commit_post_rewrite(r, current_head, oid);
1406
1407 out:
1408         free_commit_extra_headers(extra);
1409         strbuf_release(&err);
1410         strbuf_release(&commit_msg);
1411         free(amend_author);
1412
1413         return res;
1414 }
1415
1416 static int do_commit(struct repository *r,
1417                      const char *msg_file, const char *author,
1418                      struct replay_opts *opts, unsigned int flags)
1419 {
1420         int res = 1;
1421
1422         if (!(flags & EDIT_MSG) && !(flags & VERIFY_MSG)) {
1423                 struct object_id oid;
1424                 struct strbuf sb = STRBUF_INIT;
1425
1426                 if (msg_file && strbuf_read_file(&sb, msg_file, 2048) < 0)
1427                         return error_errno(_("unable to read commit message "
1428                                              "from '%s'"),
1429                                            msg_file);
1430
1431                 res = try_to_commit(r, msg_file ? &sb : NULL,
1432                                     author, opts, flags, &oid);
1433                 strbuf_release(&sb);
1434                 if (!res) {
1435                         unlink(git_path_cherry_pick_head(r));
1436                         unlink(git_path_merge_msg(r));
1437                         if (!is_rebase_i(opts))
1438                                 print_commit_summary(r, NULL, &oid,
1439                                                 SUMMARY_SHOW_AUTHOR_DATE);
1440                         return res;
1441                 }
1442         }
1443         if (res == 1)
1444                 return run_git_commit(r, msg_file, opts, flags);
1445
1446         return res;
1447 }
1448
1449 static int is_original_commit_empty(struct commit *commit)
1450 {
1451         const struct object_id *ptree_oid;
1452
1453         if (parse_commit(commit))
1454                 return error(_("could not parse commit %s"),
1455                              oid_to_hex(&commit->object.oid));
1456         if (commit->parents) {
1457                 struct commit *parent = commit->parents->item;
1458                 if (parse_commit(parent))
1459                         return error(_("could not parse parent commit %s"),
1460                                 oid_to_hex(&parent->object.oid));
1461                 ptree_oid = get_commit_tree_oid(parent);
1462         } else {
1463                 ptree_oid = the_hash_algo->empty_tree; /* commit is root */
1464         }
1465
1466         return oideq(ptree_oid, get_commit_tree_oid(commit));
1467 }
1468
1469 /*
1470  * Do we run "git commit" with "--allow-empty"?
1471  */
1472 static int allow_empty(struct repository *r,
1473                        struct replay_opts *opts,
1474                        struct commit *commit)
1475 {
1476         int index_unchanged, empty_commit;
1477
1478         /*
1479          * Three cases:
1480          *
1481          * (1) we do not allow empty at all and error out.
1482          *
1483          * (2) we allow ones that were initially empty, but
1484          * forbid the ones that become empty;
1485          *
1486          * (3) we allow both.
1487          */
1488         if (!opts->allow_empty)
1489                 return 0; /* let "git commit" barf as necessary */
1490
1491         index_unchanged = is_index_unchanged(r);
1492         if (index_unchanged < 0)
1493                 return index_unchanged;
1494         if (!index_unchanged)
1495                 return 0; /* we do not have to say --allow-empty */
1496
1497         if (opts->keep_redundant_commits)
1498                 return 1;
1499
1500         empty_commit = is_original_commit_empty(commit);
1501         if (empty_commit < 0)
1502                 return empty_commit;
1503         if (!empty_commit)
1504                 return 0;
1505         else
1506                 return 1;
1507 }
1508
1509 static struct {
1510         char c;
1511         const char *str;
1512 } todo_command_info[] = {
1513         { 'p', "pick" },
1514         { 0,   "revert" },
1515         { 'e', "edit" },
1516         { 'r', "reword" },
1517         { 'f', "fixup" },
1518         { 's', "squash" },
1519         { 'x', "exec" },
1520         { 'b', "break" },
1521         { 'l', "label" },
1522         { 't', "reset" },
1523         { 'm', "merge" },
1524         { 0,   "noop" },
1525         { 'd', "drop" },
1526         { 0,   NULL }
1527 };
1528
1529 static const char *command_to_string(const enum todo_command command)
1530 {
1531         if (command < TODO_COMMENT)
1532                 return todo_command_info[command].str;
1533         die(_("unknown command: %d"), command);
1534 }
1535
1536 static char command_to_char(const enum todo_command command)
1537 {
1538         if (command < TODO_COMMENT && todo_command_info[command].c)
1539                 return todo_command_info[command].c;
1540         return comment_line_char;
1541 }
1542
1543 static int is_noop(const enum todo_command command)
1544 {
1545         return TODO_NOOP <= command;
1546 }
1547
1548 static int is_fixup(enum todo_command command)
1549 {
1550         return command == TODO_FIXUP || command == TODO_SQUASH;
1551 }
1552
1553 /* Does this command create a (non-merge) commit? */
1554 static int is_pick_or_similar(enum todo_command command)
1555 {
1556         switch (command) {
1557         case TODO_PICK:
1558         case TODO_REVERT:
1559         case TODO_EDIT:
1560         case TODO_REWORD:
1561         case TODO_FIXUP:
1562         case TODO_SQUASH:
1563                 return 1;
1564         default:
1565                 return 0;
1566         }
1567 }
1568
1569 static int update_squash_messages(struct repository *r,
1570                                   enum todo_command command,
1571                                   struct commit *commit,
1572                                   struct replay_opts *opts)
1573 {
1574         struct strbuf buf = STRBUF_INIT;
1575         int res;
1576         const char *message, *body;
1577
1578         if (opts->current_fixup_count > 0) {
1579                 struct strbuf header = STRBUF_INIT;
1580                 char *eol;
1581
1582                 if (strbuf_read_file(&buf, rebase_path_squash_msg(), 9) <= 0)
1583                         return error(_("could not read '%s'"),
1584                                 rebase_path_squash_msg());
1585
1586                 eol = buf.buf[0] != comment_line_char ?
1587                         buf.buf : strchrnul(buf.buf, '\n');
1588
1589                 strbuf_addf(&header, "%c ", comment_line_char);
1590                 strbuf_addf(&header, _("This is a combination of %d commits."),
1591                             opts->current_fixup_count + 2);
1592                 strbuf_splice(&buf, 0, eol - buf.buf, header.buf, header.len);
1593                 strbuf_release(&header);
1594         } else {
1595                 struct object_id head;
1596                 struct commit *head_commit;
1597                 const char *head_message, *body;
1598
1599                 if (get_oid("HEAD", &head))
1600                         return error(_("need a HEAD to fixup"));
1601                 if (!(head_commit = lookup_commit_reference(r, &head)))
1602                         return error(_("could not read HEAD"));
1603                 if (!(head_message = get_commit_buffer(head_commit, NULL)))
1604                         return error(_("could not read HEAD's commit message"));
1605
1606                 find_commit_subject(head_message, &body);
1607                 if (write_message(body, strlen(body),
1608                                   rebase_path_fixup_msg(), 0)) {
1609                         unuse_commit_buffer(head_commit, head_message);
1610                         return error(_("cannot write '%s'"),
1611                                      rebase_path_fixup_msg());
1612                 }
1613
1614                 strbuf_addf(&buf, "%c ", comment_line_char);
1615                 strbuf_addf(&buf, _("This is a combination of %d commits."), 2);
1616                 strbuf_addf(&buf, "\n%c ", comment_line_char);
1617                 strbuf_addstr(&buf, _("This is the 1st commit message:"));
1618                 strbuf_addstr(&buf, "\n\n");
1619                 strbuf_addstr(&buf, body);
1620
1621                 unuse_commit_buffer(head_commit, head_message);
1622         }
1623
1624         if (!(message = get_commit_buffer(commit, NULL)))
1625                 return error(_("could not read commit message of %s"),
1626                              oid_to_hex(&commit->object.oid));
1627         find_commit_subject(message, &body);
1628
1629         if (command == TODO_SQUASH) {
1630                 unlink(rebase_path_fixup_msg());
1631                 strbuf_addf(&buf, "\n%c ", comment_line_char);
1632                 strbuf_addf(&buf, _("This is the commit message #%d:"),
1633                             ++opts->current_fixup_count + 1);
1634                 strbuf_addstr(&buf, "\n\n");
1635                 strbuf_addstr(&buf, body);
1636         } else if (command == TODO_FIXUP) {
1637                 strbuf_addf(&buf, "\n%c ", comment_line_char);
1638                 strbuf_addf(&buf, _("The commit message #%d will be skipped:"),
1639                             ++opts->current_fixup_count + 1);
1640                 strbuf_addstr(&buf, "\n\n");
1641                 strbuf_add_commented_lines(&buf, body, strlen(body));
1642         } else
1643                 return error(_("unknown command: %d"), command);
1644         unuse_commit_buffer(commit, message);
1645
1646         res = write_message(buf.buf, buf.len, rebase_path_squash_msg(), 0);
1647         strbuf_release(&buf);
1648
1649         if (!res) {
1650                 strbuf_addf(&opts->current_fixups, "%s%s %s",
1651                             opts->current_fixups.len ? "\n" : "",
1652                             command_to_string(command),
1653                             oid_to_hex(&commit->object.oid));
1654                 res = write_message(opts->current_fixups.buf,
1655                                     opts->current_fixups.len,
1656                                     rebase_path_current_fixups(), 0);
1657         }
1658
1659         return res;
1660 }
1661
1662 static void flush_rewritten_pending(void)
1663 {
1664         struct strbuf buf = STRBUF_INIT;
1665         struct object_id newoid;
1666         FILE *out;
1667
1668         if (strbuf_read_file(&buf, rebase_path_rewritten_pending(), (GIT_MAX_HEXSZ + 1) * 2) > 0 &&
1669             !get_oid("HEAD", &newoid) &&
1670             (out = fopen_or_warn(rebase_path_rewritten_list(), "a"))) {
1671                 char *bol = buf.buf, *eol;
1672
1673                 while (*bol) {
1674                         eol = strchrnul(bol, '\n');
1675                         fprintf(out, "%.*s %s\n", (int)(eol - bol),
1676                                         bol, oid_to_hex(&newoid));
1677                         if (!*eol)
1678                                 break;
1679                         bol = eol + 1;
1680                 }
1681                 fclose(out);
1682                 unlink(rebase_path_rewritten_pending());
1683         }
1684         strbuf_release(&buf);
1685 }
1686
1687 static void record_in_rewritten(struct object_id *oid,
1688                 enum todo_command next_command)
1689 {
1690         FILE *out = fopen_or_warn(rebase_path_rewritten_pending(), "a");
1691
1692         if (!out)
1693                 return;
1694
1695         fprintf(out, "%s\n", oid_to_hex(oid));
1696         fclose(out);
1697
1698         if (!is_fixup(next_command))
1699                 flush_rewritten_pending();
1700 }
1701
1702 static int do_pick_commit(struct repository *r,
1703                           enum todo_command command,
1704                           struct commit *commit,
1705                           struct replay_opts *opts,
1706                           int final_fixup, int *check_todo)
1707 {
1708         unsigned int flags = opts->edit ? EDIT_MSG : 0;
1709         const char *msg_file = opts->edit ? NULL : git_path_merge_msg(r);
1710         struct object_id head;
1711         struct commit *base, *next, *parent;
1712         const char *base_label, *next_label;
1713         char *author = NULL;
1714         struct commit_message msg = { NULL, NULL, NULL, NULL };
1715         struct strbuf msgbuf = STRBUF_INIT;
1716         int res, unborn = 0, reword = 0, allow;
1717
1718         if (opts->no_commit) {
1719                 /*
1720                  * We do not intend to commit immediately.  We just want to
1721                  * merge the differences in, so let's compute the tree
1722                  * that represents the "current" state for merge-recursive
1723                  * to work on.
1724                  */
1725                 if (write_index_as_tree(&head, r->index, r->index_file, 0, NULL))
1726                         return error(_("your index file is unmerged."));
1727         } else {
1728                 unborn = get_oid("HEAD", &head);
1729                 /* Do we want to generate a root commit? */
1730                 if (is_pick_or_similar(command) && opts->have_squash_onto &&
1731                     oideq(&head, &opts->squash_onto)) {
1732                         if (is_fixup(command))
1733                                 return error(_("cannot fixup root commit"));
1734                         flags |= CREATE_ROOT_COMMIT;
1735                         unborn = 1;
1736                 } else if (unborn)
1737                         oidcpy(&head, the_hash_algo->empty_tree);
1738                 if (index_differs_from(r, unborn ? empty_tree_oid_hex() : "HEAD",
1739                                        NULL, 0))
1740                         return error_dirty_index(r, opts);
1741         }
1742         discard_index(r->index);
1743
1744         if (!commit->parents)
1745                 parent = NULL;
1746         else if (commit->parents->next) {
1747                 /* Reverting or cherry-picking a merge commit */
1748                 int cnt;
1749                 struct commit_list *p;
1750
1751                 if (!opts->mainline)
1752                         return error(_("commit %s is a merge but no -m option was given."),
1753                                 oid_to_hex(&commit->object.oid));
1754
1755                 for (cnt = 1, p = commit->parents;
1756                      cnt != opts->mainline && p;
1757                      cnt++)
1758                         p = p->next;
1759                 if (cnt != opts->mainline || !p)
1760                         return error(_("commit %s does not have parent %d"),
1761                                 oid_to_hex(&commit->object.oid), opts->mainline);
1762                 parent = p->item;
1763         } else if (1 < opts->mainline)
1764                 /*
1765                  *  Non-first parent explicitly specified as mainline for
1766                  *  non-merge commit
1767                  */
1768                 return error(_("commit %s does not have parent %d"),
1769                              oid_to_hex(&commit->object.oid), opts->mainline);
1770         else
1771                 parent = commit->parents->item;
1772
1773         if (get_message(commit, &msg) != 0)
1774                 return error(_("cannot get commit message for %s"),
1775                         oid_to_hex(&commit->object.oid));
1776
1777         if (opts->allow_ff && !is_fixup(command) &&
1778             ((parent && oideq(&parent->object.oid, &head)) ||
1779              (!parent && unborn))) {
1780                 if (is_rebase_i(opts))
1781                         write_author_script(msg.message);
1782                 res = fast_forward_to(r, &commit->object.oid, &head, unborn,
1783                         opts);
1784                 if (res || command != TODO_REWORD)
1785                         goto leave;
1786                 reword = 1;
1787                 msg_file = NULL;
1788                 goto fast_forward_edit;
1789         }
1790         if (parent && parse_commit(parent) < 0)
1791                 /* TRANSLATORS: The first %s will be a "todo" command like
1792                    "revert" or "pick", the second %s a SHA1. */
1793                 return error(_("%s: cannot parse parent commit %s"),
1794                         command_to_string(command),
1795                         oid_to_hex(&parent->object.oid));
1796
1797         /*
1798          * "commit" is an existing commit.  We would want to apply
1799          * the difference it introduces since its first parent "prev"
1800          * on top of the current HEAD if we are cherry-pick.  Or the
1801          * reverse of it if we are revert.
1802          */
1803
1804         if (command == TODO_REVERT) {
1805                 base = commit;
1806                 base_label = msg.label;
1807                 next = parent;
1808                 next_label = msg.parent_label;
1809                 strbuf_addstr(&msgbuf, "Revert \"");
1810                 strbuf_addstr(&msgbuf, msg.subject);
1811                 strbuf_addstr(&msgbuf, "\"\n\nThis reverts commit ");
1812                 strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1813
1814                 if (commit->parents && commit->parents->next) {
1815                         strbuf_addstr(&msgbuf, ", reversing\nchanges made to ");
1816                         strbuf_addstr(&msgbuf, oid_to_hex(&parent->object.oid));
1817                 }
1818                 strbuf_addstr(&msgbuf, ".\n");
1819         } else {
1820                 const char *p;
1821
1822                 base = parent;
1823                 base_label = msg.parent_label;
1824                 next = commit;
1825                 next_label = msg.label;
1826
1827                 /* Append the commit log message to msgbuf. */
1828                 if (find_commit_subject(msg.message, &p))
1829                         strbuf_addstr(&msgbuf, p);
1830
1831                 if (opts->record_origin) {
1832                         strbuf_complete_line(&msgbuf);
1833                         if (!has_conforming_footer(&msgbuf, NULL, 0))
1834                                 strbuf_addch(&msgbuf, '\n');
1835                         strbuf_addstr(&msgbuf, cherry_picked_prefix);
1836                         strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1837                         strbuf_addstr(&msgbuf, ")\n");
1838                 }
1839                 if (!is_fixup(command))
1840                         author = get_author(msg.message);
1841         }
1842
1843         if (command == TODO_REWORD)
1844                 reword = 1;
1845         else if (is_fixup(command)) {
1846                 if (update_squash_messages(r, command, commit, opts))
1847                         return -1;
1848                 flags |= AMEND_MSG;
1849                 if (!final_fixup)
1850                         msg_file = rebase_path_squash_msg();
1851                 else if (file_exists(rebase_path_fixup_msg())) {
1852                         flags |= CLEANUP_MSG;
1853                         msg_file = rebase_path_fixup_msg();
1854                 } else {
1855                         const char *dest = git_path_squash_msg(r);
1856                         unlink(dest);
1857                         if (copy_file(dest, rebase_path_squash_msg(), 0666))
1858                                 return error(_("could not rename '%s' to '%s'"),
1859                                              rebase_path_squash_msg(), dest);
1860                         unlink(git_path_merge_msg(r));
1861                         msg_file = dest;
1862                         flags |= EDIT_MSG;
1863                 }
1864         }
1865
1866         if (opts->signoff && !is_fixup(command))
1867                 append_signoff(&msgbuf, 0, 0);
1868
1869         if (is_rebase_i(opts) && write_author_script(msg.message) < 0)
1870                 res = -1;
1871         else if (!opts->strategy || !strcmp(opts->strategy, "recursive") || command == TODO_REVERT) {
1872                 res = do_recursive_merge(r, base, next, base_label, next_label,
1873                                          &head, &msgbuf, opts);
1874                 if (res < 0)
1875                         goto leave;
1876
1877                 res |= write_message(msgbuf.buf, msgbuf.len,
1878                                      git_path_merge_msg(r), 0);
1879         } else {
1880                 struct commit_list *common = NULL;
1881                 struct commit_list *remotes = NULL;
1882
1883                 res = write_message(msgbuf.buf, msgbuf.len,
1884                                     git_path_merge_msg(r), 0);
1885
1886                 commit_list_insert(base, &common);
1887                 commit_list_insert(next, &remotes);
1888                 res |= try_merge_command(r, opts->strategy,
1889                                          opts->xopts_nr, (const char **)opts->xopts,
1890                                         common, oid_to_hex(&head), remotes);
1891                 free_commit_list(common);
1892                 free_commit_list(remotes);
1893         }
1894         strbuf_release(&msgbuf);
1895
1896         /*
1897          * If the merge was clean or if it failed due to conflict, we write
1898          * CHERRY_PICK_HEAD for the subsequent invocation of commit to use.
1899          * However, if the merge did not even start, then we don't want to
1900          * write it at all.
1901          */
1902         if (command == TODO_PICK && !opts->no_commit && (res == 0 || res == 1) &&
1903             update_ref(NULL, "CHERRY_PICK_HEAD", &commit->object.oid, NULL,
1904                        REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1905                 res = -1;
1906         if (command == TODO_REVERT && ((opts->no_commit && res == 0) || res == 1) &&
1907             update_ref(NULL, "REVERT_HEAD", &commit->object.oid, NULL,
1908                        REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1909                 res = -1;
1910
1911         if (res) {
1912                 error(command == TODO_REVERT
1913                       ? _("could not revert %s... %s")
1914                       : _("could not apply %s... %s"),
1915                       short_commit_name(commit), msg.subject);
1916                 print_advice(r, res == 1, opts);
1917                 repo_rerere(r, opts->allow_rerere_auto);
1918                 goto leave;
1919         }
1920
1921         allow = allow_empty(r, opts, commit);
1922         if (allow < 0) {
1923                 res = allow;
1924                 goto leave;
1925         } else if (allow)
1926                 flags |= ALLOW_EMPTY;
1927         if (!opts->no_commit) {
1928                 if (author || command == TODO_REVERT || (flags & AMEND_MSG))
1929                         res = do_commit(r, msg_file, author, opts, flags);
1930                 else
1931                         res = error(_("unable to parse commit author"));
1932                 *check_todo = !!(flags & EDIT_MSG);
1933                 if (!res && reword) {
1934 fast_forward_edit:
1935                         res = run_git_commit(r, NULL, opts, EDIT_MSG |
1936                                              VERIFY_MSG | AMEND_MSG |
1937                                              (flags & ALLOW_EMPTY));
1938                         *check_todo = 1;
1939                 }
1940         }
1941
1942
1943         if (!res && final_fixup) {
1944                 unlink(rebase_path_fixup_msg());
1945                 unlink(rebase_path_squash_msg());
1946                 unlink(rebase_path_current_fixups());
1947                 strbuf_reset(&opts->current_fixups);
1948                 opts->current_fixup_count = 0;
1949         }
1950
1951 leave:
1952         free_message(commit, &msg);
1953         free(author);
1954         update_abort_safety_file();
1955
1956         return res;
1957 }
1958
1959 static int prepare_revs(struct replay_opts *opts)
1960 {
1961         /*
1962          * picking (but not reverting) ranges (but not individual revisions)
1963          * should be done in reverse
1964          */
1965         if (opts->action == REPLAY_PICK && !opts->revs->no_walk)
1966                 opts->revs->reverse ^= 1;
1967
1968         if (prepare_revision_walk(opts->revs))
1969                 return error(_("revision walk setup failed"));
1970
1971         return 0;
1972 }
1973
1974 static int read_and_refresh_cache(struct repository *r,
1975                                   struct replay_opts *opts)
1976 {
1977         struct lock_file index_lock = LOCK_INIT;
1978         int index_fd = repo_hold_locked_index(r, &index_lock, 0);
1979         if (repo_read_index(r) < 0) {
1980                 rollback_lock_file(&index_lock);
1981                 return error(_("git %s: failed to read the index"),
1982                         _(action_name(opts)));
1983         }
1984         refresh_index(r->index, REFRESH_QUIET|REFRESH_UNMERGED, NULL, NULL, NULL);
1985         if (index_fd >= 0) {
1986                 if (write_locked_index(r->index, &index_lock,
1987                                        COMMIT_LOCK | SKIP_IF_UNCHANGED)) {
1988                         return error(_("git %s: failed to refresh the index"),
1989                                 _(action_name(opts)));
1990                 }
1991         }
1992         return 0;
1993 }
1994
1995 enum todo_item_flags {
1996         TODO_EDIT_MERGE_MSG = 1
1997 };
1998
1999 void todo_list_release(struct todo_list *todo_list)
2000 {
2001         strbuf_release(&todo_list->buf);
2002         FREE_AND_NULL(todo_list->items);
2003         todo_list->nr = todo_list->alloc = 0;
2004 }
2005
2006 static struct todo_item *append_new_todo(struct todo_list *todo_list)
2007 {
2008         ALLOC_GROW(todo_list->items, todo_list->nr + 1, todo_list->alloc);
2009         return todo_list->items + todo_list->nr++;
2010 }
2011
2012 const char *todo_item_get_arg(struct todo_list *todo_list,
2013                               struct todo_item *item)
2014 {
2015         return todo_list->buf.buf + item->arg_offset;
2016 }
2017
2018 static int is_command(enum todo_command command, const char **bol)
2019 {
2020         const char *str = todo_command_info[command].str;
2021         const char nick = todo_command_info[command].c;
2022         const char *p = *bol + 1;
2023
2024         return skip_prefix(*bol, str, bol) ||
2025                 ((nick && **bol == nick) &&
2026                  (*p == ' ' || *p == '\t' || *p == '\n' || *p == '\r' || !*p) &&
2027                  (*bol = p));
2028 }
2029
2030 static int parse_insn_line(struct repository *r, struct todo_item *item,
2031                            const char *buf, const char *bol, char *eol)
2032 {
2033         struct object_id commit_oid;
2034         char *end_of_object_name;
2035         int i, saved, status, padding;
2036
2037         item->flags = 0;
2038
2039         /* left-trim */
2040         bol += strspn(bol, " \t");
2041
2042         if (bol == eol || *bol == '\r' || *bol == comment_line_char) {
2043                 item->command = TODO_COMMENT;
2044                 item->commit = NULL;
2045                 item->arg_offset = bol - buf;
2046                 item->arg_len = eol - bol;
2047                 return 0;
2048         }
2049
2050         for (i = 0; i < TODO_COMMENT; i++)
2051                 if (is_command(i, &bol)) {
2052                         item->command = i;
2053                         break;
2054                 }
2055         if (i >= TODO_COMMENT)
2056                 return -1;
2057
2058         /* Eat up extra spaces/ tabs before object name */
2059         padding = strspn(bol, " \t");
2060         bol += padding;
2061
2062         if (item->command == TODO_NOOP || item->command == TODO_BREAK) {
2063                 if (bol != eol)
2064                         return error(_("%s does not accept arguments: '%s'"),
2065                                      command_to_string(item->command), bol);
2066                 item->commit = NULL;
2067                 item->arg_offset = bol - buf;
2068                 item->arg_len = eol - bol;
2069                 return 0;
2070         }
2071
2072         if (!padding)
2073                 return error(_("missing arguments for %s"),
2074                              command_to_string(item->command));
2075
2076         if (item->command == TODO_EXEC || item->command == TODO_LABEL ||
2077             item->command == TODO_RESET) {
2078                 item->commit = NULL;
2079                 item->arg_offset = bol - buf;
2080                 item->arg_len = (int)(eol - bol);
2081                 return 0;
2082         }
2083
2084         if (item->command == TODO_MERGE) {
2085                 if (skip_prefix(bol, "-C", &bol))
2086                         bol += strspn(bol, " \t");
2087                 else if (skip_prefix(bol, "-c", &bol)) {
2088                         bol += strspn(bol, " \t");
2089                         item->flags |= TODO_EDIT_MERGE_MSG;
2090                 } else {
2091                         item->flags |= TODO_EDIT_MERGE_MSG;
2092                         item->commit = NULL;
2093                         item->arg_offset = bol - buf;
2094                         item->arg_len = (int)(eol - bol);
2095                         return 0;
2096                 }
2097         }
2098
2099         end_of_object_name = (char *) bol + strcspn(bol, " \t\n");
2100         saved = *end_of_object_name;
2101         *end_of_object_name = '\0';
2102         status = get_oid(bol, &commit_oid);
2103         *end_of_object_name = saved;
2104
2105         bol = end_of_object_name + strspn(end_of_object_name, " \t");
2106         item->arg_offset = bol - buf;
2107         item->arg_len = (int)(eol - bol);
2108
2109         if (status < 0)
2110                 return error(_("could not parse '%.*s'"),
2111                              (int)(end_of_object_name - bol), bol);
2112
2113         item->commit = lookup_commit_reference(r, &commit_oid);
2114         return !item->commit;
2115 }
2116
2117 int sequencer_get_last_command(struct repository *r, enum replay_action *action)
2118 {
2119         const char *todo_file, *bol;
2120         struct strbuf buf = STRBUF_INIT;
2121         int ret = 0;
2122
2123         todo_file = git_path_todo_file();
2124         if (strbuf_read_file(&buf, todo_file, 0) < 0) {
2125                 if (errno == ENOENT || errno == ENOTDIR)
2126                         return -1;
2127                 else
2128                         return error_errno("unable to open '%s'", todo_file);
2129         }
2130         bol = buf.buf + strspn(buf.buf, " \t\r\n");
2131         if (is_command(TODO_PICK, &bol) && (*bol == ' ' || *bol == '\t'))
2132                 *action = REPLAY_PICK;
2133         else if (is_command(TODO_REVERT, &bol) &&
2134                  (*bol == ' ' || *bol == '\t'))
2135                 *action = REPLAY_REVERT;
2136         else
2137                 ret = -1;
2138
2139         strbuf_release(&buf);
2140
2141         return ret;
2142 }
2143
2144 int todo_list_parse_insn_buffer(struct repository *r, char *buf,
2145                                 struct todo_list *todo_list)
2146 {
2147         struct todo_item *item;
2148         char *p = buf, *next_p;
2149         int i, res = 0, fixup_okay = file_exists(rebase_path_done());
2150
2151         todo_list->current = todo_list->nr = 0;
2152
2153         for (i = 1; *p; i++, p = next_p) {
2154                 char *eol = strchrnul(p, '\n');
2155
2156                 next_p = *eol ? eol + 1 /* skip LF */ : eol;
2157
2158                 if (p != eol && eol[-1] == '\r')
2159                         eol--; /* strip Carriage Return */
2160
2161                 item = append_new_todo(todo_list);
2162                 item->offset_in_buf = p - todo_list->buf.buf;
2163                 if (parse_insn_line(r, item, buf, p, eol)) {
2164                         res = error(_("invalid line %d: %.*s"),
2165                                 i, (int)(eol - p), p);
2166                         item->command = TODO_COMMENT + 1;
2167                         item->arg_offset = p - buf;
2168                         item->arg_len = (int)(eol - p);
2169                         item->commit = NULL;
2170                 }
2171
2172                 if (fixup_okay)
2173                         ; /* do nothing */
2174                 else if (is_fixup(item->command))
2175                         return error(_("cannot '%s' without a previous commit"),
2176                                 command_to_string(item->command));
2177                 else if (!is_noop(item->command))
2178                         fixup_okay = 1;
2179         }
2180
2181         return res;
2182 }
2183
2184 static int count_commands(struct todo_list *todo_list)
2185 {
2186         int count = 0, i;
2187
2188         for (i = 0; i < todo_list->nr; i++)
2189                 if (todo_list->items[i].command != TODO_COMMENT)
2190                         count++;
2191
2192         return count;
2193 }
2194
2195 static int get_item_line_offset(struct todo_list *todo_list, int index)
2196 {
2197         return index < todo_list->nr ?
2198                 todo_list->items[index].offset_in_buf : todo_list->buf.len;
2199 }
2200
2201 static const char *get_item_line(struct todo_list *todo_list, int index)
2202 {
2203         return todo_list->buf.buf + get_item_line_offset(todo_list, index);
2204 }
2205
2206 static int get_item_line_length(struct todo_list *todo_list, int index)
2207 {
2208         return get_item_line_offset(todo_list, index + 1)
2209                 -  get_item_line_offset(todo_list, index);
2210 }
2211
2212 static ssize_t strbuf_read_file_or_whine(struct strbuf *sb, const char *path)
2213 {
2214         int fd;
2215         ssize_t len;
2216
2217         fd = open(path, O_RDONLY);
2218         if (fd < 0)
2219                 return error_errno(_("could not open '%s'"), path);
2220         len = strbuf_read(sb, fd, 0);
2221         close(fd);
2222         if (len < 0)
2223                 return error(_("could not read '%s'."), path);
2224         return len;
2225 }
2226
2227 static int have_finished_the_last_pick(void)
2228 {
2229         struct strbuf buf = STRBUF_INIT;
2230         const char *eol;
2231         const char *todo_path = git_path_todo_file();
2232         int ret = 0;
2233
2234         if (strbuf_read_file(&buf, todo_path, 0) < 0) {
2235                 if (errno == ENOENT) {
2236                         return 0;
2237                 } else {
2238                         error_errno("unable to open '%s'", todo_path);
2239                         return 0;
2240                 }
2241         }
2242         /* If there is only one line then we are done */
2243         eol = strchr(buf.buf, '\n');
2244         if (!eol || !eol[1])
2245                 ret = 1;
2246
2247         strbuf_release(&buf);
2248
2249         return ret;
2250 }
2251
2252 void sequencer_post_commit_cleanup(struct repository *r, int verbose)
2253 {
2254         struct replay_opts opts = REPLAY_OPTS_INIT;
2255         int need_cleanup = 0;
2256
2257         if (file_exists(git_path_cherry_pick_head(r))) {
2258                 if (!unlink(git_path_cherry_pick_head(r)) && verbose)
2259                         warning(_("cancelling a cherry picking in progress"));
2260                 opts.action = REPLAY_PICK;
2261                 need_cleanup = 1;
2262         }
2263
2264         if (file_exists(git_path_revert_head(r))) {
2265                 if (!unlink(git_path_revert_head(r)) && verbose)
2266                         warning(_("cancelling a revert in progress"));
2267                 opts.action = REPLAY_REVERT;
2268                 need_cleanup = 1;
2269         }
2270
2271         if (!need_cleanup)
2272                 return;
2273
2274         if (!have_finished_the_last_pick())
2275                 return;
2276
2277         sequencer_remove_state(&opts);
2278 }
2279
2280 static int read_populate_todo(struct repository *r,
2281                               struct todo_list *todo_list,
2282                               struct replay_opts *opts)
2283 {
2284         struct stat st;
2285         const char *todo_file = get_todo_path(opts);
2286         int res;
2287
2288         strbuf_reset(&todo_list->buf);
2289         if (strbuf_read_file_or_whine(&todo_list->buf, todo_file) < 0)
2290                 return -1;
2291
2292         res = stat(todo_file, &st);
2293         if (res)
2294                 return error(_("could not stat '%s'"), todo_file);
2295         fill_stat_data(&todo_list->stat, &st);
2296
2297         res = todo_list_parse_insn_buffer(r, todo_list->buf.buf, todo_list);
2298         if (res) {
2299                 if (is_rebase_i(opts))
2300                         return error(_("please fix this using "
2301                                        "'git rebase --edit-todo'."));
2302                 return error(_("unusable instruction sheet: '%s'"), todo_file);
2303         }
2304
2305         if (!todo_list->nr &&
2306             (!is_rebase_i(opts) || !file_exists(rebase_path_done())))
2307                 return error(_("no commits parsed."));
2308
2309         if (!is_rebase_i(opts)) {
2310                 enum todo_command valid =
2311                         opts->action == REPLAY_PICK ? TODO_PICK : TODO_REVERT;
2312                 int i;
2313
2314                 for (i = 0; i < todo_list->nr; i++)
2315                         if (valid == todo_list->items[i].command)
2316                                 continue;
2317                         else if (valid == TODO_PICK)
2318                                 return error(_("cannot cherry-pick during a revert."));
2319                         else
2320                                 return error(_("cannot revert during a cherry-pick."));
2321         }
2322
2323         if (is_rebase_i(opts)) {
2324                 struct todo_list done = TODO_LIST_INIT;
2325                 FILE *f = fopen_or_warn(rebase_path_msgtotal(), "w");
2326
2327                 if (strbuf_read_file(&done.buf, rebase_path_done(), 0) > 0 &&
2328                     !todo_list_parse_insn_buffer(r, done.buf.buf, &done))
2329                         todo_list->done_nr = count_commands(&done);
2330                 else
2331                         todo_list->done_nr = 0;
2332
2333                 todo_list->total_nr = todo_list->done_nr
2334                         + count_commands(todo_list);
2335                 todo_list_release(&done);
2336
2337                 if (f) {
2338                         fprintf(f, "%d\n", todo_list->total_nr);
2339                         fclose(f);
2340                 }
2341         }
2342
2343         return 0;
2344 }
2345
2346 static int git_config_string_dup(char **dest,
2347                                  const char *var, const char *value)
2348 {
2349         if (!value)
2350                 return config_error_nonbool(var);
2351         free(*dest);
2352         *dest = xstrdup(value);
2353         return 0;
2354 }
2355
2356 static int populate_opts_cb(const char *key, const char *value, void *data)
2357 {
2358         struct replay_opts *opts = data;
2359         int error_flag = 1;
2360
2361         if (!value)
2362                 error_flag = 0;
2363         else if (!strcmp(key, "options.no-commit"))
2364                 opts->no_commit = git_config_bool_or_int(key, value, &error_flag);
2365         else if (!strcmp(key, "options.edit"))
2366                 opts->edit = git_config_bool_or_int(key, value, &error_flag);
2367         else if (!strcmp(key, "options.allow-empty"))
2368                 opts->allow_empty =
2369                         git_config_bool_or_int(key, value, &error_flag);
2370         else if (!strcmp(key, "options.allow-empty-message"))
2371                 opts->allow_empty_message =
2372                         git_config_bool_or_int(key, value, &error_flag);
2373         else if (!strcmp(key, "options.keep-redundant-commits"))
2374                 opts->keep_redundant_commits =
2375                         git_config_bool_or_int(key, value, &error_flag);
2376         else if (!strcmp(key, "options.signoff"))
2377                 opts->signoff = git_config_bool_or_int(key, value, &error_flag);
2378         else if (!strcmp(key, "options.record-origin"))
2379                 opts->record_origin = git_config_bool_or_int(key, value, &error_flag);
2380         else if (!strcmp(key, "options.allow-ff"))
2381                 opts->allow_ff = git_config_bool_or_int(key, value, &error_flag);
2382         else if (!strcmp(key, "options.mainline"))
2383                 opts->mainline = git_config_int(key, value);
2384         else if (!strcmp(key, "options.strategy"))
2385                 git_config_string_dup(&opts->strategy, key, value);
2386         else if (!strcmp(key, "options.gpg-sign"))
2387                 git_config_string_dup(&opts->gpg_sign, key, value);
2388         else if (!strcmp(key, "options.strategy-option")) {
2389                 ALLOC_GROW(opts->xopts, opts->xopts_nr + 1, opts->xopts_alloc);
2390                 opts->xopts[opts->xopts_nr++] = xstrdup(value);
2391         } else if (!strcmp(key, "options.allow-rerere-auto"))
2392                 opts->allow_rerere_auto =
2393                         git_config_bool_or_int(key, value, &error_flag) ?
2394                                 RERERE_AUTOUPDATE : RERERE_NOAUTOUPDATE;
2395         else if (!strcmp(key, "options.default-msg-cleanup")) {
2396                 opts->explicit_cleanup = 1;
2397                 opts->default_msg_cleanup = get_cleanup_mode(value, 1);
2398         } else
2399                 return error(_("invalid key: %s"), key);
2400
2401         if (!error_flag)
2402                 return error(_("invalid value for %s: %s"), key, value);
2403
2404         return 0;
2405 }
2406
2407 void parse_strategy_opts(struct replay_opts *opts, char *raw_opts)
2408 {
2409         int i;
2410         char *strategy_opts_string = raw_opts;
2411
2412         if (*strategy_opts_string == ' ')
2413                 strategy_opts_string++;
2414
2415         opts->xopts_nr = split_cmdline(strategy_opts_string,
2416                                        (const char ***)&opts->xopts);
2417         for (i = 0; i < opts->xopts_nr; i++) {
2418                 const char *arg = opts->xopts[i];
2419
2420                 skip_prefix(arg, "--", &arg);
2421                 opts->xopts[i] = xstrdup(arg);
2422         }
2423 }
2424
2425 static void read_strategy_opts(struct replay_opts *opts, struct strbuf *buf)
2426 {
2427         strbuf_reset(buf);
2428         if (!read_oneliner(buf, rebase_path_strategy(), 0))
2429                 return;
2430         opts->strategy = strbuf_detach(buf, NULL);
2431         if (!read_oneliner(buf, rebase_path_strategy_opts(), 0))
2432                 return;
2433
2434         parse_strategy_opts(opts, buf->buf);
2435 }
2436
2437 static int read_populate_opts(struct replay_opts *opts)
2438 {
2439         if (is_rebase_i(opts)) {
2440                 struct strbuf buf = STRBUF_INIT;
2441
2442                 if (read_oneliner(&buf, rebase_path_gpg_sign_opt(), 1)) {
2443                         if (!starts_with(buf.buf, "-S"))
2444                                 strbuf_reset(&buf);
2445                         else {
2446                                 free(opts->gpg_sign);
2447                                 opts->gpg_sign = xstrdup(buf.buf + 2);
2448                         }
2449                         strbuf_reset(&buf);
2450                 }
2451
2452                 if (read_oneliner(&buf, rebase_path_allow_rerere_autoupdate(), 1)) {
2453                         if (!strcmp(buf.buf, "--rerere-autoupdate"))
2454                                 opts->allow_rerere_auto = RERERE_AUTOUPDATE;
2455                         else if (!strcmp(buf.buf, "--no-rerere-autoupdate"))
2456                                 opts->allow_rerere_auto = RERERE_NOAUTOUPDATE;
2457                         strbuf_reset(&buf);
2458                 }
2459
2460                 if (file_exists(rebase_path_verbose()))
2461                         opts->verbose = 1;
2462
2463                 if (file_exists(rebase_path_quiet()))
2464                         opts->quiet = 1;
2465
2466                 if (file_exists(rebase_path_signoff())) {
2467                         opts->allow_ff = 0;
2468                         opts->signoff = 1;
2469                 }
2470
2471                 if (file_exists(rebase_path_reschedule_failed_exec()))
2472                         opts->reschedule_failed_exec = 1;
2473
2474                 read_strategy_opts(opts, &buf);
2475                 strbuf_release(&buf);
2476
2477                 if (read_oneliner(&opts->current_fixups,
2478                                   rebase_path_current_fixups(), 1)) {
2479                         const char *p = opts->current_fixups.buf;
2480                         opts->current_fixup_count = 1;
2481                         while ((p = strchr(p, '\n'))) {
2482                                 opts->current_fixup_count++;
2483                                 p++;
2484                         }
2485                 }
2486
2487                 if (read_oneliner(&buf, rebase_path_squash_onto(), 0)) {
2488                         if (get_oid_hex(buf.buf, &opts->squash_onto) < 0)
2489                                 return error(_("unusable squash-onto"));
2490                         opts->have_squash_onto = 1;
2491                 }
2492
2493                 return 0;
2494         }
2495
2496         if (!file_exists(git_path_opts_file()))
2497                 return 0;
2498         /*
2499          * The function git_parse_source(), called from git_config_from_file(),
2500          * may die() in case of a syntactically incorrect file. We do not care
2501          * about this case, though, because we wrote that file ourselves, so we
2502          * are pretty certain that it is syntactically correct.
2503          */
2504         if (git_config_from_file(populate_opts_cb, git_path_opts_file(), opts) < 0)
2505                 return error(_("malformed options sheet: '%s'"),
2506                         git_path_opts_file());
2507         return 0;
2508 }
2509
2510 static void write_strategy_opts(struct replay_opts *opts)
2511 {
2512         int i;
2513         struct strbuf buf = STRBUF_INIT;
2514
2515         for (i = 0; i < opts->xopts_nr; ++i)
2516                 strbuf_addf(&buf, " --%s", opts->xopts[i]);
2517
2518         write_file(rebase_path_strategy_opts(), "%s\n", buf.buf);
2519         strbuf_release(&buf);
2520 }
2521
2522 int write_basic_state(struct replay_opts *opts, const char *head_name,
2523                       struct commit *onto, const char *orig_head)
2524 {
2525         const char *quiet = getenv("GIT_QUIET");
2526
2527         if (head_name)
2528                 write_file(rebase_path_head_name(), "%s\n", head_name);
2529         if (onto)
2530                 write_file(rebase_path_onto(), "%s\n",
2531                            oid_to_hex(&onto->object.oid));
2532         if (orig_head)
2533                 write_file(rebase_path_orig_head(), "%s\n", orig_head);
2534
2535         if (quiet)
2536                 write_file(rebase_path_quiet(), "%s\n", quiet);
2537         if (opts->verbose)
2538                 write_file(rebase_path_verbose(), "%s", "");
2539         if (opts->strategy)
2540                 write_file(rebase_path_strategy(), "%s\n", opts->strategy);
2541         if (opts->xopts_nr > 0)
2542                 write_strategy_opts(opts);
2543
2544         if (opts->allow_rerere_auto == RERERE_AUTOUPDATE)
2545                 write_file(rebase_path_allow_rerere_autoupdate(), "--rerere-autoupdate\n");
2546         else if (opts->allow_rerere_auto == RERERE_NOAUTOUPDATE)
2547                 write_file(rebase_path_allow_rerere_autoupdate(), "--no-rerere-autoupdate\n");
2548
2549         if (opts->gpg_sign)
2550                 write_file(rebase_path_gpg_sign_opt(), "-S%s\n", opts->gpg_sign);
2551         if (opts->signoff)
2552                 write_file(rebase_path_signoff(), "--signoff\n");
2553         if (opts->reschedule_failed_exec)
2554                 write_file(rebase_path_reschedule_failed_exec(), "%s", "");
2555
2556         return 0;
2557 }
2558
2559 static int walk_revs_populate_todo(struct todo_list *todo_list,
2560                                 struct replay_opts *opts)
2561 {
2562         enum todo_command command = opts->action == REPLAY_PICK ?
2563                 TODO_PICK : TODO_REVERT;
2564         const char *command_string = todo_command_info[command].str;
2565         struct commit *commit;
2566
2567         if (prepare_revs(opts))
2568                 return -1;
2569
2570         while ((commit = get_revision(opts->revs))) {
2571                 struct todo_item *item = append_new_todo(todo_list);
2572                 const char *commit_buffer = get_commit_buffer(commit, NULL);
2573                 const char *subject;
2574                 int subject_len;
2575
2576                 item->command = command;
2577                 item->commit = commit;
2578                 item->arg_offset = 0;
2579                 item->arg_len = 0;
2580                 item->offset_in_buf = todo_list->buf.len;
2581                 subject_len = find_commit_subject(commit_buffer, &subject);
2582                 strbuf_addf(&todo_list->buf, "%s %s %.*s\n", command_string,
2583                         short_commit_name(commit), subject_len, subject);
2584                 unuse_commit_buffer(commit, commit_buffer);
2585         }
2586
2587         if (!todo_list->nr)
2588                 return error(_("empty commit set passed"));
2589
2590         return 0;
2591 }
2592
2593 static int create_seq_dir(struct repository *r)
2594 {
2595         enum replay_action action;
2596         const char *in_progress_error = NULL;
2597         const char *in_progress_advice = NULL;
2598         unsigned int advise_skip = file_exists(git_path_revert_head(r)) ||
2599                                 file_exists(git_path_cherry_pick_head(r));
2600
2601         if (!sequencer_get_last_command(r, &action)) {
2602                 switch (action) {
2603                 case REPLAY_REVERT:
2604                         in_progress_error = _("revert is already in progress");
2605                         in_progress_advice =
2606                         _("try \"git revert (--continue | %s--abort | --quit)\"");
2607                         break;
2608                 case REPLAY_PICK:
2609                         in_progress_error = _("cherry-pick is already in progress");
2610                         in_progress_advice =
2611                         _("try \"git cherry-pick (--continue | %s--abort | --quit)\"");
2612                         break;
2613                 default:
2614                         BUG("unexpected action in create_seq_dir");
2615                 }
2616         }
2617         if (in_progress_error) {
2618                 error("%s", in_progress_error);
2619                 if (advice_sequencer_in_use)
2620                         advise(in_progress_advice,
2621                                 advise_skip ? "--skip | " : "");
2622                 return -1;
2623         }
2624         if (mkdir(git_path_seq_dir(), 0777) < 0)
2625                 return error_errno(_("could not create sequencer directory '%s'"),
2626                                    git_path_seq_dir());
2627
2628         return 0;
2629 }
2630
2631 static int save_head(const char *head)
2632 {
2633         struct lock_file head_lock = LOCK_INIT;
2634         struct strbuf buf = STRBUF_INIT;
2635         int fd;
2636         ssize_t written;
2637
2638         fd = hold_lock_file_for_update(&head_lock, git_path_head_file(), 0);
2639         if (fd < 0)
2640                 return error_errno(_("could not lock HEAD"));
2641         strbuf_addf(&buf, "%s\n", head);
2642         written = write_in_full(fd, buf.buf, buf.len);
2643         strbuf_release(&buf);
2644         if (written < 0) {
2645                 error_errno(_("could not write to '%s'"), git_path_head_file());
2646                 rollback_lock_file(&head_lock);
2647                 return -1;
2648         }
2649         if (commit_lock_file(&head_lock) < 0)
2650                 return error(_("failed to finalize '%s'"), git_path_head_file());
2651         return 0;
2652 }
2653
2654 static int rollback_is_safe(void)
2655 {
2656         struct strbuf sb = STRBUF_INIT;
2657         struct object_id expected_head, actual_head;
2658
2659         if (strbuf_read_file(&sb, git_path_abort_safety_file(), 0) >= 0) {
2660                 strbuf_trim(&sb);
2661                 if (get_oid_hex(sb.buf, &expected_head)) {
2662                         strbuf_release(&sb);
2663                         die(_("could not parse %s"), git_path_abort_safety_file());
2664                 }
2665                 strbuf_release(&sb);
2666         }
2667         else if (errno == ENOENT)
2668                 oidclr(&expected_head);
2669         else
2670                 die_errno(_("could not read '%s'"), git_path_abort_safety_file());
2671
2672         if (get_oid("HEAD", &actual_head))
2673                 oidclr(&actual_head);
2674
2675         return oideq(&actual_head, &expected_head);
2676 }
2677
2678 static int reset_merge(const struct object_id *oid)
2679 {
2680         int ret;
2681         struct argv_array argv = ARGV_ARRAY_INIT;
2682
2683         argv_array_pushl(&argv, "reset", "--merge", NULL);
2684
2685         if (!is_null_oid(oid))
2686                 argv_array_push(&argv, oid_to_hex(oid));
2687
2688         ret = run_command_v_opt(argv.argv, RUN_GIT_CMD);
2689         argv_array_clear(&argv);
2690
2691         return ret;
2692 }
2693
2694 static int rollback_single_pick(struct repository *r)
2695 {
2696         struct object_id head_oid;
2697
2698         if (!file_exists(git_path_cherry_pick_head(r)) &&
2699             !file_exists(git_path_revert_head(r)))
2700                 return error(_("no cherry-pick or revert in progress"));
2701         if (read_ref_full("HEAD", 0, &head_oid, NULL))
2702                 return error(_("cannot resolve HEAD"));
2703         if (is_null_oid(&head_oid))
2704                 return error(_("cannot abort from a branch yet to be born"));
2705         return reset_merge(&head_oid);
2706 }
2707
2708 static int skip_single_pick(void)
2709 {
2710         struct object_id head;
2711
2712         if (read_ref_full("HEAD", 0, &head, NULL))
2713                 return error(_("cannot resolve HEAD"));
2714         return reset_merge(&head);
2715 }
2716
2717 int sequencer_rollback(struct repository *r, struct replay_opts *opts)
2718 {
2719         FILE *f;
2720         struct object_id oid;
2721         struct strbuf buf = STRBUF_INIT;
2722         const char *p;
2723
2724         f = fopen(git_path_head_file(), "r");
2725         if (!f && errno == ENOENT) {
2726                 /*
2727                  * There is no multiple-cherry-pick in progress.
2728                  * If CHERRY_PICK_HEAD or REVERT_HEAD indicates
2729                  * a single-cherry-pick in progress, abort that.
2730                  */
2731                 return rollback_single_pick(r);
2732         }
2733         if (!f)
2734                 return error_errno(_("cannot open '%s'"), git_path_head_file());
2735         if (strbuf_getline_lf(&buf, f)) {
2736                 error(_("cannot read '%s': %s"), git_path_head_file(),
2737                       ferror(f) ?  strerror(errno) : _("unexpected end of file"));
2738                 fclose(f);
2739                 goto fail;
2740         }
2741         fclose(f);
2742         if (parse_oid_hex(buf.buf, &oid, &p) || *p != '\0') {
2743                 error(_("stored pre-cherry-pick HEAD file '%s' is corrupt"),
2744                         git_path_head_file());
2745                 goto fail;
2746         }
2747         if (is_null_oid(&oid)) {
2748                 error(_("cannot abort from a branch yet to be born"));
2749                 goto fail;
2750         }
2751
2752         if (!rollback_is_safe()) {
2753                 /* Do not error, just do not rollback */
2754                 warning(_("You seem to have moved HEAD. "
2755                           "Not rewinding, check your HEAD!"));
2756         } else
2757         if (reset_merge(&oid))
2758                 goto fail;
2759         strbuf_release(&buf);
2760         return sequencer_remove_state(opts);
2761 fail:
2762         strbuf_release(&buf);
2763         return -1;
2764 }
2765
2766 int sequencer_skip(struct repository *r, struct replay_opts *opts)
2767 {
2768         enum replay_action action = -1;
2769         sequencer_get_last_command(r, &action);
2770
2771         /*
2772          * Check whether the subcommand requested to skip the commit is actually
2773          * in progress and that it's safe to skip the commit.
2774          *
2775          * opts->action tells us which subcommand requested to skip the commit.
2776          * If the corresponding .git/<ACTION>_HEAD exists, we know that the
2777          * action is in progress and we can skip the commit.
2778          *
2779          * Otherwise we check that the last instruction was related to the
2780          * particular subcommand we're trying to execute and barf if that's not
2781          * the case.
2782          *
2783          * Finally we check that the rollback is "safe", i.e., has the HEAD
2784          * moved? In this case, it doesn't make sense to "reset the merge" and
2785          * "skip the commit" as the user already handled this by committing. But
2786          * we'd not want to barf here, instead give advice on how to proceed. We
2787          * only need to check that when .git/<ACTION>_HEAD doesn't exist because
2788          * it gets removed when the user commits, so if it still exists we're
2789          * sure the user can't have committed before.
2790          */
2791         switch (opts->action) {
2792         case REPLAY_REVERT:
2793                 if (!file_exists(git_path_revert_head(r))) {
2794                         if (action != REPLAY_REVERT)
2795                                 return error(_("no revert in progress"));
2796                         if (!rollback_is_safe())
2797                                 goto give_advice;
2798                 }
2799                 break;
2800         case REPLAY_PICK:
2801                 if (!file_exists(git_path_cherry_pick_head(r))) {
2802                         if (action != REPLAY_PICK)
2803                                 return error(_("no cherry-pick in progress"));
2804                         if (!rollback_is_safe())
2805                                 goto give_advice;
2806                 }
2807                 break;
2808         default:
2809                 BUG("unexpected action in sequencer_skip");
2810         }
2811
2812         if (skip_single_pick())
2813                 return error(_("failed to skip the commit"));
2814         if (!is_directory(git_path_seq_dir()))
2815                 return 0;
2816
2817         return sequencer_continue(r, opts);
2818
2819 give_advice:
2820         error(_("there is nothing to skip"));
2821
2822         if (advice_resolve_conflict) {
2823                 advise(_("have you committed already?\n"
2824                          "try \"git %s --continue\""),
2825                          action == REPLAY_REVERT ? "revert" : "cherry-pick");
2826         }
2827         return -1;
2828 }
2829
2830 static int save_todo(struct todo_list *todo_list, struct replay_opts *opts)
2831 {
2832         struct lock_file todo_lock = LOCK_INIT;
2833         const char *todo_path = get_todo_path(opts);
2834         int next = todo_list->current, offset, fd;
2835
2836         /*
2837          * rebase -i writes "git-rebase-todo" without the currently executing
2838          * command, appending it to "done" instead.
2839          */
2840         if (is_rebase_i(opts))
2841                 next++;
2842
2843         fd = hold_lock_file_for_update(&todo_lock, todo_path, 0);
2844         if (fd < 0)
2845                 return error_errno(_("could not lock '%s'"), todo_path);
2846         offset = get_item_line_offset(todo_list, next);
2847         if (write_in_full(fd, todo_list->buf.buf + offset,
2848                         todo_list->buf.len - offset) < 0)
2849                 return error_errno(_("could not write to '%s'"), todo_path);
2850         if (commit_lock_file(&todo_lock) < 0)
2851                 return error(_("failed to finalize '%s'"), todo_path);
2852
2853         if (is_rebase_i(opts) && next > 0) {
2854                 const char *done = rebase_path_done();
2855                 int fd = open(done, O_CREAT | O_WRONLY | O_APPEND, 0666);
2856                 int ret = 0;
2857
2858                 if (fd < 0)
2859                         return 0;
2860                 if (write_in_full(fd, get_item_line(todo_list, next - 1),
2861                                   get_item_line_length(todo_list, next - 1))
2862                     < 0)
2863                         ret = error_errno(_("could not write to '%s'"), done);
2864                 if (close(fd) < 0)
2865                         ret = error_errno(_("failed to finalize '%s'"), done);
2866                 return ret;
2867         }
2868         return 0;
2869 }
2870
2871 static int save_opts(struct replay_opts *opts)
2872 {
2873         const char *opts_file = git_path_opts_file();
2874         int res = 0;
2875
2876         if (opts->no_commit)
2877                 res |= git_config_set_in_file_gently(opts_file,
2878                                         "options.no-commit", "true");
2879         if (opts->edit)
2880                 res |= git_config_set_in_file_gently(opts_file,
2881                                         "options.edit", "true");
2882         if (opts->allow_empty)
2883                 res |= git_config_set_in_file_gently(opts_file,
2884                                         "options.allow-empty", "true");
2885         if (opts->allow_empty_message)
2886                 res |= git_config_set_in_file_gently(opts_file,
2887                                 "options.allow-empty-message", "true");
2888         if (opts->keep_redundant_commits)
2889                 res |= git_config_set_in_file_gently(opts_file,
2890                                 "options.keep-redundant-commits", "true");
2891         if (opts->signoff)
2892                 res |= git_config_set_in_file_gently(opts_file,
2893                                         "options.signoff", "true");
2894         if (opts->record_origin)
2895                 res |= git_config_set_in_file_gently(opts_file,
2896                                         "options.record-origin", "true");
2897         if (opts->allow_ff)
2898                 res |= git_config_set_in_file_gently(opts_file,
2899                                         "options.allow-ff", "true");
2900         if (opts->mainline) {
2901                 struct strbuf buf = STRBUF_INIT;
2902                 strbuf_addf(&buf, "%d", opts->mainline);
2903                 res |= git_config_set_in_file_gently(opts_file,
2904                                         "options.mainline", buf.buf);
2905                 strbuf_release(&buf);
2906         }
2907         if (opts->strategy)
2908                 res |= git_config_set_in_file_gently(opts_file,
2909                                         "options.strategy", opts->strategy);
2910         if (opts->gpg_sign)
2911                 res |= git_config_set_in_file_gently(opts_file,
2912                                         "options.gpg-sign", opts->gpg_sign);
2913         if (opts->xopts) {
2914                 int i;
2915                 for (i = 0; i < opts->xopts_nr; i++)
2916                         res |= git_config_set_multivar_in_file_gently(opts_file,
2917                                         "options.strategy-option",
2918                                         opts->xopts[i], "^$", 0);
2919         }
2920         if (opts->allow_rerere_auto)
2921                 res |= git_config_set_in_file_gently(opts_file,
2922                                 "options.allow-rerere-auto",
2923                                 opts->allow_rerere_auto == RERERE_AUTOUPDATE ?
2924                                 "true" : "false");
2925
2926         if (opts->explicit_cleanup)
2927                 res |= git_config_set_in_file_gently(opts_file,
2928                                 "options.default-msg-cleanup",
2929                                 describe_cleanup_mode(opts->default_msg_cleanup));
2930         return res;
2931 }
2932
2933 static int make_patch(struct repository *r,
2934                       struct commit *commit,
2935                       struct replay_opts *opts)
2936 {
2937         struct strbuf buf = STRBUF_INIT;
2938         struct rev_info log_tree_opt;
2939         const char *subject, *p;
2940         int res = 0;
2941
2942         p = short_commit_name(commit);
2943         if (write_message(p, strlen(p), rebase_path_stopped_sha(), 1) < 0)
2944                 return -1;
2945         if (update_ref("rebase", "REBASE_HEAD", &commit->object.oid,
2946                        NULL, REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
2947                 res |= error(_("could not update %s"), "REBASE_HEAD");
2948
2949         strbuf_addf(&buf, "%s/patch", get_dir(opts));
2950         memset(&log_tree_opt, 0, sizeof(log_tree_opt));
2951         repo_init_revisions(r, &log_tree_opt, NULL);
2952         log_tree_opt.abbrev = 0;
2953         log_tree_opt.diff = 1;
2954         log_tree_opt.diffopt.output_format = DIFF_FORMAT_PATCH;
2955         log_tree_opt.disable_stdin = 1;
2956         log_tree_opt.no_commit_id = 1;
2957         log_tree_opt.diffopt.file = fopen(buf.buf, "w");
2958         log_tree_opt.diffopt.use_color = GIT_COLOR_NEVER;
2959         if (!log_tree_opt.diffopt.file)
2960                 res |= error_errno(_("could not open '%s'"), buf.buf);
2961         else {
2962                 res |= log_tree_commit(&log_tree_opt, commit);
2963                 fclose(log_tree_opt.diffopt.file);
2964         }
2965         strbuf_reset(&buf);
2966
2967         strbuf_addf(&buf, "%s/message", get_dir(opts));
2968         if (!file_exists(buf.buf)) {
2969                 const char *commit_buffer = get_commit_buffer(commit, NULL);
2970                 find_commit_subject(commit_buffer, &subject);
2971                 res |= write_message(subject, strlen(subject), buf.buf, 1);
2972                 unuse_commit_buffer(commit, commit_buffer);
2973         }
2974         strbuf_release(&buf);
2975
2976         return res;
2977 }
2978
2979 static int intend_to_amend(void)
2980 {
2981         struct object_id head;
2982         char *p;
2983
2984         if (get_oid("HEAD", &head))
2985                 return error(_("cannot read HEAD"));
2986
2987         p = oid_to_hex(&head);
2988         return write_message(p, strlen(p), rebase_path_amend(), 1);
2989 }
2990
2991 static int error_with_patch(struct repository *r,
2992                             struct commit *commit,
2993                             const char *subject, int subject_len,
2994                             struct replay_opts *opts,
2995                             int exit_code, int to_amend)
2996 {
2997         if (commit) {
2998                 if (make_patch(r, commit, opts))
2999                         return -1;
3000         } else if (copy_file(rebase_path_message(),
3001                              git_path_merge_msg(r), 0666))
3002                 return error(_("unable to copy '%s' to '%s'"),
3003                              git_path_merge_msg(r), rebase_path_message());
3004
3005         if (to_amend) {
3006                 if (intend_to_amend())
3007                         return -1;
3008
3009                 fprintf(stderr,
3010                         _("You can amend the commit now, with\n"
3011                           "\n"
3012                           "  git commit --amend %s\n"
3013                           "\n"
3014                           "Once you are satisfied with your changes, run\n"
3015                           "\n"
3016                           "  git rebase --continue\n"),
3017                         gpg_sign_opt_quoted(opts));
3018         } else if (exit_code) {
3019                 if (commit)
3020                         fprintf_ln(stderr, _("Could not apply %s... %.*s"),
3021                                    short_commit_name(commit), subject_len, subject);
3022                 else
3023                         /*
3024                          * We don't have the hash of the parent so
3025                          * just print the line from the todo file.
3026                          */
3027                         fprintf_ln(stderr, _("Could not merge %.*s"),
3028                                    subject_len, subject);
3029         }
3030
3031         return exit_code;
3032 }
3033
3034 static int error_failed_squash(struct repository *r,
3035                                struct commit *commit,
3036                                struct replay_opts *opts,
3037                                int subject_len,
3038                                const char *subject)
3039 {
3040         if (copy_file(rebase_path_message(), rebase_path_squash_msg(), 0666))
3041                 return error(_("could not copy '%s' to '%s'"),
3042                         rebase_path_squash_msg(), rebase_path_message());
3043         unlink(git_path_merge_msg(r));
3044         if (copy_file(git_path_merge_msg(r), rebase_path_message(), 0666))
3045                 return error(_("could not copy '%s' to '%s'"),
3046                              rebase_path_message(),
3047                              git_path_merge_msg(r));
3048         return error_with_patch(r, commit, subject, subject_len, opts, 1, 0);
3049 }
3050
3051 static int do_exec(struct repository *r, const char *command_line)
3052 {
3053         struct argv_array child_env = ARGV_ARRAY_INIT;
3054         const char *child_argv[] = { NULL, NULL };
3055         int dirty, status;
3056
3057         fprintf(stderr, "Executing: %s\n", command_line);
3058         child_argv[0] = command_line;
3059         argv_array_pushf(&child_env, "GIT_DIR=%s", absolute_path(get_git_dir()));
3060         argv_array_pushf(&child_env, "GIT_WORK_TREE=%s",
3061                          absolute_path(get_git_work_tree()));
3062         status = run_command_v_opt_cd_env(child_argv, RUN_USING_SHELL, NULL,
3063                                           child_env.argv);
3064
3065         /* force re-reading of the cache */
3066         if (discard_index(r->index) < 0 || repo_read_index(r) < 0)
3067                 return error(_("could not read index"));
3068
3069         dirty = require_clean_work_tree(r, "rebase", NULL, 1, 1);
3070
3071         if (status) {
3072                 warning(_("execution failed: %s\n%s"
3073                           "You can fix the problem, and then run\n"
3074                           "\n"
3075                           "  git rebase --continue\n"
3076                           "\n"),
3077                         command_line,
3078                         dirty ? N_("and made changes to the index and/or the "
3079                                 "working tree\n") : "");
3080                 if (status == 127)
3081                         /* command not found */
3082                         status = 1;
3083         } else if (dirty) {
3084                 warning(_("execution succeeded: %s\nbut "
3085                           "left changes to the index and/or the working tree\n"
3086                           "Commit or stash your changes, and then run\n"
3087                           "\n"
3088                           "  git rebase --continue\n"
3089                           "\n"), command_line);
3090                 status = 1;
3091         }
3092
3093         argv_array_clear(&child_env);
3094
3095         return status;
3096 }
3097
3098 static int safe_append(const char *filename, const char *fmt, ...)
3099 {
3100         va_list ap;
3101         struct lock_file lock = LOCK_INIT;
3102         int fd = hold_lock_file_for_update(&lock, filename,
3103                                            LOCK_REPORT_ON_ERROR);
3104         struct strbuf buf = STRBUF_INIT;
3105
3106         if (fd < 0)
3107                 return -1;
3108
3109         if (strbuf_read_file(&buf, filename, 0) < 0 && errno != ENOENT) {
3110                 error_errno(_("could not read '%s'"), filename);
3111                 rollback_lock_file(&lock);
3112                 return -1;
3113         }
3114         strbuf_complete(&buf, '\n');
3115         va_start(ap, fmt);
3116         strbuf_vaddf(&buf, fmt, ap);
3117         va_end(ap);
3118
3119         if (write_in_full(fd, buf.buf, buf.len) < 0) {
3120                 error_errno(_("could not write to '%s'"), filename);
3121                 strbuf_release(&buf);
3122                 rollback_lock_file(&lock);
3123                 return -1;
3124         }
3125         if (commit_lock_file(&lock) < 0) {
3126                 strbuf_release(&buf);
3127                 rollback_lock_file(&lock);
3128                 return error(_("failed to finalize '%s'"), filename);
3129         }
3130
3131         strbuf_release(&buf);
3132         return 0;
3133 }
3134
3135 static int do_label(struct repository *r, const char *name, int len)
3136 {
3137         struct ref_store *refs = get_main_ref_store(r);
3138         struct ref_transaction *transaction;
3139         struct strbuf ref_name = STRBUF_INIT, err = STRBUF_INIT;
3140         struct strbuf msg = STRBUF_INIT;
3141         int ret = 0;
3142         struct object_id head_oid;
3143
3144         if (len == 1 && *name == '#')
3145                 return error(_("illegal label name: '%.*s'"), len, name);
3146
3147         strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
3148         strbuf_addf(&msg, "rebase -i (label) '%.*s'", len, name);
3149
3150         transaction = ref_store_transaction_begin(refs, &err);
3151         if (!transaction) {
3152                 error("%s", err.buf);
3153                 ret = -1;
3154         } else if (get_oid("HEAD", &head_oid)) {
3155                 error(_("could not read HEAD"));
3156                 ret = -1;
3157         } else if (ref_transaction_update(transaction, ref_name.buf, &head_oid,
3158                                           NULL, 0, msg.buf, &err) < 0 ||
3159                    ref_transaction_commit(transaction, &err)) {
3160                 error("%s", err.buf);
3161                 ret = -1;
3162         }
3163         ref_transaction_free(transaction);
3164         strbuf_release(&err);
3165         strbuf_release(&msg);
3166
3167         if (!ret)
3168                 ret = safe_append(rebase_path_refs_to_delete(),
3169                                   "%s\n", ref_name.buf);
3170         strbuf_release(&ref_name);
3171
3172         return ret;
3173 }
3174
3175 static const char *reflog_message(struct replay_opts *opts,
3176         const char *sub_action, const char *fmt, ...);
3177
3178 static int do_reset(struct repository *r,
3179                     const char *name, int len,
3180                     struct replay_opts *opts)
3181 {
3182         struct strbuf ref_name = STRBUF_INIT;
3183         struct object_id oid;
3184         struct lock_file lock = LOCK_INIT;
3185         struct tree_desc desc;
3186         struct tree *tree;
3187         struct unpack_trees_options unpack_tree_opts;
3188         int ret = 0;
3189
3190         if (repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0)
3191                 return -1;
3192
3193         if (len == 10 && !strncmp("[new root]", name, len)) {
3194                 if (!opts->have_squash_onto) {
3195                         const char *hex;
3196                         if (commit_tree("", 0, the_hash_algo->empty_tree,
3197                                         NULL, &opts->squash_onto,
3198                                         NULL, NULL))
3199                                 return error(_("writing fake root commit"));
3200                         opts->have_squash_onto = 1;
3201                         hex = oid_to_hex(&opts->squash_onto);
3202                         if (write_message(hex, strlen(hex),
3203                                           rebase_path_squash_onto(), 0))
3204                                 return error(_("writing squash-onto"));
3205                 }
3206                 oidcpy(&oid, &opts->squash_onto);
3207         } else {
3208                 int i;
3209
3210                 /* Determine the length of the label */
3211                 for (i = 0; i < len; i++)
3212                         if (isspace(name[i]))
3213                                 break;
3214                 len = i;
3215
3216                 strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
3217                 if (get_oid(ref_name.buf, &oid) &&
3218                     get_oid(ref_name.buf + strlen("refs/rewritten/"), &oid)) {
3219                         error(_("could not read '%s'"), ref_name.buf);
3220                         rollback_lock_file(&lock);
3221                         strbuf_release(&ref_name);
3222                         return -1;
3223                 }
3224         }
3225
3226         memset(&unpack_tree_opts, 0, sizeof(unpack_tree_opts));
3227         setup_unpack_trees_porcelain(&unpack_tree_opts, "reset");
3228         unpack_tree_opts.head_idx = 1;
3229         unpack_tree_opts.src_index = r->index;
3230         unpack_tree_opts.dst_index = r->index;
3231         unpack_tree_opts.fn = oneway_merge;
3232         unpack_tree_opts.merge = 1;
3233         unpack_tree_opts.update = 1;
3234
3235         if (repo_read_index_unmerged(r)) {
3236                 rollback_lock_file(&lock);
3237                 strbuf_release(&ref_name);
3238                 return error_resolve_conflict(_(action_name(opts)));
3239         }
3240
3241         if (!fill_tree_descriptor(r, &desc, &oid)) {
3242                 error(_("failed to find tree of %s"), oid_to_hex(&oid));
3243                 rollback_lock_file(&lock);
3244                 free((void *)desc.buffer);
3245                 strbuf_release(&ref_name);
3246                 return -1;
3247         }
3248
3249         if (unpack_trees(1, &desc, &unpack_tree_opts)) {
3250                 rollback_lock_file(&lock);
3251                 free((void *)desc.buffer);
3252                 strbuf_release(&ref_name);
3253                 return -1;
3254         }
3255
3256         tree = parse_tree_indirect(&oid);
3257         prime_cache_tree(r, r->index, tree);
3258
3259         if (write_locked_index(r->index, &lock, COMMIT_LOCK) < 0)
3260                 ret = error(_("could not write index"));
3261         free((void *)desc.buffer);
3262
3263         if (!ret)
3264                 ret = update_ref(reflog_message(opts, "reset", "'%.*s'",
3265                                                 len, name), "HEAD", &oid,
3266                                  NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3267
3268         strbuf_release(&ref_name);
3269         return ret;
3270 }
3271
3272 static struct commit *lookup_label(const char *label, int len,
3273                                    struct strbuf *buf)
3274 {
3275         struct commit *commit;
3276
3277         strbuf_reset(buf);
3278         strbuf_addf(buf, "refs/rewritten/%.*s", len, label);
3279         commit = lookup_commit_reference_by_name(buf->buf);
3280         if (!commit) {
3281                 /* fall back to non-rewritten ref or commit */
3282                 strbuf_splice(buf, 0, strlen("refs/rewritten/"), "", 0);
3283                 commit = lookup_commit_reference_by_name(buf->buf);
3284         }
3285
3286         if (!commit)
3287                 error(_("could not resolve '%s'"), buf->buf);
3288
3289         return commit;
3290 }
3291
3292 static int do_merge(struct repository *r,
3293                     struct commit *commit,
3294                     const char *arg, int arg_len,
3295                     int flags, struct replay_opts *opts)
3296 {
3297         int run_commit_flags = (flags & TODO_EDIT_MERGE_MSG) ?
3298                 EDIT_MSG | VERIFY_MSG : 0;
3299         struct strbuf ref_name = STRBUF_INIT;
3300         struct commit *head_commit, *merge_commit, *i;
3301         struct commit_list *bases, *j, *reversed = NULL;
3302         struct commit_list *to_merge = NULL, **tail = &to_merge;
3303         const char *strategy = !opts->xopts_nr &&
3304                 (!opts->strategy || !strcmp(opts->strategy, "recursive")) ?
3305                 NULL : opts->strategy;
3306         struct merge_options o;
3307         int merge_arg_len, oneline_offset, can_fast_forward, ret, k;
3308         static struct lock_file lock;
3309         const char *p;
3310
3311         if (repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0) {
3312                 ret = -1;
3313                 goto leave_merge;
3314         }
3315
3316         head_commit = lookup_commit_reference_by_name("HEAD");
3317         if (!head_commit) {
3318                 ret = error(_("cannot merge without a current revision"));
3319                 goto leave_merge;
3320         }
3321
3322         /*
3323          * For octopus merges, the arg starts with the list of revisions to be
3324          * merged. The list is optionally followed by '#' and the oneline.
3325          */
3326         merge_arg_len = oneline_offset = arg_len;
3327         for (p = arg; p - arg < arg_len; p += strspn(p, " \t\n")) {
3328                 if (!*p)
3329                         break;
3330                 if (*p == '#' && (!p[1] || isspace(p[1]))) {
3331                         p += 1 + strspn(p + 1, " \t\n");
3332                         oneline_offset = p - arg;
3333                         break;
3334                 }
3335                 k = strcspn(p, " \t\n");
3336                 if (!k)
3337                         continue;
3338                 merge_commit = lookup_label(p, k, &ref_name);
3339                 if (!merge_commit) {
3340                         ret = error(_("unable to parse '%.*s'"), k, p);
3341                         goto leave_merge;
3342                 }
3343                 tail = &commit_list_insert(merge_commit, tail)->next;
3344                 p += k;
3345                 merge_arg_len = p - arg;
3346         }
3347
3348         if (!to_merge) {
3349                 ret = error(_("nothing to merge: '%.*s'"), arg_len, arg);
3350                 goto leave_merge;
3351         }
3352
3353         if (opts->have_squash_onto &&
3354             oideq(&head_commit->object.oid, &opts->squash_onto)) {
3355                 /*
3356                  * When the user tells us to "merge" something into a
3357                  * "[new root]", let's simply fast-forward to the merge head.
3358                  */
3359                 rollback_lock_file(&lock);
3360                 if (to_merge->next)
3361                         ret = error(_("octopus merge cannot be executed on "
3362                                       "top of a [new root]"));
3363                 else
3364                         ret = fast_forward_to(r, &to_merge->item->object.oid,
3365                                               &head_commit->object.oid, 0,
3366                                               opts);
3367                 goto leave_merge;
3368         }
3369
3370         if (commit) {
3371                 const char *message = get_commit_buffer(commit, NULL);
3372                 const char *body;
3373                 int len;
3374
3375                 if (!message) {
3376                         ret = error(_("could not get commit message of '%s'"),
3377                                     oid_to_hex(&commit->object.oid));
3378                         goto leave_merge;
3379                 }
3380                 write_author_script(message);
3381                 find_commit_subject(message, &body);
3382                 len = strlen(body);
3383                 ret = write_message(body, len, git_path_merge_msg(r), 0);
3384                 unuse_commit_buffer(commit, message);
3385                 if (ret) {
3386                         error_errno(_("could not write '%s'"),
3387                                     git_path_merge_msg(r));
3388                         goto leave_merge;
3389                 }
3390         } else {
3391                 struct strbuf buf = STRBUF_INIT;
3392                 int len;
3393
3394                 strbuf_addf(&buf, "author %s", git_author_info(0));
3395                 write_author_script(buf.buf);
3396                 strbuf_reset(&buf);
3397
3398                 if (oneline_offset < arg_len) {
3399                         p = arg + oneline_offset;
3400                         len = arg_len - oneline_offset;
3401                 } else {
3402                         strbuf_addf(&buf, "Merge %s '%.*s'",
3403                                     to_merge->next ? "branches" : "branch",
3404                                     merge_arg_len, arg);
3405                         p = buf.buf;
3406                         len = buf.len;
3407                 }
3408
3409                 ret = write_message(p, len, git_path_merge_msg(r), 0);
3410                 strbuf_release(&buf);
3411                 if (ret) {
3412                         error_errno(_("could not write '%s'"),
3413                                     git_path_merge_msg(r));
3414                         goto leave_merge;
3415                 }
3416         }
3417
3418         /*
3419          * If HEAD is not identical to the first parent of the original merge
3420          * commit, we cannot fast-forward.
3421          */
3422         can_fast_forward = opts->allow_ff && commit && commit->parents &&
3423                 oideq(&commit->parents->item->object.oid,
3424                       &head_commit->object.oid);
3425
3426         /*
3427          * If any merge head is different from the original one, we cannot
3428          * fast-forward.
3429          */
3430         if (can_fast_forward) {
3431                 struct commit_list *p = commit->parents->next;
3432
3433                 for (j = to_merge; j && p; j = j->next, p = p->next)
3434                         if (!oideq(&j->item->object.oid,
3435                                    &p->item->object.oid)) {
3436                                 can_fast_forward = 0;
3437                                 break;
3438                         }
3439                 /*
3440                  * If the number of merge heads differs from the original merge
3441                  * commit, we cannot fast-forward.
3442                  */
3443                 if (j || p)
3444                         can_fast_forward = 0;
3445         }
3446
3447         if (can_fast_forward) {
3448                 rollback_lock_file(&lock);
3449                 ret = fast_forward_to(r, &commit->object.oid,
3450                                       &head_commit->object.oid, 0, opts);
3451                 if (flags & TODO_EDIT_MERGE_MSG) {
3452                         run_commit_flags |= AMEND_MSG;
3453                         goto fast_forward_edit;
3454                 }
3455                 goto leave_merge;
3456         }
3457
3458         if (strategy || to_merge->next) {
3459                 /* Octopus merge */
3460                 struct child_process cmd = CHILD_PROCESS_INIT;
3461
3462                 if (read_env_script(&cmd.env_array)) {
3463                         const char *gpg_opt = gpg_sign_opt_quoted(opts);
3464
3465                         ret = error(_(staged_changes_advice), gpg_opt, gpg_opt);
3466                         goto leave_merge;
3467                 }
3468
3469                 cmd.git_cmd = 1;
3470                 argv_array_push(&cmd.args, "merge");
3471                 argv_array_push(&cmd.args, "-s");
3472                 if (!strategy)
3473                         argv_array_push(&cmd.args, "octopus");
3474                 else {
3475                         argv_array_push(&cmd.args, strategy);
3476                         for (k = 0; k < opts->xopts_nr; k++)
3477                                 argv_array_pushf(&cmd.args,
3478                                                  "-X%s", opts->xopts[k]);
3479                 }
3480                 argv_array_push(&cmd.args, "--no-edit");
3481                 argv_array_push(&cmd.args, "--no-ff");
3482                 argv_array_push(&cmd.args, "--no-log");
3483                 argv_array_push(&cmd.args, "--no-stat");
3484                 argv_array_push(&cmd.args, "-F");
3485                 argv_array_push(&cmd.args, git_path_merge_msg(r));
3486                 if (opts->gpg_sign)
3487                         argv_array_push(&cmd.args, opts->gpg_sign);
3488
3489                 /* Add the tips to be merged */
3490                 for (j = to_merge; j; j = j->next)
3491                         argv_array_push(&cmd.args,
3492                                         oid_to_hex(&j->item->object.oid));
3493
3494                 strbuf_release(&ref_name);
3495                 unlink(git_path_cherry_pick_head(r));
3496                 rollback_lock_file(&lock);
3497
3498                 rollback_lock_file(&lock);
3499                 ret = run_command(&cmd);
3500
3501                 /* force re-reading of the cache */
3502                 if (!ret && (discard_index(r->index) < 0 ||
3503                              repo_read_index(r) < 0))
3504                         ret = error(_("could not read index"));
3505                 goto leave_merge;
3506         }
3507
3508         merge_commit = to_merge->item;
3509         bases = get_merge_bases(head_commit, merge_commit);
3510         if (bases && oideq(&merge_commit->object.oid,
3511                            &bases->item->object.oid)) {
3512                 ret = 0;
3513                 /* skip merging an ancestor of HEAD */
3514                 goto leave_merge;
3515         }
3516
3517         write_message(oid_to_hex(&merge_commit->object.oid), the_hash_algo->hexsz,
3518                       git_path_merge_head(r), 0);
3519         write_message("no-ff", 5, git_path_merge_mode(r), 0);
3520
3521         for (j = bases; j; j = j->next)
3522                 commit_list_insert(j->item, &reversed);
3523         free_commit_list(bases);
3524
3525         repo_read_index(r);
3526         init_merge_options(&o, r);
3527         o.branch1 = "HEAD";
3528         o.branch2 = ref_name.buf;
3529         o.buffer_output = 2;
3530
3531         ret = merge_recursive(&o, head_commit, merge_commit, reversed, &i);
3532         if (ret <= 0)
3533                 fputs(o.obuf.buf, stdout);
3534         strbuf_release(&o.obuf);
3535         if (ret < 0) {
3536                 error(_("could not even attempt to merge '%.*s'"),
3537                       merge_arg_len, arg);
3538                 goto leave_merge;
3539         }
3540         /*
3541          * The return value of merge_recursive() is 1 on clean, and 0 on
3542          * unclean merge.
3543          *
3544          * Let's reverse that, so that do_merge() returns 0 upon success and
3545          * 1 upon failed merge (keeping the return value -1 for the cases where
3546          * we will want to reschedule the `merge` command).
3547          */
3548         ret = !ret;
3549
3550         if (r->index->cache_changed &&
3551             write_locked_index(r->index, &lock, COMMIT_LOCK)) {
3552                 ret = error(_("merge: Unable to write new index file"));
3553                 goto leave_merge;
3554         }
3555
3556         rollback_lock_file(&lock);
3557         if (ret)
3558                 repo_rerere(r, opts->allow_rerere_auto);
3559         else
3560                 /*
3561                  * In case of problems, we now want to return a positive
3562                  * value (a negative one would indicate that the `merge`
3563                  * command needs to be rescheduled).
3564                  */
3565         fast_forward_edit:
3566                 ret = !!run_git_commit(r, git_path_merge_msg(r), opts,
3567                                        run_commit_flags);
3568
3569 leave_merge:
3570         strbuf_release(&ref_name);
3571         rollback_lock_file(&lock);
3572         free_commit_list(to_merge);
3573         return ret;
3574 }
3575
3576 static int is_final_fixup(struct todo_list *todo_list)
3577 {
3578         int i = todo_list->current;
3579
3580         if (!is_fixup(todo_list->items[i].command))
3581                 return 0;
3582
3583         while (++i < todo_list->nr)
3584                 if (is_fixup(todo_list->items[i].command))
3585                         return 0;
3586                 else if (!is_noop(todo_list->items[i].command))
3587                         break;
3588         return 1;
3589 }
3590
3591 static enum todo_command peek_command(struct todo_list *todo_list, int offset)
3592 {
3593         int i;
3594
3595         for (i = todo_list->current + offset; i < todo_list->nr; i++)
3596                 if (!is_noop(todo_list->items[i].command))
3597                         return todo_list->items[i].command;
3598
3599         return -1;
3600 }
3601
3602 static int apply_autostash(struct replay_opts *opts)
3603 {
3604         struct strbuf stash_sha1 = STRBUF_INIT;
3605         struct child_process child = CHILD_PROCESS_INIT;
3606         int ret = 0;
3607
3608         if (!read_oneliner(&stash_sha1, rebase_path_autostash(), 1)) {
3609                 strbuf_release(&stash_sha1);
3610                 return 0;
3611         }
3612         strbuf_trim(&stash_sha1);
3613
3614         child.git_cmd = 1;
3615         child.no_stdout = 1;
3616         child.no_stderr = 1;
3617         argv_array_push(&child.args, "stash");
3618         argv_array_push(&child.args, "apply");
3619         argv_array_push(&child.args, stash_sha1.buf);
3620         if (!run_command(&child))
3621                 fprintf(stderr, _("Applied autostash.\n"));
3622         else {
3623                 struct child_process store = CHILD_PROCESS_INIT;
3624
3625                 store.git_cmd = 1;
3626                 argv_array_push(&store.args, "stash");
3627                 argv_array_push(&store.args, "store");
3628                 argv_array_push(&store.args, "-m");
3629                 argv_array_push(&store.args, "autostash");
3630                 argv_array_push(&store.args, "-q");
3631                 argv_array_push(&store.args, stash_sha1.buf);
3632                 if (run_command(&store))
3633                         ret = error(_("cannot store %s"), stash_sha1.buf);
3634                 else
3635                         fprintf(stderr,
3636                                 _("Applying autostash resulted in conflicts.\n"
3637                                   "Your changes are safe in the stash.\n"
3638                                   "You can run \"git stash pop\" or"
3639                                   " \"git stash drop\" at any time.\n"));
3640         }
3641
3642         strbuf_release(&stash_sha1);
3643         return ret;
3644 }
3645
3646 static const char *reflog_message(struct replay_opts *opts,
3647         const char *sub_action, const char *fmt, ...)
3648 {
3649         va_list ap;
3650         static struct strbuf buf = STRBUF_INIT;
3651
3652         va_start(ap, fmt);
3653         strbuf_reset(&buf);
3654         strbuf_addstr(&buf, action_name(opts));
3655         if (sub_action)
3656                 strbuf_addf(&buf, " (%s)", sub_action);
3657         if (fmt) {
3658                 strbuf_addstr(&buf, ": ");
3659                 strbuf_vaddf(&buf, fmt, ap);
3660         }
3661         va_end(ap);
3662
3663         return buf.buf;
3664 }
3665
3666 static int run_git_checkout(struct repository *r, struct replay_opts *opts,
3667                             const char *commit, const char *action)
3668 {
3669         struct child_process cmd = CHILD_PROCESS_INIT;
3670         int ret;
3671
3672         cmd.git_cmd = 1;
3673
3674         argv_array_push(&cmd.args, "checkout");
3675         argv_array_push(&cmd.args, commit);
3676         argv_array_pushf(&cmd.env_array, GIT_REFLOG_ACTION "=%s", action);
3677
3678         if (opts->verbose)
3679                 ret = run_command(&cmd);
3680         else
3681                 ret = run_command_silent_on_success(&cmd);
3682
3683         if (!ret)
3684                 discard_index(r->index);
3685
3686         return ret;
3687 }
3688
3689 int prepare_branch_to_be_rebased(struct repository *r, struct replay_opts *opts,
3690                                  const char *commit)
3691 {
3692         const char *action;
3693
3694         if (commit && *commit) {
3695                 action = reflog_message(opts, "start", "checkout %s", commit);
3696                 if (run_git_checkout(r, opts, commit, action))
3697                         return error(_("could not checkout %s"), commit);
3698         }
3699
3700         return 0;
3701 }
3702
3703 static int checkout_onto(struct repository *r, struct replay_opts *opts,
3704                          const char *onto_name, const struct object_id *onto,
3705                          const char *orig_head)
3706 {
3707         struct object_id oid;
3708         const char *action = reflog_message(opts, "start", "checkout %s", onto_name);
3709
3710         if (get_oid(orig_head, &oid))
3711                 return error(_("%s: not a valid OID"), orig_head);
3712
3713         if (run_git_checkout(r, opts, oid_to_hex(onto), action)) {
3714                 apply_autostash(opts);
3715                 sequencer_remove_state(opts);
3716                 return error(_("could not detach HEAD"));
3717         }
3718
3719         return update_ref(NULL, "ORIG_HEAD", &oid, NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3720 }
3721
3722 static int stopped_at_head(struct repository *r)
3723 {
3724         struct object_id head;
3725         struct commit *commit;
3726         struct commit_message message;
3727
3728         if (get_oid("HEAD", &head) ||
3729             !(commit = lookup_commit(r, &head)) ||
3730             parse_commit(commit) || get_message(commit, &message))
3731                 fprintf(stderr, _("Stopped at HEAD\n"));
3732         else {
3733                 fprintf(stderr, _("Stopped at %s\n"), message.label);
3734                 free_message(commit, &message);
3735         }
3736         return 0;
3737
3738 }
3739
3740 static const char rescheduled_advice[] =
3741 N_("Could not execute the todo command\n"
3742 "\n"
3743 "    %.*s"
3744 "\n"
3745 "It has been rescheduled; To edit the command before continuing, please\n"
3746 "edit the todo list first:\n"
3747 "\n"
3748 "    git rebase --edit-todo\n"
3749 "    git rebase --continue\n");
3750
3751 static int pick_commits(struct repository *r,
3752                         struct todo_list *todo_list,
3753                         struct replay_opts *opts)
3754 {
3755         int res = 0, reschedule = 0;
3756
3757         setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
3758         if (opts->allow_ff)
3759                 assert(!(opts->signoff || opts->no_commit ||
3760                                 opts->record_origin || opts->edit));
3761         if (read_and_refresh_cache(r, opts))
3762                 return -1;
3763
3764         while (todo_list->current < todo_list->nr) {
3765                 struct todo_item *item = todo_list->items + todo_list->current;
3766                 const char *arg = todo_item_get_arg(todo_list, item);
3767                 int check_todo = 0;
3768
3769                 if (save_todo(todo_list, opts))
3770                         return -1;
3771                 if (is_rebase_i(opts)) {
3772                         if (item->command != TODO_COMMENT) {
3773                                 FILE *f = fopen(rebase_path_msgnum(), "w");
3774
3775                                 todo_list->done_nr++;
3776
3777                                 if (f) {
3778                                         fprintf(f, "%d\n", todo_list->done_nr);
3779                                         fclose(f);
3780                                 }
3781                                 if (!opts->quiet)
3782                                         fprintf(stderr, "Rebasing (%d/%d)%s",
3783                                                 todo_list->done_nr,
3784                                                 todo_list->total_nr,
3785                                                 opts->verbose ? "\n" : "\r");
3786                         }
3787                         unlink(rebase_path_message());
3788                         unlink(rebase_path_author_script());
3789                         unlink(rebase_path_stopped_sha());
3790                         unlink(rebase_path_amend());
3791                         unlink(git_path_merge_head(r));
3792                         delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
3793
3794                         if (item->command == TODO_BREAK) {
3795                                 if (!opts->verbose)
3796                                         term_clear_line();
3797                                 return stopped_at_head(r);
3798                         }
3799                 }
3800                 if (item->command <= TODO_SQUASH) {
3801                         if (is_rebase_i(opts))
3802                                 setenv("GIT_REFLOG_ACTION", reflog_message(opts,
3803                                         command_to_string(item->command), NULL),
3804                                         1);
3805                         res = do_pick_commit(r, item->command, item->commit,
3806                                              opts, is_final_fixup(todo_list),
3807                                              &check_todo);
3808                         if (is_rebase_i(opts) && res < 0) {
3809                                 /* Reschedule */
3810                                 advise(_(rescheduled_advice),
3811                                        get_item_line_length(todo_list,
3812                                                             todo_list->current),
3813                                        get_item_line(todo_list,
3814                                                      todo_list->current));
3815                                 todo_list->current--;
3816                                 if (save_todo(todo_list, opts))
3817                                         return -1;
3818                         }
3819                         if (item->command == TODO_EDIT) {
3820                                 struct commit *commit = item->commit;
3821                                 if (!res) {
3822                                         if (!opts->verbose)
3823                                                 term_clear_line();
3824                                         fprintf(stderr,
3825                                                 _("Stopped at %s...  %.*s\n"),
3826                                                 short_commit_name(commit),
3827                                                 item->arg_len, arg);
3828                                 }
3829                                 return error_with_patch(r, commit,
3830                                         arg, item->arg_len, opts, res, !res);
3831                         }
3832                         if (is_rebase_i(opts) && !res)
3833                                 record_in_rewritten(&item->commit->object.oid,
3834                                         peek_command(todo_list, 1));
3835                         if (res && is_fixup(item->command)) {
3836                                 if (res == 1)
3837                                         intend_to_amend();
3838                                 return error_failed_squash(r, item->commit, opts,
3839                                         item->arg_len, arg);
3840                         } else if (res && is_rebase_i(opts) && item->commit) {
3841                                 int to_amend = 0;
3842                                 struct object_id oid;
3843
3844                                 /*
3845                                  * If we are rewording and have either
3846                                  * fast-forwarded already, or are about to
3847                                  * create a new root commit, we want to amend,
3848                                  * otherwise we do not.
3849                                  */
3850                                 if (item->command == TODO_REWORD &&
3851                                     !get_oid("HEAD", &oid) &&
3852                                     (oideq(&item->commit->object.oid, &oid) ||
3853                                      (opts->have_squash_onto &&
3854                                       oideq(&opts->squash_onto, &oid))))
3855                                         to_amend = 1;
3856
3857                                 return res | error_with_patch(r, item->commit,
3858                                                 arg, item->arg_len, opts,
3859                                                 res, to_amend);
3860                         }
3861                 } else if (item->command == TODO_EXEC) {
3862                         char *end_of_arg = (char *)(arg + item->arg_len);
3863                         int saved = *end_of_arg;
3864
3865                         if (!opts->verbose)
3866                                 term_clear_line();
3867                         *end_of_arg = '\0';
3868                         res = do_exec(r, arg);
3869                         *end_of_arg = saved;
3870
3871                         if (res) {
3872                                 if (opts->reschedule_failed_exec)
3873                                         reschedule = 1;
3874                         }
3875                         check_todo = 1;
3876                 } else if (item->command == TODO_LABEL) {
3877                         if ((res = do_label(r, arg, item->arg_len)))
3878                                 reschedule = 1;
3879                 } else if (item->command == TODO_RESET) {
3880                         if ((res = do_reset(r, arg, item->arg_len, opts)))
3881                                 reschedule = 1;
3882                 } else if (item->command == TODO_MERGE) {
3883                         if ((res = do_merge(r, item->commit,
3884                                             arg, item->arg_len,
3885                                             item->flags, opts)) < 0)
3886                                 reschedule = 1;
3887                         else if (item->commit)
3888                                 record_in_rewritten(&item->commit->object.oid,
3889                                                     peek_command(todo_list, 1));
3890                         if (res > 0)
3891                                 /* failed with merge conflicts */
3892                                 return error_with_patch(r, item->commit,
3893                                                         arg, item->arg_len,
3894                                                         opts, res, 0);
3895                 } else if (!is_noop(item->command))
3896                         return error(_("unknown command %d"), item->command);
3897
3898                 if (reschedule) {
3899                         advise(_(rescheduled_advice),
3900                                get_item_line_length(todo_list,
3901                                                     todo_list->current),
3902                                get_item_line(todo_list, todo_list->current));
3903                         todo_list->current--;
3904                         if (save_todo(todo_list, opts))
3905                                 return -1;
3906                         if (item->commit)
3907                                 return error_with_patch(r,
3908                                                         item->commit,
3909                                                         arg, item->arg_len,
3910                                                         opts, res, 0);
3911                 } else if (check_todo && !res) {
3912                         struct stat st;
3913
3914                         if (stat(get_todo_path(opts), &st)) {
3915                                 res = error_errno(_("could not stat '%s'"),
3916                                                   get_todo_path(opts));
3917                         } else if (match_stat_data(&todo_list->stat, &st)) {
3918                                 /* Reread the todo file if it has changed. */
3919                                 todo_list_release(todo_list);
3920                                 if (read_populate_todo(r, todo_list, opts))
3921                                         res = -1; /* message was printed */
3922                                 /* `current` will be incremented below */
3923                                 todo_list->current = -1;
3924                         }
3925                 }
3926
3927                 todo_list->current++;
3928                 if (res)
3929                         return res;
3930         }
3931
3932         if (is_rebase_i(opts)) {
3933                 struct strbuf head_ref = STRBUF_INIT, buf = STRBUF_INIT;
3934                 struct stat st;
3935
3936                 /* Stopped in the middle, as planned? */
3937                 if (todo_list->current < todo_list->nr)
3938                         return 0;
3939
3940                 if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
3941                                 starts_with(head_ref.buf, "refs/")) {
3942                         const char *msg;
3943                         struct object_id head, orig;
3944                         int res;
3945
3946                         if (get_oid("HEAD", &head)) {
3947                                 res = error(_("cannot read HEAD"));
3948 cleanup_head_ref:
3949                                 strbuf_release(&head_ref);
3950                                 strbuf_release(&buf);
3951                                 return res;
3952                         }
3953                         if (!read_oneliner(&buf, rebase_path_orig_head(), 0) ||
3954                                         get_oid_hex(buf.buf, &orig)) {
3955                                 res = error(_("could not read orig-head"));
3956                                 goto cleanup_head_ref;
3957                         }
3958                         strbuf_reset(&buf);
3959                         if (!read_oneliner(&buf, rebase_path_onto(), 0)) {
3960                                 res = error(_("could not read 'onto'"));
3961                                 goto cleanup_head_ref;
3962                         }
3963                         msg = reflog_message(opts, "finish", "%s onto %s",
3964                                 head_ref.buf, buf.buf);
3965                         if (update_ref(msg, head_ref.buf, &head, &orig,
3966                                        REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR)) {
3967                                 res = error(_("could not update %s"),
3968                                         head_ref.buf);
3969                                 goto cleanup_head_ref;
3970                         }
3971                         msg = reflog_message(opts, "finish", "returning to %s",
3972                                 head_ref.buf);
3973                         if (create_symref("HEAD", head_ref.buf, msg)) {
3974                                 res = error(_("could not update HEAD to %s"),
3975                                         head_ref.buf);
3976                                 goto cleanup_head_ref;
3977                         }
3978                         strbuf_reset(&buf);
3979                 }
3980
3981                 if (opts->verbose) {
3982                         struct rev_info log_tree_opt;
3983                         struct object_id orig, head;
3984
3985                         memset(&log_tree_opt, 0, sizeof(log_tree_opt));
3986                         repo_init_revisions(r, &log_tree_opt, NULL);
3987                         log_tree_opt.diff = 1;
3988                         log_tree_opt.diffopt.output_format =
3989                                 DIFF_FORMAT_DIFFSTAT;
3990                         log_tree_opt.disable_stdin = 1;
3991
3992                         if (read_oneliner(&buf, rebase_path_orig_head(), 0) &&
3993                             !get_oid(buf.buf, &orig) &&
3994                             !get_oid("HEAD", &head)) {
3995                                 diff_tree_oid(&orig, &head, "",
3996                                               &log_tree_opt.diffopt);
3997                                 log_tree_diff_flush(&log_tree_opt);
3998                         }
3999                 }
4000                 flush_rewritten_pending();
4001                 if (!stat(rebase_path_rewritten_list(), &st) &&
4002                                 st.st_size > 0) {
4003                         struct child_process child = CHILD_PROCESS_INIT;
4004                         const char *post_rewrite_hook =
4005                                 find_hook("post-rewrite");
4006
4007                         child.in = open(rebase_path_rewritten_list(), O_RDONLY);
4008                         child.git_cmd = 1;
4009                         argv_array_push(&child.args, "notes");
4010                         argv_array_push(&child.args, "copy");
4011                         argv_array_push(&child.args, "--for-rewrite=rebase");
4012                         /* we don't care if this copying failed */
4013                         run_command(&child);
4014
4015                         if (post_rewrite_hook) {
4016                                 struct child_process hook = CHILD_PROCESS_INIT;
4017
4018                                 hook.in = open(rebase_path_rewritten_list(),
4019                                         O_RDONLY);
4020                                 hook.stdout_to_stderr = 1;
4021                                 hook.trace2_hook_name = "post-rewrite";
4022                                 argv_array_push(&hook.args, post_rewrite_hook);
4023                                 argv_array_push(&hook.args, "rebase");
4024                                 /* we don't care if this hook failed */
4025                                 run_command(&hook);
4026                         }
4027                 }
4028                 apply_autostash(opts);
4029
4030                 if (!opts->quiet) {
4031                         if (!opts->verbose)
4032                                 term_clear_line();
4033                         fprintf(stderr,
4034                                 "Successfully rebased and updated %s.\n",
4035                                 head_ref.buf);
4036                 }
4037
4038                 strbuf_release(&buf);
4039                 strbuf_release(&head_ref);
4040         }
4041
4042         /*
4043          * Sequence of picks finished successfully; cleanup by
4044          * removing the .git/sequencer directory
4045          */
4046         return sequencer_remove_state(opts);
4047 }
4048
4049 static int continue_single_pick(struct repository *r)
4050 {
4051         const char *argv[] = { "commit", NULL };
4052
4053         if (!file_exists(git_path_cherry_pick_head(r)) &&
4054             !file_exists(git_path_revert_head(r)))
4055                 return error(_("no cherry-pick or revert in progress"));
4056         return run_command_v_opt(argv, RUN_GIT_CMD);
4057 }
4058
4059 static int commit_staged_changes(struct repository *r,
4060                                  struct replay_opts *opts,
4061                                  struct todo_list *todo_list)
4062 {
4063         unsigned int flags = ALLOW_EMPTY | EDIT_MSG;
4064         unsigned int final_fixup = 0, is_clean;
4065
4066         if (has_unstaged_changes(r, 1))
4067                 return error(_("cannot rebase: You have unstaged changes."));
4068
4069         is_clean = !has_uncommitted_changes(r, 0);
4070
4071         if (file_exists(rebase_path_amend())) {
4072                 struct strbuf rev = STRBUF_INIT;
4073                 struct object_id head, to_amend;
4074
4075                 if (get_oid("HEAD", &head))
4076                         return error(_("cannot amend non-existing commit"));
4077                 if (!read_oneliner(&rev, rebase_path_amend(), 0))
4078                         return error(_("invalid file: '%s'"), rebase_path_amend());
4079                 if (get_oid_hex(rev.buf, &to_amend))
4080                         return error(_("invalid contents: '%s'"),
4081                                 rebase_path_amend());
4082                 if (!is_clean && !oideq(&head, &to_amend))
4083                         return error(_("\nYou have uncommitted changes in your "
4084                                        "working tree. Please, commit them\n"
4085                                        "first and then run 'git rebase "
4086                                        "--continue' again."));
4087                 /*
4088                  * When skipping a failed fixup/squash, we need to edit the
4089                  * commit message, the current fixup list and count, and if it
4090                  * was the last fixup/squash in the chain, we need to clean up
4091                  * the commit message and if there was a squash, let the user
4092                  * edit it.
4093                  */
4094                 if (!is_clean || !opts->current_fixup_count)
4095                         ; /* this is not the final fixup */
4096                 else if (!oideq(&head, &to_amend) ||
4097                          !file_exists(rebase_path_stopped_sha())) {
4098                         /* was a final fixup or squash done manually? */
4099                         if (!is_fixup(peek_command(todo_list, 0))) {
4100                                 unlink(rebase_path_fixup_msg());
4101                                 unlink(rebase_path_squash_msg());
4102                                 unlink(rebase_path_current_fixups());
4103                                 strbuf_reset(&opts->current_fixups);
4104                                 opts->current_fixup_count = 0;
4105                         }
4106                 } else {
4107                         /* we are in a fixup/squash chain */
4108                         const char *p = opts->current_fixups.buf;
4109                         int len = opts->current_fixups.len;
4110
4111                         opts->current_fixup_count--;
4112                         if (!len)
4113                                 BUG("Incorrect current_fixups:\n%s", p);
4114                         while (len && p[len - 1] != '\n')
4115                                 len--;
4116                         strbuf_setlen(&opts->current_fixups, len);
4117                         if (write_message(p, len, rebase_path_current_fixups(),
4118                                           0) < 0)
4119                                 return error(_("could not write file: '%s'"),
4120                                              rebase_path_current_fixups());
4121
4122                         /*
4123                          * If a fixup/squash in a fixup/squash chain failed, the
4124                          * commit message is already correct, no need to commit
4125                          * it again.
4126                          *
4127                          * Only if it is the final command in the fixup/squash
4128                          * chain, and only if the chain is longer than a single
4129                          * fixup/squash command (which was just skipped), do we
4130                          * actually need to re-commit with a cleaned up commit
4131                          * message.
4132                          */
4133                         if (opts->current_fixup_count > 0 &&
4134                             !is_fixup(peek_command(todo_list, 0))) {
4135                                 final_fixup = 1;
4136                                 /*
4137                                  * If there was not a single "squash" in the
4138                                  * chain, we only need to clean up the commit
4139                                  * message, no need to bother the user with
4140                                  * opening the commit message in the editor.
4141                                  */
4142                                 if (!starts_with(p, "squash ") &&
4143                                     !strstr(p, "\nsquash "))
4144                                         flags = (flags & ~EDIT_MSG) | CLEANUP_MSG;
4145                         } else if (is_fixup(peek_command(todo_list, 0))) {
4146                                 /*
4147                                  * We need to update the squash message to skip
4148                                  * the latest commit message.
4149                                  */
4150                                 struct commit *commit;
4151                                 const char *path = rebase_path_squash_msg();
4152
4153                                 if (parse_head(r, &commit) ||
4154                                     !(p = get_commit_buffer(commit, NULL)) ||
4155                                     write_message(p, strlen(p), path, 0)) {
4156                                         unuse_commit_buffer(commit, p);
4157                                         return error(_("could not write file: "
4158                                                        "'%s'"), path);
4159                                 }
4160                                 unuse_commit_buffer(commit, p);
4161                         }
4162                 }
4163
4164                 strbuf_release(&rev);
4165                 flags |= AMEND_MSG;
4166         }
4167
4168         if (is_clean) {
4169                 const char *cherry_pick_head = git_path_cherry_pick_head(r);
4170
4171                 if (file_exists(cherry_pick_head) && unlink(cherry_pick_head))
4172                         return error(_("could not remove CHERRY_PICK_HEAD"));
4173                 if (!final_fixup)
4174                         return 0;
4175         }
4176
4177         if (run_git_commit(r, final_fixup ? NULL : rebase_path_message(),
4178                            opts, flags))
4179                 return error(_("could not commit staged changes."));
4180         unlink(rebase_path_amend());
4181         unlink(git_path_merge_head(r));
4182         if (final_fixup) {
4183                 unlink(rebase_path_fixup_msg());
4184                 unlink(rebase_path_squash_msg());
4185         }
4186         if (opts->current_fixup_count > 0) {
4187                 /*
4188                  * Whether final fixup or not, we just cleaned up the commit
4189                  * message...
4190                  */
4191                 unlink(rebase_path_current_fixups());
4192                 strbuf_reset(&opts->current_fixups);
4193                 opts->current_fixup_count = 0;
4194         }
4195         return 0;
4196 }
4197
4198 int sequencer_continue(struct repository *r, struct replay_opts *opts)
4199 {
4200         struct todo_list todo_list = TODO_LIST_INIT;
4201         int res;
4202
4203         if (read_and_refresh_cache(r, opts))
4204                 return -1;
4205
4206         if (read_populate_opts(opts))
4207                 return -1;
4208         if (is_rebase_i(opts)) {
4209                 if ((res = read_populate_todo(r, &todo_list, opts)))
4210                         goto release_todo_list;
4211                 if (commit_staged_changes(r, opts, &todo_list))
4212                         return -1;
4213         } else if (!file_exists(get_todo_path(opts)))
4214                 return continue_single_pick(r);
4215         else if ((res = read_populate_todo(r, &todo_list, opts)))
4216                 goto release_todo_list;
4217
4218         if (!is_rebase_i(opts)) {
4219                 /* Verify that the conflict has been resolved */
4220                 if (file_exists(git_path_cherry_pick_head(r)) ||
4221                     file_exists(git_path_revert_head(r))) {
4222                         res = continue_single_pick(r);
4223                         if (res)
4224                                 goto release_todo_list;
4225                 }
4226                 if (index_differs_from(r, "HEAD", NULL, 0)) {
4227                         res = error_dirty_index(r, opts);
4228                         goto release_todo_list;
4229                 }
4230                 todo_list.current++;
4231         } else if (file_exists(rebase_path_stopped_sha())) {
4232                 struct strbuf buf = STRBUF_INIT;
4233                 struct object_id oid;
4234
4235                 if (read_oneliner(&buf, rebase_path_stopped_sha(), 1) &&
4236                     !get_oid_committish(buf.buf, &oid))
4237                         record_in_rewritten(&oid, peek_command(&todo_list, 0));
4238                 strbuf_release(&buf);
4239         }
4240
4241         res = pick_commits(r, &todo_list, opts);
4242 release_todo_list:
4243         todo_list_release(&todo_list);
4244         return res;
4245 }
4246
4247 static int single_pick(struct repository *r,
4248                        struct commit *cmit,
4249                        struct replay_opts *opts)
4250 {
4251         int check_todo;
4252
4253         setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
4254         return do_pick_commit(r, opts->action == REPLAY_PICK ?
4255                               TODO_PICK : TODO_REVERT, cmit, opts, 0,
4256                               &check_todo);
4257 }
4258
4259 int sequencer_pick_revisions(struct repository *r,
4260                              struct replay_opts *opts)
4261 {
4262         struct todo_list todo_list = TODO_LIST_INIT;
4263         struct object_id oid;
4264         int i, res;
4265
4266         assert(opts->revs);
4267         if (read_and_refresh_cache(r, opts))
4268                 return -1;
4269
4270         for (i = 0; i < opts->revs->pending.nr; i++) {
4271                 struct object_id oid;
4272                 const char *name = opts->revs->pending.objects[i].name;
4273
4274                 /* This happens when using --stdin. */
4275                 if (!strlen(name))
4276                         continue;
4277
4278                 if (!get_oid(name, &oid)) {
4279                         if (!lookup_commit_reference_gently(r, &oid, 1)) {
4280                                 enum object_type type = oid_object_info(r,
4281                                                                         &oid,
4282                                                                         NULL);
4283                                 return error(_("%s: can't cherry-pick a %s"),
4284                                         name, type_name(type));
4285                         }
4286                 } else
4287                         return error(_("%s: bad revision"), name);
4288         }
4289
4290         /*
4291          * If we were called as "git cherry-pick <commit>", just
4292          * cherry-pick/revert it, set CHERRY_PICK_HEAD /
4293          * REVERT_HEAD, and don't touch the sequencer state.
4294          * This means it is possible to cherry-pick in the middle
4295          * of a cherry-pick sequence.
4296          */
4297         if (opts->revs->cmdline.nr == 1 &&
4298             opts->revs->cmdline.rev->whence == REV_CMD_REV &&
4299             opts->revs->no_walk &&
4300             !opts->revs->cmdline.rev->flags) {
4301                 struct commit *cmit;
4302                 if (prepare_revision_walk(opts->revs))
4303                         return error(_("revision walk setup failed"));
4304                 cmit = get_revision(opts->revs);
4305                 if (!cmit)
4306                         return error(_("empty commit set passed"));
4307                 if (get_revision(opts->revs))
4308                         BUG("unexpected extra commit from walk");
4309                 return single_pick(r, cmit, opts);
4310         }
4311
4312         /*
4313          * Start a new cherry-pick/ revert sequence; but
4314          * first, make sure that an existing one isn't in
4315          * progress
4316          */
4317
4318         if (walk_revs_populate_todo(&todo_list, opts) ||
4319                         create_seq_dir(r) < 0)
4320                 return -1;
4321         if (get_oid("HEAD", &oid) && (opts->action == REPLAY_REVERT))
4322                 return error(_("can't revert as initial commit"));
4323         if (save_head(oid_to_hex(&oid)))
4324                 return -1;
4325         if (save_opts(opts))
4326                 return -1;
4327         update_abort_safety_file();
4328         res = pick_commits(r, &todo_list, opts);
4329         todo_list_release(&todo_list);
4330         return res;
4331 }
4332
4333 void append_signoff(struct strbuf *msgbuf, size_t ignore_footer, unsigned flag)
4334 {
4335         unsigned no_dup_sob = flag & APPEND_SIGNOFF_DEDUP;
4336         struct strbuf sob = STRBUF_INIT;
4337         int has_footer;
4338
4339         strbuf_addstr(&sob, sign_off_header);
4340         strbuf_addstr(&sob, fmt_name(WANT_COMMITTER_IDENT));
4341         strbuf_addch(&sob, '\n');
4342
4343         if (!ignore_footer)
4344                 strbuf_complete_line(msgbuf);
4345
4346         /*
4347          * If the whole message buffer is equal to the sob, pretend that we
4348          * found a conforming footer with a matching sob
4349          */
4350         if (msgbuf->len - ignore_footer == sob.len &&
4351             !strncmp(msgbuf->buf, sob.buf, sob.len))
4352                 has_footer = 3;
4353         else
4354                 has_footer = has_conforming_footer(msgbuf, &sob, ignore_footer);
4355
4356         if (!has_footer) {
4357                 const char *append_newlines = NULL;
4358                 size_t len = msgbuf->len - ignore_footer;
4359
4360                 if (!len) {
4361                         /*
4362                          * The buffer is completely empty.  Leave foom for
4363                          * the title and body to be filled in by the user.
4364                          */
4365                         append_newlines = "\n\n";
4366                 } else if (len == 1) {
4367                         /*
4368                          * Buffer contains a single newline.  Add another
4369                          * so that we leave room for the title and body.
4370                          */
4371                         append_newlines = "\n";
4372                 } else if (msgbuf->buf[len - 2] != '\n') {
4373                         /*
4374                          * Buffer ends with a single newline.  Add another
4375                          * so that there is an empty line between the message
4376                          * body and the sob.
4377                          */
4378                         append_newlines = "\n";
4379                 } /* else, the buffer already ends with two newlines. */
4380
4381                 if (append_newlines)
4382                         strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4383                                 append_newlines, strlen(append_newlines));
4384         }
4385
4386         if (has_footer != 3 && (!no_dup_sob || has_footer != 2))
4387                 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4388                                 sob.buf, sob.len);
4389
4390         strbuf_release(&sob);
4391 }
4392
4393 struct labels_entry {
4394         struct hashmap_entry entry;
4395         char label[FLEX_ARRAY];
4396 };
4397
4398 static int labels_cmp(const void *fndata, const struct hashmap_entry *eptr,
4399                       const struct hashmap_entry *entry_or_key, const void *key)
4400 {
4401         const struct labels_entry *a, *b;
4402
4403         a = container_of(eptr, const struct labels_entry, entry);
4404         b = container_of(entry_or_key, const struct labels_entry, entry);
4405
4406         return key ? strcmp(a->label, key) : strcmp(a->label, b->label);
4407 }
4408
4409 struct string_entry {
4410         struct oidmap_entry entry;
4411         char string[FLEX_ARRAY];
4412 };
4413
4414 struct label_state {
4415         struct oidmap commit2label;
4416         struct hashmap labels;
4417         struct strbuf buf;
4418 };
4419
4420 static const char *label_oid(struct object_id *oid, const char *label,
4421                              struct label_state *state)
4422 {
4423         struct labels_entry *labels_entry;
4424         struct string_entry *string_entry;
4425         struct object_id dummy;
4426         size_t len;
4427         int i;
4428
4429         string_entry = oidmap_get(&state->commit2label, oid);
4430         if (string_entry)
4431                 return string_entry->string;
4432
4433         /*
4434          * For "uninteresting" commits, i.e. commits that are not to be
4435          * rebased, and which can therefore not be labeled, we use a unique
4436          * abbreviation of the commit name. This is slightly more complicated
4437          * than calling find_unique_abbrev() because we also need to make
4438          * sure that the abbreviation does not conflict with any other
4439          * label.
4440          *
4441          * We disallow "interesting" commits to be labeled by a string that
4442          * is a valid full-length hash, to ensure that we always can find an
4443          * abbreviation for any uninteresting commit's names that does not
4444          * clash with any other label.
4445          */
4446         if (!label) {
4447                 char *p;
4448
4449                 strbuf_reset(&state->buf);
4450                 strbuf_grow(&state->buf, GIT_MAX_HEXSZ);
4451                 label = p = state->buf.buf;
4452
4453                 find_unique_abbrev_r(p, oid, default_abbrev);
4454
4455                 /*
4456                  * We may need to extend the abbreviated hash so that there is
4457                  * no conflicting label.
4458                  */
4459                 if (hashmap_get_from_hash(&state->labels, strihash(p), p)) {
4460                         size_t i = strlen(p) + 1;
4461
4462                         oid_to_hex_r(p, oid);
4463                         for (; i < the_hash_algo->hexsz; i++) {
4464                                 char save = p[i];
4465                                 p[i] = '\0';
4466                                 if (!hashmap_get_from_hash(&state->labels,
4467                                                            strihash(p), p))
4468                                         break;
4469                                 p[i] = save;
4470                         }
4471                 }
4472         } else if (((len = strlen(label)) == the_hash_algo->hexsz &&
4473                     !get_oid_hex(label, &dummy)) ||
4474                    (len == 1 && *label == '#') ||
4475                    hashmap_get_from_hash(&state->labels,
4476                                          strihash(label), label)) {
4477                 /*
4478                  * If the label already exists, or if the label is a valid full
4479                  * OID, or the label is a '#' (which we use as a separator
4480                  * between merge heads and oneline), we append a dash and a
4481                  * number to make it unique.
4482                  */
4483                 struct strbuf *buf = &state->buf;
4484
4485                 strbuf_reset(buf);
4486                 strbuf_add(buf, label, len);
4487
4488                 for (i = 2; ; i++) {
4489                         strbuf_setlen(buf, len);
4490                         strbuf_addf(buf, "-%d", i);
4491                         if (!hashmap_get_from_hash(&state->labels,
4492                                                    strihash(buf->buf),
4493                                                    buf->buf))
4494                                 break;
4495                 }
4496
4497                 label = buf->buf;
4498         }
4499
4500         FLEX_ALLOC_STR(labels_entry, label, label);
4501         hashmap_entry_init(&labels_entry->entry, strihash(label));
4502         hashmap_add(&state->labels, &labels_entry->entry);
4503
4504         FLEX_ALLOC_STR(string_entry, string, label);
4505         oidcpy(&string_entry->entry.oid, oid);
4506         oidmap_put(&state->commit2label, string_entry);
4507
4508         return string_entry->string;
4509 }
4510
4511 static int make_script_with_merges(struct pretty_print_context *pp,
4512                                    struct rev_info *revs, struct strbuf *out,
4513                                    unsigned flags)
4514 {
4515         int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4516         int rebase_cousins = flags & TODO_LIST_REBASE_COUSINS;
4517         int root_with_onto = flags & TODO_LIST_ROOT_WITH_ONTO;
4518         struct strbuf buf = STRBUF_INIT, oneline = STRBUF_INIT;
4519         struct strbuf label = STRBUF_INIT;
4520         struct commit_list *commits = NULL, **tail = &commits, *iter;
4521         struct commit_list *tips = NULL, **tips_tail = &tips;
4522         struct commit *commit;
4523         struct oidmap commit2todo = OIDMAP_INIT;
4524         struct string_entry *entry;
4525         struct oidset interesting = OIDSET_INIT, child_seen = OIDSET_INIT,
4526                 shown = OIDSET_INIT;
4527         struct label_state state = { OIDMAP_INIT, { NULL }, STRBUF_INIT };
4528
4529         int abbr = flags & TODO_LIST_ABBREVIATE_CMDS;
4530         const char *cmd_pick = abbr ? "p" : "pick",
4531                 *cmd_label = abbr ? "l" : "label",
4532                 *cmd_reset = abbr ? "t" : "reset",
4533                 *cmd_merge = abbr ? "m" : "merge";
4534
4535         oidmap_init(&commit2todo, 0);
4536         oidmap_init(&state.commit2label, 0);
4537         hashmap_init(&state.labels, labels_cmp, NULL, 0);
4538         strbuf_init(&state.buf, 32);
4539
4540         if (revs->cmdline.nr && (revs->cmdline.rev[0].flags & BOTTOM)) {
4541                 struct object_id *oid = &revs->cmdline.rev[0].item->oid;
4542                 FLEX_ALLOC_STR(entry, string, "onto");
4543                 oidcpy(&entry->entry.oid, oid);
4544                 oidmap_put(&state.commit2label, entry);
4545         }
4546
4547         /*
4548          * First phase:
4549          * - get onelines for all commits
4550          * - gather all branch tips (i.e. 2nd or later parents of merges)
4551          * - label all branch tips
4552          */
4553         while ((commit = get_revision(revs))) {
4554                 struct commit_list *to_merge;
4555                 const char *p1, *p2;
4556                 struct object_id *oid;
4557                 int is_empty;
4558
4559                 tail = &commit_list_insert(commit, tail)->next;
4560                 oidset_insert(&interesting, &commit->object.oid);
4561
4562                 is_empty = is_original_commit_empty(commit);
4563                 if (!is_empty && (commit->object.flags & PATCHSAME))
4564                         continue;
4565
4566                 strbuf_reset(&oneline);
4567                 pretty_print_commit(pp, commit, &oneline);
4568
4569                 to_merge = commit->parents ? commit->parents->next : NULL;
4570                 if (!to_merge) {
4571                         /* non-merge commit: easy case */
4572                         strbuf_reset(&buf);
4573                         if (!keep_empty && is_empty)
4574                                 strbuf_addf(&buf, "%c ", comment_line_char);
4575                         strbuf_addf(&buf, "%s %s %s", cmd_pick,
4576                                     oid_to_hex(&commit->object.oid),
4577                                     oneline.buf);
4578
4579                         FLEX_ALLOC_STR(entry, string, buf.buf);
4580                         oidcpy(&entry->entry.oid, &commit->object.oid);
4581                         oidmap_put(&commit2todo, entry);
4582
4583                         continue;
4584                 }
4585
4586                 /* Create a label */
4587                 strbuf_reset(&label);
4588                 if (skip_prefix(oneline.buf, "Merge ", &p1) &&
4589                     (p1 = strchr(p1, '\'')) &&
4590                     (p2 = strchr(++p1, '\'')))
4591                         strbuf_add(&label, p1, p2 - p1);
4592                 else if (skip_prefix(oneline.buf, "Merge pull request ",
4593                                      &p1) &&
4594                          (p1 = strstr(p1, " from ")))
4595                         strbuf_addstr(&label, p1 + strlen(" from "));
4596                 else
4597                         strbuf_addbuf(&label, &oneline);
4598
4599                 for (p1 = label.buf; *p1; p1++)
4600                         if (isspace(*p1))
4601                                 *(char *)p1 = '-';
4602
4603                 strbuf_reset(&buf);
4604                 strbuf_addf(&buf, "%s -C %s",
4605                             cmd_merge, oid_to_hex(&commit->object.oid));
4606
4607                 /* label the tips of merged branches */
4608                 for (; to_merge; to_merge = to_merge->next) {
4609                         oid = &to_merge->item->object.oid;
4610                         strbuf_addch(&buf, ' ');
4611
4612                         if (!oidset_contains(&interesting, oid)) {
4613                                 strbuf_addstr(&buf, label_oid(oid, NULL,
4614                                                               &state));
4615                                 continue;
4616                         }
4617
4618                         tips_tail = &commit_list_insert(to_merge->item,
4619                                                         tips_tail)->next;
4620
4621                         strbuf_addstr(&buf, label_oid(oid, label.buf, &state));
4622                 }
4623                 strbuf_addf(&buf, " # %s", oneline.buf);
4624
4625                 FLEX_ALLOC_STR(entry, string, buf.buf);
4626                 oidcpy(&entry->entry.oid, &commit->object.oid);
4627                 oidmap_put(&commit2todo, entry);
4628         }
4629
4630         /*
4631          * Second phase:
4632          * - label branch points
4633          * - add HEAD to the branch tips
4634          */
4635         for (iter = commits; iter; iter = iter->next) {
4636                 struct commit_list *parent = iter->item->parents;
4637                 for (; parent; parent = parent->next) {
4638                         struct object_id *oid = &parent->item->object.oid;
4639                         if (!oidset_contains(&interesting, oid))
4640                                 continue;
4641                         if (oidset_insert(&child_seen, oid))
4642                                 label_oid(oid, "branch-point", &state);
4643                 }
4644
4645                 /* Add HEAD as implict "tip of branch" */
4646                 if (!iter->next)
4647                         tips_tail = &commit_list_insert(iter->item,
4648                                                         tips_tail)->next;
4649         }
4650
4651         /*
4652          * Third phase: output the todo list. This is a bit tricky, as we
4653          * want to avoid jumping back and forth between revisions. To
4654          * accomplish that goal, we walk backwards from the branch tips,
4655          * gathering commits not yet shown, reversing the list on the fly,
4656          * then outputting that list (labeling revisions as needed).
4657          */
4658         strbuf_addf(out, "%s onto\n", cmd_label);
4659         for (iter = tips; iter; iter = iter->next) {
4660                 struct commit_list *list = NULL, *iter2;
4661
4662                 commit = iter->item;
4663                 if (oidset_contains(&shown, &commit->object.oid))
4664                         continue;
4665                 entry = oidmap_get(&state.commit2label, &commit->object.oid);
4666
4667                 if (entry)
4668                         strbuf_addf(out, "\n%c Branch %s\n", comment_line_char, entry->string);
4669                 else
4670                         strbuf_addch(out, '\n');
4671
4672                 while (oidset_contains(&interesting, &commit->object.oid) &&
4673                        !oidset_contains(&shown, &commit->object.oid)) {
4674                         commit_list_insert(commit, &list);
4675                         if (!commit->parents) {
4676                                 commit = NULL;
4677                                 break;
4678                         }
4679                         commit = commit->parents->item;
4680                 }
4681
4682                 if (!commit)
4683                         strbuf_addf(out, "%s %s\n", cmd_reset,
4684                                     rebase_cousins || root_with_onto ?
4685                                     "onto" : "[new root]");
4686                 else {
4687                         const char *to = NULL;
4688
4689                         entry = oidmap_get(&state.commit2label,
4690                                            &commit->object.oid);
4691                         if (entry)
4692                                 to = entry->string;
4693                         else if (!rebase_cousins)
4694                                 to = label_oid(&commit->object.oid, NULL,
4695                                                &state);
4696
4697                         if (!to || !strcmp(to, "onto"))
4698                                 strbuf_addf(out, "%s onto\n", cmd_reset);
4699                         else {
4700                                 strbuf_reset(&oneline);
4701                                 pretty_print_commit(pp, commit, &oneline);
4702                                 strbuf_addf(out, "%s %s # %s\n",
4703                                             cmd_reset, to, oneline.buf);
4704                         }
4705                 }
4706
4707                 for (iter2 = list; iter2; iter2 = iter2->next) {
4708                         struct object_id *oid = &iter2->item->object.oid;
4709                         entry = oidmap_get(&commit2todo, oid);
4710                         /* only show if not already upstream */
4711                         if (entry)
4712                                 strbuf_addf(out, "%s\n", entry->string);
4713                         entry = oidmap_get(&state.commit2label, oid);
4714                         if (entry)
4715                                 strbuf_addf(out, "%s %s\n",
4716                                             cmd_label, entry->string);
4717                         oidset_insert(&shown, oid);
4718                 }
4719
4720                 free_commit_list(list);
4721         }
4722
4723         free_commit_list(commits);
4724         free_commit_list(tips);
4725
4726         strbuf_release(&label);
4727         strbuf_release(&oneline);
4728         strbuf_release(&buf);
4729
4730         oidmap_free(&commit2todo, 1);
4731         oidmap_free(&state.commit2label, 1);
4732         hashmap_free_entries(&state.labels, struct labels_entry, entry);
4733         strbuf_release(&state.buf);
4734
4735         return 0;
4736 }
4737
4738 int sequencer_make_script(struct repository *r, struct strbuf *out, int argc,
4739                           const char **argv, unsigned flags)
4740 {
4741         char *format = NULL;
4742         struct pretty_print_context pp = {0};
4743         struct rev_info revs;
4744         struct commit *commit;
4745         int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4746         const char *insn = flags & TODO_LIST_ABBREVIATE_CMDS ? "p" : "pick";
4747         int rebase_merges = flags & TODO_LIST_REBASE_MERGES;
4748
4749         repo_init_revisions(r, &revs, NULL);
4750         revs.verbose_header = 1;
4751         if (!rebase_merges)
4752                 revs.max_parents = 1;
4753         revs.cherry_mark = 1;
4754         revs.limited = 1;
4755         revs.reverse = 1;
4756         revs.right_only = 1;
4757         revs.sort_order = REV_SORT_IN_GRAPH_ORDER;
4758         revs.topo_order = 1;
4759
4760         revs.pretty_given = 1;
4761         git_config_get_string("rebase.instructionFormat", &format);
4762         if (!format || !*format) {
4763                 free(format);
4764                 format = xstrdup("%s");
4765         }
4766         get_commit_format(format, &revs);
4767         free(format);
4768         pp.fmt = revs.commit_format;
4769         pp.output_encoding = get_log_output_encoding();
4770
4771         if (setup_revisions(argc, argv, &revs, NULL) > 1)
4772                 return error(_("make_script: unhandled options"));
4773
4774         if (prepare_revision_walk(&revs) < 0)
4775                 return error(_("make_script: error preparing revisions"));
4776
4777         if (rebase_merges)
4778                 return make_script_with_merges(&pp, &revs, out, flags);
4779
4780         while ((commit = get_revision(&revs))) {
4781                 int is_empty  = is_original_commit_empty(commit);
4782
4783                 if (!is_empty && (commit->object.flags & PATCHSAME))
4784                         continue;
4785                 if (!keep_empty && is_empty)
4786                         strbuf_addf(out, "%c ", comment_line_char);
4787                 strbuf_addf(out, "%s %s ", insn,
4788                             oid_to_hex(&commit->object.oid));
4789                 pretty_print_commit(&pp, commit, out);
4790                 strbuf_addch(out, '\n');
4791         }
4792         return 0;
4793 }
4794
4795 /*
4796  * Add commands after pick and (series of) squash/fixup commands
4797  * in the todo list.
4798  */
4799 void todo_list_add_exec_commands(struct todo_list *todo_list,
4800                                  struct string_list *commands)
4801 {
4802         struct strbuf *buf = &todo_list->buf;
4803         size_t base_offset = buf->len;
4804         int i, insert, nr = 0, alloc = 0;
4805         struct todo_item *items = NULL, *base_items = NULL;
4806
4807         base_items = xcalloc(commands->nr, sizeof(struct todo_item));
4808         for (i = 0; i < commands->nr; i++) {
4809                 size_t command_len = strlen(commands->items[i].string);
4810
4811                 strbuf_addstr(buf, commands->items[i].string);
4812                 strbuf_addch(buf, '\n');
4813
4814                 base_items[i].command = TODO_EXEC;
4815                 base_items[i].offset_in_buf = base_offset;
4816                 base_items[i].arg_offset = base_offset + strlen("exec ");
4817                 base_items[i].arg_len = command_len - strlen("exec ");
4818
4819                 base_offset += command_len + 1;
4820         }
4821
4822         /*
4823          * Insert <commands> after every pick. Here, fixup/squash chains
4824          * are considered part of the pick, so we insert the commands *after*
4825          * those chains if there are any.
4826          *
4827          * As we insert the exec commands immediatly after rearranging
4828          * any fixups and before the user edits the list, a fixup chain
4829          * can never contain comments (any comments are empty picks that
4830          * have been commented out because the user did not specify
4831          * --keep-empty).  So, it is safe to insert an exec command
4832          * without looking at the command following a comment.
4833          */
4834         insert = 0;
4835         for (i = 0; i < todo_list->nr; i++) {
4836                 enum todo_command command = todo_list->items[i].command;
4837                 if (insert && !is_fixup(command)) {
4838                         ALLOC_GROW(items, nr + commands->nr, alloc);
4839                         COPY_ARRAY(items + nr, base_items, commands->nr);
4840                         nr += commands->nr;
4841
4842                         insert = 0;
4843                 }
4844
4845                 ALLOC_GROW(items, nr + 1, alloc);
4846                 items[nr++] = todo_list->items[i];
4847
4848                 if (command == TODO_PICK || command == TODO_MERGE)
4849                         insert = 1;
4850         }
4851
4852         /* insert or append final <commands> */
4853         if (insert || nr == todo_list->nr) {
4854                 ALLOC_GROW(items, nr + commands->nr, alloc);
4855                 COPY_ARRAY(items + nr, base_items, commands->nr);
4856                 nr += commands->nr;
4857         }
4858
4859         free(base_items);
4860         FREE_AND_NULL(todo_list->items);
4861         todo_list->items = items;
4862         todo_list->nr = nr;
4863         todo_list->alloc = alloc;
4864 }
4865
4866 static void todo_list_to_strbuf(struct repository *r, struct todo_list *todo_list,
4867                                 struct strbuf *buf, int num, unsigned flags)
4868 {
4869         struct todo_item *item;
4870         int i, max = todo_list->nr;
4871
4872         if (num > 0 && num < max)
4873                 max = num;
4874
4875         for (item = todo_list->items, i = 0; i < max; i++, item++) {
4876                 /* if the item is not a command write it and continue */
4877                 if (item->command >= TODO_COMMENT) {
4878                         strbuf_addf(buf, "%.*s\n", item->arg_len,
4879                                     todo_item_get_arg(todo_list, item));
4880                         continue;
4881                 }
4882
4883                 /* add command to the buffer */
4884                 if (flags & TODO_LIST_ABBREVIATE_CMDS)
4885                         strbuf_addch(buf, command_to_char(item->command));
4886                 else
4887                         strbuf_addstr(buf, command_to_string(item->command));
4888
4889                 /* add commit id */
4890                 if (item->commit) {
4891                         const char *oid = flags & TODO_LIST_SHORTEN_IDS ?
4892                                           short_commit_name(item->commit) :
4893                                           oid_to_hex(&item->commit->object.oid);
4894
4895                         if (item->command == TODO_MERGE) {
4896                                 if (item->flags & TODO_EDIT_MERGE_MSG)
4897                                         strbuf_addstr(buf, " -c");
4898                                 else
4899                                         strbuf_addstr(buf, " -C");
4900                         }
4901
4902                         strbuf_addf(buf, " %s", oid);
4903                 }
4904
4905                 /* add all the rest */
4906                 if (!item->arg_len)
4907                         strbuf_addch(buf, '\n');
4908                 else
4909                         strbuf_addf(buf, " %.*s\n", item->arg_len,
4910                                     todo_item_get_arg(todo_list, item));
4911         }
4912 }
4913
4914 int todo_list_write_to_file(struct repository *r, struct todo_list *todo_list,
4915                             const char *file, const char *shortrevisions,
4916                             const char *shortonto, int num, unsigned flags)
4917 {
4918         int res;
4919         struct strbuf buf = STRBUF_INIT;
4920
4921         todo_list_to_strbuf(r, todo_list, &buf, num, flags);
4922         if (flags & TODO_LIST_APPEND_TODO_HELP)
4923                 append_todo_help(flags & TODO_LIST_KEEP_EMPTY, count_commands(todo_list),
4924                                  shortrevisions, shortonto, &buf);
4925
4926         res = write_message(buf.buf, buf.len, file, 0);
4927         strbuf_release(&buf);
4928
4929         return res;
4930 }
4931
4932 static const char edit_todo_list_advice[] =
4933 N_("You can fix this with 'git rebase --edit-todo' "
4934 "and then run 'git rebase --continue'.\n"
4935 "Or you can abort the rebase with 'git rebase"
4936 " --abort'.\n");
4937
4938 int check_todo_list_from_file(struct repository *r)
4939 {
4940         struct todo_list old_todo = TODO_LIST_INIT, new_todo = TODO_LIST_INIT;
4941         int res = 0;
4942
4943         if (strbuf_read_file_or_whine(&new_todo.buf, rebase_path_todo()) < 0) {
4944                 res = -1;
4945                 goto out;
4946         }
4947
4948         if (strbuf_read_file_or_whine(&old_todo.buf, rebase_path_todo_backup()) < 0) {
4949                 res = -1;
4950                 goto out;
4951         }
4952
4953         res = todo_list_parse_insn_buffer(r, old_todo.buf.buf, &old_todo);
4954         if (!res)
4955                 res = todo_list_parse_insn_buffer(r, new_todo.buf.buf, &new_todo);
4956         if (!res)
4957                 res = todo_list_check(&old_todo, &new_todo);
4958         if (res)
4959                 fprintf(stderr, _(edit_todo_list_advice));
4960 out:
4961         todo_list_release(&old_todo);
4962         todo_list_release(&new_todo);
4963
4964         return res;
4965 }
4966
4967 /* skip picking commits whose parents are unchanged */
4968 static int skip_unnecessary_picks(struct repository *r,
4969                                   struct todo_list *todo_list,
4970                                   struct object_id *base_oid)
4971 {
4972         struct object_id *parent_oid;
4973         int i;
4974
4975         for (i = 0; i < todo_list->nr; i++) {
4976                 struct todo_item *item = todo_list->items + i;
4977
4978                 if (item->command >= TODO_NOOP)
4979                         continue;
4980                 if (item->command != TODO_PICK)
4981                         break;
4982                 if (parse_commit(item->commit)) {
4983                         return error(_("could not parse commit '%s'"),
4984                                 oid_to_hex(&item->commit->object.oid));
4985                 }
4986                 if (!item->commit->parents)
4987                         break; /* root commit */
4988                 if (item->commit->parents->next)
4989                         break; /* merge commit */
4990                 parent_oid = &item->commit->parents->item->object.oid;
4991                 if (!oideq(parent_oid, base_oid))
4992                         break;
4993                 oidcpy(base_oid, &item->commit->object.oid);
4994         }
4995         if (i > 0) {
4996                 const char *done_path = rebase_path_done();
4997
4998                 if (todo_list_write_to_file(r, todo_list, done_path, NULL, NULL, i, 0)) {
4999                         error_errno(_("could not write to '%s'"), done_path);
5000                         return -1;
5001                 }
5002
5003                 MOVE_ARRAY(todo_list->items, todo_list->items + i, todo_list->nr - i);
5004                 todo_list->nr -= i;
5005                 todo_list->current = 0;
5006
5007                 if (is_fixup(peek_command(todo_list, 0)))
5008                         record_in_rewritten(base_oid, peek_command(todo_list, 0));
5009         }
5010
5011         return 0;
5012 }
5013
5014 int complete_action(struct repository *r, struct replay_opts *opts, unsigned flags,
5015                     const char *shortrevisions, const char *onto_name,
5016                     struct commit *onto, const char *orig_head,
5017                     struct string_list *commands, unsigned autosquash,
5018                     struct todo_list *todo_list)
5019 {
5020         const char *shortonto, *todo_file = rebase_path_todo();
5021         struct todo_list new_todo = TODO_LIST_INIT;
5022         struct strbuf *buf = &todo_list->buf;
5023         struct object_id oid = onto->object.oid;
5024         int res;
5025
5026         shortonto = find_unique_abbrev(&oid, DEFAULT_ABBREV);
5027
5028         if (buf->len == 0) {
5029                 struct todo_item *item = append_new_todo(todo_list);
5030                 item->command = TODO_NOOP;
5031                 item->commit = NULL;
5032                 item->arg_len = item->arg_offset = item->flags = item->offset_in_buf = 0;
5033         }
5034
5035         if (autosquash && todo_list_rearrange_squash(todo_list))
5036                 return -1;
5037
5038         if (commands->nr)
5039                 todo_list_add_exec_commands(todo_list, commands);
5040
5041         if (count_commands(todo_list) == 0) {
5042                 apply_autostash(opts);
5043                 sequencer_remove_state(opts);
5044
5045                 return error(_("nothing to do"));
5046         }
5047
5048         res = edit_todo_list(r, todo_list, &new_todo, shortrevisions,
5049                              shortonto, flags);
5050         if (res == -1)
5051                 return -1;
5052         else if (res == -2) {
5053                 apply_autostash(opts);
5054                 sequencer_remove_state(opts);
5055
5056                 return -1;
5057         } else if (res == -3) {
5058                 apply_autostash(opts);
5059                 sequencer_remove_state(opts);
5060                 todo_list_release(&new_todo);
5061
5062                 return error(_("nothing to do"));
5063         }
5064
5065         if (todo_list_parse_insn_buffer(r, new_todo.buf.buf, &new_todo) ||
5066             todo_list_check(todo_list, &new_todo)) {
5067                 fprintf(stderr, _(edit_todo_list_advice));
5068                 checkout_onto(r, opts, onto_name, &onto->object.oid, orig_head);
5069                 todo_list_release(&new_todo);
5070
5071                 return -1;
5072         }
5073
5074         if (opts->allow_ff && skip_unnecessary_picks(r, &new_todo, &oid)) {
5075                 todo_list_release(&new_todo);
5076                 return error(_("could not skip unnecessary pick commands"));
5077         }
5078
5079         if (todo_list_write_to_file(r, &new_todo, todo_file, NULL, NULL, -1,
5080                                     flags & ~(TODO_LIST_SHORTEN_IDS))) {
5081                 todo_list_release(&new_todo);
5082                 return error_errno(_("could not write '%s'"), todo_file);
5083         }
5084
5085         todo_list_release(&new_todo);
5086
5087         if (checkout_onto(r, opts, onto_name, &oid, orig_head))
5088                 return -1;
5089
5090         if (require_clean_work_tree(r, "rebase", "", 1, 1))
5091                 return -1;
5092
5093         return sequencer_continue(r, opts);
5094 }
5095
5096 struct subject2item_entry {
5097         struct hashmap_entry entry;
5098         int i;
5099         char subject[FLEX_ARRAY];
5100 };
5101
5102 static int subject2item_cmp(const void *fndata,
5103                             const struct hashmap_entry *eptr,
5104                             const struct hashmap_entry *entry_or_key,
5105                             const void *key)
5106 {
5107         const struct subject2item_entry *a, *b;
5108
5109         a = container_of(eptr, const struct subject2item_entry, entry);
5110         b = container_of(entry_or_key, const struct subject2item_entry, entry);
5111
5112         return key ? strcmp(a->subject, key) : strcmp(a->subject, b->subject);
5113 }
5114
5115 define_commit_slab(commit_todo_item, struct todo_item *);
5116
5117 /*
5118  * Rearrange the todo list that has both "pick commit-id msg" and "pick
5119  * commit-id fixup!/squash! msg" in it so that the latter is put immediately
5120  * after the former, and change "pick" to "fixup"/"squash".
5121  *
5122  * Note that if the config has specified a custom instruction format, each log
5123  * message will have to be retrieved from the commit (as the oneline in the
5124  * script cannot be trusted) in order to normalize the autosquash arrangement.
5125  */
5126 int todo_list_rearrange_squash(struct todo_list *todo_list)
5127 {
5128         struct hashmap subject2item;
5129         int rearranged = 0, *next, *tail, i, nr = 0, alloc = 0;
5130         char **subjects;
5131         struct commit_todo_item commit_todo;
5132         struct todo_item *items = NULL;
5133
5134         init_commit_todo_item(&commit_todo);
5135         /*
5136          * The hashmap maps onelines to the respective todo list index.
5137          *
5138          * If any items need to be rearranged, the next[i] value will indicate
5139          * which item was moved directly after the i'th.
5140          *
5141          * In that case, last[i] will indicate the index of the latest item to
5142          * be moved to appear after the i'th.
5143          */
5144         hashmap_init(&subject2item, subject2item_cmp, NULL, todo_list->nr);
5145         ALLOC_ARRAY(next, todo_list->nr);
5146         ALLOC_ARRAY(tail, todo_list->nr);
5147         ALLOC_ARRAY(subjects, todo_list->nr);
5148         for (i = 0; i < todo_list->nr; i++) {
5149                 struct strbuf buf = STRBUF_INIT;
5150                 struct todo_item *item = todo_list->items + i;
5151                 const char *commit_buffer, *subject, *p;
5152                 size_t subject_len;
5153                 int i2 = -1;
5154                 struct subject2item_entry *entry;
5155
5156                 next[i] = tail[i] = -1;
5157                 if (!item->commit || item->command == TODO_DROP) {
5158                         subjects[i] = NULL;
5159                         continue;
5160                 }
5161
5162                 if (is_fixup(item->command)) {
5163                         clear_commit_todo_item(&commit_todo);
5164                         return error(_("the script was already rearranged."));
5165                 }
5166
5167                 *commit_todo_item_at(&commit_todo, item->commit) = item;
5168
5169                 parse_commit(item->commit);
5170                 commit_buffer = get_commit_buffer(item->commit, NULL);
5171                 find_commit_subject(commit_buffer, &subject);
5172                 format_subject(&buf, subject, " ");
5173                 subject = subjects[i] = strbuf_detach(&buf, &subject_len);
5174                 unuse_commit_buffer(item->commit, commit_buffer);
5175                 if ((skip_prefix(subject, "fixup! ", &p) ||
5176                      skip_prefix(subject, "squash! ", &p))) {
5177                         struct commit *commit2;
5178
5179                         for (;;) {
5180                                 while (isspace(*p))
5181                                         p++;
5182                                 if (!skip_prefix(p, "fixup! ", &p) &&
5183                                     !skip_prefix(p, "squash! ", &p))
5184                                         break;
5185                         }
5186
5187                         entry = hashmap_get_entry_from_hash(&subject2item,
5188                                                 strhash(p), p,
5189                                                 struct subject2item_entry,
5190                                                 entry);
5191                         if (entry)
5192                                 /* found by title */
5193                                 i2 = entry->i;
5194                         else if (!strchr(p, ' ') &&
5195                                  (commit2 =
5196                                   lookup_commit_reference_by_name(p)) &&
5197                                  *commit_todo_item_at(&commit_todo, commit2))
5198                                 /* found by commit name */
5199                                 i2 = *commit_todo_item_at(&commit_todo, commit2)
5200                                         - todo_list->items;
5201                         else {
5202                                 /* copy can be a prefix of the commit subject */
5203                                 for (i2 = 0; i2 < i; i2++)
5204                                         if (subjects[i2] &&
5205                                             starts_with(subjects[i2], p))
5206                                                 break;
5207                                 if (i2 == i)
5208                                         i2 = -1;
5209                         }
5210                 }
5211                 if (i2 >= 0) {
5212                         rearranged = 1;
5213                         todo_list->items[i].command =
5214                                 starts_with(subject, "fixup!") ?
5215                                 TODO_FIXUP : TODO_SQUASH;
5216                         if (next[i2] < 0)
5217                                 next[i2] = i;
5218                         else
5219                                 next[tail[i2]] = i;
5220                         tail[i2] = i;
5221                 } else if (!hashmap_get_from_hash(&subject2item,
5222                                                 strhash(subject), subject)) {
5223                         FLEX_ALLOC_MEM(entry, subject, subject, subject_len);
5224                         entry->i = i;
5225                         hashmap_entry_init(&entry->entry,
5226                                         strhash(entry->subject));
5227                         hashmap_put(&subject2item, &entry->entry);
5228                 }
5229         }
5230
5231         if (rearranged) {
5232                 for (i = 0; i < todo_list->nr; i++) {
5233                         enum todo_command command = todo_list->items[i].command;
5234                         int cur = i;
5235
5236                         /*
5237                          * Initially, all commands are 'pick's. If it is a
5238                          * fixup or a squash now, we have rearranged it.
5239                          */
5240                         if (is_fixup(command))
5241                                 continue;
5242
5243                         while (cur >= 0) {
5244                                 ALLOC_GROW(items, nr + 1, alloc);
5245                                 items[nr++] = todo_list->items[cur];
5246                                 cur = next[cur];
5247                         }
5248                 }
5249
5250                 FREE_AND_NULL(todo_list->items);
5251                 todo_list->items = items;
5252                 todo_list->nr = nr;
5253                 todo_list->alloc = alloc;
5254         }
5255
5256         free(next);
5257         free(tail);
5258         for (i = 0; i < todo_list->nr; i++)
5259                 free(subjects[i]);
5260         free(subjects);
5261         hashmap_free_entries(&subject2item, struct subject2item_entry, entry);
5262
5263         clear_commit_todo_item(&commit_todo);
5264
5265         return 0;
5266 }