Imported Upstream version 2.24.3
[platform/upstream/git.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         struct argv_array hook_env = ARGV_ARRAY_INIT;
1130         int ret;
1131         const char *name;
1132
1133         name = git_path_commit_editmsg();
1134         if (write_message(msg->buf, msg->len, name, 0))
1135                 return -1;
1136
1137         argv_array_pushf(&hook_env, "GIT_INDEX_FILE=%s", r->index_file);
1138         argv_array_push(&hook_env, "GIT_EDITOR=:");
1139         if (commit)
1140                 ret = run_hook_le(hook_env.argv, "prepare-commit-msg", name,
1141                                   "commit", commit, NULL);
1142         else
1143                 ret = run_hook_le(hook_env.argv, "prepare-commit-msg", name,
1144                                   "message", NULL);
1145         if (ret)
1146                 ret = error(_("'prepare-commit-msg' hook failed"));
1147         argv_array_clear(&hook_env);
1148
1149         return ret;
1150 }
1151
1152 static const char implicit_ident_advice_noconfig[] =
1153 N_("Your name and email address were configured automatically based\n"
1154 "on your username and hostname. Please check that they are accurate.\n"
1155 "You can suppress this message by setting them explicitly. Run the\n"
1156 "following command and follow the instructions in your editor to edit\n"
1157 "your configuration file:\n"
1158 "\n"
1159 "    git config --global --edit\n"
1160 "\n"
1161 "After doing this, you may fix the identity used for this commit with:\n"
1162 "\n"
1163 "    git commit --amend --reset-author\n");
1164
1165 static const char implicit_ident_advice_config[] =
1166 N_("Your name and email address were configured automatically based\n"
1167 "on your username and hostname. Please check that they are accurate.\n"
1168 "You can suppress this message by setting them explicitly:\n"
1169 "\n"
1170 "    git config --global user.name \"Your Name\"\n"
1171 "    git config --global user.email you@example.com\n"
1172 "\n"
1173 "After doing this, you may fix the identity used for this commit with:\n"
1174 "\n"
1175 "    git commit --amend --reset-author\n");
1176
1177 static const char *implicit_ident_advice(void)
1178 {
1179         char *user_config = expand_user_path("~/.gitconfig", 0);
1180         char *xdg_config = xdg_config_home("config");
1181         int config_exists = file_exists(user_config) || file_exists(xdg_config);
1182
1183         free(user_config);
1184         free(xdg_config);
1185
1186         if (config_exists)
1187                 return _(implicit_ident_advice_config);
1188         else
1189                 return _(implicit_ident_advice_noconfig);
1190
1191 }
1192
1193 void print_commit_summary(struct repository *r,
1194                           const char *prefix,
1195                           const struct object_id *oid,
1196                           unsigned int flags)
1197 {
1198         struct rev_info rev;
1199         struct commit *commit;
1200         struct strbuf format = STRBUF_INIT;
1201         const char *head;
1202         struct pretty_print_context pctx = {0};
1203         struct strbuf author_ident = STRBUF_INIT;
1204         struct strbuf committer_ident = STRBUF_INIT;
1205
1206         commit = lookup_commit(r, oid);
1207         if (!commit)
1208                 die(_("couldn't look up newly created commit"));
1209         if (parse_commit(commit))
1210                 die(_("could not parse newly created commit"));
1211
1212         strbuf_addstr(&format, "format:%h] %s");
1213
1214         format_commit_message(commit, "%an <%ae>", &author_ident, &pctx);
1215         format_commit_message(commit, "%cn <%ce>", &committer_ident, &pctx);
1216         if (strbuf_cmp(&author_ident, &committer_ident)) {
1217                 strbuf_addstr(&format, "\n Author: ");
1218                 strbuf_addbuf_percentquote(&format, &author_ident);
1219         }
1220         if (flags & SUMMARY_SHOW_AUTHOR_DATE) {
1221                 struct strbuf date = STRBUF_INIT;
1222
1223                 format_commit_message(commit, "%ad", &date, &pctx);
1224                 strbuf_addstr(&format, "\n Date: ");
1225                 strbuf_addbuf_percentquote(&format, &date);
1226                 strbuf_release(&date);
1227         }
1228         if (!committer_ident_sufficiently_given()) {
1229                 strbuf_addstr(&format, "\n Committer: ");
1230                 strbuf_addbuf_percentquote(&format, &committer_ident);
1231                 if (advice_implicit_identity) {
1232                         strbuf_addch(&format, '\n');
1233                         strbuf_addstr(&format, implicit_ident_advice());
1234                 }
1235         }
1236         strbuf_release(&author_ident);
1237         strbuf_release(&committer_ident);
1238
1239         repo_init_revisions(r, &rev, prefix);
1240         setup_revisions(0, NULL, &rev, NULL);
1241
1242         rev.diff = 1;
1243         rev.diffopt.output_format =
1244                 DIFF_FORMAT_SHORTSTAT | DIFF_FORMAT_SUMMARY;
1245
1246         rev.verbose_header = 1;
1247         rev.show_root_diff = 1;
1248         get_commit_format(format.buf, &rev);
1249         rev.always_show_header = 0;
1250         rev.diffopt.detect_rename = DIFF_DETECT_RENAME;
1251         rev.diffopt.break_opt = 0;
1252         diff_setup_done(&rev.diffopt);
1253
1254         head = resolve_ref_unsafe("HEAD", 0, NULL, NULL);
1255         if (!head)
1256                 die_errno(_("unable to resolve HEAD after creating commit"));
1257         if (!strcmp(head, "HEAD"))
1258                 head = _("detached HEAD");
1259         else
1260                 skip_prefix(head, "refs/heads/", &head);
1261         printf("[%s%s ", head, (flags & SUMMARY_INITIAL_COMMIT) ?
1262                                                 _(" (root-commit)") : "");
1263
1264         if (!log_tree_commit(&rev, commit)) {
1265                 rev.always_show_header = 1;
1266                 rev.use_terminator = 1;
1267                 log_tree_commit(&rev, commit);
1268         }
1269
1270         strbuf_release(&format);
1271 }
1272
1273 static int parse_head(struct repository *r, struct commit **head)
1274 {
1275         struct commit *current_head;
1276         struct object_id oid;
1277
1278         if (get_oid("HEAD", &oid)) {
1279                 current_head = NULL;
1280         } else {
1281                 current_head = lookup_commit_reference(r, &oid);
1282                 if (!current_head)
1283                         return error(_("could not parse HEAD"));
1284                 if (!oideq(&oid, &current_head->object.oid)) {
1285                         warning(_("HEAD %s is not a commit!"),
1286                                 oid_to_hex(&oid));
1287                 }
1288                 if (parse_commit(current_head))
1289                         return error(_("could not parse HEAD commit"));
1290         }
1291         *head = current_head;
1292
1293         return 0;
1294 }
1295
1296 /*
1297  * Try to commit without forking 'git commit'. In some cases we need
1298  * to run 'git commit' to display an error message
1299  *
1300  * Returns:
1301  *  -1 - error unable to commit
1302  *   0 - success
1303  *   1 - run 'git commit'
1304  */
1305 static int try_to_commit(struct repository *r,
1306                          struct strbuf *msg, const char *author,
1307                          struct replay_opts *opts, unsigned int flags,
1308                          struct object_id *oid)
1309 {
1310         struct object_id tree;
1311         struct commit *current_head = NULL;
1312         struct commit_list *parents = NULL;
1313         struct commit_extra_header *extra = NULL;
1314         struct strbuf err = STRBUF_INIT;
1315         struct strbuf commit_msg = STRBUF_INIT;
1316         char *amend_author = NULL;
1317         const char *hook_commit = NULL;
1318         enum commit_msg_cleanup_mode cleanup;
1319         int res = 0;
1320
1321         if (parse_head(r, &current_head))
1322                 return -1;
1323
1324         if (flags & AMEND_MSG) {
1325                 const char *exclude_gpgsig[] = { "gpgsig", NULL };
1326                 const char *out_enc = get_commit_output_encoding();
1327                 const char *message = logmsg_reencode(current_head, NULL,
1328                                                       out_enc);
1329
1330                 if (!msg) {
1331                         const char *orig_message = NULL;
1332
1333                         find_commit_subject(message, &orig_message);
1334                         msg = &commit_msg;
1335                         strbuf_addstr(msg, orig_message);
1336                         hook_commit = "HEAD";
1337                 }
1338                 author = amend_author = get_author(message);
1339                 unuse_commit_buffer(current_head, message);
1340                 if (!author) {
1341                         res = error(_("unable to parse commit author"));
1342                         goto out;
1343                 }
1344                 parents = copy_commit_list(current_head->parents);
1345                 extra = read_commit_extra_headers(current_head, exclude_gpgsig);
1346         } else if (current_head &&
1347                    (!(flags & CREATE_ROOT_COMMIT) || (flags & AMEND_MSG))) {
1348                 commit_list_insert(current_head, &parents);
1349         }
1350
1351         if (write_index_as_tree(&tree, r->index, r->index_file, 0, NULL)) {
1352                 res = error(_("git write-tree failed to write a tree"));
1353                 goto out;
1354         }
1355
1356         if (!(flags & ALLOW_EMPTY) && oideq(current_head ?
1357                                             get_commit_tree_oid(current_head) :
1358                                             the_hash_algo->empty_tree, &tree)) {
1359                 res = 1; /* run 'git commit' to display error message */
1360                 goto out;
1361         }
1362
1363         if (find_hook("prepare-commit-msg")) {
1364                 res = run_prepare_commit_msg_hook(r, msg, hook_commit);
1365                 if (res)
1366                         goto out;
1367                 if (strbuf_read_file(&commit_msg, git_path_commit_editmsg(),
1368                                      2048) < 0) {
1369                         res = error_errno(_("unable to read commit message "
1370                                               "from '%s'"),
1371                                             git_path_commit_editmsg());
1372                         goto out;
1373                 }
1374                 msg = &commit_msg;
1375         }
1376
1377         if (flags & CLEANUP_MSG)
1378                 cleanup = COMMIT_MSG_CLEANUP_ALL;
1379         else if ((opts->signoff || opts->record_origin) &&
1380                  !opts->explicit_cleanup)
1381                 cleanup = COMMIT_MSG_CLEANUP_SPACE;
1382         else
1383                 cleanup = opts->default_msg_cleanup;
1384
1385         if (cleanup != COMMIT_MSG_CLEANUP_NONE)
1386                 strbuf_stripspace(msg, cleanup == COMMIT_MSG_CLEANUP_ALL);
1387         if ((flags & EDIT_MSG) && message_is_empty(msg, cleanup)) {
1388                 res = 1; /* run 'git commit' to display error message */
1389                 goto out;
1390         }
1391
1392         reset_ident_date();
1393
1394         if (commit_tree_extended(msg->buf, msg->len, &tree, parents,
1395                                  oid, author, opts->gpg_sign, extra)) {
1396                 res = error(_("failed to write commit object"));
1397                 goto out;
1398         }
1399
1400         if (update_head_with_reflog(current_head, oid,
1401                                     getenv("GIT_REFLOG_ACTION"), msg, &err)) {
1402                 res = error("%s", err.buf);
1403                 goto out;
1404         }
1405
1406         if (flags & AMEND_MSG)
1407                 commit_post_rewrite(r, current_head, oid);
1408
1409 out:
1410         free_commit_extra_headers(extra);
1411         strbuf_release(&err);
1412         strbuf_release(&commit_msg);
1413         free(amend_author);
1414
1415         return res;
1416 }
1417
1418 static int do_commit(struct repository *r,
1419                      const char *msg_file, const char *author,
1420                      struct replay_opts *opts, unsigned int flags)
1421 {
1422         int res = 1;
1423
1424         if (!(flags & EDIT_MSG) && !(flags & VERIFY_MSG)) {
1425                 struct object_id oid;
1426                 struct strbuf sb = STRBUF_INIT;
1427
1428                 if (msg_file && strbuf_read_file(&sb, msg_file, 2048) < 0)
1429                         return error_errno(_("unable to read commit message "
1430                                              "from '%s'"),
1431                                            msg_file);
1432
1433                 res = try_to_commit(r, msg_file ? &sb : NULL,
1434                                     author, opts, flags, &oid);
1435                 strbuf_release(&sb);
1436                 if (!res) {
1437                         unlink(git_path_cherry_pick_head(r));
1438                         unlink(git_path_merge_msg(r));
1439                         if (!is_rebase_i(opts))
1440                                 print_commit_summary(r, NULL, &oid,
1441                                                 SUMMARY_SHOW_AUTHOR_DATE);
1442                         return res;
1443                 }
1444         }
1445         if (res == 1)
1446                 return run_git_commit(r, msg_file, opts, flags);
1447
1448         return res;
1449 }
1450
1451 static int is_original_commit_empty(struct commit *commit)
1452 {
1453         const struct object_id *ptree_oid;
1454
1455         if (parse_commit(commit))
1456                 return error(_("could not parse commit %s"),
1457                              oid_to_hex(&commit->object.oid));
1458         if (commit->parents) {
1459                 struct commit *parent = commit->parents->item;
1460                 if (parse_commit(parent))
1461                         return error(_("could not parse parent commit %s"),
1462                                 oid_to_hex(&parent->object.oid));
1463                 ptree_oid = get_commit_tree_oid(parent);
1464         } else {
1465                 ptree_oid = the_hash_algo->empty_tree; /* commit is root */
1466         }
1467
1468         return oideq(ptree_oid, get_commit_tree_oid(commit));
1469 }
1470
1471 /*
1472  * Do we run "git commit" with "--allow-empty"?
1473  */
1474 static int allow_empty(struct repository *r,
1475                        struct replay_opts *opts,
1476                        struct commit *commit)
1477 {
1478         int index_unchanged, empty_commit;
1479
1480         /*
1481          * Three cases:
1482          *
1483          * (1) we do not allow empty at all and error out.
1484          *
1485          * (2) we allow ones that were initially empty, but
1486          * forbid the ones that become empty;
1487          *
1488          * (3) we allow both.
1489          */
1490         if (!opts->allow_empty)
1491                 return 0; /* let "git commit" barf as necessary */
1492
1493         index_unchanged = is_index_unchanged(r);
1494         if (index_unchanged < 0)
1495                 return index_unchanged;
1496         if (!index_unchanged)
1497                 return 0; /* we do not have to say --allow-empty */
1498
1499         if (opts->keep_redundant_commits)
1500                 return 1;
1501
1502         empty_commit = is_original_commit_empty(commit);
1503         if (empty_commit < 0)
1504                 return empty_commit;
1505         if (!empty_commit)
1506                 return 0;
1507         else
1508                 return 1;
1509 }
1510
1511 static struct {
1512         char c;
1513         const char *str;
1514 } todo_command_info[] = {
1515         { 'p', "pick" },
1516         { 0,   "revert" },
1517         { 'e', "edit" },
1518         { 'r', "reword" },
1519         { 'f', "fixup" },
1520         { 's', "squash" },
1521         { 'x', "exec" },
1522         { 'b', "break" },
1523         { 'l', "label" },
1524         { 't', "reset" },
1525         { 'm', "merge" },
1526         { 0,   "noop" },
1527         { 'd', "drop" },
1528         { 0,   NULL }
1529 };
1530
1531 static const char *command_to_string(const enum todo_command command)
1532 {
1533         if (command < TODO_COMMENT)
1534                 return todo_command_info[command].str;
1535         die(_("unknown command: %d"), command);
1536 }
1537
1538 static char command_to_char(const enum todo_command command)
1539 {
1540         if (command < TODO_COMMENT && todo_command_info[command].c)
1541                 return todo_command_info[command].c;
1542         return comment_line_char;
1543 }
1544
1545 static int is_noop(const enum todo_command command)
1546 {
1547         return TODO_NOOP <= command;
1548 }
1549
1550 static int is_fixup(enum todo_command command)
1551 {
1552         return command == TODO_FIXUP || command == TODO_SQUASH;
1553 }
1554
1555 /* Does this command create a (non-merge) commit? */
1556 static int is_pick_or_similar(enum todo_command command)
1557 {
1558         switch (command) {
1559         case TODO_PICK:
1560         case TODO_REVERT:
1561         case TODO_EDIT:
1562         case TODO_REWORD:
1563         case TODO_FIXUP:
1564         case TODO_SQUASH:
1565                 return 1;
1566         default:
1567                 return 0;
1568         }
1569 }
1570
1571 static int update_squash_messages(struct repository *r,
1572                                   enum todo_command command,
1573                                   struct commit *commit,
1574                                   struct replay_opts *opts)
1575 {
1576         struct strbuf buf = STRBUF_INIT;
1577         int res;
1578         const char *message, *body;
1579
1580         if (opts->current_fixup_count > 0) {
1581                 struct strbuf header = STRBUF_INIT;
1582                 char *eol;
1583
1584                 if (strbuf_read_file(&buf, rebase_path_squash_msg(), 9) <= 0)
1585                         return error(_("could not read '%s'"),
1586                                 rebase_path_squash_msg());
1587
1588                 eol = buf.buf[0] != comment_line_char ?
1589                         buf.buf : strchrnul(buf.buf, '\n');
1590
1591                 strbuf_addf(&header, "%c ", comment_line_char);
1592                 strbuf_addf(&header, _("This is a combination of %d commits."),
1593                             opts->current_fixup_count + 2);
1594                 strbuf_splice(&buf, 0, eol - buf.buf, header.buf, header.len);
1595                 strbuf_release(&header);
1596         } else {
1597                 struct object_id head;
1598                 struct commit *head_commit;
1599                 const char *head_message, *body;
1600
1601                 if (get_oid("HEAD", &head))
1602                         return error(_("need a HEAD to fixup"));
1603                 if (!(head_commit = lookup_commit_reference(r, &head)))
1604                         return error(_("could not read HEAD"));
1605                 if (!(head_message = get_commit_buffer(head_commit, NULL)))
1606                         return error(_("could not read HEAD's commit message"));
1607
1608                 find_commit_subject(head_message, &body);
1609                 if (write_message(body, strlen(body),
1610                                   rebase_path_fixup_msg(), 0)) {
1611                         unuse_commit_buffer(head_commit, head_message);
1612                         return error(_("cannot write '%s'"),
1613                                      rebase_path_fixup_msg());
1614                 }
1615
1616                 strbuf_addf(&buf, "%c ", comment_line_char);
1617                 strbuf_addf(&buf, _("This is a combination of %d commits."), 2);
1618                 strbuf_addf(&buf, "\n%c ", comment_line_char);
1619                 strbuf_addstr(&buf, _("This is the 1st commit message:"));
1620                 strbuf_addstr(&buf, "\n\n");
1621                 strbuf_addstr(&buf, body);
1622
1623                 unuse_commit_buffer(head_commit, head_message);
1624         }
1625
1626         if (!(message = get_commit_buffer(commit, NULL)))
1627                 return error(_("could not read commit message of %s"),
1628                              oid_to_hex(&commit->object.oid));
1629         find_commit_subject(message, &body);
1630
1631         if (command == TODO_SQUASH) {
1632                 unlink(rebase_path_fixup_msg());
1633                 strbuf_addf(&buf, "\n%c ", comment_line_char);
1634                 strbuf_addf(&buf, _("This is the commit message #%d:"),
1635                             ++opts->current_fixup_count + 1);
1636                 strbuf_addstr(&buf, "\n\n");
1637                 strbuf_addstr(&buf, body);
1638         } else if (command == TODO_FIXUP) {
1639                 strbuf_addf(&buf, "\n%c ", comment_line_char);
1640                 strbuf_addf(&buf, _("The commit message #%d will be skipped:"),
1641                             ++opts->current_fixup_count + 1);
1642                 strbuf_addstr(&buf, "\n\n");
1643                 strbuf_add_commented_lines(&buf, body, strlen(body));
1644         } else
1645                 return error(_("unknown command: %d"), command);
1646         unuse_commit_buffer(commit, message);
1647
1648         res = write_message(buf.buf, buf.len, rebase_path_squash_msg(), 0);
1649         strbuf_release(&buf);
1650
1651         if (!res) {
1652                 strbuf_addf(&opts->current_fixups, "%s%s %s",
1653                             opts->current_fixups.len ? "\n" : "",
1654                             command_to_string(command),
1655                             oid_to_hex(&commit->object.oid));
1656                 res = write_message(opts->current_fixups.buf,
1657                                     opts->current_fixups.len,
1658                                     rebase_path_current_fixups(), 0);
1659         }
1660
1661         return res;
1662 }
1663
1664 static void flush_rewritten_pending(void)
1665 {
1666         struct strbuf buf = STRBUF_INIT;
1667         struct object_id newoid;
1668         FILE *out;
1669
1670         if (strbuf_read_file(&buf, rebase_path_rewritten_pending(), (GIT_MAX_HEXSZ + 1) * 2) > 0 &&
1671             !get_oid("HEAD", &newoid) &&
1672             (out = fopen_or_warn(rebase_path_rewritten_list(), "a"))) {
1673                 char *bol = buf.buf, *eol;
1674
1675                 while (*bol) {
1676                         eol = strchrnul(bol, '\n');
1677                         fprintf(out, "%.*s %s\n", (int)(eol - bol),
1678                                         bol, oid_to_hex(&newoid));
1679                         if (!*eol)
1680                                 break;
1681                         bol = eol + 1;
1682                 }
1683                 fclose(out);
1684                 unlink(rebase_path_rewritten_pending());
1685         }
1686         strbuf_release(&buf);
1687 }
1688
1689 static void record_in_rewritten(struct object_id *oid,
1690                 enum todo_command next_command)
1691 {
1692         FILE *out = fopen_or_warn(rebase_path_rewritten_pending(), "a");
1693
1694         if (!out)
1695                 return;
1696
1697         fprintf(out, "%s\n", oid_to_hex(oid));
1698         fclose(out);
1699
1700         if (!is_fixup(next_command))
1701                 flush_rewritten_pending();
1702 }
1703
1704 static int do_pick_commit(struct repository *r,
1705                           enum todo_command command,
1706                           struct commit *commit,
1707                           struct replay_opts *opts,
1708                           int final_fixup, int *check_todo)
1709 {
1710         unsigned int flags = opts->edit ? EDIT_MSG : 0;
1711         const char *msg_file = opts->edit ? NULL : git_path_merge_msg(r);
1712         struct object_id head;
1713         struct commit *base, *next, *parent;
1714         const char *base_label, *next_label;
1715         char *author = NULL;
1716         struct commit_message msg = { NULL, NULL, NULL, NULL };
1717         struct strbuf msgbuf = STRBUF_INIT;
1718         int res, unborn = 0, reword = 0, allow;
1719
1720         if (opts->no_commit) {
1721                 /*
1722                  * We do not intend to commit immediately.  We just want to
1723                  * merge the differences in, so let's compute the tree
1724                  * that represents the "current" state for merge-recursive
1725                  * to work on.
1726                  */
1727                 if (write_index_as_tree(&head, r->index, r->index_file, 0, NULL))
1728                         return error(_("your index file is unmerged."));
1729         } else {
1730                 unborn = get_oid("HEAD", &head);
1731                 /* Do we want to generate a root commit? */
1732                 if (is_pick_or_similar(command) && opts->have_squash_onto &&
1733                     oideq(&head, &opts->squash_onto)) {
1734                         if (is_fixup(command))
1735                                 return error(_("cannot fixup root commit"));
1736                         flags |= CREATE_ROOT_COMMIT;
1737                         unborn = 1;
1738                 } else if (unborn)
1739                         oidcpy(&head, the_hash_algo->empty_tree);
1740                 if (index_differs_from(r, unborn ? empty_tree_oid_hex() : "HEAD",
1741                                        NULL, 0))
1742                         return error_dirty_index(r, opts);
1743         }
1744         discard_index(r->index);
1745
1746         if (!commit->parents)
1747                 parent = NULL;
1748         else if (commit->parents->next) {
1749                 /* Reverting or cherry-picking a merge commit */
1750                 int cnt;
1751                 struct commit_list *p;
1752
1753                 if (!opts->mainline)
1754                         return error(_("commit %s is a merge but no -m option was given."),
1755                                 oid_to_hex(&commit->object.oid));
1756
1757                 for (cnt = 1, p = commit->parents;
1758                      cnt != opts->mainline && p;
1759                      cnt++)
1760                         p = p->next;
1761                 if (cnt != opts->mainline || !p)
1762                         return error(_("commit %s does not have parent %d"),
1763                                 oid_to_hex(&commit->object.oid), opts->mainline);
1764                 parent = p->item;
1765         } else if (1 < opts->mainline)
1766                 /*
1767                  *  Non-first parent explicitly specified as mainline for
1768                  *  non-merge commit
1769                  */
1770                 return error(_("commit %s does not have parent %d"),
1771                              oid_to_hex(&commit->object.oid), opts->mainline);
1772         else
1773                 parent = commit->parents->item;
1774
1775         if (get_message(commit, &msg) != 0)
1776                 return error(_("cannot get commit message for %s"),
1777                         oid_to_hex(&commit->object.oid));
1778
1779         if (opts->allow_ff && !is_fixup(command) &&
1780             ((parent && oideq(&parent->object.oid, &head)) ||
1781              (!parent && unborn))) {
1782                 if (is_rebase_i(opts))
1783                         write_author_script(msg.message);
1784                 res = fast_forward_to(r, &commit->object.oid, &head, unborn,
1785                         opts);
1786                 if (res || command != TODO_REWORD)
1787                         goto leave;
1788                 reword = 1;
1789                 msg_file = NULL;
1790                 goto fast_forward_edit;
1791         }
1792         if (parent && parse_commit(parent) < 0)
1793                 /* TRANSLATORS: The first %s will be a "todo" command like
1794                    "revert" or "pick", the second %s a SHA1. */
1795                 return error(_("%s: cannot parse parent commit %s"),
1796                         command_to_string(command),
1797                         oid_to_hex(&parent->object.oid));
1798
1799         /*
1800          * "commit" is an existing commit.  We would want to apply
1801          * the difference it introduces since its first parent "prev"
1802          * on top of the current HEAD if we are cherry-pick.  Or the
1803          * reverse of it if we are revert.
1804          */
1805
1806         if (command == TODO_REVERT) {
1807                 base = commit;
1808                 base_label = msg.label;
1809                 next = parent;
1810                 next_label = msg.parent_label;
1811                 strbuf_addstr(&msgbuf, "Revert \"");
1812                 strbuf_addstr(&msgbuf, msg.subject);
1813                 strbuf_addstr(&msgbuf, "\"\n\nThis reverts commit ");
1814                 strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1815
1816                 if (commit->parents && commit->parents->next) {
1817                         strbuf_addstr(&msgbuf, ", reversing\nchanges made to ");
1818                         strbuf_addstr(&msgbuf, oid_to_hex(&parent->object.oid));
1819                 }
1820                 strbuf_addstr(&msgbuf, ".\n");
1821         } else {
1822                 const char *p;
1823
1824                 base = parent;
1825                 base_label = msg.parent_label;
1826                 next = commit;
1827                 next_label = msg.label;
1828
1829                 /* Append the commit log message to msgbuf. */
1830                 if (find_commit_subject(msg.message, &p))
1831                         strbuf_addstr(&msgbuf, p);
1832
1833                 if (opts->record_origin) {
1834                         strbuf_complete_line(&msgbuf);
1835                         if (!has_conforming_footer(&msgbuf, NULL, 0))
1836                                 strbuf_addch(&msgbuf, '\n');
1837                         strbuf_addstr(&msgbuf, cherry_picked_prefix);
1838                         strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1839                         strbuf_addstr(&msgbuf, ")\n");
1840                 }
1841                 if (!is_fixup(command))
1842                         author = get_author(msg.message);
1843         }
1844
1845         if (command == TODO_REWORD)
1846                 reword = 1;
1847         else if (is_fixup(command)) {
1848                 if (update_squash_messages(r, command, commit, opts))
1849                         return -1;
1850                 flags |= AMEND_MSG;
1851                 if (!final_fixup)
1852                         msg_file = rebase_path_squash_msg();
1853                 else if (file_exists(rebase_path_fixup_msg())) {
1854                         flags |= CLEANUP_MSG;
1855                         msg_file = rebase_path_fixup_msg();
1856                 } else {
1857                         const char *dest = git_path_squash_msg(r);
1858                         unlink(dest);
1859                         if (copy_file(dest, rebase_path_squash_msg(), 0666))
1860                                 return error(_("could not rename '%s' to '%s'"),
1861                                              rebase_path_squash_msg(), dest);
1862                         unlink(git_path_merge_msg(r));
1863                         msg_file = dest;
1864                         flags |= EDIT_MSG;
1865                 }
1866         }
1867
1868         if (opts->signoff && !is_fixup(command))
1869                 append_signoff(&msgbuf, 0, 0);
1870
1871         if (is_rebase_i(opts) && write_author_script(msg.message) < 0)
1872                 res = -1;
1873         else if (!opts->strategy || !strcmp(opts->strategy, "recursive") || command == TODO_REVERT) {
1874                 res = do_recursive_merge(r, base, next, base_label, next_label,
1875                                          &head, &msgbuf, opts);
1876                 if (res < 0)
1877                         goto leave;
1878
1879                 res |= write_message(msgbuf.buf, msgbuf.len,
1880                                      git_path_merge_msg(r), 0);
1881         } else {
1882                 struct commit_list *common = NULL;
1883                 struct commit_list *remotes = NULL;
1884
1885                 res = write_message(msgbuf.buf, msgbuf.len,
1886                                     git_path_merge_msg(r), 0);
1887
1888                 commit_list_insert(base, &common);
1889                 commit_list_insert(next, &remotes);
1890                 res |= try_merge_command(r, opts->strategy,
1891                                          opts->xopts_nr, (const char **)opts->xopts,
1892                                         common, oid_to_hex(&head), remotes);
1893                 free_commit_list(common);
1894                 free_commit_list(remotes);
1895         }
1896         strbuf_release(&msgbuf);
1897
1898         /*
1899          * If the merge was clean or if it failed due to conflict, we write
1900          * CHERRY_PICK_HEAD for the subsequent invocation of commit to use.
1901          * However, if the merge did not even start, then we don't want to
1902          * write it at all.
1903          */
1904         if (command == TODO_PICK && !opts->no_commit && (res == 0 || res == 1) &&
1905             update_ref(NULL, "CHERRY_PICK_HEAD", &commit->object.oid, NULL,
1906                        REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1907                 res = -1;
1908         if (command == TODO_REVERT && ((opts->no_commit && res == 0) || res == 1) &&
1909             update_ref(NULL, "REVERT_HEAD", &commit->object.oid, NULL,
1910                        REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1911                 res = -1;
1912
1913         if (res) {
1914                 error(command == TODO_REVERT
1915                       ? _("could not revert %s... %s")
1916                       : _("could not apply %s... %s"),
1917                       short_commit_name(commit), msg.subject);
1918                 print_advice(r, res == 1, opts);
1919                 repo_rerere(r, opts->allow_rerere_auto);
1920                 goto leave;
1921         }
1922
1923         allow = allow_empty(r, opts, commit);
1924         if (allow < 0) {
1925                 res = allow;
1926                 goto leave;
1927         } else if (allow)
1928                 flags |= ALLOW_EMPTY;
1929         if (!opts->no_commit) {
1930                 if (author || command == TODO_REVERT || (flags & AMEND_MSG))
1931                         res = do_commit(r, msg_file, author, opts, flags);
1932                 else
1933                         res = error(_("unable to parse commit author"));
1934                 *check_todo = !!(flags & EDIT_MSG);
1935                 if (!res && reword) {
1936 fast_forward_edit:
1937                         res = run_git_commit(r, NULL, opts, EDIT_MSG |
1938                                              VERIFY_MSG | AMEND_MSG |
1939                                              (flags & ALLOW_EMPTY));
1940                         *check_todo = 1;
1941                 }
1942         }
1943
1944
1945         if (!res && final_fixup) {
1946                 unlink(rebase_path_fixup_msg());
1947                 unlink(rebase_path_squash_msg());
1948                 unlink(rebase_path_current_fixups());
1949                 strbuf_reset(&opts->current_fixups);
1950                 opts->current_fixup_count = 0;
1951         }
1952
1953 leave:
1954         free_message(commit, &msg);
1955         free(author);
1956         update_abort_safety_file();
1957
1958         return res;
1959 }
1960
1961 static int prepare_revs(struct replay_opts *opts)
1962 {
1963         /*
1964          * picking (but not reverting) ranges (but not individual revisions)
1965          * should be done in reverse
1966          */
1967         if (opts->action == REPLAY_PICK && !opts->revs->no_walk)
1968                 opts->revs->reverse ^= 1;
1969
1970         if (prepare_revision_walk(opts->revs))
1971                 return error(_("revision walk setup failed"));
1972
1973         return 0;
1974 }
1975
1976 static int read_and_refresh_cache(struct repository *r,
1977                                   struct replay_opts *opts)
1978 {
1979         struct lock_file index_lock = LOCK_INIT;
1980         int index_fd = repo_hold_locked_index(r, &index_lock, 0);
1981         if (repo_read_index(r) < 0) {
1982                 rollback_lock_file(&index_lock);
1983                 return error(_("git %s: failed to read the index"),
1984                         _(action_name(opts)));
1985         }
1986         refresh_index(r->index, REFRESH_QUIET|REFRESH_UNMERGED, NULL, NULL, NULL);
1987         if (index_fd >= 0) {
1988                 if (write_locked_index(r->index, &index_lock,
1989                                        COMMIT_LOCK | SKIP_IF_UNCHANGED)) {
1990                         return error(_("git %s: failed to refresh the index"),
1991                                 _(action_name(opts)));
1992                 }
1993         }
1994         return 0;
1995 }
1996
1997 enum todo_item_flags {
1998         TODO_EDIT_MERGE_MSG = 1
1999 };
2000
2001 void todo_list_release(struct todo_list *todo_list)
2002 {
2003         strbuf_release(&todo_list->buf);
2004         FREE_AND_NULL(todo_list->items);
2005         todo_list->nr = todo_list->alloc = 0;
2006 }
2007
2008 static struct todo_item *append_new_todo(struct todo_list *todo_list)
2009 {
2010         ALLOC_GROW(todo_list->items, todo_list->nr + 1, todo_list->alloc);
2011         return todo_list->items + todo_list->nr++;
2012 }
2013
2014 const char *todo_item_get_arg(struct todo_list *todo_list,
2015                               struct todo_item *item)
2016 {
2017         return todo_list->buf.buf + item->arg_offset;
2018 }
2019
2020 static int is_command(enum todo_command command, const char **bol)
2021 {
2022         const char *str = todo_command_info[command].str;
2023         const char nick = todo_command_info[command].c;
2024         const char *p = *bol + 1;
2025
2026         return skip_prefix(*bol, str, bol) ||
2027                 ((nick && **bol == nick) &&
2028                  (*p == ' ' || *p == '\t' || *p == '\n' || *p == '\r' || !*p) &&
2029                  (*bol = p));
2030 }
2031
2032 static int parse_insn_line(struct repository *r, struct todo_item *item,
2033                            const char *buf, const char *bol, char *eol)
2034 {
2035         struct object_id commit_oid;
2036         char *end_of_object_name;
2037         int i, saved, status, padding;
2038
2039         item->flags = 0;
2040
2041         /* left-trim */
2042         bol += strspn(bol, " \t");
2043
2044         if (bol == eol || *bol == '\r' || *bol == comment_line_char) {
2045                 item->command = TODO_COMMENT;
2046                 item->commit = NULL;
2047                 item->arg_offset = bol - buf;
2048                 item->arg_len = eol - bol;
2049                 return 0;
2050         }
2051
2052         for (i = 0; i < TODO_COMMENT; i++)
2053                 if (is_command(i, &bol)) {
2054                         item->command = i;
2055                         break;
2056                 }
2057         if (i >= TODO_COMMENT)
2058                 return -1;
2059
2060         /* Eat up extra spaces/ tabs before object name */
2061         padding = strspn(bol, " \t");
2062         bol += padding;
2063
2064         if (item->command == TODO_NOOP || item->command == TODO_BREAK) {
2065                 if (bol != eol)
2066                         return error(_("%s does not accept arguments: '%s'"),
2067                                      command_to_string(item->command), bol);
2068                 item->commit = NULL;
2069                 item->arg_offset = bol - buf;
2070                 item->arg_len = eol - bol;
2071                 return 0;
2072         }
2073
2074         if (!padding)
2075                 return error(_("missing arguments for %s"),
2076                              command_to_string(item->command));
2077
2078         if (item->command == TODO_EXEC || item->command == TODO_LABEL ||
2079             item->command == TODO_RESET) {
2080                 item->commit = NULL;
2081                 item->arg_offset = bol - buf;
2082                 item->arg_len = (int)(eol - bol);
2083                 return 0;
2084         }
2085
2086         if (item->command == TODO_MERGE) {
2087                 if (skip_prefix(bol, "-C", &bol))
2088                         bol += strspn(bol, " \t");
2089                 else if (skip_prefix(bol, "-c", &bol)) {
2090                         bol += strspn(bol, " \t");
2091                         item->flags |= TODO_EDIT_MERGE_MSG;
2092                 } else {
2093                         item->flags |= TODO_EDIT_MERGE_MSG;
2094                         item->commit = NULL;
2095                         item->arg_offset = bol - buf;
2096                         item->arg_len = (int)(eol - bol);
2097                         return 0;
2098                 }
2099         }
2100
2101         end_of_object_name = (char *) bol + strcspn(bol, " \t\n");
2102         saved = *end_of_object_name;
2103         *end_of_object_name = '\0';
2104         status = get_oid(bol, &commit_oid);
2105         *end_of_object_name = saved;
2106
2107         bol = end_of_object_name + strspn(end_of_object_name, " \t");
2108         item->arg_offset = bol - buf;
2109         item->arg_len = (int)(eol - bol);
2110
2111         if (status < 0)
2112                 return error(_("could not parse '%.*s'"),
2113                              (int)(end_of_object_name - bol), bol);
2114
2115         item->commit = lookup_commit_reference(r, &commit_oid);
2116         return !item->commit;
2117 }
2118
2119 int sequencer_get_last_command(struct repository *r, enum replay_action *action)
2120 {
2121         const char *todo_file, *bol;
2122         struct strbuf buf = STRBUF_INIT;
2123         int ret = 0;
2124
2125         todo_file = git_path_todo_file();
2126         if (strbuf_read_file(&buf, todo_file, 0) < 0) {
2127                 if (errno == ENOENT || errno == ENOTDIR)
2128                         return -1;
2129                 else
2130                         return error_errno("unable to open '%s'", todo_file);
2131         }
2132         bol = buf.buf + strspn(buf.buf, " \t\r\n");
2133         if (is_command(TODO_PICK, &bol) && (*bol == ' ' || *bol == '\t'))
2134                 *action = REPLAY_PICK;
2135         else if (is_command(TODO_REVERT, &bol) &&
2136                  (*bol == ' ' || *bol == '\t'))
2137                 *action = REPLAY_REVERT;
2138         else
2139                 ret = -1;
2140
2141         strbuf_release(&buf);
2142
2143         return ret;
2144 }
2145
2146 int todo_list_parse_insn_buffer(struct repository *r, char *buf,
2147                                 struct todo_list *todo_list)
2148 {
2149         struct todo_item *item;
2150         char *p = buf, *next_p;
2151         int i, res = 0, fixup_okay = file_exists(rebase_path_done());
2152
2153         todo_list->current = todo_list->nr = 0;
2154
2155         for (i = 1; *p; i++, p = next_p) {
2156                 char *eol = strchrnul(p, '\n');
2157
2158                 next_p = *eol ? eol + 1 /* skip LF */ : eol;
2159
2160                 if (p != eol && eol[-1] == '\r')
2161                         eol--; /* strip Carriage Return */
2162
2163                 item = append_new_todo(todo_list);
2164                 item->offset_in_buf = p - todo_list->buf.buf;
2165                 if (parse_insn_line(r, item, buf, p, eol)) {
2166                         res = error(_("invalid line %d: %.*s"),
2167                                 i, (int)(eol - p), p);
2168                         item->command = TODO_COMMENT + 1;
2169                         item->arg_offset = p - buf;
2170                         item->arg_len = (int)(eol - p);
2171                         item->commit = NULL;
2172                 }
2173
2174                 if (fixup_okay)
2175                         ; /* do nothing */
2176                 else if (is_fixup(item->command))
2177                         return error(_("cannot '%s' without a previous commit"),
2178                                 command_to_string(item->command));
2179                 else if (!is_noop(item->command))
2180                         fixup_okay = 1;
2181         }
2182
2183         return res;
2184 }
2185
2186 static int count_commands(struct todo_list *todo_list)
2187 {
2188         int count = 0, i;
2189
2190         for (i = 0; i < todo_list->nr; i++)
2191                 if (todo_list->items[i].command != TODO_COMMENT)
2192                         count++;
2193
2194         return count;
2195 }
2196
2197 static int get_item_line_offset(struct todo_list *todo_list, int index)
2198 {
2199         return index < todo_list->nr ?
2200                 todo_list->items[index].offset_in_buf : todo_list->buf.len;
2201 }
2202
2203 static const char *get_item_line(struct todo_list *todo_list, int index)
2204 {
2205         return todo_list->buf.buf + get_item_line_offset(todo_list, index);
2206 }
2207
2208 static int get_item_line_length(struct todo_list *todo_list, int index)
2209 {
2210         return get_item_line_offset(todo_list, index + 1)
2211                 -  get_item_line_offset(todo_list, index);
2212 }
2213
2214 static ssize_t strbuf_read_file_or_whine(struct strbuf *sb, const char *path)
2215 {
2216         int fd;
2217         ssize_t len;
2218
2219         fd = open(path, O_RDONLY);
2220         if (fd < 0)
2221                 return error_errno(_("could not open '%s'"), path);
2222         len = strbuf_read(sb, fd, 0);
2223         close(fd);
2224         if (len < 0)
2225                 return error(_("could not read '%s'."), path);
2226         return len;
2227 }
2228
2229 static int have_finished_the_last_pick(void)
2230 {
2231         struct strbuf buf = STRBUF_INIT;
2232         const char *eol;
2233         const char *todo_path = git_path_todo_file();
2234         int ret = 0;
2235
2236         if (strbuf_read_file(&buf, todo_path, 0) < 0) {
2237                 if (errno == ENOENT) {
2238                         return 0;
2239                 } else {
2240                         error_errno("unable to open '%s'", todo_path);
2241                         return 0;
2242                 }
2243         }
2244         /* If there is only one line then we are done */
2245         eol = strchr(buf.buf, '\n');
2246         if (!eol || !eol[1])
2247                 ret = 1;
2248
2249         strbuf_release(&buf);
2250
2251         return ret;
2252 }
2253
2254 void sequencer_post_commit_cleanup(struct repository *r, int verbose)
2255 {
2256         struct replay_opts opts = REPLAY_OPTS_INIT;
2257         int need_cleanup = 0;
2258
2259         if (file_exists(git_path_cherry_pick_head(r))) {
2260                 if (!unlink(git_path_cherry_pick_head(r)) && verbose)
2261                         warning(_("cancelling a cherry picking in progress"));
2262                 opts.action = REPLAY_PICK;
2263                 need_cleanup = 1;
2264         }
2265
2266         if (file_exists(git_path_revert_head(r))) {
2267                 if (!unlink(git_path_revert_head(r)) && verbose)
2268                         warning(_("cancelling a revert in progress"));
2269                 opts.action = REPLAY_REVERT;
2270                 need_cleanup = 1;
2271         }
2272
2273         if (!need_cleanup)
2274                 return;
2275
2276         if (!have_finished_the_last_pick())
2277                 return;
2278
2279         sequencer_remove_state(&opts);
2280 }
2281
2282 static int read_populate_todo(struct repository *r,
2283                               struct todo_list *todo_list,
2284                               struct replay_opts *opts)
2285 {
2286         struct stat st;
2287         const char *todo_file = get_todo_path(opts);
2288         int res;
2289
2290         strbuf_reset(&todo_list->buf);
2291         if (strbuf_read_file_or_whine(&todo_list->buf, todo_file) < 0)
2292                 return -1;
2293
2294         res = stat(todo_file, &st);
2295         if (res)
2296                 return error(_("could not stat '%s'"), todo_file);
2297         fill_stat_data(&todo_list->stat, &st);
2298
2299         res = todo_list_parse_insn_buffer(r, todo_list->buf.buf, todo_list);
2300         if (res) {
2301                 if (is_rebase_i(opts))
2302                         return error(_("please fix this using "
2303                                        "'git rebase --edit-todo'."));
2304                 return error(_("unusable instruction sheet: '%s'"), todo_file);
2305         }
2306
2307         if (!todo_list->nr &&
2308             (!is_rebase_i(opts) || !file_exists(rebase_path_done())))
2309                 return error(_("no commits parsed."));
2310
2311         if (!is_rebase_i(opts)) {
2312                 enum todo_command valid =
2313                         opts->action == REPLAY_PICK ? TODO_PICK : TODO_REVERT;
2314                 int i;
2315
2316                 for (i = 0; i < todo_list->nr; i++)
2317                         if (valid == todo_list->items[i].command)
2318                                 continue;
2319                         else if (valid == TODO_PICK)
2320                                 return error(_("cannot cherry-pick during a revert."));
2321                         else
2322                                 return error(_("cannot revert during a cherry-pick."));
2323         }
2324
2325         if (is_rebase_i(opts)) {
2326                 struct todo_list done = TODO_LIST_INIT;
2327                 FILE *f = fopen_or_warn(rebase_path_msgtotal(), "w");
2328
2329                 if (strbuf_read_file(&done.buf, rebase_path_done(), 0) > 0 &&
2330                     !todo_list_parse_insn_buffer(r, done.buf.buf, &done))
2331                         todo_list->done_nr = count_commands(&done);
2332                 else
2333                         todo_list->done_nr = 0;
2334
2335                 todo_list->total_nr = todo_list->done_nr
2336                         + count_commands(todo_list);
2337                 todo_list_release(&done);
2338
2339                 if (f) {
2340                         fprintf(f, "%d\n", todo_list->total_nr);
2341                         fclose(f);
2342                 }
2343         }
2344
2345         return 0;
2346 }
2347
2348 static int git_config_string_dup(char **dest,
2349                                  const char *var, const char *value)
2350 {
2351         if (!value)
2352                 return config_error_nonbool(var);
2353         free(*dest);
2354         *dest = xstrdup(value);
2355         return 0;
2356 }
2357
2358 static int populate_opts_cb(const char *key, const char *value, void *data)
2359 {
2360         struct replay_opts *opts = data;
2361         int error_flag = 1;
2362
2363         if (!value)
2364                 error_flag = 0;
2365         else if (!strcmp(key, "options.no-commit"))
2366                 opts->no_commit = git_config_bool_or_int(key, value, &error_flag);
2367         else if (!strcmp(key, "options.edit"))
2368                 opts->edit = git_config_bool_or_int(key, value, &error_flag);
2369         else if (!strcmp(key, "options.allow-empty"))
2370                 opts->allow_empty =
2371                         git_config_bool_or_int(key, value, &error_flag);
2372         else if (!strcmp(key, "options.allow-empty-message"))
2373                 opts->allow_empty_message =
2374                         git_config_bool_or_int(key, value, &error_flag);
2375         else if (!strcmp(key, "options.keep-redundant-commits"))
2376                 opts->keep_redundant_commits =
2377                         git_config_bool_or_int(key, value, &error_flag);
2378         else if (!strcmp(key, "options.signoff"))
2379                 opts->signoff = git_config_bool_or_int(key, value, &error_flag);
2380         else if (!strcmp(key, "options.record-origin"))
2381                 opts->record_origin = git_config_bool_or_int(key, value, &error_flag);
2382         else if (!strcmp(key, "options.allow-ff"))
2383                 opts->allow_ff = git_config_bool_or_int(key, value, &error_flag);
2384         else if (!strcmp(key, "options.mainline"))
2385                 opts->mainline = git_config_int(key, value);
2386         else if (!strcmp(key, "options.strategy"))
2387                 git_config_string_dup(&opts->strategy, key, value);
2388         else if (!strcmp(key, "options.gpg-sign"))
2389                 git_config_string_dup(&opts->gpg_sign, key, value);
2390         else if (!strcmp(key, "options.strategy-option")) {
2391                 ALLOC_GROW(opts->xopts, opts->xopts_nr + 1, opts->xopts_alloc);
2392                 opts->xopts[opts->xopts_nr++] = xstrdup(value);
2393         } else if (!strcmp(key, "options.allow-rerere-auto"))
2394                 opts->allow_rerere_auto =
2395                         git_config_bool_or_int(key, value, &error_flag) ?
2396                                 RERERE_AUTOUPDATE : RERERE_NOAUTOUPDATE;
2397         else if (!strcmp(key, "options.default-msg-cleanup")) {
2398                 opts->explicit_cleanup = 1;
2399                 opts->default_msg_cleanup = get_cleanup_mode(value, 1);
2400         } else
2401                 return error(_("invalid key: %s"), key);
2402
2403         if (!error_flag)
2404                 return error(_("invalid value for %s: %s"), key, value);
2405
2406         return 0;
2407 }
2408
2409 void parse_strategy_opts(struct replay_opts *opts, char *raw_opts)
2410 {
2411         int i;
2412         char *strategy_opts_string = raw_opts;
2413
2414         if (*strategy_opts_string == ' ')
2415                 strategy_opts_string++;
2416
2417         opts->xopts_nr = split_cmdline(strategy_opts_string,
2418                                        (const char ***)&opts->xopts);
2419         for (i = 0; i < opts->xopts_nr; i++) {
2420                 const char *arg = opts->xopts[i];
2421
2422                 skip_prefix(arg, "--", &arg);
2423                 opts->xopts[i] = xstrdup(arg);
2424         }
2425 }
2426
2427 static void read_strategy_opts(struct replay_opts *opts, struct strbuf *buf)
2428 {
2429         strbuf_reset(buf);
2430         if (!read_oneliner(buf, rebase_path_strategy(), 0))
2431                 return;
2432         opts->strategy = strbuf_detach(buf, NULL);
2433         if (!read_oneliner(buf, rebase_path_strategy_opts(), 0))
2434                 return;
2435
2436         parse_strategy_opts(opts, buf->buf);
2437 }
2438
2439 static int read_populate_opts(struct replay_opts *opts)
2440 {
2441         if (is_rebase_i(opts)) {
2442                 struct strbuf buf = STRBUF_INIT;
2443
2444                 if (read_oneliner(&buf, rebase_path_gpg_sign_opt(), 1)) {
2445                         if (!starts_with(buf.buf, "-S"))
2446                                 strbuf_reset(&buf);
2447                         else {
2448                                 free(opts->gpg_sign);
2449                                 opts->gpg_sign = xstrdup(buf.buf + 2);
2450                         }
2451                         strbuf_reset(&buf);
2452                 }
2453
2454                 if (read_oneliner(&buf, rebase_path_allow_rerere_autoupdate(), 1)) {
2455                         if (!strcmp(buf.buf, "--rerere-autoupdate"))
2456                                 opts->allow_rerere_auto = RERERE_AUTOUPDATE;
2457                         else if (!strcmp(buf.buf, "--no-rerere-autoupdate"))
2458                                 opts->allow_rerere_auto = RERERE_NOAUTOUPDATE;
2459                         strbuf_reset(&buf);
2460                 }
2461
2462                 if (file_exists(rebase_path_verbose()))
2463                         opts->verbose = 1;
2464
2465                 if (file_exists(rebase_path_quiet()))
2466                         opts->quiet = 1;
2467
2468                 if (file_exists(rebase_path_signoff())) {
2469                         opts->allow_ff = 0;
2470                         opts->signoff = 1;
2471                 }
2472
2473                 if (file_exists(rebase_path_reschedule_failed_exec()))
2474                         opts->reschedule_failed_exec = 1;
2475
2476                 read_strategy_opts(opts, &buf);
2477                 strbuf_release(&buf);
2478
2479                 if (read_oneliner(&opts->current_fixups,
2480                                   rebase_path_current_fixups(), 1)) {
2481                         const char *p = opts->current_fixups.buf;
2482                         opts->current_fixup_count = 1;
2483                         while ((p = strchr(p, '\n'))) {
2484                                 opts->current_fixup_count++;
2485                                 p++;
2486                         }
2487                 }
2488
2489                 if (read_oneliner(&buf, rebase_path_squash_onto(), 0)) {
2490                         if (get_oid_hex(buf.buf, &opts->squash_onto) < 0)
2491                                 return error(_("unusable squash-onto"));
2492                         opts->have_squash_onto = 1;
2493                 }
2494
2495                 return 0;
2496         }
2497
2498         if (!file_exists(git_path_opts_file()))
2499                 return 0;
2500         /*
2501          * The function git_parse_source(), called from git_config_from_file(),
2502          * may die() in case of a syntactically incorrect file. We do not care
2503          * about this case, though, because we wrote that file ourselves, so we
2504          * are pretty certain that it is syntactically correct.
2505          */
2506         if (git_config_from_file(populate_opts_cb, git_path_opts_file(), opts) < 0)
2507                 return error(_("malformed options sheet: '%s'"),
2508                         git_path_opts_file());
2509         return 0;
2510 }
2511
2512 static void write_strategy_opts(struct replay_opts *opts)
2513 {
2514         int i;
2515         struct strbuf buf = STRBUF_INIT;
2516
2517         for (i = 0; i < opts->xopts_nr; ++i)
2518                 strbuf_addf(&buf, " --%s", opts->xopts[i]);
2519
2520         write_file(rebase_path_strategy_opts(), "%s\n", buf.buf);
2521         strbuf_release(&buf);
2522 }
2523
2524 int write_basic_state(struct replay_opts *opts, const char *head_name,
2525                       struct commit *onto, const char *orig_head)
2526 {
2527         const char *quiet = getenv("GIT_QUIET");
2528
2529         if (head_name)
2530                 write_file(rebase_path_head_name(), "%s\n", head_name);
2531         if (onto)
2532                 write_file(rebase_path_onto(), "%s\n",
2533                            oid_to_hex(&onto->object.oid));
2534         if (orig_head)
2535                 write_file(rebase_path_orig_head(), "%s\n", orig_head);
2536
2537         if (quiet)
2538                 write_file(rebase_path_quiet(), "%s\n", quiet);
2539         if (opts->verbose)
2540                 write_file(rebase_path_verbose(), "%s", "");
2541         if (opts->strategy)
2542                 write_file(rebase_path_strategy(), "%s\n", opts->strategy);
2543         if (opts->xopts_nr > 0)
2544                 write_strategy_opts(opts);
2545
2546         if (opts->allow_rerere_auto == RERERE_AUTOUPDATE)
2547                 write_file(rebase_path_allow_rerere_autoupdate(), "--rerere-autoupdate\n");
2548         else if (opts->allow_rerere_auto == RERERE_NOAUTOUPDATE)
2549                 write_file(rebase_path_allow_rerere_autoupdate(), "--no-rerere-autoupdate\n");
2550
2551         if (opts->gpg_sign)
2552                 write_file(rebase_path_gpg_sign_opt(), "-S%s\n", opts->gpg_sign);
2553         if (opts->signoff)
2554                 write_file(rebase_path_signoff(), "--signoff\n");
2555         if (opts->reschedule_failed_exec)
2556                 write_file(rebase_path_reschedule_failed_exec(), "%s", "");
2557
2558         return 0;
2559 }
2560
2561 static int walk_revs_populate_todo(struct todo_list *todo_list,
2562                                 struct replay_opts *opts)
2563 {
2564         enum todo_command command = opts->action == REPLAY_PICK ?
2565                 TODO_PICK : TODO_REVERT;
2566         const char *command_string = todo_command_info[command].str;
2567         struct commit *commit;
2568
2569         if (prepare_revs(opts))
2570                 return -1;
2571
2572         while ((commit = get_revision(opts->revs))) {
2573                 struct todo_item *item = append_new_todo(todo_list);
2574                 const char *commit_buffer = get_commit_buffer(commit, NULL);
2575                 const char *subject;
2576                 int subject_len;
2577
2578                 item->command = command;
2579                 item->commit = commit;
2580                 item->arg_offset = 0;
2581                 item->arg_len = 0;
2582                 item->offset_in_buf = todo_list->buf.len;
2583                 subject_len = find_commit_subject(commit_buffer, &subject);
2584                 strbuf_addf(&todo_list->buf, "%s %s %.*s\n", command_string,
2585                         short_commit_name(commit), subject_len, subject);
2586                 unuse_commit_buffer(commit, commit_buffer);
2587         }
2588
2589         if (!todo_list->nr)
2590                 return error(_("empty commit set passed"));
2591
2592         return 0;
2593 }
2594
2595 static int create_seq_dir(struct repository *r)
2596 {
2597         enum replay_action action;
2598         const char *in_progress_error = NULL;
2599         const char *in_progress_advice = NULL;
2600         unsigned int advise_skip = file_exists(git_path_revert_head(r)) ||
2601                                 file_exists(git_path_cherry_pick_head(r));
2602
2603         if (!sequencer_get_last_command(r, &action)) {
2604                 switch (action) {
2605                 case REPLAY_REVERT:
2606                         in_progress_error = _("revert is already in progress");
2607                         in_progress_advice =
2608                         _("try \"git revert (--continue | %s--abort | --quit)\"");
2609                         break;
2610                 case REPLAY_PICK:
2611                         in_progress_error = _("cherry-pick is already in progress");
2612                         in_progress_advice =
2613                         _("try \"git cherry-pick (--continue | %s--abort | --quit)\"");
2614                         break;
2615                 default:
2616                         BUG("unexpected action in create_seq_dir");
2617                 }
2618         }
2619         if (in_progress_error) {
2620                 error("%s", in_progress_error);
2621                 if (advice_sequencer_in_use)
2622                         advise(in_progress_advice,
2623                                 advise_skip ? "--skip | " : "");
2624                 return -1;
2625         }
2626         if (mkdir(git_path_seq_dir(), 0777) < 0)
2627                 return error_errno(_("could not create sequencer directory '%s'"),
2628                                    git_path_seq_dir());
2629
2630         return 0;
2631 }
2632
2633 static int save_head(const char *head)
2634 {
2635         struct lock_file head_lock = LOCK_INIT;
2636         struct strbuf buf = STRBUF_INIT;
2637         int fd;
2638         ssize_t written;
2639
2640         fd = hold_lock_file_for_update(&head_lock, git_path_head_file(), 0);
2641         if (fd < 0)
2642                 return error_errno(_("could not lock HEAD"));
2643         strbuf_addf(&buf, "%s\n", head);
2644         written = write_in_full(fd, buf.buf, buf.len);
2645         strbuf_release(&buf);
2646         if (written < 0) {
2647                 error_errno(_("could not write to '%s'"), git_path_head_file());
2648                 rollback_lock_file(&head_lock);
2649                 return -1;
2650         }
2651         if (commit_lock_file(&head_lock) < 0)
2652                 return error(_("failed to finalize '%s'"), git_path_head_file());
2653         return 0;
2654 }
2655
2656 static int rollback_is_safe(void)
2657 {
2658         struct strbuf sb = STRBUF_INIT;
2659         struct object_id expected_head, actual_head;
2660
2661         if (strbuf_read_file(&sb, git_path_abort_safety_file(), 0) >= 0) {
2662                 strbuf_trim(&sb);
2663                 if (get_oid_hex(sb.buf, &expected_head)) {
2664                         strbuf_release(&sb);
2665                         die(_("could not parse %s"), git_path_abort_safety_file());
2666                 }
2667                 strbuf_release(&sb);
2668         }
2669         else if (errno == ENOENT)
2670                 oidclr(&expected_head);
2671         else
2672                 die_errno(_("could not read '%s'"), git_path_abort_safety_file());
2673
2674         if (get_oid("HEAD", &actual_head))
2675                 oidclr(&actual_head);
2676
2677         return oideq(&actual_head, &expected_head);
2678 }
2679
2680 static int reset_merge(const struct object_id *oid)
2681 {
2682         int ret;
2683         struct argv_array argv = ARGV_ARRAY_INIT;
2684
2685         argv_array_pushl(&argv, "reset", "--merge", NULL);
2686
2687         if (!is_null_oid(oid))
2688                 argv_array_push(&argv, oid_to_hex(oid));
2689
2690         ret = run_command_v_opt(argv.argv, RUN_GIT_CMD);
2691         argv_array_clear(&argv);
2692
2693         return ret;
2694 }
2695
2696 static int rollback_single_pick(struct repository *r)
2697 {
2698         struct object_id head_oid;
2699
2700         if (!file_exists(git_path_cherry_pick_head(r)) &&
2701             !file_exists(git_path_revert_head(r)))
2702                 return error(_("no cherry-pick or revert in progress"));
2703         if (read_ref_full("HEAD", 0, &head_oid, NULL))
2704                 return error(_("cannot resolve HEAD"));
2705         if (is_null_oid(&head_oid))
2706                 return error(_("cannot abort from a branch yet to be born"));
2707         return reset_merge(&head_oid);
2708 }
2709
2710 static int skip_single_pick(void)
2711 {
2712         struct object_id head;
2713
2714         if (read_ref_full("HEAD", 0, &head, NULL))
2715                 return error(_("cannot resolve HEAD"));
2716         return reset_merge(&head);
2717 }
2718
2719 int sequencer_rollback(struct repository *r, struct replay_opts *opts)
2720 {
2721         FILE *f;
2722         struct object_id oid;
2723         struct strbuf buf = STRBUF_INIT;
2724         const char *p;
2725
2726         f = fopen(git_path_head_file(), "r");
2727         if (!f && errno == ENOENT) {
2728                 /*
2729                  * There is no multiple-cherry-pick in progress.
2730                  * If CHERRY_PICK_HEAD or REVERT_HEAD indicates
2731                  * a single-cherry-pick in progress, abort that.
2732                  */
2733                 return rollback_single_pick(r);
2734         }
2735         if (!f)
2736                 return error_errno(_("cannot open '%s'"), git_path_head_file());
2737         if (strbuf_getline_lf(&buf, f)) {
2738                 error(_("cannot read '%s': %s"), git_path_head_file(),
2739                       ferror(f) ?  strerror(errno) : _("unexpected end of file"));
2740                 fclose(f);
2741                 goto fail;
2742         }
2743         fclose(f);
2744         if (parse_oid_hex(buf.buf, &oid, &p) || *p != '\0') {
2745                 error(_("stored pre-cherry-pick HEAD file '%s' is corrupt"),
2746                         git_path_head_file());
2747                 goto fail;
2748         }
2749         if (is_null_oid(&oid)) {
2750                 error(_("cannot abort from a branch yet to be born"));
2751                 goto fail;
2752         }
2753
2754         if (!rollback_is_safe()) {
2755                 /* Do not error, just do not rollback */
2756                 warning(_("You seem to have moved HEAD. "
2757                           "Not rewinding, check your HEAD!"));
2758         } else
2759         if (reset_merge(&oid))
2760                 goto fail;
2761         strbuf_release(&buf);
2762         return sequencer_remove_state(opts);
2763 fail:
2764         strbuf_release(&buf);
2765         return -1;
2766 }
2767
2768 int sequencer_skip(struct repository *r, struct replay_opts *opts)
2769 {
2770         enum replay_action action = -1;
2771         sequencer_get_last_command(r, &action);
2772
2773         /*
2774          * Check whether the subcommand requested to skip the commit is actually
2775          * in progress and that it's safe to skip the commit.
2776          *
2777          * opts->action tells us which subcommand requested to skip the commit.
2778          * If the corresponding .git/<ACTION>_HEAD exists, we know that the
2779          * action is in progress and we can skip the commit.
2780          *
2781          * Otherwise we check that the last instruction was related to the
2782          * particular subcommand we're trying to execute and barf if that's not
2783          * the case.
2784          *
2785          * Finally we check that the rollback is "safe", i.e., has the HEAD
2786          * moved? In this case, it doesn't make sense to "reset the merge" and
2787          * "skip the commit" as the user already handled this by committing. But
2788          * we'd not want to barf here, instead give advice on how to proceed. We
2789          * only need to check that when .git/<ACTION>_HEAD doesn't exist because
2790          * it gets removed when the user commits, so if it still exists we're
2791          * sure the user can't have committed before.
2792          */
2793         switch (opts->action) {
2794         case REPLAY_REVERT:
2795                 if (!file_exists(git_path_revert_head(r))) {
2796                         if (action != REPLAY_REVERT)
2797                                 return error(_("no revert in progress"));
2798                         if (!rollback_is_safe())
2799                                 goto give_advice;
2800                 }
2801                 break;
2802         case REPLAY_PICK:
2803                 if (!file_exists(git_path_cherry_pick_head(r))) {
2804                         if (action != REPLAY_PICK)
2805                                 return error(_("no cherry-pick in progress"));
2806                         if (!rollback_is_safe())
2807                                 goto give_advice;
2808                 }
2809                 break;
2810         default:
2811                 BUG("unexpected action in sequencer_skip");
2812         }
2813
2814         if (skip_single_pick())
2815                 return error(_("failed to skip the commit"));
2816         if (!is_directory(git_path_seq_dir()))
2817                 return 0;
2818
2819         return sequencer_continue(r, opts);
2820
2821 give_advice:
2822         error(_("there is nothing to skip"));
2823
2824         if (advice_resolve_conflict) {
2825                 advise(_("have you committed already?\n"
2826                          "try \"git %s --continue\""),
2827                          action == REPLAY_REVERT ? "revert" : "cherry-pick");
2828         }
2829         return -1;
2830 }
2831
2832 static int save_todo(struct todo_list *todo_list, struct replay_opts *opts)
2833 {
2834         struct lock_file todo_lock = LOCK_INIT;
2835         const char *todo_path = get_todo_path(opts);
2836         int next = todo_list->current, offset, fd;
2837
2838         /*
2839          * rebase -i writes "git-rebase-todo" without the currently executing
2840          * command, appending it to "done" instead.
2841          */
2842         if (is_rebase_i(opts))
2843                 next++;
2844
2845         fd = hold_lock_file_for_update(&todo_lock, todo_path, 0);
2846         if (fd < 0)
2847                 return error_errno(_("could not lock '%s'"), todo_path);
2848         offset = get_item_line_offset(todo_list, next);
2849         if (write_in_full(fd, todo_list->buf.buf + offset,
2850                         todo_list->buf.len - offset) < 0)
2851                 return error_errno(_("could not write to '%s'"), todo_path);
2852         if (commit_lock_file(&todo_lock) < 0)
2853                 return error(_("failed to finalize '%s'"), todo_path);
2854
2855         if (is_rebase_i(opts) && next > 0) {
2856                 const char *done = rebase_path_done();
2857                 int fd = open(done, O_CREAT | O_WRONLY | O_APPEND, 0666);
2858                 int ret = 0;
2859
2860                 if (fd < 0)
2861                         return 0;
2862                 if (write_in_full(fd, get_item_line(todo_list, next - 1),
2863                                   get_item_line_length(todo_list, next - 1))
2864                     < 0)
2865                         ret = error_errno(_("could not write to '%s'"), done);
2866                 if (close(fd) < 0)
2867                         ret = error_errno(_("failed to finalize '%s'"), done);
2868                 return ret;
2869         }
2870         return 0;
2871 }
2872
2873 static int save_opts(struct replay_opts *opts)
2874 {
2875         const char *opts_file = git_path_opts_file();
2876         int res = 0;
2877
2878         if (opts->no_commit)
2879                 res |= git_config_set_in_file_gently(opts_file,
2880                                         "options.no-commit", "true");
2881         if (opts->edit)
2882                 res |= git_config_set_in_file_gently(opts_file,
2883                                         "options.edit", "true");
2884         if (opts->allow_empty)
2885                 res |= git_config_set_in_file_gently(opts_file,
2886                                         "options.allow-empty", "true");
2887         if (opts->allow_empty_message)
2888                 res |= git_config_set_in_file_gently(opts_file,
2889                                 "options.allow-empty-message", "true");
2890         if (opts->keep_redundant_commits)
2891                 res |= git_config_set_in_file_gently(opts_file,
2892                                 "options.keep-redundant-commits", "true");
2893         if (opts->signoff)
2894                 res |= git_config_set_in_file_gently(opts_file,
2895                                         "options.signoff", "true");
2896         if (opts->record_origin)
2897                 res |= git_config_set_in_file_gently(opts_file,
2898                                         "options.record-origin", "true");
2899         if (opts->allow_ff)
2900                 res |= git_config_set_in_file_gently(opts_file,
2901                                         "options.allow-ff", "true");
2902         if (opts->mainline) {
2903                 struct strbuf buf = STRBUF_INIT;
2904                 strbuf_addf(&buf, "%d", opts->mainline);
2905                 res |= git_config_set_in_file_gently(opts_file,
2906                                         "options.mainline", buf.buf);
2907                 strbuf_release(&buf);
2908         }
2909         if (opts->strategy)
2910                 res |= git_config_set_in_file_gently(opts_file,
2911                                         "options.strategy", opts->strategy);
2912         if (opts->gpg_sign)
2913                 res |= git_config_set_in_file_gently(opts_file,
2914                                         "options.gpg-sign", opts->gpg_sign);
2915         if (opts->xopts) {
2916                 int i;
2917                 for (i = 0; i < opts->xopts_nr; i++)
2918                         res |= git_config_set_multivar_in_file_gently(opts_file,
2919                                         "options.strategy-option",
2920                                         opts->xopts[i], "^$", 0);
2921         }
2922         if (opts->allow_rerere_auto)
2923                 res |= git_config_set_in_file_gently(opts_file,
2924                                 "options.allow-rerere-auto",
2925                                 opts->allow_rerere_auto == RERERE_AUTOUPDATE ?
2926                                 "true" : "false");
2927
2928         if (opts->explicit_cleanup)
2929                 res |= git_config_set_in_file_gently(opts_file,
2930                                 "options.default-msg-cleanup",
2931                                 describe_cleanup_mode(opts->default_msg_cleanup));
2932         return res;
2933 }
2934
2935 static int make_patch(struct repository *r,
2936                       struct commit *commit,
2937                       struct replay_opts *opts)
2938 {
2939         struct strbuf buf = STRBUF_INIT;
2940         struct rev_info log_tree_opt;
2941         const char *subject, *p;
2942         int res = 0;
2943
2944         p = short_commit_name(commit);
2945         if (write_message(p, strlen(p), rebase_path_stopped_sha(), 1) < 0)
2946                 return -1;
2947         if (update_ref("rebase", "REBASE_HEAD", &commit->object.oid,
2948                        NULL, REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
2949                 res |= error(_("could not update %s"), "REBASE_HEAD");
2950
2951         strbuf_addf(&buf, "%s/patch", get_dir(opts));
2952         memset(&log_tree_opt, 0, sizeof(log_tree_opt));
2953         repo_init_revisions(r, &log_tree_opt, NULL);
2954         log_tree_opt.abbrev = 0;
2955         log_tree_opt.diff = 1;
2956         log_tree_opt.diffopt.output_format = DIFF_FORMAT_PATCH;
2957         log_tree_opt.disable_stdin = 1;
2958         log_tree_opt.no_commit_id = 1;
2959         log_tree_opt.diffopt.file = fopen(buf.buf, "w");
2960         log_tree_opt.diffopt.use_color = GIT_COLOR_NEVER;
2961         if (!log_tree_opt.diffopt.file)
2962                 res |= error_errno(_("could not open '%s'"), buf.buf);
2963         else {
2964                 res |= log_tree_commit(&log_tree_opt, commit);
2965                 fclose(log_tree_opt.diffopt.file);
2966         }
2967         strbuf_reset(&buf);
2968
2969         strbuf_addf(&buf, "%s/message", get_dir(opts));
2970         if (!file_exists(buf.buf)) {
2971                 const char *commit_buffer = get_commit_buffer(commit, NULL);
2972                 find_commit_subject(commit_buffer, &subject);
2973                 res |= write_message(subject, strlen(subject), buf.buf, 1);
2974                 unuse_commit_buffer(commit, commit_buffer);
2975         }
2976         strbuf_release(&buf);
2977
2978         return res;
2979 }
2980
2981 static int intend_to_amend(void)
2982 {
2983         struct object_id head;
2984         char *p;
2985
2986         if (get_oid("HEAD", &head))
2987                 return error(_("cannot read HEAD"));
2988
2989         p = oid_to_hex(&head);
2990         return write_message(p, strlen(p), rebase_path_amend(), 1);
2991 }
2992
2993 static int error_with_patch(struct repository *r,
2994                             struct commit *commit,
2995                             const char *subject, int subject_len,
2996                             struct replay_opts *opts,
2997                             int exit_code, int to_amend)
2998 {
2999         if (commit) {
3000                 if (make_patch(r, commit, opts))
3001                         return -1;
3002         } else if (copy_file(rebase_path_message(),
3003                              git_path_merge_msg(r), 0666))
3004                 return error(_("unable to copy '%s' to '%s'"),
3005                              git_path_merge_msg(r), rebase_path_message());
3006
3007         if (to_amend) {
3008                 if (intend_to_amend())
3009                         return -1;
3010
3011                 fprintf(stderr,
3012                         _("You can amend the commit now, with\n"
3013                           "\n"
3014                           "  git commit --amend %s\n"
3015                           "\n"
3016                           "Once you are satisfied with your changes, run\n"
3017                           "\n"
3018                           "  git rebase --continue\n"),
3019                         gpg_sign_opt_quoted(opts));
3020         } else if (exit_code) {
3021                 if (commit)
3022                         fprintf_ln(stderr, _("Could not apply %s... %.*s"),
3023                                    short_commit_name(commit), subject_len, subject);
3024                 else
3025                         /*
3026                          * We don't have the hash of the parent so
3027                          * just print the line from the todo file.
3028                          */
3029                         fprintf_ln(stderr, _("Could not merge %.*s"),
3030                                    subject_len, subject);
3031         }
3032
3033         return exit_code;
3034 }
3035
3036 static int error_failed_squash(struct repository *r,
3037                                struct commit *commit,
3038                                struct replay_opts *opts,
3039                                int subject_len,
3040                                const char *subject)
3041 {
3042         if (copy_file(rebase_path_message(), rebase_path_squash_msg(), 0666))
3043                 return error(_("could not copy '%s' to '%s'"),
3044                         rebase_path_squash_msg(), rebase_path_message());
3045         unlink(git_path_merge_msg(r));
3046         if (copy_file(git_path_merge_msg(r), rebase_path_message(), 0666))
3047                 return error(_("could not copy '%s' to '%s'"),
3048                              rebase_path_message(),
3049                              git_path_merge_msg(r));
3050         return error_with_patch(r, commit, subject, subject_len, opts, 1, 0);
3051 }
3052
3053 static int do_exec(struct repository *r, const char *command_line)
3054 {
3055         struct argv_array child_env = ARGV_ARRAY_INIT;
3056         const char *child_argv[] = { NULL, NULL };
3057         int dirty, status;
3058
3059         fprintf(stderr, "Executing: %s\n", command_line);
3060         child_argv[0] = command_line;
3061         argv_array_pushf(&child_env, "GIT_DIR=%s", absolute_path(get_git_dir()));
3062         argv_array_pushf(&child_env, "GIT_WORK_TREE=%s",
3063                          absolute_path(get_git_work_tree()));
3064         status = run_command_v_opt_cd_env(child_argv, RUN_USING_SHELL, NULL,
3065                                           child_env.argv);
3066
3067         /* force re-reading of the cache */
3068         if (discard_index(r->index) < 0 || repo_read_index(r) < 0)
3069                 return error(_("could not read index"));
3070
3071         dirty = require_clean_work_tree(r, "rebase", NULL, 1, 1);
3072
3073         if (status) {
3074                 warning(_("execution failed: %s\n%s"
3075                           "You can fix the problem, and then run\n"
3076                           "\n"
3077                           "  git rebase --continue\n"
3078                           "\n"),
3079                         command_line,
3080                         dirty ? N_("and made changes to the index and/or the "
3081                                 "working tree\n") : "");
3082                 if (status == 127)
3083                         /* command not found */
3084                         status = 1;
3085         } else if (dirty) {
3086                 warning(_("execution succeeded: %s\nbut "
3087                           "left changes to the index and/or the working tree\n"
3088                           "Commit or stash your changes, and then run\n"
3089                           "\n"
3090                           "  git rebase --continue\n"
3091                           "\n"), command_line);
3092                 status = 1;
3093         }
3094
3095         argv_array_clear(&child_env);
3096
3097         return status;
3098 }
3099
3100 static int safe_append(const char *filename, const char *fmt, ...)
3101 {
3102         va_list ap;
3103         struct lock_file lock = LOCK_INIT;
3104         int fd = hold_lock_file_for_update(&lock, filename,
3105                                            LOCK_REPORT_ON_ERROR);
3106         struct strbuf buf = STRBUF_INIT;
3107
3108         if (fd < 0)
3109                 return -1;
3110
3111         if (strbuf_read_file(&buf, filename, 0) < 0 && errno != ENOENT) {
3112                 error_errno(_("could not read '%s'"), filename);
3113                 rollback_lock_file(&lock);
3114                 return -1;
3115         }
3116         strbuf_complete(&buf, '\n');
3117         va_start(ap, fmt);
3118         strbuf_vaddf(&buf, fmt, ap);
3119         va_end(ap);
3120
3121         if (write_in_full(fd, buf.buf, buf.len) < 0) {
3122                 error_errno(_("could not write to '%s'"), filename);
3123                 strbuf_release(&buf);
3124                 rollback_lock_file(&lock);
3125                 return -1;
3126         }
3127         if (commit_lock_file(&lock) < 0) {
3128                 strbuf_release(&buf);
3129                 rollback_lock_file(&lock);
3130                 return error(_("failed to finalize '%s'"), filename);
3131         }
3132
3133         strbuf_release(&buf);
3134         return 0;
3135 }
3136
3137 static int do_label(struct repository *r, const char *name, int len)
3138 {
3139         struct ref_store *refs = get_main_ref_store(r);
3140         struct ref_transaction *transaction;
3141         struct strbuf ref_name = STRBUF_INIT, err = STRBUF_INIT;
3142         struct strbuf msg = STRBUF_INIT;
3143         int ret = 0;
3144         struct object_id head_oid;
3145
3146         if (len == 1 && *name == '#')
3147                 return error(_("illegal label name: '%.*s'"), len, name);
3148
3149         strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
3150         strbuf_addf(&msg, "rebase -i (label) '%.*s'", len, name);
3151
3152         transaction = ref_store_transaction_begin(refs, &err);
3153         if (!transaction) {
3154                 error("%s", err.buf);
3155                 ret = -1;
3156         } else if (get_oid("HEAD", &head_oid)) {
3157                 error(_("could not read HEAD"));
3158                 ret = -1;
3159         } else if (ref_transaction_update(transaction, ref_name.buf, &head_oid,
3160                                           NULL, 0, msg.buf, &err) < 0 ||
3161                    ref_transaction_commit(transaction, &err)) {
3162                 error("%s", err.buf);
3163                 ret = -1;
3164         }
3165         ref_transaction_free(transaction);
3166         strbuf_release(&err);
3167         strbuf_release(&msg);
3168
3169         if (!ret)
3170                 ret = safe_append(rebase_path_refs_to_delete(),
3171                                   "%s\n", ref_name.buf);
3172         strbuf_release(&ref_name);
3173
3174         return ret;
3175 }
3176
3177 static const char *reflog_message(struct replay_opts *opts,
3178         const char *sub_action, const char *fmt, ...);
3179
3180 static int do_reset(struct repository *r,
3181                     const char *name, int len,
3182                     struct replay_opts *opts)
3183 {
3184         struct strbuf ref_name = STRBUF_INIT;
3185         struct object_id oid;
3186         struct lock_file lock = LOCK_INIT;
3187         struct tree_desc desc;
3188         struct tree *tree;
3189         struct unpack_trees_options unpack_tree_opts;
3190         int ret = 0;
3191
3192         if (repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0)
3193                 return -1;
3194
3195         if (len == 10 && !strncmp("[new root]", name, len)) {
3196                 if (!opts->have_squash_onto) {
3197                         const char *hex;
3198                         if (commit_tree("", 0, the_hash_algo->empty_tree,
3199                                         NULL, &opts->squash_onto,
3200                                         NULL, NULL))
3201                                 return error(_("writing fake root commit"));
3202                         opts->have_squash_onto = 1;
3203                         hex = oid_to_hex(&opts->squash_onto);
3204                         if (write_message(hex, strlen(hex),
3205                                           rebase_path_squash_onto(), 0))
3206                                 return error(_("writing squash-onto"));
3207                 }
3208                 oidcpy(&oid, &opts->squash_onto);
3209         } else {
3210                 int i;
3211
3212                 /* Determine the length of the label */
3213                 for (i = 0; i < len; i++)
3214                         if (isspace(name[i]))
3215                                 break;
3216                 len = i;
3217
3218                 strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
3219                 if (get_oid(ref_name.buf, &oid) &&
3220                     get_oid(ref_name.buf + strlen("refs/rewritten/"), &oid)) {
3221                         error(_("could not read '%s'"), ref_name.buf);
3222                         rollback_lock_file(&lock);
3223                         strbuf_release(&ref_name);
3224                         return -1;
3225                 }
3226         }
3227
3228         memset(&unpack_tree_opts, 0, sizeof(unpack_tree_opts));
3229         setup_unpack_trees_porcelain(&unpack_tree_opts, "reset");
3230         unpack_tree_opts.head_idx = 1;
3231         unpack_tree_opts.src_index = r->index;
3232         unpack_tree_opts.dst_index = r->index;
3233         unpack_tree_opts.fn = oneway_merge;
3234         unpack_tree_opts.merge = 1;
3235         unpack_tree_opts.update = 1;
3236
3237         if (repo_read_index_unmerged(r)) {
3238                 rollback_lock_file(&lock);
3239                 strbuf_release(&ref_name);
3240                 return error_resolve_conflict(_(action_name(opts)));
3241         }
3242
3243         if (!fill_tree_descriptor(r, &desc, &oid)) {
3244                 error(_("failed to find tree of %s"), oid_to_hex(&oid));
3245                 rollback_lock_file(&lock);
3246                 free((void *)desc.buffer);
3247                 strbuf_release(&ref_name);
3248                 return -1;
3249         }
3250
3251         if (unpack_trees(1, &desc, &unpack_tree_opts)) {
3252                 rollback_lock_file(&lock);
3253                 free((void *)desc.buffer);
3254                 strbuf_release(&ref_name);
3255                 return -1;
3256         }
3257
3258         tree = parse_tree_indirect(&oid);
3259         prime_cache_tree(r, r->index, tree);
3260
3261         if (write_locked_index(r->index, &lock, COMMIT_LOCK) < 0)
3262                 ret = error(_("could not write index"));
3263         free((void *)desc.buffer);
3264
3265         if (!ret)
3266                 ret = update_ref(reflog_message(opts, "reset", "'%.*s'",
3267                                                 len, name), "HEAD", &oid,
3268                                  NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3269
3270         strbuf_release(&ref_name);
3271         return ret;
3272 }
3273
3274 static struct commit *lookup_label(const char *label, int len,
3275                                    struct strbuf *buf)
3276 {
3277         struct commit *commit;
3278
3279         strbuf_reset(buf);
3280         strbuf_addf(buf, "refs/rewritten/%.*s", len, label);
3281         commit = lookup_commit_reference_by_name(buf->buf);
3282         if (!commit) {
3283                 /* fall back to non-rewritten ref or commit */
3284                 strbuf_splice(buf, 0, strlen("refs/rewritten/"), "", 0);
3285                 commit = lookup_commit_reference_by_name(buf->buf);
3286         }
3287
3288         if (!commit)
3289                 error(_("could not resolve '%s'"), buf->buf);
3290
3291         return commit;
3292 }
3293
3294 static int do_merge(struct repository *r,
3295                     struct commit *commit,
3296                     const char *arg, int arg_len,
3297                     int flags, struct replay_opts *opts)
3298 {
3299         int run_commit_flags = (flags & TODO_EDIT_MERGE_MSG) ?
3300                 EDIT_MSG | VERIFY_MSG : 0;
3301         struct strbuf ref_name = STRBUF_INIT;
3302         struct commit *head_commit, *merge_commit, *i;
3303         struct commit_list *bases, *j, *reversed = NULL;
3304         struct commit_list *to_merge = NULL, **tail = &to_merge;
3305         const char *strategy = !opts->xopts_nr &&
3306                 (!opts->strategy || !strcmp(opts->strategy, "recursive")) ?
3307                 NULL : opts->strategy;
3308         struct merge_options o;
3309         int merge_arg_len, oneline_offset, can_fast_forward, ret, k;
3310         static struct lock_file lock;
3311         const char *p;
3312
3313         if (repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0) {
3314                 ret = -1;
3315                 goto leave_merge;
3316         }
3317
3318         head_commit = lookup_commit_reference_by_name("HEAD");
3319         if (!head_commit) {
3320                 ret = error(_("cannot merge without a current revision"));
3321                 goto leave_merge;
3322         }
3323
3324         /*
3325          * For octopus merges, the arg starts with the list of revisions to be
3326          * merged. The list is optionally followed by '#' and the oneline.
3327          */
3328         merge_arg_len = oneline_offset = arg_len;
3329         for (p = arg; p - arg < arg_len; p += strspn(p, " \t\n")) {
3330                 if (!*p)
3331                         break;
3332                 if (*p == '#' && (!p[1] || isspace(p[1]))) {
3333                         p += 1 + strspn(p + 1, " \t\n");
3334                         oneline_offset = p - arg;
3335                         break;
3336                 }
3337                 k = strcspn(p, " \t\n");
3338                 if (!k)
3339                         continue;
3340                 merge_commit = lookup_label(p, k, &ref_name);
3341                 if (!merge_commit) {
3342                         ret = error(_("unable to parse '%.*s'"), k, p);
3343                         goto leave_merge;
3344                 }
3345                 tail = &commit_list_insert(merge_commit, tail)->next;
3346                 p += k;
3347                 merge_arg_len = p - arg;
3348         }
3349
3350         if (!to_merge) {
3351                 ret = error(_("nothing to merge: '%.*s'"), arg_len, arg);
3352                 goto leave_merge;
3353         }
3354
3355         if (opts->have_squash_onto &&
3356             oideq(&head_commit->object.oid, &opts->squash_onto)) {
3357                 /*
3358                  * When the user tells us to "merge" something into a
3359                  * "[new root]", let's simply fast-forward to the merge head.
3360                  */
3361                 rollback_lock_file(&lock);
3362                 if (to_merge->next)
3363                         ret = error(_("octopus merge cannot be executed on "
3364                                       "top of a [new root]"));
3365                 else
3366                         ret = fast_forward_to(r, &to_merge->item->object.oid,
3367                                               &head_commit->object.oid, 0,
3368                                               opts);
3369                 goto leave_merge;
3370         }
3371
3372         if (commit) {
3373                 const char *message = get_commit_buffer(commit, NULL);
3374                 const char *body;
3375                 int len;
3376
3377                 if (!message) {
3378                         ret = error(_("could not get commit message of '%s'"),
3379                                     oid_to_hex(&commit->object.oid));
3380                         goto leave_merge;
3381                 }
3382                 write_author_script(message);
3383                 find_commit_subject(message, &body);
3384                 len = strlen(body);
3385                 ret = write_message(body, len, git_path_merge_msg(r), 0);
3386                 unuse_commit_buffer(commit, message);
3387                 if (ret) {
3388                         error_errno(_("could not write '%s'"),
3389                                     git_path_merge_msg(r));
3390                         goto leave_merge;
3391                 }
3392         } else {
3393                 struct strbuf buf = STRBUF_INIT;
3394                 int len;
3395
3396                 strbuf_addf(&buf, "author %s", git_author_info(0));
3397                 write_author_script(buf.buf);
3398                 strbuf_reset(&buf);
3399
3400                 if (oneline_offset < arg_len) {
3401                         p = arg + oneline_offset;
3402                         len = arg_len - oneline_offset;
3403                 } else {
3404                         strbuf_addf(&buf, "Merge %s '%.*s'",
3405                                     to_merge->next ? "branches" : "branch",
3406                                     merge_arg_len, arg);
3407                         p = buf.buf;
3408                         len = buf.len;
3409                 }
3410
3411                 ret = write_message(p, len, git_path_merge_msg(r), 0);
3412                 strbuf_release(&buf);
3413                 if (ret) {
3414                         error_errno(_("could not write '%s'"),
3415                                     git_path_merge_msg(r));
3416                         goto leave_merge;
3417                 }
3418         }
3419
3420         /*
3421          * If HEAD is not identical to the first parent of the original merge
3422          * commit, we cannot fast-forward.
3423          */
3424         can_fast_forward = opts->allow_ff && commit && commit->parents &&
3425                 oideq(&commit->parents->item->object.oid,
3426                       &head_commit->object.oid);
3427
3428         /*
3429          * If any merge head is different from the original one, we cannot
3430          * fast-forward.
3431          */
3432         if (can_fast_forward) {
3433                 struct commit_list *p = commit->parents->next;
3434
3435                 for (j = to_merge; j && p; j = j->next, p = p->next)
3436                         if (!oideq(&j->item->object.oid,
3437                                    &p->item->object.oid)) {
3438                                 can_fast_forward = 0;
3439                                 break;
3440                         }
3441                 /*
3442                  * If the number of merge heads differs from the original merge
3443                  * commit, we cannot fast-forward.
3444                  */
3445                 if (j || p)
3446                         can_fast_forward = 0;
3447         }
3448
3449         if (can_fast_forward) {
3450                 rollback_lock_file(&lock);
3451                 ret = fast_forward_to(r, &commit->object.oid,
3452                                       &head_commit->object.oid, 0, opts);
3453                 if (flags & TODO_EDIT_MERGE_MSG) {
3454                         run_commit_flags |= AMEND_MSG;
3455                         goto fast_forward_edit;
3456                 }
3457                 goto leave_merge;
3458         }
3459
3460         if (strategy || to_merge->next) {
3461                 /* Octopus merge */
3462                 struct child_process cmd = CHILD_PROCESS_INIT;
3463
3464                 if (read_env_script(&cmd.env_array)) {
3465                         const char *gpg_opt = gpg_sign_opt_quoted(opts);
3466
3467                         ret = error(_(staged_changes_advice), gpg_opt, gpg_opt);
3468                         goto leave_merge;
3469                 }
3470
3471                 cmd.git_cmd = 1;
3472                 argv_array_push(&cmd.args, "merge");
3473                 argv_array_push(&cmd.args, "-s");
3474                 if (!strategy)
3475                         argv_array_push(&cmd.args, "octopus");
3476                 else {
3477                         argv_array_push(&cmd.args, strategy);
3478                         for (k = 0; k < opts->xopts_nr; k++)
3479                                 argv_array_pushf(&cmd.args,
3480                                                  "-X%s", opts->xopts[k]);
3481                 }
3482                 argv_array_push(&cmd.args, "--no-edit");
3483                 argv_array_push(&cmd.args, "--no-ff");
3484                 argv_array_push(&cmd.args, "--no-log");
3485                 argv_array_push(&cmd.args, "--no-stat");
3486                 argv_array_push(&cmd.args, "-F");
3487                 argv_array_push(&cmd.args, git_path_merge_msg(r));
3488                 if (opts->gpg_sign)
3489                         argv_array_push(&cmd.args, opts->gpg_sign);
3490
3491                 /* Add the tips to be merged */
3492                 for (j = to_merge; j; j = j->next)
3493                         argv_array_push(&cmd.args,
3494                                         oid_to_hex(&j->item->object.oid));
3495
3496                 strbuf_release(&ref_name);
3497                 unlink(git_path_cherry_pick_head(r));
3498                 rollback_lock_file(&lock);
3499
3500                 rollback_lock_file(&lock);
3501                 ret = run_command(&cmd);
3502
3503                 /* force re-reading of the cache */
3504                 if (!ret && (discard_index(r->index) < 0 ||
3505                              repo_read_index(r) < 0))
3506                         ret = error(_("could not read index"));
3507                 goto leave_merge;
3508         }
3509
3510         merge_commit = to_merge->item;
3511         bases = get_merge_bases(head_commit, merge_commit);
3512         if (bases && oideq(&merge_commit->object.oid,
3513                            &bases->item->object.oid)) {
3514                 ret = 0;
3515                 /* skip merging an ancestor of HEAD */
3516                 goto leave_merge;
3517         }
3518
3519         write_message(oid_to_hex(&merge_commit->object.oid), the_hash_algo->hexsz,
3520                       git_path_merge_head(r), 0);
3521         write_message("no-ff", 5, git_path_merge_mode(r), 0);
3522
3523         for (j = bases; j; j = j->next)
3524                 commit_list_insert(j->item, &reversed);
3525         free_commit_list(bases);
3526
3527         repo_read_index(r);
3528         init_merge_options(&o, r);
3529         o.branch1 = "HEAD";
3530         o.branch2 = ref_name.buf;
3531         o.buffer_output = 2;
3532
3533         ret = merge_recursive(&o, head_commit, merge_commit, reversed, &i);
3534         if (ret <= 0)
3535                 fputs(o.obuf.buf, stdout);
3536         strbuf_release(&o.obuf);
3537         if (ret < 0) {
3538                 error(_("could not even attempt to merge '%.*s'"),
3539                       merge_arg_len, arg);
3540                 goto leave_merge;
3541         }
3542         /*
3543          * The return value of merge_recursive() is 1 on clean, and 0 on
3544          * unclean merge.
3545          *
3546          * Let's reverse that, so that do_merge() returns 0 upon success and
3547          * 1 upon failed merge (keeping the return value -1 for the cases where
3548          * we will want to reschedule the `merge` command).
3549          */
3550         ret = !ret;
3551
3552         if (r->index->cache_changed &&
3553             write_locked_index(r->index, &lock, COMMIT_LOCK)) {
3554                 ret = error(_("merge: Unable to write new index file"));
3555                 goto leave_merge;
3556         }
3557
3558         rollback_lock_file(&lock);
3559         if (ret)
3560                 repo_rerere(r, opts->allow_rerere_auto);
3561         else
3562                 /*
3563                  * In case of problems, we now want to return a positive
3564                  * value (a negative one would indicate that the `merge`
3565                  * command needs to be rescheduled).
3566                  */
3567         fast_forward_edit:
3568                 ret = !!run_git_commit(r, git_path_merge_msg(r), opts,
3569                                        run_commit_flags);
3570
3571 leave_merge:
3572         strbuf_release(&ref_name);
3573         rollback_lock_file(&lock);
3574         free_commit_list(to_merge);
3575         return ret;
3576 }
3577
3578 static int is_final_fixup(struct todo_list *todo_list)
3579 {
3580         int i = todo_list->current;
3581
3582         if (!is_fixup(todo_list->items[i].command))
3583                 return 0;
3584
3585         while (++i < todo_list->nr)
3586                 if (is_fixup(todo_list->items[i].command))
3587                         return 0;
3588                 else if (!is_noop(todo_list->items[i].command))
3589                         break;
3590         return 1;
3591 }
3592
3593 static enum todo_command peek_command(struct todo_list *todo_list, int offset)
3594 {
3595         int i;
3596
3597         for (i = todo_list->current + offset; i < todo_list->nr; i++)
3598                 if (!is_noop(todo_list->items[i].command))
3599                         return todo_list->items[i].command;
3600
3601         return -1;
3602 }
3603
3604 static int apply_autostash(struct replay_opts *opts)
3605 {
3606         struct strbuf stash_sha1 = STRBUF_INIT;
3607         struct child_process child = CHILD_PROCESS_INIT;
3608         int ret = 0;
3609
3610         if (!read_oneliner(&stash_sha1, rebase_path_autostash(), 1)) {
3611                 strbuf_release(&stash_sha1);
3612                 return 0;
3613         }
3614         strbuf_trim(&stash_sha1);
3615
3616         child.git_cmd = 1;
3617         child.no_stdout = 1;
3618         child.no_stderr = 1;
3619         argv_array_push(&child.args, "stash");
3620         argv_array_push(&child.args, "apply");
3621         argv_array_push(&child.args, stash_sha1.buf);
3622         if (!run_command(&child))
3623                 fprintf(stderr, _("Applied autostash.\n"));
3624         else {
3625                 struct child_process store = CHILD_PROCESS_INIT;
3626
3627                 store.git_cmd = 1;
3628                 argv_array_push(&store.args, "stash");
3629                 argv_array_push(&store.args, "store");
3630                 argv_array_push(&store.args, "-m");
3631                 argv_array_push(&store.args, "autostash");
3632                 argv_array_push(&store.args, "-q");
3633                 argv_array_push(&store.args, stash_sha1.buf);
3634                 if (run_command(&store))
3635                         ret = error(_("cannot store %s"), stash_sha1.buf);
3636                 else
3637                         fprintf(stderr,
3638                                 _("Applying autostash resulted in conflicts.\n"
3639                                   "Your changes are safe in the stash.\n"
3640                                   "You can run \"git stash pop\" or"
3641                                   " \"git stash drop\" at any time.\n"));
3642         }
3643
3644         strbuf_release(&stash_sha1);
3645         return ret;
3646 }
3647
3648 static const char *reflog_message(struct replay_opts *opts,
3649         const char *sub_action, const char *fmt, ...)
3650 {
3651         va_list ap;
3652         static struct strbuf buf = STRBUF_INIT;
3653
3654         va_start(ap, fmt);
3655         strbuf_reset(&buf);
3656         strbuf_addstr(&buf, action_name(opts));
3657         if (sub_action)
3658                 strbuf_addf(&buf, " (%s)", sub_action);
3659         if (fmt) {
3660                 strbuf_addstr(&buf, ": ");
3661                 strbuf_vaddf(&buf, fmt, ap);
3662         }
3663         va_end(ap);
3664
3665         return buf.buf;
3666 }
3667
3668 static int run_git_checkout(struct repository *r, struct replay_opts *opts,
3669                             const char *commit, const char *action)
3670 {
3671         struct child_process cmd = CHILD_PROCESS_INIT;
3672         int ret;
3673
3674         cmd.git_cmd = 1;
3675
3676         argv_array_push(&cmd.args, "checkout");
3677         argv_array_push(&cmd.args, commit);
3678         argv_array_pushf(&cmd.env_array, GIT_REFLOG_ACTION "=%s", action);
3679
3680         if (opts->verbose)
3681                 ret = run_command(&cmd);
3682         else
3683                 ret = run_command_silent_on_success(&cmd);
3684
3685         if (!ret)
3686                 discard_index(r->index);
3687
3688         return ret;
3689 }
3690
3691 int prepare_branch_to_be_rebased(struct repository *r, struct replay_opts *opts,
3692                                  const char *commit)
3693 {
3694         const char *action;
3695
3696         if (commit && *commit) {
3697                 action = reflog_message(opts, "start", "checkout %s", commit);
3698                 if (run_git_checkout(r, opts, commit, action))
3699                         return error(_("could not checkout %s"), commit);
3700         }
3701
3702         return 0;
3703 }
3704
3705 static int checkout_onto(struct repository *r, struct replay_opts *opts,
3706                          const char *onto_name, const struct object_id *onto,
3707                          const char *orig_head)
3708 {
3709         struct object_id oid;
3710         const char *action = reflog_message(opts, "start", "checkout %s", onto_name);
3711
3712         if (get_oid(orig_head, &oid))
3713                 return error(_("%s: not a valid OID"), orig_head);
3714
3715         if (run_git_checkout(r, opts, oid_to_hex(onto), action)) {
3716                 apply_autostash(opts);
3717                 sequencer_remove_state(opts);
3718                 return error(_("could not detach HEAD"));
3719         }
3720
3721         return update_ref(NULL, "ORIG_HEAD", &oid, NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3722 }
3723
3724 static int stopped_at_head(struct repository *r)
3725 {
3726         struct object_id head;
3727         struct commit *commit;
3728         struct commit_message message;
3729
3730         if (get_oid("HEAD", &head) ||
3731             !(commit = lookup_commit(r, &head)) ||
3732             parse_commit(commit) || get_message(commit, &message))
3733                 fprintf(stderr, _("Stopped at HEAD\n"));
3734         else {
3735                 fprintf(stderr, _("Stopped at %s\n"), message.label);
3736                 free_message(commit, &message);
3737         }
3738         return 0;
3739
3740 }
3741
3742 static const char rescheduled_advice[] =
3743 N_("Could not execute the todo command\n"
3744 "\n"
3745 "    %.*s"
3746 "\n"
3747 "It has been rescheduled; To edit the command before continuing, please\n"
3748 "edit the todo list first:\n"
3749 "\n"
3750 "    git rebase --edit-todo\n"
3751 "    git rebase --continue\n");
3752
3753 static int pick_commits(struct repository *r,
3754                         struct todo_list *todo_list,
3755                         struct replay_opts *opts)
3756 {
3757         int res = 0, reschedule = 0;
3758
3759         setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
3760         if (opts->allow_ff)
3761                 assert(!(opts->signoff || opts->no_commit ||
3762                                 opts->record_origin || opts->edit));
3763         if (read_and_refresh_cache(r, opts))
3764                 return -1;
3765
3766         while (todo_list->current < todo_list->nr) {
3767                 struct todo_item *item = todo_list->items + todo_list->current;
3768                 const char *arg = todo_item_get_arg(todo_list, item);
3769                 int check_todo = 0;
3770
3771                 if (save_todo(todo_list, opts))
3772                         return -1;
3773                 if (is_rebase_i(opts)) {
3774                         if (item->command != TODO_COMMENT) {
3775                                 FILE *f = fopen(rebase_path_msgnum(), "w");
3776
3777                                 todo_list->done_nr++;
3778
3779                                 if (f) {
3780                                         fprintf(f, "%d\n", todo_list->done_nr);
3781                                         fclose(f);
3782                                 }
3783                                 if (!opts->quiet)
3784                                         fprintf(stderr, "Rebasing (%d/%d)%s",
3785                                                 todo_list->done_nr,
3786                                                 todo_list->total_nr,
3787                                                 opts->verbose ? "\n" : "\r");
3788                         }
3789                         unlink(rebase_path_message());
3790                         unlink(rebase_path_author_script());
3791                         unlink(rebase_path_stopped_sha());
3792                         unlink(rebase_path_amend());
3793                         unlink(git_path_merge_head(r));
3794                         delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
3795
3796                         if (item->command == TODO_BREAK) {
3797                                 if (!opts->verbose)
3798                                         term_clear_line();
3799                                 return stopped_at_head(r);
3800                         }
3801                 }
3802                 if (item->command <= TODO_SQUASH) {
3803                         if (is_rebase_i(opts))
3804                                 setenv("GIT_REFLOG_ACTION", reflog_message(opts,
3805                                         command_to_string(item->command), NULL),
3806                                         1);
3807                         res = do_pick_commit(r, item->command, item->commit,
3808                                              opts, is_final_fixup(todo_list),
3809                                              &check_todo);
3810                         if (is_rebase_i(opts) && res < 0) {
3811                                 /* Reschedule */
3812                                 advise(_(rescheduled_advice),
3813                                        get_item_line_length(todo_list,
3814                                                             todo_list->current),
3815                                        get_item_line(todo_list,
3816                                                      todo_list->current));
3817                                 todo_list->current--;
3818                                 if (save_todo(todo_list, opts))
3819                                         return -1;
3820                         }
3821                         if (item->command == TODO_EDIT) {
3822                                 struct commit *commit = item->commit;
3823                                 if (!res) {
3824                                         if (!opts->verbose)
3825                                                 term_clear_line();
3826                                         fprintf(stderr,
3827                                                 _("Stopped at %s...  %.*s\n"),
3828                                                 short_commit_name(commit),
3829                                                 item->arg_len, arg);
3830                                 }
3831                                 return error_with_patch(r, commit,
3832                                         arg, item->arg_len, opts, res, !res);
3833                         }
3834                         if (is_rebase_i(opts) && !res)
3835                                 record_in_rewritten(&item->commit->object.oid,
3836                                         peek_command(todo_list, 1));
3837                         if (res && is_fixup(item->command)) {
3838                                 if (res == 1)
3839                                         intend_to_amend();
3840                                 return error_failed_squash(r, item->commit, opts,
3841                                         item->arg_len, arg);
3842                         } else if (res && is_rebase_i(opts) && item->commit) {
3843                                 int to_amend = 0;
3844                                 struct object_id oid;
3845
3846                                 /*
3847                                  * If we are rewording and have either
3848                                  * fast-forwarded already, or are about to
3849                                  * create a new root commit, we want to amend,
3850                                  * otherwise we do not.
3851                                  */
3852                                 if (item->command == TODO_REWORD &&
3853                                     !get_oid("HEAD", &oid) &&
3854                                     (oideq(&item->commit->object.oid, &oid) ||
3855                                      (opts->have_squash_onto &&
3856                                       oideq(&opts->squash_onto, &oid))))
3857                                         to_amend = 1;
3858
3859                                 return res | error_with_patch(r, item->commit,
3860                                                 arg, item->arg_len, opts,
3861                                                 res, to_amend);
3862                         }
3863                 } else if (item->command == TODO_EXEC) {
3864                         char *end_of_arg = (char *)(arg + item->arg_len);
3865                         int saved = *end_of_arg;
3866
3867                         if (!opts->verbose)
3868                                 term_clear_line();
3869                         *end_of_arg = '\0';
3870                         res = do_exec(r, arg);
3871                         *end_of_arg = saved;
3872
3873                         if (res) {
3874                                 if (opts->reschedule_failed_exec)
3875                                         reschedule = 1;
3876                         }
3877                         check_todo = 1;
3878                 } else if (item->command == TODO_LABEL) {
3879                         if ((res = do_label(r, arg, item->arg_len)))
3880                                 reschedule = 1;
3881                 } else if (item->command == TODO_RESET) {
3882                         if ((res = do_reset(r, arg, item->arg_len, opts)))
3883                                 reschedule = 1;
3884                 } else if (item->command == TODO_MERGE) {
3885                         if ((res = do_merge(r, item->commit,
3886                                             arg, item->arg_len,
3887                                             item->flags, opts)) < 0)
3888                                 reschedule = 1;
3889                         else if (item->commit)
3890                                 record_in_rewritten(&item->commit->object.oid,
3891                                                     peek_command(todo_list, 1));
3892                         if (res > 0)
3893                                 /* failed with merge conflicts */
3894                                 return error_with_patch(r, item->commit,
3895                                                         arg, item->arg_len,
3896                                                         opts, res, 0);
3897                 } else if (!is_noop(item->command))
3898                         return error(_("unknown command %d"), item->command);
3899
3900                 if (reschedule) {
3901                         advise(_(rescheduled_advice),
3902                                get_item_line_length(todo_list,
3903                                                     todo_list->current),
3904                                get_item_line(todo_list, todo_list->current));
3905                         todo_list->current--;
3906                         if (save_todo(todo_list, opts))
3907                                 return -1;
3908                         if (item->commit)
3909                                 return error_with_patch(r,
3910                                                         item->commit,
3911                                                         arg, item->arg_len,
3912                                                         opts, res, 0);
3913                 } else if (check_todo && !res) {
3914                         struct stat st;
3915
3916                         if (stat(get_todo_path(opts), &st)) {
3917                                 res = error_errno(_("could not stat '%s'"),
3918                                                   get_todo_path(opts));
3919                         } else if (match_stat_data(&todo_list->stat, &st)) {
3920                                 /* Reread the todo file if it has changed. */
3921                                 todo_list_release(todo_list);
3922                                 if (read_populate_todo(r, todo_list, opts))
3923                                         res = -1; /* message was printed */
3924                                 /* `current` will be incremented below */
3925                                 todo_list->current = -1;
3926                         }
3927                 }
3928
3929                 todo_list->current++;
3930                 if (res)
3931                         return res;
3932         }
3933
3934         if (is_rebase_i(opts)) {
3935                 struct strbuf head_ref = STRBUF_INIT, buf = STRBUF_INIT;
3936                 struct stat st;
3937
3938                 /* Stopped in the middle, as planned? */
3939                 if (todo_list->current < todo_list->nr)
3940                         return 0;
3941
3942                 if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
3943                                 starts_with(head_ref.buf, "refs/")) {
3944                         const char *msg;
3945                         struct object_id head, orig;
3946                         int res;
3947
3948                         if (get_oid("HEAD", &head)) {
3949                                 res = error(_("cannot read HEAD"));
3950 cleanup_head_ref:
3951                                 strbuf_release(&head_ref);
3952                                 strbuf_release(&buf);
3953                                 return res;
3954                         }
3955                         if (!read_oneliner(&buf, rebase_path_orig_head(), 0) ||
3956                                         get_oid_hex(buf.buf, &orig)) {
3957                                 res = error(_("could not read orig-head"));
3958                                 goto cleanup_head_ref;
3959                         }
3960                         strbuf_reset(&buf);
3961                         if (!read_oneliner(&buf, rebase_path_onto(), 0)) {
3962                                 res = error(_("could not read 'onto'"));
3963                                 goto cleanup_head_ref;
3964                         }
3965                         msg = reflog_message(opts, "finish", "%s onto %s",
3966                                 head_ref.buf, buf.buf);
3967                         if (update_ref(msg, head_ref.buf, &head, &orig,
3968                                        REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR)) {
3969                                 res = error(_("could not update %s"),
3970                                         head_ref.buf);
3971                                 goto cleanup_head_ref;
3972                         }
3973                         msg = reflog_message(opts, "finish", "returning to %s",
3974                                 head_ref.buf);
3975                         if (create_symref("HEAD", head_ref.buf, msg)) {
3976                                 res = error(_("could not update HEAD to %s"),
3977                                         head_ref.buf);
3978                                 goto cleanup_head_ref;
3979                         }
3980                         strbuf_reset(&buf);
3981                 }
3982
3983                 if (opts->verbose) {
3984                         struct rev_info log_tree_opt;
3985                         struct object_id orig, head;
3986
3987                         memset(&log_tree_opt, 0, sizeof(log_tree_opt));
3988                         repo_init_revisions(r, &log_tree_opt, NULL);
3989                         log_tree_opt.diff = 1;
3990                         log_tree_opt.diffopt.output_format =
3991                                 DIFF_FORMAT_DIFFSTAT;
3992                         log_tree_opt.disable_stdin = 1;
3993
3994                         if (read_oneliner(&buf, rebase_path_orig_head(), 0) &&
3995                             !get_oid(buf.buf, &orig) &&
3996                             !get_oid("HEAD", &head)) {
3997                                 diff_tree_oid(&orig, &head, "",
3998                                               &log_tree_opt.diffopt);
3999                                 log_tree_diff_flush(&log_tree_opt);
4000                         }
4001                 }
4002                 flush_rewritten_pending();
4003                 if (!stat(rebase_path_rewritten_list(), &st) &&
4004                                 st.st_size > 0) {
4005                         struct child_process child = CHILD_PROCESS_INIT;
4006                         const char *post_rewrite_hook =
4007                                 find_hook("post-rewrite");
4008
4009                         child.in = open(rebase_path_rewritten_list(), O_RDONLY);
4010                         child.git_cmd = 1;
4011                         argv_array_push(&child.args, "notes");
4012                         argv_array_push(&child.args, "copy");
4013                         argv_array_push(&child.args, "--for-rewrite=rebase");
4014                         /* we don't care if this copying failed */
4015                         run_command(&child);
4016
4017                         if (post_rewrite_hook) {
4018                                 struct child_process hook = CHILD_PROCESS_INIT;
4019
4020                                 hook.in = open(rebase_path_rewritten_list(),
4021                                         O_RDONLY);
4022                                 hook.stdout_to_stderr = 1;
4023                                 hook.trace2_hook_name = "post-rewrite";
4024                                 argv_array_push(&hook.args, post_rewrite_hook);
4025                                 argv_array_push(&hook.args, "rebase");
4026                                 /* we don't care if this hook failed */
4027                                 run_command(&hook);
4028                         }
4029                 }
4030                 apply_autostash(opts);
4031
4032                 if (!opts->quiet) {
4033                         if (!opts->verbose)
4034                                 term_clear_line();
4035                         fprintf(stderr,
4036                                 "Successfully rebased and updated %s.\n",
4037                                 head_ref.buf);
4038                 }
4039
4040                 strbuf_release(&buf);
4041                 strbuf_release(&head_ref);
4042         }
4043
4044         /*
4045          * Sequence of picks finished successfully; cleanup by
4046          * removing the .git/sequencer directory
4047          */
4048         return sequencer_remove_state(opts);
4049 }
4050
4051 static int continue_single_pick(struct repository *r)
4052 {
4053         const char *argv[] = { "commit", NULL };
4054
4055         if (!file_exists(git_path_cherry_pick_head(r)) &&
4056             !file_exists(git_path_revert_head(r)))
4057                 return error(_("no cherry-pick or revert in progress"));
4058         return run_command_v_opt(argv, RUN_GIT_CMD);
4059 }
4060
4061 static int commit_staged_changes(struct repository *r,
4062                                  struct replay_opts *opts,
4063                                  struct todo_list *todo_list)
4064 {
4065         unsigned int flags = ALLOW_EMPTY | EDIT_MSG;
4066         unsigned int final_fixup = 0, is_clean;
4067
4068         if (has_unstaged_changes(r, 1))
4069                 return error(_("cannot rebase: You have unstaged changes."));
4070
4071         is_clean = !has_uncommitted_changes(r, 0);
4072
4073         if (file_exists(rebase_path_amend())) {
4074                 struct strbuf rev = STRBUF_INIT;
4075                 struct object_id head, to_amend;
4076
4077                 if (get_oid("HEAD", &head))
4078                         return error(_("cannot amend non-existing commit"));
4079                 if (!read_oneliner(&rev, rebase_path_amend(), 0))
4080                         return error(_("invalid file: '%s'"), rebase_path_amend());
4081                 if (get_oid_hex(rev.buf, &to_amend))
4082                         return error(_("invalid contents: '%s'"),
4083                                 rebase_path_amend());
4084                 if (!is_clean && !oideq(&head, &to_amend))
4085                         return error(_("\nYou have uncommitted changes in your "
4086                                        "working tree. Please, commit them\n"
4087                                        "first and then run 'git rebase "
4088                                        "--continue' again."));
4089                 /*
4090                  * When skipping a failed fixup/squash, we need to edit the
4091                  * commit message, the current fixup list and count, and if it
4092                  * was the last fixup/squash in the chain, we need to clean up
4093                  * the commit message and if there was a squash, let the user
4094                  * edit it.
4095                  */
4096                 if (!is_clean || !opts->current_fixup_count)
4097                         ; /* this is not the final fixup */
4098                 else if (!oideq(&head, &to_amend) ||
4099                          !file_exists(rebase_path_stopped_sha())) {
4100                         /* was a final fixup or squash done manually? */
4101                         if (!is_fixup(peek_command(todo_list, 0))) {
4102                                 unlink(rebase_path_fixup_msg());
4103                                 unlink(rebase_path_squash_msg());
4104                                 unlink(rebase_path_current_fixups());
4105                                 strbuf_reset(&opts->current_fixups);
4106                                 opts->current_fixup_count = 0;
4107                         }
4108                 } else {
4109                         /* we are in a fixup/squash chain */
4110                         const char *p = opts->current_fixups.buf;
4111                         int len = opts->current_fixups.len;
4112
4113                         opts->current_fixup_count--;
4114                         if (!len)
4115                                 BUG("Incorrect current_fixups:\n%s", p);
4116                         while (len && p[len - 1] != '\n')
4117                                 len--;
4118                         strbuf_setlen(&opts->current_fixups, len);
4119                         if (write_message(p, len, rebase_path_current_fixups(),
4120                                           0) < 0)
4121                                 return error(_("could not write file: '%s'"),
4122                                              rebase_path_current_fixups());
4123
4124                         /*
4125                          * If a fixup/squash in a fixup/squash chain failed, the
4126                          * commit message is already correct, no need to commit
4127                          * it again.
4128                          *
4129                          * Only if it is the final command in the fixup/squash
4130                          * chain, and only if the chain is longer than a single
4131                          * fixup/squash command (which was just skipped), do we
4132                          * actually need to re-commit with a cleaned up commit
4133                          * message.
4134                          */
4135                         if (opts->current_fixup_count > 0 &&
4136                             !is_fixup(peek_command(todo_list, 0))) {
4137                                 final_fixup = 1;
4138                                 /*
4139                                  * If there was not a single "squash" in the
4140                                  * chain, we only need to clean up the commit
4141                                  * message, no need to bother the user with
4142                                  * opening the commit message in the editor.
4143                                  */
4144                                 if (!starts_with(p, "squash ") &&
4145                                     !strstr(p, "\nsquash "))
4146                                         flags = (flags & ~EDIT_MSG) | CLEANUP_MSG;
4147                         } else if (is_fixup(peek_command(todo_list, 0))) {
4148                                 /*
4149                                  * We need to update the squash message to skip
4150                                  * the latest commit message.
4151                                  */
4152                                 struct commit *commit;
4153                                 const char *path = rebase_path_squash_msg();
4154
4155                                 if (parse_head(r, &commit) ||
4156                                     !(p = get_commit_buffer(commit, NULL)) ||
4157                                     write_message(p, strlen(p), path, 0)) {
4158                                         unuse_commit_buffer(commit, p);
4159                                         return error(_("could not write file: "
4160                                                        "'%s'"), path);
4161                                 }
4162                                 unuse_commit_buffer(commit, p);
4163                         }
4164                 }
4165
4166                 strbuf_release(&rev);
4167                 flags |= AMEND_MSG;
4168         }
4169
4170         if (is_clean) {
4171                 const char *cherry_pick_head = git_path_cherry_pick_head(r);
4172
4173                 if (file_exists(cherry_pick_head) && unlink(cherry_pick_head))
4174                         return error(_("could not remove CHERRY_PICK_HEAD"));
4175                 if (!final_fixup)
4176                         return 0;
4177         }
4178
4179         if (run_git_commit(r, final_fixup ? NULL : rebase_path_message(),
4180                            opts, flags))
4181                 return error(_("could not commit staged changes."));
4182         unlink(rebase_path_amend());
4183         unlink(git_path_merge_head(r));
4184         if (final_fixup) {
4185                 unlink(rebase_path_fixup_msg());
4186                 unlink(rebase_path_squash_msg());
4187         }
4188         if (opts->current_fixup_count > 0) {
4189                 /*
4190                  * Whether final fixup or not, we just cleaned up the commit
4191                  * message...
4192                  */
4193                 unlink(rebase_path_current_fixups());
4194                 strbuf_reset(&opts->current_fixups);
4195                 opts->current_fixup_count = 0;
4196         }
4197         return 0;
4198 }
4199
4200 int sequencer_continue(struct repository *r, struct replay_opts *opts)
4201 {
4202         struct todo_list todo_list = TODO_LIST_INIT;
4203         int res;
4204
4205         if (read_and_refresh_cache(r, opts))
4206                 return -1;
4207
4208         if (read_populate_opts(opts))
4209                 return -1;
4210         if (is_rebase_i(opts)) {
4211                 if ((res = read_populate_todo(r, &todo_list, opts)))
4212                         goto release_todo_list;
4213                 if (commit_staged_changes(r, opts, &todo_list))
4214                         return -1;
4215         } else if (!file_exists(get_todo_path(opts)))
4216                 return continue_single_pick(r);
4217         else if ((res = read_populate_todo(r, &todo_list, opts)))
4218                 goto release_todo_list;
4219
4220         if (!is_rebase_i(opts)) {
4221                 /* Verify that the conflict has been resolved */
4222                 if (file_exists(git_path_cherry_pick_head(r)) ||
4223                     file_exists(git_path_revert_head(r))) {
4224                         res = continue_single_pick(r);
4225                         if (res)
4226                                 goto release_todo_list;
4227                 }
4228                 if (index_differs_from(r, "HEAD", NULL, 0)) {
4229                         res = error_dirty_index(r, opts);
4230                         goto release_todo_list;
4231                 }
4232                 todo_list.current++;
4233         } else if (file_exists(rebase_path_stopped_sha())) {
4234                 struct strbuf buf = STRBUF_INIT;
4235                 struct object_id oid;
4236
4237                 if (read_oneliner(&buf, rebase_path_stopped_sha(), 1) &&
4238                     !get_oid_committish(buf.buf, &oid))
4239                         record_in_rewritten(&oid, peek_command(&todo_list, 0));
4240                 strbuf_release(&buf);
4241         }
4242
4243         res = pick_commits(r, &todo_list, opts);
4244 release_todo_list:
4245         todo_list_release(&todo_list);
4246         return res;
4247 }
4248
4249 static int single_pick(struct repository *r,
4250                        struct commit *cmit,
4251                        struct replay_opts *opts)
4252 {
4253         int check_todo;
4254
4255         setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
4256         return do_pick_commit(r, opts->action == REPLAY_PICK ?
4257                               TODO_PICK : TODO_REVERT, cmit, opts, 0,
4258                               &check_todo);
4259 }
4260
4261 int sequencer_pick_revisions(struct repository *r,
4262                              struct replay_opts *opts)
4263 {
4264         struct todo_list todo_list = TODO_LIST_INIT;
4265         struct object_id oid;
4266         int i, res;
4267
4268         assert(opts->revs);
4269         if (read_and_refresh_cache(r, opts))
4270                 return -1;
4271
4272         for (i = 0; i < opts->revs->pending.nr; i++) {
4273                 struct object_id oid;
4274                 const char *name = opts->revs->pending.objects[i].name;
4275
4276                 /* This happens when using --stdin. */
4277                 if (!strlen(name))
4278                         continue;
4279
4280                 if (!get_oid(name, &oid)) {
4281                         if (!lookup_commit_reference_gently(r, &oid, 1)) {
4282                                 enum object_type type = oid_object_info(r,
4283                                                                         &oid,
4284                                                                         NULL);
4285                                 return error(_("%s: can't cherry-pick a %s"),
4286                                         name, type_name(type));
4287                         }
4288                 } else
4289                         return error(_("%s: bad revision"), name);
4290         }
4291
4292         /*
4293          * If we were called as "git cherry-pick <commit>", just
4294          * cherry-pick/revert it, set CHERRY_PICK_HEAD /
4295          * REVERT_HEAD, and don't touch the sequencer state.
4296          * This means it is possible to cherry-pick in the middle
4297          * of a cherry-pick sequence.
4298          */
4299         if (opts->revs->cmdline.nr == 1 &&
4300             opts->revs->cmdline.rev->whence == REV_CMD_REV &&
4301             opts->revs->no_walk &&
4302             !opts->revs->cmdline.rev->flags) {
4303                 struct commit *cmit;
4304                 if (prepare_revision_walk(opts->revs))
4305                         return error(_("revision walk setup failed"));
4306                 cmit = get_revision(opts->revs);
4307                 if (!cmit)
4308                         return error(_("empty commit set passed"));
4309                 if (get_revision(opts->revs))
4310                         BUG("unexpected extra commit from walk");
4311                 return single_pick(r, cmit, opts);
4312         }
4313
4314         /*
4315          * Start a new cherry-pick/ revert sequence; but
4316          * first, make sure that an existing one isn't in
4317          * progress
4318          */
4319
4320         if (walk_revs_populate_todo(&todo_list, opts) ||
4321                         create_seq_dir(r) < 0)
4322                 return -1;
4323         if (get_oid("HEAD", &oid) && (opts->action == REPLAY_REVERT))
4324                 return error(_("can't revert as initial commit"));
4325         if (save_head(oid_to_hex(&oid)))
4326                 return -1;
4327         if (save_opts(opts))
4328                 return -1;
4329         update_abort_safety_file();
4330         res = pick_commits(r, &todo_list, opts);
4331         todo_list_release(&todo_list);
4332         return res;
4333 }
4334
4335 void append_signoff(struct strbuf *msgbuf, size_t ignore_footer, unsigned flag)
4336 {
4337         unsigned no_dup_sob = flag & APPEND_SIGNOFF_DEDUP;
4338         struct strbuf sob = STRBUF_INIT;
4339         int has_footer;
4340
4341         strbuf_addstr(&sob, sign_off_header);
4342         strbuf_addstr(&sob, fmt_name(WANT_COMMITTER_IDENT));
4343         strbuf_addch(&sob, '\n');
4344
4345         if (!ignore_footer)
4346                 strbuf_complete_line(msgbuf);
4347
4348         /*
4349          * If the whole message buffer is equal to the sob, pretend that we
4350          * found a conforming footer with a matching sob
4351          */
4352         if (msgbuf->len - ignore_footer == sob.len &&
4353             !strncmp(msgbuf->buf, sob.buf, sob.len))
4354                 has_footer = 3;
4355         else
4356                 has_footer = has_conforming_footer(msgbuf, &sob, ignore_footer);
4357
4358         if (!has_footer) {
4359                 const char *append_newlines = NULL;
4360                 size_t len = msgbuf->len - ignore_footer;
4361
4362                 if (!len) {
4363                         /*
4364                          * The buffer is completely empty.  Leave foom for
4365                          * the title and body to be filled in by the user.
4366                          */
4367                         append_newlines = "\n\n";
4368                 } else if (len == 1) {
4369                         /*
4370                          * Buffer contains a single newline.  Add another
4371                          * so that we leave room for the title and body.
4372                          */
4373                         append_newlines = "\n";
4374                 } else if (msgbuf->buf[len - 2] != '\n') {
4375                         /*
4376                          * Buffer ends with a single newline.  Add another
4377                          * so that there is an empty line between the message
4378                          * body and the sob.
4379                          */
4380                         append_newlines = "\n";
4381                 } /* else, the buffer already ends with two newlines. */
4382
4383                 if (append_newlines)
4384                         strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4385                                 append_newlines, strlen(append_newlines));
4386         }
4387
4388         if (has_footer != 3 && (!no_dup_sob || has_footer != 2))
4389                 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4390                                 sob.buf, sob.len);
4391
4392         strbuf_release(&sob);
4393 }
4394
4395 struct labels_entry {
4396         struct hashmap_entry entry;
4397         char label[FLEX_ARRAY];
4398 };
4399
4400 static int labels_cmp(const void *fndata, const struct hashmap_entry *eptr,
4401                       const struct hashmap_entry *entry_or_key, const void *key)
4402 {
4403         const struct labels_entry *a, *b;
4404
4405         a = container_of(eptr, const struct labels_entry, entry);
4406         b = container_of(entry_or_key, const struct labels_entry, entry);
4407
4408         return key ? strcmp(a->label, key) : strcmp(a->label, b->label);
4409 }
4410
4411 struct string_entry {
4412         struct oidmap_entry entry;
4413         char string[FLEX_ARRAY];
4414 };
4415
4416 struct label_state {
4417         struct oidmap commit2label;
4418         struct hashmap labels;
4419         struct strbuf buf;
4420 };
4421
4422 static const char *label_oid(struct object_id *oid, const char *label,
4423                              struct label_state *state)
4424 {
4425         struct labels_entry *labels_entry;
4426         struct string_entry *string_entry;
4427         struct object_id dummy;
4428         size_t len;
4429         int i;
4430
4431         string_entry = oidmap_get(&state->commit2label, oid);
4432         if (string_entry)
4433                 return string_entry->string;
4434
4435         /*
4436          * For "uninteresting" commits, i.e. commits that are not to be
4437          * rebased, and which can therefore not be labeled, we use a unique
4438          * abbreviation of the commit name. This is slightly more complicated
4439          * than calling find_unique_abbrev() because we also need to make
4440          * sure that the abbreviation does not conflict with any other
4441          * label.
4442          *
4443          * We disallow "interesting" commits to be labeled by a string that
4444          * is a valid full-length hash, to ensure that we always can find an
4445          * abbreviation for any uninteresting commit's names that does not
4446          * clash with any other label.
4447          */
4448         if (!label) {
4449                 char *p;
4450
4451                 strbuf_reset(&state->buf);
4452                 strbuf_grow(&state->buf, GIT_MAX_HEXSZ);
4453                 label = p = state->buf.buf;
4454
4455                 find_unique_abbrev_r(p, oid, default_abbrev);
4456
4457                 /*
4458                  * We may need to extend the abbreviated hash so that there is
4459                  * no conflicting label.
4460                  */
4461                 if (hashmap_get_from_hash(&state->labels, strihash(p), p)) {
4462                         size_t i = strlen(p) + 1;
4463
4464                         oid_to_hex_r(p, oid);
4465                         for (; i < the_hash_algo->hexsz; i++) {
4466                                 char save = p[i];
4467                                 p[i] = '\0';
4468                                 if (!hashmap_get_from_hash(&state->labels,
4469                                                            strihash(p), p))
4470                                         break;
4471                                 p[i] = save;
4472                         }
4473                 }
4474         } else if (((len = strlen(label)) == the_hash_algo->hexsz &&
4475                     !get_oid_hex(label, &dummy)) ||
4476                    (len == 1 && *label == '#') ||
4477                    hashmap_get_from_hash(&state->labels,
4478                                          strihash(label), label)) {
4479                 /*
4480                  * If the label already exists, or if the label is a valid full
4481                  * OID, or the label is a '#' (which we use as a separator
4482                  * between merge heads and oneline), we append a dash and a
4483                  * number to make it unique.
4484                  */
4485                 struct strbuf *buf = &state->buf;
4486
4487                 strbuf_reset(buf);
4488                 strbuf_add(buf, label, len);
4489
4490                 for (i = 2; ; i++) {
4491                         strbuf_setlen(buf, len);
4492                         strbuf_addf(buf, "-%d", i);
4493                         if (!hashmap_get_from_hash(&state->labels,
4494                                                    strihash(buf->buf),
4495                                                    buf->buf))
4496                                 break;
4497                 }
4498
4499                 label = buf->buf;
4500         }
4501
4502         FLEX_ALLOC_STR(labels_entry, label, label);
4503         hashmap_entry_init(&labels_entry->entry, strihash(label));
4504         hashmap_add(&state->labels, &labels_entry->entry);
4505
4506         FLEX_ALLOC_STR(string_entry, string, label);
4507         oidcpy(&string_entry->entry.oid, oid);
4508         oidmap_put(&state->commit2label, string_entry);
4509
4510         return string_entry->string;
4511 }
4512
4513 static int make_script_with_merges(struct pretty_print_context *pp,
4514                                    struct rev_info *revs, struct strbuf *out,
4515                                    unsigned flags)
4516 {
4517         int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4518         int rebase_cousins = flags & TODO_LIST_REBASE_COUSINS;
4519         int root_with_onto = flags & TODO_LIST_ROOT_WITH_ONTO;
4520         struct strbuf buf = STRBUF_INIT, oneline = STRBUF_INIT;
4521         struct strbuf label = STRBUF_INIT;
4522         struct commit_list *commits = NULL, **tail = &commits, *iter;
4523         struct commit_list *tips = NULL, **tips_tail = &tips;
4524         struct commit *commit;
4525         struct oidmap commit2todo = OIDMAP_INIT;
4526         struct string_entry *entry;
4527         struct oidset interesting = OIDSET_INIT, child_seen = OIDSET_INIT,
4528                 shown = OIDSET_INIT;
4529         struct label_state state = { OIDMAP_INIT, { NULL }, STRBUF_INIT };
4530
4531         int abbr = flags & TODO_LIST_ABBREVIATE_CMDS;
4532         const char *cmd_pick = abbr ? "p" : "pick",
4533                 *cmd_label = abbr ? "l" : "label",
4534                 *cmd_reset = abbr ? "t" : "reset",
4535                 *cmd_merge = abbr ? "m" : "merge";
4536
4537         oidmap_init(&commit2todo, 0);
4538         oidmap_init(&state.commit2label, 0);
4539         hashmap_init(&state.labels, labels_cmp, NULL, 0);
4540         strbuf_init(&state.buf, 32);
4541
4542         if (revs->cmdline.nr && (revs->cmdline.rev[0].flags & BOTTOM)) {
4543                 struct object_id *oid = &revs->cmdline.rev[0].item->oid;
4544                 FLEX_ALLOC_STR(entry, string, "onto");
4545                 oidcpy(&entry->entry.oid, oid);
4546                 oidmap_put(&state.commit2label, entry);
4547         }
4548
4549         /*
4550          * First phase:
4551          * - get onelines for all commits
4552          * - gather all branch tips (i.e. 2nd or later parents of merges)
4553          * - label all branch tips
4554          */
4555         while ((commit = get_revision(revs))) {
4556                 struct commit_list *to_merge;
4557                 const char *p1, *p2;
4558                 struct object_id *oid;
4559                 int is_empty;
4560
4561                 tail = &commit_list_insert(commit, tail)->next;
4562                 oidset_insert(&interesting, &commit->object.oid);
4563
4564                 is_empty = is_original_commit_empty(commit);
4565                 if (!is_empty && (commit->object.flags & PATCHSAME))
4566                         continue;
4567
4568                 strbuf_reset(&oneline);
4569                 pretty_print_commit(pp, commit, &oneline);
4570
4571                 to_merge = commit->parents ? commit->parents->next : NULL;
4572                 if (!to_merge) {
4573                         /* non-merge commit: easy case */
4574                         strbuf_reset(&buf);
4575                         if (!keep_empty && is_empty)
4576                                 strbuf_addf(&buf, "%c ", comment_line_char);
4577                         strbuf_addf(&buf, "%s %s %s", cmd_pick,
4578                                     oid_to_hex(&commit->object.oid),
4579                                     oneline.buf);
4580
4581                         FLEX_ALLOC_STR(entry, string, buf.buf);
4582                         oidcpy(&entry->entry.oid, &commit->object.oid);
4583                         oidmap_put(&commit2todo, entry);
4584
4585                         continue;
4586                 }
4587
4588                 /* Create a label */
4589                 strbuf_reset(&label);
4590                 if (skip_prefix(oneline.buf, "Merge ", &p1) &&
4591                     (p1 = strchr(p1, '\'')) &&
4592                     (p2 = strchr(++p1, '\'')))
4593                         strbuf_add(&label, p1, p2 - p1);
4594                 else if (skip_prefix(oneline.buf, "Merge pull request ",
4595                                      &p1) &&
4596                          (p1 = strstr(p1, " from ")))
4597                         strbuf_addstr(&label, p1 + strlen(" from "));
4598                 else
4599                         strbuf_addbuf(&label, &oneline);
4600
4601                 for (p1 = label.buf; *p1; p1++)
4602                         if (isspace(*p1))
4603                                 *(char *)p1 = '-';
4604
4605                 strbuf_reset(&buf);
4606                 strbuf_addf(&buf, "%s -C %s",
4607                             cmd_merge, oid_to_hex(&commit->object.oid));
4608
4609                 /* label the tips of merged branches */
4610                 for (; to_merge; to_merge = to_merge->next) {
4611                         oid = &to_merge->item->object.oid;
4612                         strbuf_addch(&buf, ' ');
4613
4614                         if (!oidset_contains(&interesting, oid)) {
4615                                 strbuf_addstr(&buf, label_oid(oid, NULL,
4616                                                               &state));
4617                                 continue;
4618                         }
4619
4620                         tips_tail = &commit_list_insert(to_merge->item,
4621                                                         tips_tail)->next;
4622
4623                         strbuf_addstr(&buf, label_oid(oid, label.buf, &state));
4624                 }
4625                 strbuf_addf(&buf, " # %s", oneline.buf);
4626
4627                 FLEX_ALLOC_STR(entry, string, buf.buf);
4628                 oidcpy(&entry->entry.oid, &commit->object.oid);
4629                 oidmap_put(&commit2todo, entry);
4630         }
4631
4632         /*
4633          * Second phase:
4634          * - label branch points
4635          * - add HEAD to the branch tips
4636          */
4637         for (iter = commits; iter; iter = iter->next) {
4638                 struct commit_list *parent = iter->item->parents;
4639                 for (; parent; parent = parent->next) {
4640                         struct object_id *oid = &parent->item->object.oid;
4641                         if (!oidset_contains(&interesting, oid))
4642                                 continue;
4643                         if (oidset_insert(&child_seen, oid))
4644                                 label_oid(oid, "branch-point", &state);
4645                 }
4646
4647                 /* Add HEAD as implict "tip of branch" */
4648                 if (!iter->next)
4649                         tips_tail = &commit_list_insert(iter->item,
4650                                                         tips_tail)->next;
4651         }
4652
4653         /*
4654          * Third phase: output the todo list. This is a bit tricky, as we
4655          * want to avoid jumping back and forth between revisions. To
4656          * accomplish that goal, we walk backwards from the branch tips,
4657          * gathering commits not yet shown, reversing the list on the fly,
4658          * then outputting that list (labeling revisions as needed).
4659          */
4660         strbuf_addf(out, "%s onto\n", cmd_label);
4661         for (iter = tips; iter; iter = iter->next) {
4662                 struct commit_list *list = NULL, *iter2;
4663
4664                 commit = iter->item;
4665                 if (oidset_contains(&shown, &commit->object.oid))
4666                         continue;
4667                 entry = oidmap_get(&state.commit2label, &commit->object.oid);
4668
4669                 if (entry)
4670                         strbuf_addf(out, "\n%c Branch %s\n", comment_line_char, entry->string);
4671                 else
4672                         strbuf_addch(out, '\n');
4673
4674                 while (oidset_contains(&interesting, &commit->object.oid) &&
4675                        !oidset_contains(&shown, &commit->object.oid)) {
4676                         commit_list_insert(commit, &list);
4677                         if (!commit->parents) {
4678                                 commit = NULL;
4679                                 break;
4680                         }
4681                         commit = commit->parents->item;
4682                 }
4683
4684                 if (!commit)
4685                         strbuf_addf(out, "%s %s\n", cmd_reset,
4686                                     rebase_cousins || root_with_onto ?
4687                                     "onto" : "[new root]");
4688                 else {
4689                         const char *to = NULL;
4690
4691                         entry = oidmap_get(&state.commit2label,
4692                                            &commit->object.oid);
4693                         if (entry)
4694                                 to = entry->string;
4695                         else if (!rebase_cousins)
4696                                 to = label_oid(&commit->object.oid, NULL,
4697                                                &state);
4698
4699                         if (!to || !strcmp(to, "onto"))
4700                                 strbuf_addf(out, "%s onto\n", cmd_reset);
4701                         else {
4702                                 strbuf_reset(&oneline);
4703                                 pretty_print_commit(pp, commit, &oneline);
4704                                 strbuf_addf(out, "%s %s # %s\n",
4705                                             cmd_reset, to, oneline.buf);
4706                         }
4707                 }
4708
4709                 for (iter2 = list; iter2; iter2 = iter2->next) {
4710                         struct object_id *oid = &iter2->item->object.oid;
4711                         entry = oidmap_get(&commit2todo, oid);
4712                         /* only show if not already upstream */
4713                         if (entry)
4714                                 strbuf_addf(out, "%s\n", entry->string);
4715                         entry = oidmap_get(&state.commit2label, oid);
4716                         if (entry)
4717                                 strbuf_addf(out, "%s %s\n",
4718                                             cmd_label, entry->string);
4719                         oidset_insert(&shown, oid);
4720                 }
4721
4722                 free_commit_list(list);
4723         }
4724
4725         free_commit_list(commits);
4726         free_commit_list(tips);
4727
4728         strbuf_release(&label);
4729         strbuf_release(&oneline);
4730         strbuf_release(&buf);
4731
4732         oidmap_free(&commit2todo, 1);
4733         oidmap_free(&state.commit2label, 1);
4734         hashmap_free_entries(&state.labels, struct labels_entry, entry);
4735         strbuf_release(&state.buf);
4736
4737         return 0;
4738 }
4739
4740 int sequencer_make_script(struct repository *r, struct strbuf *out, int argc,
4741                           const char **argv, unsigned flags)
4742 {
4743         char *format = NULL;
4744         struct pretty_print_context pp = {0};
4745         struct rev_info revs;
4746         struct commit *commit;
4747         int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4748         const char *insn = flags & TODO_LIST_ABBREVIATE_CMDS ? "p" : "pick";
4749         int rebase_merges = flags & TODO_LIST_REBASE_MERGES;
4750
4751         repo_init_revisions(r, &revs, NULL);
4752         revs.verbose_header = 1;
4753         if (!rebase_merges)
4754                 revs.max_parents = 1;
4755         revs.cherry_mark = 1;
4756         revs.limited = 1;
4757         revs.reverse = 1;
4758         revs.right_only = 1;
4759         revs.sort_order = REV_SORT_IN_GRAPH_ORDER;
4760         revs.topo_order = 1;
4761
4762         revs.pretty_given = 1;
4763         git_config_get_string("rebase.instructionFormat", &format);
4764         if (!format || !*format) {
4765                 free(format);
4766                 format = xstrdup("%s");
4767         }
4768         get_commit_format(format, &revs);
4769         free(format);
4770         pp.fmt = revs.commit_format;
4771         pp.output_encoding = get_log_output_encoding();
4772
4773         if (setup_revisions(argc, argv, &revs, NULL) > 1)
4774                 return error(_("make_script: unhandled options"));
4775
4776         if (prepare_revision_walk(&revs) < 0)
4777                 return error(_("make_script: error preparing revisions"));
4778
4779         if (rebase_merges)
4780                 return make_script_with_merges(&pp, &revs, out, flags);
4781
4782         while ((commit = get_revision(&revs))) {
4783                 int is_empty  = is_original_commit_empty(commit);
4784
4785                 if (!is_empty && (commit->object.flags & PATCHSAME))
4786                         continue;
4787                 if (!keep_empty && is_empty)
4788                         strbuf_addf(out, "%c ", comment_line_char);
4789                 strbuf_addf(out, "%s %s ", insn,
4790                             oid_to_hex(&commit->object.oid));
4791                 pretty_print_commit(&pp, commit, out);
4792                 strbuf_addch(out, '\n');
4793         }
4794         return 0;
4795 }
4796
4797 /*
4798  * Add commands after pick and (series of) squash/fixup commands
4799  * in the todo list.
4800  */
4801 void todo_list_add_exec_commands(struct todo_list *todo_list,
4802                                  struct string_list *commands)
4803 {
4804         struct strbuf *buf = &todo_list->buf;
4805         size_t base_offset = buf->len;
4806         int i, insert, nr = 0, alloc = 0;
4807         struct todo_item *items = NULL, *base_items = NULL;
4808
4809         base_items = xcalloc(commands->nr, sizeof(struct todo_item));
4810         for (i = 0; i < commands->nr; i++) {
4811                 size_t command_len = strlen(commands->items[i].string);
4812
4813                 strbuf_addstr(buf, commands->items[i].string);
4814                 strbuf_addch(buf, '\n');
4815
4816                 base_items[i].command = TODO_EXEC;
4817                 base_items[i].offset_in_buf = base_offset;
4818                 base_items[i].arg_offset = base_offset + strlen("exec ");
4819                 base_items[i].arg_len = command_len - strlen("exec ");
4820
4821                 base_offset += command_len + 1;
4822         }
4823
4824         /*
4825          * Insert <commands> after every pick. Here, fixup/squash chains
4826          * are considered part of the pick, so we insert the commands *after*
4827          * those chains if there are any.
4828          *
4829          * As we insert the exec commands immediatly after rearranging
4830          * any fixups and before the user edits the list, a fixup chain
4831          * can never contain comments (any comments are empty picks that
4832          * have been commented out because the user did not specify
4833          * --keep-empty).  So, it is safe to insert an exec command
4834          * without looking at the command following a comment.
4835          */
4836         insert = 0;
4837         for (i = 0; i < todo_list->nr; i++) {
4838                 enum todo_command command = todo_list->items[i].command;
4839                 if (insert && !is_fixup(command)) {
4840                         ALLOC_GROW(items, nr + commands->nr, alloc);
4841                         COPY_ARRAY(items + nr, base_items, commands->nr);
4842                         nr += commands->nr;
4843
4844                         insert = 0;
4845                 }
4846
4847                 ALLOC_GROW(items, nr + 1, alloc);
4848                 items[nr++] = todo_list->items[i];
4849
4850                 if (command == TODO_PICK || command == TODO_MERGE)
4851                         insert = 1;
4852         }
4853
4854         /* insert or append final <commands> */
4855         if (insert || nr == todo_list->nr) {
4856                 ALLOC_GROW(items, nr + commands->nr, alloc);
4857                 COPY_ARRAY(items + nr, base_items, commands->nr);
4858                 nr += commands->nr;
4859         }
4860
4861         free(base_items);
4862         FREE_AND_NULL(todo_list->items);
4863         todo_list->items = items;
4864         todo_list->nr = nr;
4865         todo_list->alloc = alloc;
4866 }
4867
4868 static void todo_list_to_strbuf(struct repository *r, struct todo_list *todo_list,
4869                                 struct strbuf *buf, int num, unsigned flags)
4870 {
4871         struct todo_item *item;
4872         int i, max = todo_list->nr;
4873
4874         if (num > 0 && num < max)
4875                 max = num;
4876
4877         for (item = todo_list->items, i = 0; i < max; i++, item++) {
4878                 /* if the item is not a command write it and continue */
4879                 if (item->command >= TODO_COMMENT) {
4880                         strbuf_addf(buf, "%.*s\n", item->arg_len,
4881                                     todo_item_get_arg(todo_list, item));
4882                         continue;
4883                 }
4884
4885                 /* add command to the buffer */
4886                 if (flags & TODO_LIST_ABBREVIATE_CMDS)
4887                         strbuf_addch(buf, command_to_char(item->command));
4888                 else
4889                         strbuf_addstr(buf, command_to_string(item->command));
4890
4891                 /* add commit id */
4892                 if (item->commit) {
4893                         const char *oid = flags & TODO_LIST_SHORTEN_IDS ?
4894                                           short_commit_name(item->commit) :
4895                                           oid_to_hex(&item->commit->object.oid);
4896
4897                         if (item->command == TODO_MERGE) {
4898                                 if (item->flags & TODO_EDIT_MERGE_MSG)
4899                                         strbuf_addstr(buf, " -c");
4900                                 else
4901                                         strbuf_addstr(buf, " -C");
4902                         }
4903
4904                         strbuf_addf(buf, " %s", oid);
4905                 }
4906
4907                 /* add all the rest */
4908                 if (!item->arg_len)
4909                         strbuf_addch(buf, '\n');
4910                 else
4911                         strbuf_addf(buf, " %.*s\n", item->arg_len,
4912                                     todo_item_get_arg(todo_list, item));
4913         }
4914 }
4915
4916 int todo_list_write_to_file(struct repository *r, struct todo_list *todo_list,
4917                             const char *file, const char *shortrevisions,
4918                             const char *shortonto, int num, unsigned flags)
4919 {
4920         int res;
4921         struct strbuf buf = STRBUF_INIT;
4922
4923         todo_list_to_strbuf(r, todo_list, &buf, num, flags);
4924         if (flags & TODO_LIST_APPEND_TODO_HELP)
4925                 append_todo_help(flags & TODO_LIST_KEEP_EMPTY, count_commands(todo_list),
4926                                  shortrevisions, shortonto, &buf);
4927
4928         res = write_message(buf.buf, buf.len, file, 0);
4929         strbuf_release(&buf);
4930
4931         return res;
4932 }
4933
4934 static const char edit_todo_list_advice[] =
4935 N_("You can fix this with 'git rebase --edit-todo' "
4936 "and then run 'git rebase --continue'.\n"
4937 "Or you can abort the rebase with 'git rebase"
4938 " --abort'.\n");
4939
4940 int check_todo_list_from_file(struct repository *r)
4941 {
4942         struct todo_list old_todo = TODO_LIST_INIT, new_todo = TODO_LIST_INIT;
4943         int res = 0;
4944
4945         if (strbuf_read_file_or_whine(&new_todo.buf, rebase_path_todo()) < 0) {
4946                 res = -1;
4947                 goto out;
4948         }
4949
4950         if (strbuf_read_file_or_whine(&old_todo.buf, rebase_path_todo_backup()) < 0) {
4951                 res = -1;
4952                 goto out;
4953         }
4954
4955         res = todo_list_parse_insn_buffer(r, old_todo.buf.buf, &old_todo);
4956         if (!res)
4957                 res = todo_list_parse_insn_buffer(r, new_todo.buf.buf, &new_todo);
4958         if (!res)
4959                 res = todo_list_check(&old_todo, &new_todo);
4960         if (res)
4961                 fprintf(stderr, _(edit_todo_list_advice));
4962 out:
4963         todo_list_release(&old_todo);
4964         todo_list_release(&new_todo);
4965
4966         return res;
4967 }
4968
4969 /* skip picking commits whose parents are unchanged */
4970 static int skip_unnecessary_picks(struct repository *r,
4971                                   struct todo_list *todo_list,
4972                                   struct object_id *base_oid)
4973 {
4974         struct object_id *parent_oid;
4975         int i;
4976
4977         for (i = 0; i < todo_list->nr; i++) {
4978                 struct todo_item *item = todo_list->items + i;
4979
4980                 if (item->command >= TODO_NOOP)
4981                         continue;
4982                 if (item->command != TODO_PICK)
4983                         break;
4984                 if (parse_commit(item->commit)) {
4985                         return error(_("could not parse commit '%s'"),
4986                                 oid_to_hex(&item->commit->object.oid));
4987                 }
4988                 if (!item->commit->parents)
4989                         break; /* root commit */
4990                 if (item->commit->parents->next)
4991                         break; /* merge commit */
4992                 parent_oid = &item->commit->parents->item->object.oid;
4993                 if (!oideq(parent_oid, base_oid))
4994                         break;
4995                 oidcpy(base_oid, &item->commit->object.oid);
4996         }
4997         if (i > 0) {
4998                 const char *done_path = rebase_path_done();
4999
5000                 if (todo_list_write_to_file(r, todo_list, done_path, NULL, NULL, i, 0)) {
5001                         error_errno(_("could not write to '%s'"), done_path);
5002                         return -1;
5003                 }
5004
5005                 MOVE_ARRAY(todo_list->items, todo_list->items + i, todo_list->nr - i);
5006                 todo_list->nr -= i;
5007                 todo_list->current = 0;
5008
5009                 if (is_fixup(peek_command(todo_list, 0)))
5010                         record_in_rewritten(base_oid, peek_command(todo_list, 0));
5011         }
5012
5013         return 0;
5014 }
5015
5016 int complete_action(struct repository *r, struct replay_opts *opts, unsigned flags,
5017                     const char *shortrevisions, const char *onto_name,
5018                     struct commit *onto, const char *orig_head,
5019                     struct string_list *commands, unsigned autosquash,
5020                     struct todo_list *todo_list)
5021 {
5022         const char *shortonto, *todo_file = rebase_path_todo();
5023         struct todo_list new_todo = TODO_LIST_INIT;
5024         struct strbuf *buf = &todo_list->buf;
5025         struct object_id oid = onto->object.oid;
5026         int res;
5027
5028         shortonto = find_unique_abbrev(&oid, DEFAULT_ABBREV);
5029
5030         if (buf->len == 0) {
5031                 struct todo_item *item = append_new_todo(todo_list);
5032                 item->command = TODO_NOOP;
5033                 item->commit = NULL;
5034                 item->arg_len = item->arg_offset = item->flags = item->offset_in_buf = 0;
5035         }
5036
5037         if (autosquash && todo_list_rearrange_squash(todo_list))
5038                 return -1;
5039
5040         if (commands->nr)
5041                 todo_list_add_exec_commands(todo_list, commands);
5042
5043         if (count_commands(todo_list) == 0) {
5044                 apply_autostash(opts);
5045                 sequencer_remove_state(opts);
5046
5047                 return error(_("nothing to do"));
5048         }
5049
5050         res = edit_todo_list(r, todo_list, &new_todo, shortrevisions,
5051                              shortonto, flags);
5052         if (res == -1)
5053                 return -1;
5054         else if (res == -2) {
5055                 apply_autostash(opts);
5056                 sequencer_remove_state(opts);
5057
5058                 return -1;
5059         } else if (res == -3) {
5060                 apply_autostash(opts);
5061                 sequencer_remove_state(opts);
5062                 todo_list_release(&new_todo);
5063
5064                 return error(_("nothing to do"));
5065         }
5066
5067         if (todo_list_parse_insn_buffer(r, new_todo.buf.buf, &new_todo) ||
5068             todo_list_check(todo_list, &new_todo)) {
5069                 fprintf(stderr, _(edit_todo_list_advice));
5070                 checkout_onto(r, opts, onto_name, &onto->object.oid, orig_head);
5071                 todo_list_release(&new_todo);
5072
5073                 return -1;
5074         }
5075
5076         if (opts->allow_ff && skip_unnecessary_picks(r, &new_todo, &oid)) {
5077                 todo_list_release(&new_todo);
5078                 return error(_("could not skip unnecessary pick commands"));
5079         }
5080
5081         if (todo_list_write_to_file(r, &new_todo, todo_file, NULL, NULL, -1,
5082                                     flags & ~(TODO_LIST_SHORTEN_IDS))) {
5083                 todo_list_release(&new_todo);
5084                 return error_errno(_("could not write '%s'"), todo_file);
5085         }
5086
5087         todo_list_release(&new_todo);
5088
5089         if (checkout_onto(r, opts, onto_name, &oid, orig_head))
5090                 return -1;
5091
5092         if (require_clean_work_tree(r, "rebase", "", 1, 1))
5093                 return -1;
5094
5095         return sequencer_continue(r, opts);
5096 }
5097
5098 struct subject2item_entry {
5099         struct hashmap_entry entry;
5100         int i;
5101         char subject[FLEX_ARRAY];
5102 };
5103
5104 static int subject2item_cmp(const void *fndata,
5105                             const struct hashmap_entry *eptr,
5106                             const struct hashmap_entry *entry_or_key,
5107                             const void *key)
5108 {
5109         const struct subject2item_entry *a, *b;
5110
5111         a = container_of(eptr, const struct subject2item_entry, entry);
5112         b = container_of(entry_or_key, const struct subject2item_entry, entry);
5113
5114         return key ? strcmp(a->subject, key) : strcmp(a->subject, b->subject);
5115 }
5116
5117 define_commit_slab(commit_todo_item, struct todo_item *);
5118
5119 /*
5120  * Rearrange the todo list that has both "pick commit-id msg" and "pick
5121  * commit-id fixup!/squash! msg" in it so that the latter is put immediately
5122  * after the former, and change "pick" to "fixup"/"squash".
5123  *
5124  * Note that if the config has specified a custom instruction format, each log
5125  * message will have to be retrieved from the commit (as the oneline in the
5126  * script cannot be trusted) in order to normalize the autosquash arrangement.
5127  */
5128 int todo_list_rearrange_squash(struct todo_list *todo_list)
5129 {
5130         struct hashmap subject2item;
5131         int rearranged = 0, *next, *tail, i, nr = 0, alloc = 0;
5132         char **subjects;
5133         struct commit_todo_item commit_todo;
5134         struct todo_item *items = NULL;
5135
5136         init_commit_todo_item(&commit_todo);
5137         /*
5138          * The hashmap maps onelines to the respective todo list index.
5139          *
5140          * If any items need to be rearranged, the next[i] value will indicate
5141          * which item was moved directly after the i'th.
5142          *
5143          * In that case, last[i] will indicate the index of the latest item to
5144          * be moved to appear after the i'th.
5145          */
5146         hashmap_init(&subject2item, subject2item_cmp, NULL, todo_list->nr);
5147         ALLOC_ARRAY(next, todo_list->nr);
5148         ALLOC_ARRAY(tail, todo_list->nr);
5149         ALLOC_ARRAY(subjects, todo_list->nr);
5150         for (i = 0; i < todo_list->nr; i++) {
5151                 struct strbuf buf = STRBUF_INIT;
5152                 struct todo_item *item = todo_list->items + i;
5153                 const char *commit_buffer, *subject, *p;
5154                 size_t subject_len;
5155                 int i2 = -1;
5156                 struct subject2item_entry *entry;
5157
5158                 next[i] = tail[i] = -1;
5159                 if (!item->commit || item->command == TODO_DROP) {
5160                         subjects[i] = NULL;
5161                         continue;
5162                 }
5163
5164                 if (is_fixup(item->command)) {
5165                         clear_commit_todo_item(&commit_todo);
5166                         return error(_("the script was already rearranged."));
5167                 }
5168
5169                 *commit_todo_item_at(&commit_todo, item->commit) = item;
5170
5171                 parse_commit(item->commit);
5172                 commit_buffer = get_commit_buffer(item->commit, NULL);
5173                 find_commit_subject(commit_buffer, &subject);
5174                 format_subject(&buf, subject, " ");
5175                 subject = subjects[i] = strbuf_detach(&buf, &subject_len);
5176                 unuse_commit_buffer(item->commit, commit_buffer);
5177                 if ((skip_prefix(subject, "fixup! ", &p) ||
5178                      skip_prefix(subject, "squash! ", &p))) {
5179                         struct commit *commit2;
5180
5181                         for (;;) {
5182                                 while (isspace(*p))
5183                                         p++;
5184                                 if (!skip_prefix(p, "fixup! ", &p) &&
5185                                     !skip_prefix(p, "squash! ", &p))
5186                                         break;
5187                         }
5188
5189                         entry = hashmap_get_entry_from_hash(&subject2item,
5190                                                 strhash(p), p,
5191                                                 struct subject2item_entry,
5192                                                 entry);
5193                         if (entry)
5194                                 /* found by title */
5195                                 i2 = entry->i;
5196                         else if (!strchr(p, ' ') &&
5197                                  (commit2 =
5198                                   lookup_commit_reference_by_name(p)) &&
5199                                  *commit_todo_item_at(&commit_todo, commit2))
5200                                 /* found by commit name */
5201                                 i2 = *commit_todo_item_at(&commit_todo, commit2)
5202                                         - todo_list->items;
5203                         else {
5204                                 /* copy can be a prefix of the commit subject */
5205                                 for (i2 = 0; i2 < i; i2++)
5206                                         if (subjects[i2] &&
5207                                             starts_with(subjects[i2], p))
5208                                                 break;
5209                                 if (i2 == i)
5210                                         i2 = -1;
5211                         }
5212                 }
5213                 if (i2 >= 0) {
5214                         rearranged = 1;
5215                         todo_list->items[i].command =
5216                                 starts_with(subject, "fixup!") ?
5217                                 TODO_FIXUP : TODO_SQUASH;
5218                         if (next[i2] < 0)
5219                                 next[i2] = i;
5220                         else
5221                                 next[tail[i2]] = i;
5222                         tail[i2] = i;
5223                 } else if (!hashmap_get_from_hash(&subject2item,
5224                                                 strhash(subject), subject)) {
5225                         FLEX_ALLOC_MEM(entry, subject, subject, subject_len);
5226                         entry->i = i;
5227                         hashmap_entry_init(&entry->entry,
5228                                         strhash(entry->subject));
5229                         hashmap_put(&subject2item, &entry->entry);
5230                 }
5231         }
5232
5233         if (rearranged) {
5234                 for (i = 0; i < todo_list->nr; i++) {
5235                         enum todo_command command = todo_list->items[i].command;
5236                         int cur = i;
5237
5238                         /*
5239                          * Initially, all commands are 'pick's. If it is a
5240                          * fixup or a squash now, we have rearranged it.
5241                          */
5242                         if (is_fixup(command))
5243                                 continue;
5244
5245                         while (cur >= 0) {
5246                                 ALLOC_GROW(items, nr + 1, alloc);
5247                                 items[nr++] = todo_list->items[cur];
5248                                 cur = next[cur];
5249                         }
5250                 }
5251
5252                 FREE_AND_NULL(todo_list->items);
5253                 todo_list->items = items;
5254                 todo_list->nr = nr;
5255                 todo_list->alloc = alloc;
5256         }
5257
5258         free(next);
5259         free(tail);
5260         for (i = 0; i < todo_list->nr; i++)
5261                 free(subjects[i]);
5262         free(subjects);
5263         hashmap_free_entries(&subject2item, struct subject2item_entry, entry);
5264
5265         clear_commit_todo_item(&commit_todo);
5266
5267         return 0;
5268 }