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