fetch-pack: write fetched refs to .promisor
[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 *result, *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, &result);
617         if (is_rebase_i(opts) && clean <= 0)
618                 fputs(o.obuf.buf, stdout);
619         strbuf_release(&o.obuf);
620         diff_warn_rename_limit("merge.renamelimit", o.needed_rename_limit, 0);
621         if (clean < 0) {
622                 rollback_lock_file(&index_lock);
623                 return clean;
624         }
625
626         if (write_locked_index(r->index, &index_lock,
627                                COMMIT_LOCK | SKIP_IF_UNCHANGED))
628                 /*
629                  * TRANSLATORS: %s will be "revert", "cherry-pick" or
630                  * "rebase -i".
631                  */
632                 return error(_("%s: Unable to write new index file"),
633                         _(action_name(opts)));
634
635         if (!clean)
636                 append_conflicts_hint(r->index, msgbuf,
637                                       opts->default_msg_cleanup);
638
639         return !clean;
640 }
641
642 static struct object_id *get_cache_tree_oid(struct index_state *istate)
643 {
644         if (!istate->cache_tree)
645                 istate->cache_tree = cache_tree();
646
647         if (!cache_tree_fully_valid(istate->cache_tree))
648                 if (cache_tree_update(istate, 0)) {
649                         error(_("unable to update cache tree"));
650                         return NULL;
651                 }
652
653         return &istate->cache_tree->oid;
654 }
655
656 static int is_index_unchanged(struct repository *r)
657 {
658         struct object_id head_oid, *cache_tree_oid;
659         struct commit *head_commit;
660         struct index_state *istate = r->index;
661
662         if (!resolve_ref_unsafe("HEAD", RESOLVE_REF_READING, &head_oid, NULL))
663                 return error(_("could not resolve HEAD commit"));
664
665         head_commit = lookup_commit(r, &head_oid);
666
667         /*
668          * If head_commit is NULL, check_commit, called from
669          * lookup_commit, would have indicated that head_commit is not
670          * a commit object already.  parse_commit() will return failure
671          * without further complaints in such a case.  Otherwise, if
672          * the commit is invalid, parse_commit() will complain.  So
673          * there is nothing for us to say here.  Just return failure.
674          */
675         if (parse_commit(head_commit))
676                 return -1;
677
678         if (!(cache_tree_oid = get_cache_tree_oid(istate)))
679                 return -1;
680
681         return oideq(cache_tree_oid, get_commit_tree_oid(head_commit));
682 }
683
684 static int write_author_script(const char *message)
685 {
686         struct strbuf buf = STRBUF_INIT;
687         const char *eol;
688         int res;
689
690         for (;;)
691                 if (!*message || starts_with(message, "\n")) {
692 missing_author:
693                         /* Missing 'author' line? */
694                         unlink(rebase_path_author_script());
695                         return 0;
696                 } else if (skip_prefix(message, "author ", &message))
697                         break;
698                 else if ((eol = strchr(message, '\n')))
699                         message = eol + 1;
700                 else
701                         goto missing_author;
702
703         strbuf_addstr(&buf, "GIT_AUTHOR_NAME='");
704         while (*message && *message != '\n' && *message != '\r')
705                 if (skip_prefix(message, " <", &message))
706                         break;
707                 else if (*message != '\'')
708                         strbuf_addch(&buf, *(message++));
709                 else
710                         strbuf_addf(&buf, "'\\%c'", *(message++));
711         strbuf_addstr(&buf, "'\nGIT_AUTHOR_EMAIL='");
712         while (*message && *message != '\n' && *message != '\r')
713                 if (skip_prefix(message, "> ", &message))
714                         break;
715                 else if (*message != '\'')
716                         strbuf_addch(&buf, *(message++));
717                 else
718                         strbuf_addf(&buf, "'\\%c'", *(message++));
719         strbuf_addstr(&buf, "'\nGIT_AUTHOR_DATE='@");
720         while (*message && *message != '\n' && *message != '\r')
721                 if (*message != '\'')
722                         strbuf_addch(&buf, *(message++));
723                 else
724                         strbuf_addf(&buf, "'\\%c'", *(message++));
725         strbuf_addch(&buf, '\'');
726         res = write_message(buf.buf, buf.len, rebase_path_author_script(), 1);
727         strbuf_release(&buf);
728         return res;
729 }
730
731 /**
732  * Take a series of KEY='VALUE' lines where VALUE part is
733  * sq-quoted, and append <KEY, VALUE> at the end of the string list
734  */
735 static int parse_key_value_squoted(char *buf, struct string_list *list)
736 {
737         while (*buf) {
738                 struct string_list_item *item;
739                 char *np;
740                 char *cp = strchr(buf, '=');
741                 if (!cp) {
742                         np = strchrnul(buf, '\n');
743                         return error(_("no key present in '%.*s'"),
744                                      (int) (np - buf), buf);
745                 }
746                 np = strchrnul(cp, '\n');
747                 *cp++ = '\0';
748                 item = string_list_append(list, buf);
749
750                 buf = np + (*np == '\n');
751                 *np = '\0';
752                 cp = sq_dequote(cp);
753                 if (!cp)
754                         return error(_("unable to dequote value of '%s'"),
755                                      item->string);
756                 item->util = xstrdup(cp);
757         }
758         return 0;
759 }
760
761 /**
762  * Reads and parses the state directory's "author-script" file, and sets name,
763  * email and date accordingly.
764  * Returns 0 on success, -1 if the file could not be parsed.
765  *
766  * The author script is of the format:
767  *
768  *      GIT_AUTHOR_NAME='$author_name'
769  *      GIT_AUTHOR_EMAIL='$author_email'
770  *      GIT_AUTHOR_DATE='$author_date'
771  *
772  * where $author_name, $author_email and $author_date are quoted. We are strict
773  * with our parsing, as the file was meant to be eval'd in the now-removed
774  * git-am.sh/git-rebase--interactive.sh scripts, and thus if the file differs
775  * from what this function expects, it is better to bail out than to do
776  * something that the user does not expect.
777  */
778 int read_author_script(const char *path, char **name, char **email, char **date,
779                        int allow_missing)
780 {
781         struct strbuf buf = STRBUF_INIT;
782         struct string_list kv = STRING_LIST_INIT_DUP;
783         int retval = -1; /* assume failure */
784         int i, name_i = -2, email_i = -2, date_i = -2, err = 0;
785
786         if (strbuf_read_file(&buf, path, 256) <= 0) {
787                 strbuf_release(&buf);
788                 if (errno == ENOENT && allow_missing)
789                         return 0;
790                 else
791                         return error_errno(_("could not open '%s' for reading"),
792                                            path);
793         }
794
795         if (parse_key_value_squoted(buf.buf, &kv))
796                 goto finish;
797
798         for (i = 0; i < kv.nr; i++) {
799                 if (!strcmp(kv.items[i].string, "GIT_AUTHOR_NAME")) {
800                         if (name_i != -2)
801                                 name_i = error(_("'GIT_AUTHOR_NAME' already given"));
802                         else
803                                 name_i = i;
804                 } else if (!strcmp(kv.items[i].string, "GIT_AUTHOR_EMAIL")) {
805                         if (email_i != -2)
806                                 email_i = error(_("'GIT_AUTHOR_EMAIL' already given"));
807                         else
808                                 email_i = i;
809                 } else if (!strcmp(kv.items[i].string, "GIT_AUTHOR_DATE")) {
810                         if (date_i != -2)
811                                 date_i = error(_("'GIT_AUTHOR_DATE' already given"));
812                         else
813                                 date_i = i;
814                 } else {
815                         err = error(_("unknown variable '%s'"),
816                                     kv.items[i].string);
817                 }
818         }
819         if (name_i == -2)
820                 error(_("missing 'GIT_AUTHOR_NAME'"));
821         if (email_i == -2)
822                 error(_("missing 'GIT_AUTHOR_EMAIL'"));
823         if (date_i == -2)
824                 error(_("missing 'GIT_AUTHOR_DATE'"));
825         if (date_i < 0 || email_i < 0 || date_i < 0 || err)
826                 goto finish;
827         *name = kv.items[name_i].util;
828         *email = kv.items[email_i].util;
829         *date = kv.items[date_i].util;
830         retval = 0;
831 finish:
832         string_list_clear(&kv, !!retval);
833         strbuf_release(&buf);
834         return retval;
835 }
836
837 /*
838  * Read a GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL AND GIT_AUTHOR_DATE from a
839  * file with shell quoting into struct argv_array. Returns -1 on
840  * error, 0 otherwise.
841  */
842 static int read_env_script(struct argv_array *env)
843 {
844         char *name, *email, *date;
845
846         if (read_author_script(rebase_path_author_script(),
847                                &name, &email, &date, 0))
848                 return -1;
849
850         argv_array_pushf(env, "GIT_AUTHOR_NAME=%s", name);
851         argv_array_pushf(env, "GIT_AUTHOR_EMAIL=%s", email);
852         argv_array_pushf(env, "GIT_AUTHOR_DATE=%s", date);
853         free(name);
854         free(email);
855         free(date);
856
857         return 0;
858 }
859
860 static char *get_author(const char *message)
861 {
862         size_t len;
863         const char *a;
864
865         a = find_commit_header(message, "author", &len);
866         if (a)
867                 return xmemdupz(a, len);
868
869         return NULL;
870 }
871
872 static const char staged_changes_advice[] =
873 N_("you have staged changes in your working tree\n"
874 "If these changes are meant to be squashed into the previous commit, run:\n"
875 "\n"
876 "  git commit --amend %s\n"
877 "\n"
878 "If they are meant to go into a new commit, run:\n"
879 "\n"
880 "  git commit %s\n"
881 "\n"
882 "In both cases, once you're done, continue with:\n"
883 "\n"
884 "  git rebase --continue\n");
885
886 #define ALLOW_EMPTY (1<<0)
887 #define EDIT_MSG    (1<<1)
888 #define AMEND_MSG   (1<<2)
889 #define CLEANUP_MSG (1<<3)
890 #define VERIFY_MSG  (1<<4)
891 #define CREATE_ROOT_COMMIT (1<<5)
892
893 static int run_command_silent_on_success(struct child_process *cmd)
894 {
895         struct strbuf buf = STRBUF_INIT;
896         int rc;
897
898         cmd->stdout_to_stderr = 1;
899         rc = pipe_command(cmd,
900                           NULL, 0,
901                           NULL, 0,
902                           &buf, 0);
903
904         if (rc)
905                 fputs(buf.buf, stderr);
906         strbuf_release(&buf);
907         return rc;
908 }
909
910 /*
911  * If we are cherry-pick, and if the merge did not result in
912  * hand-editing, we will hit this commit and inherit the original
913  * author date and name.
914  *
915  * If we are revert, or if our cherry-pick results in a hand merge,
916  * we had better say that the current user is responsible for that.
917  *
918  * An exception is when run_git_commit() is called during an
919  * interactive rebase: in that case, we will want to retain the
920  * author metadata.
921  */
922 static int run_git_commit(struct repository *r,
923                           const char *defmsg,
924                           struct replay_opts *opts,
925                           unsigned int flags)
926 {
927         struct child_process cmd = CHILD_PROCESS_INIT;
928
929         cmd.git_cmd = 1;
930
931         if (is_rebase_i(opts) && read_env_script(&cmd.env_array)) {
932                 const char *gpg_opt = gpg_sign_opt_quoted(opts);
933
934                 return error(_(staged_changes_advice),
935                              gpg_opt, gpg_opt);
936         }
937
938         argv_array_push(&cmd.args, "commit");
939
940         if (!(flags & VERIFY_MSG))
941                 argv_array_push(&cmd.args, "-n");
942         if ((flags & AMEND_MSG))
943                 argv_array_push(&cmd.args, "--amend");
944         if (opts->gpg_sign)
945                 argv_array_pushf(&cmd.args, "-S%s", opts->gpg_sign);
946         if (defmsg)
947                 argv_array_pushl(&cmd.args, "-F", defmsg, NULL);
948         else if (!(flags & EDIT_MSG))
949                 argv_array_pushl(&cmd.args, "-C", "HEAD", NULL);
950         if ((flags & CLEANUP_MSG))
951                 argv_array_push(&cmd.args, "--cleanup=strip");
952         if ((flags & EDIT_MSG))
953                 argv_array_push(&cmd.args, "-e");
954         else if (!(flags & CLEANUP_MSG) &&
955                  !opts->signoff && !opts->record_origin &&
956                  !opts->explicit_cleanup)
957                 argv_array_push(&cmd.args, "--cleanup=verbatim");
958
959         if ((flags & ALLOW_EMPTY))
960                 argv_array_push(&cmd.args, "--allow-empty");
961
962         if (!(flags & EDIT_MSG))
963                 argv_array_push(&cmd.args, "--allow-empty-message");
964
965         if (is_rebase_i(opts) && !(flags & EDIT_MSG))
966                 return run_command_silent_on_success(&cmd);
967         else
968                 return run_command(&cmd);
969 }
970
971 static int rest_is_empty(const struct strbuf *sb, int start)
972 {
973         int i, eol;
974         const char *nl;
975
976         /* Check if the rest is just whitespace and Signed-off-by's. */
977         for (i = start; i < sb->len; i++) {
978                 nl = memchr(sb->buf + i, '\n', sb->len - i);
979                 if (nl)
980                         eol = nl - sb->buf;
981                 else
982                         eol = sb->len;
983
984                 if (strlen(sign_off_header) <= eol - i &&
985                     starts_with(sb->buf + i, sign_off_header)) {
986                         i = eol;
987                         continue;
988                 }
989                 while (i < eol)
990                         if (!isspace(sb->buf[i++]))
991                                 return 0;
992         }
993
994         return 1;
995 }
996
997 void cleanup_message(struct strbuf *msgbuf,
998         enum commit_msg_cleanup_mode cleanup_mode, int verbose)
999 {
1000         if (verbose || /* Truncate the message just before the diff, if any. */
1001             cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS)
1002                 strbuf_setlen(msgbuf, wt_status_locate_end(msgbuf->buf, msgbuf->len));
1003         if (cleanup_mode != COMMIT_MSG_CLEANUP_NONE)
1004                 strbuf_stripspace(msgbuf, cleanup_mode == COMMIT_MSG_CLEANUP_ALL);
1005 }
1006
1007 /*
1008  * Find out if the message in the strbuf contains only whitespace and
1009  * Signed-off-by lines.
1010  */
1011 int message_is_empty(const struct strbuf *sb,
1012                      enum commit_msg_cleanup_mode cleanup_mode)
1013 {
1014         if (cleanup_mode == COMMIT_MSG_CLEANUP_NONE && sb->len)
1015                 return 0;
1016         return rest_is_empty(sb, 0);
1017 }
1018
1019 /*
1020  * See if the user edited the message in the editor or left what
1021  * was in the template intact
1022  */
1023 int template_untouched(const struct strbuf *sb, const char *template_file,
1024                        enum commit_msg_cleanup_mode cleanup_mode)
1025 {
1026         struct strbuf tmpl = STRBUF_INIT;
1027         const char *start;
1028
1029         if (cleanup_mode == COMMIT_MSG_CLEANUP_NONE && sb->len)
1030                 return 0;
1031
1032         if (!template_file || strbuf_read_file(&tmpl, template_file, 0) <= 0)
1033                 return 0;
1034
1035         strbuf_stripspace(&tmpl, cleanup_mode == COMMIT_MSG_CLEANUP_ALL);
1036         if (!skip_prefix(sb->buf, tmpl.buf, &start))
1037                 start = sb->buf;
1038         strbuf_release(&tmpl);
1039         return rest_is_empty(sb, start - sb->buf);
1040 }
1041
1042 int update_head_with_reflog(const struct commit *old_head,
1043                             const struct object_id *new_head,
1044                             const char *action, const struct strbuf *msg,
1045                             struct strbuf *err)
1046 {
1047         struct ref_transaction *transaction;
1048         struct strbuf sb = STRBUF_INIT;
1049         const char *nl;
1050         int ret = 0;
1051
1052         if (action) {
1053                 strbuf_addstr(&sb, action);
1054                 strbuf_addstr(&sb, ": ");
1055         }
1056
1057         nl = strchr(msg->buf, '\n');
1058         if (nl) {
1059                 strbuf_add(&sb, msg->buf, nl + 1 - msg->buf);
1060         } else {
1061                 strbuf_addbuf(&sb, msg);
1062                 strbuf_addch(&sb, '\n');
1063         }
1064
1065         transaction = ref_transaction_begin(err);
1066         if (!transaction ||
1067             ref_transaction_update(transaction, "HEAD", new_head,
1068                                    old_head ? &old_head->object.oid : &null_oid,
1069                                    0, sb.buf, err) ||
1070             ref_transaction_commit(transaction, err)) {
1071                 ret = -1;
1072         }
1073         ref_transaction_free(transaction);
1074         strbuf_release(&sb);
1075
1076         return ret;
1077 }
1078
1079 static int run_rewrite_hook(const struct object_id *oldoid,
1080                             const struct object_id *newoid)
1081 {
1082         struct child_process proc = CHILD_PROCESS_INIT;
1083         const char *argv[3];
1084         int code;
1085         struct strbuf sb = STRBUF_INIT;
1086
1087         argv[0] = find_hook("post-rewrite");
1088         if (!argv[0])
1089                 return 0;
1090
1091         argv[1] = "amend";
1092         argv[2] = NULL;
1093
1094         proc.argv = argv;
1095         proc.in = -1;
1096         proc.stdout_to_stderr = 1;
1097         proc.trace2_hook_name = "post-rewrite";
1098
1099         code = start_command(&proc);
1100         if (code)
1101                 return code;
1102         strbuf_addf(&sb, "%s %s\n", oid_to_hex(oldoid), oid_to_hex(newoid));
1103         sigchain_push(SIGPIPE, SIG_IGN);
1104         write_in_full(proc.in, sb.buf, sb.len);
1105         close(proc.in);
1106         strbuf_release(&sb);
1107         sigchain_pop(SIGPIPE);
1108         return finish_command(&proc);
1109 }
1110
1111 void commit_post_rewrite(struct repository *r,
1112                          const struct commit *old_head,
1113                          const struct object_id *new_head)
1114 {
1115         struct notes_rewrite_cfg *cfg;
1116
1117         cfg = init_copy_notes_for_rewrite("amend");
1118         if (cfg) {
1119                 /* we are amending, so old_head is not NULL */
1120                 copy_note_for_rewrite(cfg, &old_head->object.oid, new_head);
1121                 finish_copy_notes_for_rewrite(r, cfg, "Notes added by 'git commit --amend'");
1122         }
1123         run_rewrite_hook(&old_head->object.oid, new_head);
1124 }
1125
1126 static int run_prepare_commit_msg_hook(struct repository *r,
1127                                        struct strbuf *msg,
1128                                        const char *commit)
1129 {
1130         struct argv_array hook_env = ARGV_ARRAY_INIT;
1131         int ret;
1132         const char *name;
1133
1134         name = git_path_commit_editmsg();
1135         if (write_message(msg->buf, msg->len, name, 0))
1136                 return -1;
1137
1138         argv_array_pushf(&hook_env, "GIT_INDEX_FILE=%s", r->index_file);
1139         argv_array_push(&hook_env, "GIT_EDITOR=:");
1140         if (commit)
1141                 ret = run_hook_le(hook_env.argv, "prepare-commit-msg", name,
1142                                   "commit", commit, NULL);
1143         else
1144                 ret = run_hook_le(hook_env.argv, "prepare-commit-msg", name,
1145                                   "message", NULL);
1146         if (ret)
1147                 ret = error(_("'prepare-commit-msg' hook failed"));
1148         argv_array_clear(&hook_env);
1149
1150         return ret;
1151 }
1152
1153 static const char implicit_ident_advice_noconfig[] =
1154 N_("Your name and email address were configured automatically based\n"
1155 "on your username and hostname. Please check that they are accurate.\n"
1156 "You can suppress this message by setting them explicitly. Run the\n"
1157 "following command and follow the instructions in your editor to edit\n"
1158 "your configuration file:\n"
1159 "\n"
1160 "    git config --global --edit\n"
1161 "\n"
1162 "After doing this, you may fix the identity used for this commit with:\n"
1163 "\n"
1164 "    git commit --amend --reset-author\n");
1165
1166 static const char implicit_ident_advice_config[] =
1167 N_("Your name and email address were configured automatically based\n"
1168 "on your username and hostname. Please check that they are accurate.\n"
1169 "You can suppress this message by setting them explicitly:\n"
1170 "\n"
1171 "    git config --global user.name \"Your Name\"\n"
1172 "    git config --global user.email you@example.com\n"
1173 "\n"
1174 "After doing this, you may fix the identity used for this commit with:\n"
1175 "\n"
1176 "    git commit --amend --reset-author\n");
1177
1178 static const char *implicit_ident_advice(void)
1179 {
1180         char *user_config = expand_user_path("~/.gitconfig", 0);
1181         char *xdg_config = xdg_config_home("config");
1182         int config_exists = file_exists(user_config) || file_exists(xdg_config);
1183
1184         free(user_config);
1185         free(xdg_config);
1186
1187         if (config_exists)
1188                 return _(implicit_ident_advice_config);
1189         else
1190                 return _(implicit_ident_advice_noconfig);
1191
1192 }
1193
1194 void print_commit_summary(struct repository *r,
1195                           const char *prefix,
1196                           const struct object_id *oid,
1197                           unsigned int flags)
1198 {
1199         struct rev_info rev;
1200         struct commit *commit;
1201         struct strbuf format = STRBUF_INIT;
1202         const char *head;
1203         struct pretty_print_context pctx = {0};
1204         struct strbuf author_ident = STRBUF_INIT;
1205         struct strbuf committer_ident = STRBUF_INIT;
1206
1207         commit = lookup_commit(r, oid);
1208         if (!commit)
1209                 die(_("couldn't look up newly created commit"));
1210         if (parse_commit(commit))
1211                 die(_("could not parse newly created commit"));
1212
1213         strbuf_addstr(&format, "format:%h] %s");
1214
1215         format_commit_message(commit, "%an <%ae>", &author_ident, &pctx);
1216         format_commit_message(commit, "%cn <%ce>", &committer_ident, &pctx);
1217         if (strbuf_cmp(&author_ident, &committer_ident)) {
1218                 strbuf_addstr(&format, "\n Author: ");
1219                 strbuf_addbuf_percentquote(&format, &author_ident);
1220         }
1221         if (flags & SUMMARY_SHOW_AUTHOR_DATE) {
1222                 struct strbuf date = STRBUF_INIT;
1223
1224                 format_commit_message(commit, "%ad", &date, &pctx);
1225                 strbuf_addstr(&format, "\n Date: ");
1226                 strbuf_addbuf_percentquote(&format, &date);
1227                 strbuf_release(&date);
1228         }
1229         if (!committer_ident_sufficiently_given()) {
1230                 strbuf_addstr(&format, "\n Committer: ");
1231                 strbuf_addbuf_percentquote(&format, &committer_ident);
1232                 if (advice_implicit_identity) {
1233                         strbuf_addch(&format, '\n');
1234                         strbuf_addstr(&format, implicit_ident_advice());
1235                 }
1236         }
1237         strbuf_release(&author_ident);
1238         strbuf_release(&committer_ident);
1239
1240         repo_init_revisions(r, &rev, prefix);
1241         setup_revisions(0, NULL, &rev, NULL);
1242
1243         rev.diff = 1;
1244         rev.diffopt.output_format =
1245                 DIFF_FORMAT_SHORTSTAT | DIFF_FORMAT_SUMMARY;
1246
1247         rev.verbose_header = 1;
1248         rev.show_root_diff = 1;
1249         get_commit_format(format.buf, &rev);
1250         rev.always_show_header = 0;
1251         rev.diffopt.detect_rename = DIFF_DETECT_RENAME;
1252         rev.diffopt.break_opt = 0;
1253         diff_setup_done(&rev.diffopt);
1254
1255         head = resolve_ref_unsafe("HEAD", 0, NULL, NULL);
1256         if (!head)
1257                 die_errno(_("unable to resolve HEAD after creating commit"));
1258         if (!strcmp(head, "HEAD"))
1259                 head = _("detached HEAD");
1260         else
1261                 skip_prefix(head, "refs/heads/", &head);
1262         printf("[%s%s ", head, (flags & SUMMARY_INITIAL_COMMIT) ?
1263                                                 _(" (root-commit)") : "");
1264
1265         if (!log_tree_commit(&rev, commit)) {
1266                 rev.always_show_header = 1;
1267                 rev.use_terminator = 1;
1268                 log_tree_commit(&rev, commit);
1269         }
1270
1271         strbuf_release(&format);
1272 }
1273
1274 static int parse_head(struct repository *r, struct commit **head)
1275 {
1276         struct commit *current_head;
1277         struct object_id oid;
1278
1279         if (get_oid("HEAD", &oid)) {
1280                 current_head = NULL;
1281         } else {
1282                 current_head = lookup_commit_reference(r, &oid);
1283                 if (!current_head)
1284                         return error(_("could not parse HEAD"));
1285                 if (!oideq(&oid, &current_head->object.oid)) {
1286                         warning(_("HEAD %s is not a commit!"),
1287                                 oid_to_hex(&oid));
1288                 }
1289                 if (parse_commit(current_head))
1290                         return error(_("could not parse HEAD commit"));
1291         }
1292         *head = current_head;
1293
1294         return 0;
1295 }
1296
1297 /*
1298  * Try to commit without forking 'git commit'. In some cases we need
1299  * to run 'git commit' to display an error message
1300  *
1301  * Returns:
1302  *  -1 - error unable to commit
1303  *   0 - success
1304  *   1 - run 'git commit'
1305  */
1306 static int try_to_commit(struct repository *r,
1307                          struct strbuf *msg, const char *author,
1308                          struct replay_opts *opts, unsigned int flags,
1309                          struct object_id *oid)
1310 {
1311         struct object_id tree;
1312         struct commit *current_head = NULL;
1313         struct commit_list *parents = NULL;
1314         struct commit_extra_header *extra = NULL;
1315         struct strbuf err = STRBUF_INIT;
1316         struct strbuf commit_msg = STRBUF_INIT;
1317         char *amend_author = NULL;
1318         const char *hook_commit = NULL;
1319         enum commit_msg_cleanup_mode cleanup;
1320         int res = 0;
1321
1322         if (parse_head(r, &current_head))
1323                 return -1;
1324
1325         if (flags & AMEND_MSG) {
1326                 const char *exclude_gpgsig[] = { "gpgsig", NULL };
1327                 const char *out_enc = get_commit_output_encoding();
1328                 const char *message = logmsg_reencode(current_head, NULL,
1329                                                       out_enc);
1330
1331                 if (!msg) {
1332                         const char *orig_message = NULL;
1333
1334                         find_commit_subject(message, &orig_message);
1335                         msg = &commit_msg;
1336                         strbuf_addstr(msg, orig_message);
1337                         hook_commit = "HEAD";
1338                 }
1339                 author = amend_author = get_author(message);
1340                 unuse_commit_buffer(current_head, message);
1341                 if (!author) {
1342                         res = error(_("unable to parse commit author"));
1343                         goto out;
1344                 }
1345                 parents = copy_commit_list(current_head->parents);
1346                 extra = read_commit_extra_headers(current_head, exclude_gpgsig);
1347         } else if (current_head &&
1348                    (!(flags & CREATE_ROOT_COMMIT) || (flags & AMEND_MSG))) {
1349                 commit_list_insert(current_head, &parents);
1350         }
1351
1352         if (write_index_as_tree(&tree, r->index, r->index_file, 0, NULL)) {
1353                 res = error(_("git write-tree failed to write a tree"));
1354                 goto out;
1355         }
1356
1357         if (!(flags & ALLOW_EMPTY) && oideq(current_head ?
1358                                             get_commit_tree_oid(current_head) :
1359                                             the_hash_algo->empty_tree, &tree)) {
1360                 res = 1; /* run 'git commit' to display error message */
1361                 goto out;
1362         }
1363
1364         if (find_hook("prepare-commit-msg")) {
1365                 res = run_prepare_commit_msg_hook(r, msg, hook_commit);
1366                 if (res)
1367                         goto out;
1368                 if (strbuf_read_file(&commit_msg, git_path_commit_editmsg(),
1369                                      2048) < 0) {
1370                         res = error_errno(_("unable to read commit message "
1371                                               "from '%s'"),
1372                                             git_path_commit_editmsg());
1373                         goto out;
1374                 }
1375                 msg = &commit_msg;
1376         }
1377
1378         if (flags & CLEANUP_MSG)
1379                 cleanup = COMMIT_MSG_CLEANUP_ALL;
1380         else if ((opts->signoff || opts->record_origin) &&
1381                  !opts->explicit_cleanup)
1382                 cleanup = COMMIT_MSG_CLEANUP_SPACE;
1383         else
1384                 cleanup = opts->default_msg_cleanup;
1385
1386         if (cleanup != COMMIT_MSG_CLEANUP_NONE)
1387                 strbuf_stripspace(msg, cleanup == COMMIT_MSG_CLEANUP_ALL);
1388         if ((flags & EDIT_MSG) && message_is_empty(msg, cleanup)) {
1389                 res = 1; /* run 'git commit' to display error message */
1390                 goto out;
1391         }
1392
1393         reset_ident_date();
1394
1395         if (commit_tree_extended(msg->buf, msg->len, &tree, parents,
1396                                  oid, author, opts->gpg_sign, extra)) {
1397                 res = error(_("failed to write commit object"));
1398                 goto out;
1399         }
1400
1401         if (update_head_with_reflog(current_head, oid,
1402                                     getenv("GIT_REFLOG_ACTION"), msg, &err)) {
1403                 res = error("%s", err.buf);
1404                 goto out;
1405         }
1406
1407         if (flags & AMEND_MSG)
1408                 commit_post_rewrite(r, current_head, oid);
1409
1410 out:
1411         free_commit_extra_headers(extra);
1412         strbuf_release(&err);
1413         strbuf_release(&commit_msg);
1414         free(amend_author);
1415
1416         return res;
1417 }
1418
1419 static int do_commit(struct repository *r,
1420                      const char *msg_file, const char *author,
1421                      struct replay_opts *opts, unsigned int flags)
1422 {
1423         int res = 1;
1424
1425         if (!(flags & EDIT_MSG) && !(flags & VERIFY_MSG)) {
1426                 struct object_id oid;
1427                 struct strbuf sb = STRBUF_INIT;
1428
1429                 if (msg_file && strbuf_read_file(&sb, msg_file, 2048) < 0)
1430                         return error_errno(_("unable to read commit message "
1431                                              "from '%s'"),
1432                                            msg_file);
1433
1434                 res = try_to_commit(r, msg_file ? &sb : NULL,
1435                                     author, opts, flags, &oid);
1436                 strbuf_release(&sb);
1437                 if (!res) {
1438                         unlink(git_path_cherry_pick_head(r));
1439                         unlink(git_path_merge_msg(r));
1440                         if (!is_rebase_i(opts))
1441                                 print_commit_summary(r, NULL, &oid,
1442                                                 SUMMARY_SHOW_AUTHOR_DATE);
1443                         return res;
1444                 }
1445         }
1446         if (res == 1)
1447                 return run_git_commit(r, msg_file, opts, flags);
1448
1449         return res;
1450 }
1451
1452 static int is_original_commit_empty(struct commit *commit)
1453 {
1454         const struct object_id *ptree_oid;
1455
1456         if (parse_commit(commit))
1457                 return error(_("could not parse commit %s"),
1458                              oid_to_hex(&commit->object.oid));
1459         if (commit->parents) {
1460                 struct commit *parent = commit->parents->item;
1461                 if (parse_commit(parent))
1462                         return error(_("could not parse parent commit %s"),
1463                                 oid_to_hex(&parent->object.oid));
1464                 ptree_oid = get_commit_tree_oid(parent);
1465         } else {
1466                 ptree_oid = the_hash_algo->empty_tree; /* commit is root */
1467         }
1468
1469         return oideq(ptree_oid, get_commit_tree_oid(commit));
1470 }
1471
1472 /*
1473  * Do we run "git commit" with "--allow-empty"?
1474  */
1475 static int allow_empty(struct repository *r,
1476                        struct replay_opts *opts,
1477                        struct commit *commit)
1478 {
1479         int index_unchanged, empty_commit;
1480
1481         /*
1482          * Three cases:
1483          *
1484          * (1) we do not allow empty at all and error out.
1485          *
1486          * (2) we allow ones that were initially empty, but
1487          * forbid the ones that become empty;
1488          *
1489          * (3) we allow both.
1490          */
1491         if (!opts->allow_empty)
1492                 return 0; /* let "git commit" barf as necessary */
1493
1494         index_unchanged = is_index_unchanged(r);
1495         if (index_unchanged < 0)
1496                 return index_unchanged;
1497         if (!index_unchanged)
1498                 return 0; /* we do not have to say --allow-empty */
1499
1500         if (opts->keep_redundant_commits)
1501                 return 1;
1502
1503         empty_commit = is_original_commit_empty(commit);
1504         if (empty_commit < 0)
1505                 return empty_commit;
1506         if (!empty_commit)
1507                 return 0;
1508         else
1509                 return 1;
1510 }
1511
1512 static struct {
1513         char c;
1514         const char *str;
1515 } todo_command_info[] = {
1516         { 'p', "pick" },
1517         { 0,   "revert" },
1518         { 'e', "edit" },
1519         { 'r', "reword" },
1520         { 'f', "fixup" },
1521         { 's', "squash" },
1522         { 'x', "exec" },
1523         { 'b', "break" },
1524         { 'l', "label" },
1525         { 't', "reset" },
1526         { 'm', "merge" },
1527         { 0,   "noop" },
1528         { 'd', "drop" },
1529         { 0,   NULL }
1530 };
1531
1532 static const char *command_to_string(const enum todo_command command)
1533 {
1534         if (command < TODO_COMMENT)
1535                 return todo_command_info[command].str;
1536         die(_("unknown command: %d"), command);
1537 }
1538
1539 static char command_to_char(const enum todo_command command)
1540 {
1541         if (command < TODO_COMMENT && todo_command_info[command].c)
1542                 return todo_command_info[command].c;
1543         return comment_line_char;
1544 }
1545
1546 static int is_noop(const enum todo_command command)
1547 {
1548         return TODO_NOOP <= command;
1549 }
1550
1551 static int is_fixup(enum todo_command command)
1552 {
1553         return command == TODO_FIXUP || command == TODO_SQUASH;
1554 }
1555
1556 /* Does this command create a (non-merge) commit? */
1557 static int is_pick_or_similar(enum todo_command command)
1558 {
1559         switch (command) {
1560         case TODO_PICK:
1561         case TODO_REVERT:
1562         case TODO_EDIT:
1563         case TODO_REWORD:
1564         case TODO_FIXUP:
1565         case TODO_SQUASH:
1566                 return 1;
1567         default:
1568                 return 0;
1569         }
1570 }
1571
1572 static int update_squash_messages(struct repository *r,
1573                                   enum todo_command command,
1574                                   struct commit *commit,
1575                                   struct replay_opts *opts)
1576 {
1577         struct strbuf buf = STRBUF_INIT;
1578         int res;
1579         const char *message, *body;
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 = get_commit_buffer(head_commit, NULL)))
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 = get_commit_buffer(commit, NULL)))
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         struct commit *commit;
2569
2570         if (prepare_revs(opts))
2571                 return -1;
2572
2573         while ((commit = get_revision(opts->revs))) {
2574                 struct todo_item *item = append_new_todo(todo_list);
2575                 const char *commit_buffer = get_commit_buffer(commit, NULL);
2576                 const char *subject;
2577                 int subject_len;
2578
2579                 item->command = command;
2580                 item->commit = commit;
2581                 item->arg_offset = 0;
2582                 item->arg_len = 0;
2583                 item->offset_in_buf = todo_list->buf.len;
2584                 subject_len = find_commit_subject(commit_buffer, &subject);
2585                 strbuf_addf(&todo_list->buf, "%s %s %.*s\n", command_string,
2586                         short_commit_name(commit), subject_len, subject);
2587                 unuse_commit_buffer(commit, commit_buffer);
2588         }
2589
2590         if (!todo_list->nr)
2591                 return error(_("empty commit set passed"));
2592
2593         return 0;
2594 }
2595
2596 static int create_seq_dir(struct repository *r)
2597 {
2598         enum replay_action action;
2599         const char *in_progress_error = NULL;
2600         const char *in_progress_advice = NULL;
2601         unsigned int advise_skip = file_exists(git_path_revert_head(r)) ||
2602                                 file_exists(git_path_cherry_pick_head(r));
2603
2604         if (!sequencer_get_last_command(r, &action)) {
2605                 switch (action) {
2606                 case REPLAY_REVERT:
2607                         in_progress_error = _("revert is already in progress");
2608                         in_progress_advice =
2609                         _("try \"git revert (--continue | %s--abort | --quit)\"");
2610                         break;
2611                 case REPLAY_PICK:
2612                         in_progress_error = _("cherry-pick is already in progress");
2613                         in_progress_advice =
2614                         _("try \"git cherry-pick (--continue | %s--abort | --quit)\"");
2615                         break;
2616                 default:
2617                         BUG("unexpected action in create_seq_dir");
2618                 }
2619         }
2620         if (in_progress_error) {
2621                 error("%s", in_progress_error);
2622                 if (advice_sequencer_in_use)
2623                         advise(in_progress_advice,
2624                                 advise_skip ? "--skip | " : "");
2625                 return -1;
2626         }
2627         if (mkdir(git_path_seq_dir(), 0777) < 0)
2628                 return error_errno(_("could not create sequencer directory '%s'"),
2629                                    git_path_seq_dir());
2630
2631         return 0;
2632 }
2633
2634 static int save_head(const char *head)
2635 {
2636         struct lock_file head_lock = LOCK_INIT;
2637         struct strbuf buf = STRBUF_INIT;
2638         int fd;
2639         ssize_t written;
2640
2641         fd = hold_lock_file_for_update(&head_lock, git_path_head_file(), 0);
2642         if (fd < 0)
2643                 return error_errno(_("could not lock HEAD"));
2644         strbuf_addf(&buf, "%s\n", head);
2645         written = write_in_full(fd, buf.buf, buf.len);
2646         strbuf_release(&buf);
2647         if (written < 0) {
2648                 error_errno(_("could not write to '%s'"), git_path_head_file());
2649                 rollback_lock_file(&head_lock);
2650                 return -1;
2651         }
2652         if (commit_lock_file(&head_lock) < 0)
2653                 return error(_("failed to finalize '%s'"), git_path_head_file());
2654         return 0;
2655 }
2656
2657 static int rollback_is_safe(void)
2658 {
2659         struct strbuf sb = STRBUF_INIT;
2660         struct object_id expected_head, actual_head;
2661
2662         if (strbuf_read_file(&sb, git_path_abort_safety_file(), 0) >= 0) {
2663                 strbuf_trim(&sb);
2664                 if (get_oid_hex(sb.buf, &expected_head)) {
2665                         strbuf_release(&sb);
2666                         die(_("could not parse %s"), git_path_abort_safety_file());
2667                 }
2668                 strbuf_release(&sb);
2669         }
2670         else if (errno == ENOENT)
2671                 oidclr(&expected_head);
2672         else
2673                 die_errno(_("could not read '%s'"), git_path_abort_safety_file());
2674
2675         if (get_oid("HEAD", &actual_head))
2676                 oidclr(&actual_head);
2677
2678         return oideq(&actual_head, &expected_head);
2679 }
2680
2681 static int reset_merge(const struct object_id *oid)
2682 {
2683         int ret;
2684         struct argv_array argv = ARGV_ARRAY_INIT;
2685
2686         argv_array_pushl(&argv, "reset", "--merge", NULL);
2687
2688         if (!is_null_oid(oid))
2689                 argv_array_push(&argv, oid_to_hex(oid));
2690
2691         ret = run_command_v_opt(argv.argv, RUN_GIT_CMD);
2692         argv_array_clear(&argv);
2693
2694         return ret;
2695 }
2696
2697 static int rollback_single_pick(struct repository *r)
2698 {
2699         struct object_id head_oid;
2700
2701         if (!file_exists(git_path_cherry_pick_head(r)) &&
2702             !file_exists(git_path_revert_head(r)))
2703                 return error(_("no cherry-pick or revert in progress"));
2704         if (read_ref_full("HEAD", 0, &head_oid, NULL))
2705                 return error(_("cannot resolve HEAD"));
2706         if (is_null_oid(&head_oid))
2707                 return error(_("cannot abort from a branch yet to be born"));
2708         return reset_merge(&head_oid);
2709 }
2710
2711 static int skip_single_pick(void)
2712 {
2713         struct object_id head;
2714
2715         if (read_ref_full("HEAD", 0, &head, NULL))
2716                 return error(_("cannot resolve HEAD"));
2717         return reset_merge(&head);
2718 }
2719
2720 int sequencer_rollback(struct repository *r, struct replay_opts *opts)
2721 {
2722         FILE *f;
2723         struct object_id oid;
2724         struct strbuf buf = STRBUF_INIT;
2725         const char *p;
2726
2727         f = fopen(git_path_head_file(), "r");
2728         if (!f && errno == ENOENT) {
2729                 /*
2730                  * There is no multiple-cherry-pick in progress.
2731                  * If CHERRY_PICK_HEAD or REVERT_HEAD indicates
2732                  * a single-cherry-pick in progress, abort that.
2733                  */
2734                 return rollback_single_pick(r);
2735         }
2736         if (!f)
2737                 return error_errno(_("cannot open '%s'"), git_path_head_file());
2738         if (strbuf_getline_lf(&buf, f)) {
2739                 error(_("cannot read '%s': %s"), git_path_head_file(),
2740                       ferror(f) ?  strerror(errno) : _("unexpected end of file"));
2741                 fclose(f);
2742                 goto fail;
2743         }
2744         fclose(f);
2745         if (parse_oid_hex(buf.buf, &oid, &p) || *p != '\0') {
2746                 error(_("stored pre-cherry-pick HEAD file '%s' is corrupt"),
2747                         git_path_head_file());
2748                 goto fail;
2749         }
2750         if (is_null_oid(&oid)) {
2751                 error(_("cannot abort from a branch yet to be born"));
2752                 goto fail;
2753         }
2754
2755         if (!rollback_is_safe()) {
2756                 /* Do not error, just do not rollback */
2757                 warning(_("You seem to have moved HEAD. "
2758                           "Not rewinding, check your HEAD!"));
2759         } else
2760         if (reset_merge(&oid))
2761                 goto fail;
2762         strbuf_release(&buf);
2763         return sequencer_remove_state(opts);
2764 fail:
2765         strbuf_release(&buf);
2766         return -1;
2767 }
2768
2769 int sequencer_skip(struct repository *r, struct replay_opts *opts)
2770 {
2771         enum replay_action action = -1;
2772         sequencer_get_last_command(r, &action);
2773
2774         /*
2775          * Check whether the subcommand requested to skip the commit is actually
2776          * in progress and that it's safe to skip the commit.
2777          *
2778          * opts->action tells us which subcommand requested to skip the commit.
2779          * If the corresponding .git/<ACTION>_HEAD exists, we know that the
2780          * action is in progress and we can skip the commit.
2781          *
2782          * Otherwise we check that the last instruction was related to the
2783          * particular subcommand we're trying to execute and barf if that's not
2784          * the case.
2785          *
2786          * Finally we check that the rollback is "safe", i.e., has the HEAD
2787          * moved? In this case, it doesn't make sense to "reset the merge" and
2788          * "skip the commit" as the user already handled this by committing. But
2789          * we'd not want to barf here, instead give advice on how to proceed. We
2790          * only need to check that when .git/<ACTION>_HEAD doesn't exist because
2791          * it gets removed when the user commits, so if it still exists we're
2792          * sure the user can't have committed before.
2793          */
2794         switch (opts->action) {
2795         case REPLAY_REVERT:
2796                 if (!file_exists(git_path_revert_head(r))) {
2797                         if (action != REPLAY_REVERT)
2798                                 return error(_("no revert in progress"));
2799                         if (!rollback_is_safe())
2800                                 goto give_advice;
2801                 }
2802                 break;
2803         case REPLAY_PICK:
2804                 if (!file_exists(git_path_cherry_pick_head(r))) {
2805                         if (action != REPLAY_PICK)
2806                                 return error(_("no cherry-pick in progress"));
2807                         if (!rollback_is_safe())
2808                                 goto give_advice;
2809                 }
2810                 break;
2811         default:
2812                 BUG("unexpected action in sequencer_skip");
2813         }
2814
2815         if (skip_single_pick())
2816                 return error(_("failed to skip the commit"));
2817         if (!is_directory(git_path_seq_dir()))
2818                 return 0;
2819
2820         return sequencer_continue(r, opts);
2821
2822 give_advice:
2823         error(_("there is nothing to skip"));
2824
2825         if (advice_resolve_conflict) {
2826                 advise(_("have you committed already?\n"
2827                          "try \"git %s --continue\""),
2828                          action == REPLAY_REVERT ? "revert" : "cherry-pick");
2829         }
2830         return -1;
2831 }
2832
2833 static int save_todo(struct todo_list *todo_list, struct replay_opts *opts)
2834 {
2835         struct lock_file todo_lock = LOCK_INIT;
2836         const char *todo_path = get_todo_path(opts);
2837         int next = todo_list->current, offset, fd;
2838
2839         /*
2840          * rebase -i writes "git-rebase-todo" without the currently executing
2841          * command, appending it to "done" instead.
2842          */
2843         if (is_rebase_i(opts))
2844                 next++;
2845
2846         fd = hold_lock_file_for_update(&todo_lock, todo_path, 0);
2847         if (fd < 0)
2848                 return error_errno(_("could not lock '%s'"), todo_path);
2849         offset = get_item_line_offset(todo_list, next);
2850         if (write_in_full(fd, todo_list->buf.buf + offset,
2851                         todo_list->buf.len - offset) < 0)
2852                 return error_errno(_("could not write to '%s'"), todo_path);
2853         if (commit_lock_file(&todo_lock) < 0)
2854                 return error(_("failed to finalize '%s'"), todo_path);
2855
2856         if (is_rebase_i(opts) && next > 0) {
2857                 const char *done = rebase_path_done();
2858                 int fd = open(done, O_CREAT | O_WRONLY | O_APPEND, 0666);
2859                 int ret = 0;
2860
2861                 if (fd < 0)
2862                         return 0;
2863                 if (write_in_full(fd, get_item_line(todo_list, next - 1),
2864                                   get_item_line_length(todo_list, next - 1))
2865                     < 0)
2866                         ret = error_errno(_("could not write to '%s'"), done);
2867                 if (close(fd) < 0)
2868                         ret = error_errno(_("failed to finalize '%s'"), done);
2869                 return ret;
2870         }
2871         return 0;
2872 }
2873
2874 static int save_opts(struct replay_opts *opts)
2875 {
2876         const char *opts_file = git_path_opts_file();
2877         int res = 0;
2878
2879         if (opts->no_commit)
2880                 res |= git_config_set_in_file_gently(opts_file,
2881                                         "options.no-commit", "true");
2882         if (opts->edit)
2883                 res |= git_config_set_in_file_gently(opts_file,
2884                                         "options.edit", "true");
2885         if (opts->allow_empty)
2886                 res |= git_config_set_in_file_gently(opts_file,
2887                                         "options.allow-empty", "true");
2888         if (opts->allow_empty_message)
2889                 res |= git_config_set_in_file_gently(opts_file,
2890                                 "options.allow-empty-message", "true");
2891         if (opts->keep_redundant_commits)
2892                 res |= git_config_set_in_file_gently(opts_file,
2893                                 "options.keep-redundant-commits", "true");
2894         if (opts->signoff)
2895                 res |= git_config_set_in_file_gently(opts_file,
2896                                         "options.signoff", "true");
2897         if (opts->record_origin)
2898                 res |= git_config_set_in_file_gently(opts_file,
2899                                         "options.record-origin", "true");
2900         if (opts->allow_ff)
2901                 res |= git_config_set_in_file_gently(opts_file,
2902                                         "options.allow-ff", "true");
2903         if (opts->mainline) {
2904                 struct strbuf buf = STRBUF_INIT;
2905                 strbuf_addf(&buf, "%d", opts->mainline);
2906                 res |= git_config_set_in_file_gently(opts_file,
2907                                         "options.mainline", buf.buf);
2908                 strbuf_release(&buf);
2909         }
2910         if (opts->strategy)
2911                 res |= git_config_set_in_file_gently(opts_file,
2912                                         "options.strategy", opts->strategy);
2913         if (opts->gpg_sign)
2914                 res |= git_config_set_in_file_gently(opts_file,
2915                                         "options.gpg-sign", opts->gpg_sign);
2916         if (opts->xopts) {
2917                 int i;
2918                 for (i = 0; i < opts->xopts_nr; i++)
2919                         res |= git_config_set_multivar_in_file_gently(opts_file,
2920                                         "options.strategy-option",
2921                                         opts->xopts[i], "^$", 0);
2922         }
2923         if (opts->allow_rerere_auto)
2924                 res |= git_config_set_in_file_gently(opts_file,
2925                                 "options.allow-rerere-auto",
2926                                 opts->allow_rerere_auto == RERERE_AUTOUPDATE ?
2927                                 "true" : "false");
2928
2929         if (opts->explicit_cleanup)
2930                 res |= git_config_set_in_file_gently(opts_file,
2931                                 "options.default-msg-cleanup",
2932                                 describe_cleanup_mode(opts->default_msg_cleanup));
2933         return res;
2934 }
2935
2936 static int make_patch(struct repository *r,
2937                       struct commit *commit,
2938                       struct replay_opts *opts)
2939 {
2940         struct strbuf buf = STRBUF_INIT;
2941         struct rev_info log_tree_opt;
2942         const char *subject, *p;
2943         int res = 0;
2944
2945         p = short_commit_name(commit);
2946         if (write_message(p, strlen(p), rebase_path_stopped_sha(), 1) < 0)
2947                 return -1;
2948         if (update_ref("rebase", "REBASE_HEAD", &commit->object.oid,
2949                        NULL, REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
2950                 res |= error(_("could not update %s"), "REBASE_HEAD");
2951
2952         strbuf_addf(&buf, "%s/patch", get_dir(opts));
2953         memset(&log_tree_opt, 0, sizeof(log_tree_opt));
2954         repo_init_revisions(r, &log_tree_opt, NULL);
2955         log_tree_opt.abbrev = 0;
2956         log_tree_opt.diff = 1;
2957         log_tree_opt.diffopt.output_format = DIFF_FORMAT_PATCH;
2958         log_tree_opt.disable_stdin = 1;
2959         log_tree_opt.no_commit_id = 1;
2960         log_tree_opt.diffopt.file = fopen(buf.buf, "w");
2961         log_tree_opt.diffopt.use_color = GIT_COLOR_NEVER;
2962         if (!log_tree_opt.diffopt.file)
2963                 res |= error_errno(_("could not open '%s'"), buf.buf);
2964         else {
2965                 res |= log_tree_commit(&log_tree_opt, commit);
2966                 fclose(log_tree_opt.diffopt.file);
2967         }
2968         strbuf_reset(&buf);
2969
2970         strbuf_addf(&buf, "%s/message", get_dir(opts));
2971         if (!file_exists(buf.buf)) {
2972                 const char *commit_buffer = get_commit_buffer(commit, NULL);
2973                 find_commit_subject(commit_buffer, &subject);
2974                 res |= write_message(subject, strlen(subject), buf.buf, 1);
2975                 unuse_commit_buffer(commit, commit_buffer);
2976         }
2977         strbuf_release(&buf);
2978
2979         return res;
2980 }
2981
2982 static int intend_to_amend(void)
2983 {
2984         struct object_id head;
2985         char *p;
2986
2987         if (get_oid("HEAD", &head))
2988                 return error(_("cannot read HEAD"));
2989
2990         p = oid_to_hex(&head);
2991         return write_message(p, strlen(p), rebase_path_amend(), 1);
2992 }
2993
2994 static int error_with_patch(struct repository *r,
2995                             struct commit *commit,
2996                             const char *subject, int subject_len,
2997                             struct replay_opts *opts,
2998                             int exit_code, int to_amend)
2999 {
3000         if (commit) {
3001                 if (make_patch(r, commit, opts))
3002                         return -1;
3003         } else if (copy_file(rebase_path_message(),
3004                              git_path_merge_msg(r), 0666))
3005                 return error(_("unable to copy '%s' to '%s'"),
3006                              git_path_merge_msg(r), rebase_path_message());
3007
3008         if (to_amend) {
3009                 if (intend_to_amend())
3010                         return -1;
3011
3012                 fprintf(stderr,
3013                         _("You can amend the commit now, with\n"
3014                           "\n"
3015                           "  git commit --amend %s\n"
3016                           "\n"
3017                           "Once you are satisfied with your changes, run\n"
3018                           "\n"
3019                           "  git rebase --continue\n"),
3020                         gpg_sign_opt_quoted(opts));
3021         } else if (exit_code) {
3022                 if (commit)
3023                         fprintf_ln(stderr, _("Could not apply %s... %.*s"),
3024                                    short_commit_name(commit), subject_len, subject);
3025                 else
3026                         /*
3027                          * We don't have the hash of the parent so
3028                          * just print the line from the todo file.
3029                          */
3030                         fprintf_ln(stderr, _("Could not merge %.*s"),
3031                                    subject_len, subject);
3032         }
3033
3034         return exit_code;
3035 }
3036
3037 static int error_failed_squash(struct repository *r,
3038                                struct commit *commit,
3039                                struct replay_opts *opts,
3040                                int subject_len,
3041                                const char *subject)
3042 {
3043         if (copy_file(rebase_path_message(), rebase_path_squash_msg(), 0666))
3044                 return error(_("could not copy '%s' to '%s'"),
3045                         rebase_path_squash_msg(), rebase_path_message());
3046         unlink(git_path_merge_msg(r));
3047         if (copy_file(git_path_merge_msg(r), rebase_path_message(), 0666))
3048                 return error(_("could not copy '%s' to '%s'"),
3049                              rebase_path_message(),
3050                              git_path_merge_msg(r));
3051         return error_with_patch(r, commit, subject, subject_len, opts, 1, 0);
3052 }
3053
3054 static int do_exec(struct repository *r, const char *command_line)
3055 {
3056         struct argv_array child_env = ARGV_ARRAY_INIT;
3057         const char *child_argv[] = { NULL, NULL };
3058         int dirty, status;
3059
3060         fprintf(stderr, "Executing: %s\n", command_line);
3061         child_argv[0] = command_line;
3062         argv_array_pushf(&child_env, "GIT_DIR=%s", absolute_path(get_git_dir()));
3063         argv_array_pushf(&child_env, "GIT_WORK_TREE=%s",
3064                          absolute_path(get_git_work_tree()));
3065         status = run_command_v_opt_cd_env(child_argv, RUN_USING_SHELL, NULL,
3066                                           child_env.argv);
3067
3068         /* force re-reading of the cache */
3069         if (discard_index(r->index) < 0 || repo_read_index(r) < 0)
3070                 return error(_("could not read index"));
3071
3072         dirty = require_clean_work_tree(r, "rebase", NULL, 1, 1);
3073
3074         if (status) {
3075                 warning(_("execution failed: %s\n%s"
3076                           "You can fix the problem, and then run\n"
3077                           "\n"
3078                           "  git rebase --continue\n"
3079                           "\n"),
3080                         command_line,
3081                         dirty ? N_("and made changes to the index and/or the "
3082                                 "working tree\n") : "");
3083                 if (status == 127)
3084                         /* command not found */
3085                         status = 1;
3086         } else if (dirty) {
3087                 warning(_("execution succeeded: %s\nbut "
3088                           "left changes to the index and/or the working tree\n"
3089                           "Commit or stash your changes, and then run\n"
3090                           "\n"
3091                           "  git rebase --continue\n"
3092                           "\n"), command_line);
3093                 status = 1;
3094         }
3095
3096         argv_array_clear(&child_env);
3097
3098         return status;
3099 }
3100
3101 static int safe_append(const char *filename, const char *fmt, ...)
3102 {
3103         va_list ap;
3104         struct lock_file lock = LOCK_INIT;
3105         int fd = hold_lock_file_for_update(&lock, filename,
3106                                            LOCK_REPORT_ON_ERROR);
3107         struct strbuf buf = STRBUF_INIT;
3108
3109         if (fd < 0)
3110                 return -1;
3111
3112         if (strbuf_read_file(&buf, filename, 0) < 0 && errno != ENOENT) {
3113                 error_errno(_("could not read '%s'"), filename);
3114                 rollback_lock_file(&lock);
3115                 return -1;
3116         }
3117         strbuf_complete(&buf, '\n');
3118         va_start(ap, fmt);
3119         strbuf_vaddf(&buf, fmt, ap);
3120         va_end(ap);
3121
3122         if (write_in_full(fd, buf.buf, buf.len) < 0) {
3123                 error_errno(_("could not write to '%s'"), filename);
3124                 strbuf_release(&buf);
3125                 rollback_lock_file(&lock);
3126                 return -1;
3127         }
3128         if (commit_lock_file(&lock) < 0) {
3129                 strbuf_release(&buf);
3130                 rollback_lock_file(&lock);
3131                 return error(_("failed to finalize '%s'"), filename);
3132         }
3133
3134         strbuf_release(&buf);
3135         return 0;
3136 }
3137
3138 static int do_label(struct repository *r, const char *name, int len)
3139 {
3140         struct ref_store *refs = get_main_ref_store(r);
3141         struct ref_transaction *transaction;
3142         struct strbuf ref_name = STRBUF_INIT, err = STRBUF_INIT;
3143         struct strbuf msg = STRBUF_INIT;
3144         int ret = 0;
3145         struct object_id head_oid;
3146
3147         if (len == 1 && *name == '#')
3148                 return error(_("illegal label name: '%.*s'"), len, name);
3149
3150         strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
3151         strbuf_addf(&msg, "rebase -i (label) '%.*s'", len, name);
3152
3153         transaction = ref_store_transaction_begin(refs, &err);
3154         if (!transaction) {
3155                 error("%s", err.buf);
3156                 ret = -1;
3157         } else if (get_oid("HEAD", &head_oid)) {
3158                 error(_("could not read HEAD"));
3159                 ret = -1;
3160         } else if (ref_transaction_update(transaction, ref_name.buf, &head_oid,
3161                                           NULL, 0, msg.buf, &err) < 0 ||
3162                    ref_transaction_commit(transaction, &err)) {
3163                 error("%s", err.buf);
3164                 ret = -1;
3165         }
3166         ref_transaction_free(transaction);
3167         strbuf_release(&err);
3168         strbuf_release(&msg);
3169
3170         if (!ret)
3171                 ret = safe_append(rebase_path_refs_to_delete(),
3172                                   "%s\n", ref_name.buf);
3173         strbuf_release(&ref_name);
3174
3175         return ret;
3176 }
3177
3178 static const char *reflog_message(struct replay_opts *opts,
3179         const char *sub_action, const char *fmt, ...);
3180
3181 static int do_reset(struct repository *r,
3182                     const char *name, int len,
3183                     struct replay_opts *opts)
3184 {
3185         struct strbuf ref_name = STRBUF_INIT;
3186         struct object_id oid;
3187         struct lock_file lock = LOCK_INIT;
3188         struct tree_desc desc;
3189         struct tree *tree;
3190         struct unpack_trees_options unpack_tree_opts;
3191         int ret = 0;
3192
3193         if (repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0)
3194                 return -1;
3195
3196         if (len == 10 && !strncmp("[new root]", name, len)) {
3197                 if (!opts->have_squash_onto) {
3198                         const char *hex;
3199                         if (commit_tree("", 0, the_hash_algo->empty_tree,
3200                                         NULL, &opts->squash_onto,
3201                                         NULL, NULL))
3202                                 return error(_("writing fake root commit"));
3203                         opts->have_squash_onto = 1;
3204                         hex = oid_to_hex(&opts->squash_onto);
3205                         if (write_message(hex, strlen(hex),
3206                                           rebase_path_squash_onto(), 0))
3207                                 return error(_("writing squash-onto"));
3208                 }
3209                 oidcpy(&oid, &opts->squash_onto);
3210         } else {
3211                 int i;
3212
3213                 /* Determine the length of the label */
3214                 for (i = 0; i < len; i++)
3215                         if (isspace(name[i]))
3216                                 break;
3217                 len = i;
3218
3219                 strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
3220                 if (get_oid(ref_name.buf, &oid) &&
3221                     get_oid(ref_name.buf + strlen("refs/rewritten/"), &oid)) {
3222                         error(_("could not read '%s'"), ref_name.buf);
3223                         rollback_lock_file(&lock);
3224                         strbuf_release(&ref_name);
3225                         return -1;
3226                 }
3227         }
3228
3229         memset(&unpack_tree_opts, 0, sizeof(unpack_tree_opts));
3230         setup_unpack_trees_porcelain(&unpack_tree_opts, "reset");
3231         unpack_tree_opts.head_idx = 1;
3232         unpack_tree_opts.src_index = r->index;
3233         unpack_tree_opts.dst_index = r->index;
3234         unpack_tree_opts.fn = oneway_merge;
3235         unpack_tree_opts.merge = 1;
3236         unpack_tree_opts.update = 1;
3237
3238         if (repo_read_index_unmerged(r)) {
3239                 rollback_lock_file(&lock);
3240                 strbuf_release(&ref_name);
3241                 return error_resolve_conflict(_(action_name(opts)));
3242         }
3243
3244         if (!fill_tree_descriptor(r, &desc, &oid)) {
3245                 error(_("failed to find tree of %s"), oid_to_hex(&oid));
3246                 rollback_lock_file(&lock);
3247                 free((void *)desc.buffer);
3248                 strbuf_release(&ref_name);
3249                 return -1;
3250         }
3251
3252         if (unpack_trees(1, &desc, &unpack_tree_opts)) {
3253                 rollback_lock_file(&lock);
3254                 free((void *)desc.buffer);
3255                 strbuf_release(&ref_name);
3256                 return -1;
3257         }
3258
3259         tree = parse_tree_indirect(&oid);
3260         prime_cache_tree(r, r->index, tree);
3261
3262         if (write_locked_index(r->index, &lock, COMMIT_LOCK) < 0)
3263                 ret = error(_("could not write index"));
3264         free((void *)desc.buffer);
3265
3266         if (!ret)
3267                 ret = update_ref(reflog_message(opts, "reset", "'%.*s'",
3268                                                 len, name), "HEAD", &oid,
3269                                  NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3270
3271         strbuf_release(&ref_name);
3272         return ret;
3273 }
3274
3275 static struct commit *lookup_label(const char *label, int len,
3276                                    struct strbuf *buf)
3277 {
3278         struct commit *commit;
3279
3280         strbuf_reset(buf);
3281         strbuf_addf(buf, "refs/rewritten/%.*s", len, label);
3282         commit = lookup_commit_reference_by_name(buf->buf);
3283         if (!commit) {
3284                 /* fall back to non-rewritten ref or commit */
3285                 strbuf_splice(buf, 0, strlen("refs/rewritten/"), "", 0);
3286                 commit = lookup_commit_reference_by_name(buf->buf);
3287         }
3288
3289         if (!commit)
3290                 error(_("could not resolve '%s'"), buf->buf);
3291
3292         return commit;
3293 }
3294
3295 static int do_merge(struct repository *r,
3296                     struct commit *commit,
3297                     const char *arg, int arg_len,
3298                     int flags, struct replay_opts *opts)
3299 {
3300         int run_commit_flags = (flags & TODO_EDIT_MERGE_MSG) ?
3301                 EDIT_MSG | VERIFY_MSG : 0;
3302         struct strbuf ref_name = STRBUF_INIT;
3303         struct commit *head_commit, *merge_commit, *i;
3304         struct commit_list *bases, *j, *reversed = NULL;
3305         struct commit_list *to_merge = NULL, **tail = &to_merge;
3306         const char *strategy = !opts->xopts_nr &&
3307                 (!opts->strategy || !strcmp(opts->strategy, "recursive")) ?
3308                 NULL : opts->strategy;
3309         struct merge_options o;
3310         int merge_arg_len, oneline_offset, can_fast_forward, ret, k;
3311         static struct lock_file lock;
3312         const char *p;
3313
3314         if (repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0) {
3315                 ret = -1;
3316                 goto leave_merge;
3317         }
3318
3319         head_commit = lookup_commit_reference_by_name("HEAD");
3320         if (!head_commit) {
3321                 ret = error(_("cannot merge without a current revision"));
3322                 goto leave_merge;
3323         }
3324
3325         /*
3326          * For octopus merges, the arg starts with the list of revisions to be
3327          * merged. The list is optionally followed by '#' and the oneline.
3328          */
3329         merge_arg_len = oneline_offset = arg_len;
3330         for (p = arg; p - arg < arg_len; p += strspn(p, " \t\n")) {
3331                 if (!*p)
3332                         break;
3333                 if (*p == '#' && (!p[1] || isspace(p[1]))) {
3334                         p += 1 + strspn(p + 1, " \t\n");
3335                         oneline_offset = p - arg;
3336                         break;
3337                 }
3338                 k = strcspn(p, " \t\n");
3339                 if (!k)
3340                         continue;
3341                 merge_commit = lookup_label(p, k, &ref_name);
3342                 if (!merge_commit) {
3343                         ret = error(_("unable to parse '%.*s'"), k, p);
3344                         goto leave_merge;
3345                 }
3346                 tail = &commit_list_insert(merge_commit, tail)->next;
3347                 p += k;
3348                 merge_arg_len = p - arg;
3349         }
3350
3351         if (!to_merge) {
3352                 ret = error(_("nothing to merge: '%.*s'"), arg_len, arg);
3353                 goto leave_merge;
3354         }
3355
3356         if (opts->have_squash_onto &&
3357             oideq(&head_commit->object.oid, &opts->squash_onto)) {
3358                 /*
3359                  * When the user tells us to "merge" something into a
3360                  * "[new root]", let's simply fast-forward to the merge head.
3361                  */
3362                 rollback_lock_file(&lock);
3363                 if (to_merge->next)
3364                         ret = error(_("octopus merge cannot be executed on "
3365                                       "top of a [new root]"));
3366                 else
3367                         ret = fast_forward_to(r, &to_merge->item->object.oid,
3368                                               &head_commit->object.oid, 0,
3369                                               opts);
3370                 goto leave_merge;
3371         }
3372
3373         if (commit) {
3374                 const char *message = get_commit_buffer(commit, NULL);
3375                 const char *body;
3376                 int len;
3377
3378                 if (!message) {
3379                         ret = error(_("could not get commit message of '%s'"),
3380                                     oid_to_hex(&commit->object.oid));
3381                         goto leave_merge;
3382                 }
3383                 write_author_script(message);
3384                 find_commit_subject(message, &body);
3385                 len = strlen(body);
3386                 ret = write_message(body, len, git_path_merge_msg(r), 0);
3387                 unuse_commit_buffer(commit, message);
3388                 if (ret) {
3389                         error_errno(_("could not write '%s'"),
3390                                     git_path_merge_msg(r));
3391                         goto leave_merge;
3392                 }
3393         } else {
3394                 struct strbuf buf = STRBUF_INIT;
3395                 int len;
3396
3397                 strbuf_addf(&buf, "author %s", git_author_info(0));
3398                 write_author_script(buf.buf);
3399                 strbuf_reset(&buf);
3400
3401                 if (oneline_offset < arg_len) {
3402                         p = arg + oneline_offset;
3403                         len = arg_len - oneline_offset;
3404                 } else {
3405                         strbuf_addf(&buf, "Merge %s '%.*s'",
3406                                     to_merge->next ? "branches" : "branch",
3407                                     merge_arg_len, arg);
3408                         p = buf.buf;
3409                         len = buf.len;
3410                 }
3411
3412                 ret = write_message(p, len, git_path_merge_msg(r), 0);
3413                 strbuf_release(&buf);
3414                 if (ret) {
3415                         error_errno(_("could not write '%s'"),
3416                                     git_path_merge_msg(r));
3417                         goto leave_merge;
3418                 }
3419         }
3420
3421         /*
3422          * If HEAD is not identical to the first parent of the original merge
3423          * commit, we cannot fast-forward.
3424          */
3425         can_fast_forward = opts->allow_ff && commit && commit->parents &&
3426                 oideq(&commit->parents->item->object.oid,
3427                       &head_commit->object.oid);
3428
3429         /*
3430          * If any merge head is different from the original one, we cannot
3431          * fast-forward.
3432          */
3433         if (can_fast_forward) {
3434                 struct commit_list *p = commit->parents->next;
3435
3436                 for (j = to_merge; j && p; j = j->next, p = p->next)
3437                         if (!oideq(&j->item->object.oid,
3438                                    &p->item->object.oid)) {
3439                                 can_fast_forward = 0;
3440                                 break;
3441                         }
3442                 /*
3443                  * If the number of merge heads differs from the original merge
3444                  * commit, we cannot fast-forward.
3445                  */
3446                 if (j || p)
3447                         can_fast_forward = 0;
3448         }
3449
3450         if (can_fast_forward) {
3451                 rollback_lock_file(&lock);
3452                 ret = fast_forward_to(r, &commit->object.oid,
3453                                       &head_commit->object.oid, 0, opts);
3454                 if (flags & TODO_EDIT_MERGE_MSG) {
3455                         run_commit_flags |= AMEND_MSG;
3456                         goto fast_forward_edit;
3457                 }
3458                 goto leave_merge;
3459         }
3460
3461         if (strategy || to_merge->next) {
3462                 /* Octopus merge */
3463                 struct child_process cmd = CHILD_PROCESS_INIT;
3464
3465                 if (read_env_script(&cmd.env_array)) {
3466                         const char *gpg_opt = gpg_sign_opt_quoted(opts);
3467
3468                         ret = error(_(staged_changes_advice), gpg_opt, gpg_opt);
3469                         goto leave_merge;
3470                 }
3471
3472                 cmd.git_cmd = 1;
3473                 argv_array_push(&cmd.args, "merge");
3474                 argv_array_push(&cmd.args, "-s");
3475                 if (!strategy)
3476                         argv_array_push(&cmd.args, "octopus");
3477                 else {
3478                         argv_array_push(&cmd.args, strategy);
3479                         for (k = 0; k < opts->xopts_nr; k++)
3480                                 argv_array_pushf(&cmd.args,
3481                                                  "-X%s", opts->xopts[k]);
3482                 }
3483                 argv_array_push(&cmd.args, "--no-edit");
3484                 argv_array_push(&cmd.args, "--no-ff");
3485                 argv_array_push(&cmd.args, "--no-log");
3486                 argv_array_push(&cmd.args, "--no-stat");
3487                 argv_array_push(&cmd.args, "-F");
3488                 argv_array_push(&cmd.args, git_path_merge_msg(r));
3489                 if (opts->gpg_sign)
3490                         argv_array_push(&cmd.args, opts->gpg_sign);
3491
3492                 /* Add the tips to be merged */
3493                 for (j = to_merge; j; j = j->next)
3494                         argv_array_push(&cmd.args,
3495                                         oid_to_hex(&j->item->object.oid));
3496
3497                 strbuf_release(&ref_name);
3498                 unlink(git_path_cherry_pick_head(r));
3499                 rollback_lock_file(&lock);
3500
3501                 rollback_lock_file(&lock);
3502                 ret = run_command(&cmd);
3503
3504                 /* force re-reading of the cache */
3505                 if (!ret && (discard_index(r->index) < 0 ||
3506                              repo_read_index(r) < 0))
3507                         ret = error(_("could not read index"));
3508                 goto leave_merge;
3509         }
3510
3511         merge_commit = to_merge->item;
3512         bases = get_merge_bases(head_commit, merge_commit);
3513         if (bases && oideq(&merge_commit->object.oid,
3514                            &bases->item->object.oid)) {
3515                 ret = 0;
3516                 /* skip merging an ancestor of HEAD */
3517                 goto leave_merge;
3518         }
3519
3520         write_message(oid_to_hex(&merge_commit->object.oid), the_hash_algo->hexsz,
3521                       git_path_merge_head(r), 0);
3522         write_message("no-ff", 5, git_path_merge_mode(r), 0);
3523
3524         for (j = bases; j; j = j->next)
3525                 commit_list_insert(j->item, &reversed);
3526         free_commit_list(bases);
3527
3528         repo_read_index(r);
3529         init_merge_options(&o, r);
3530         o.branch1 = "HEAD";
3531         o.branch2 = ref_name.buf;
3532         o.buffer_output = 2;
3533
3534         ret = merge_recursive(&o, head_commit, merge_commit, reversed, &i);
3535         if (ret <= 0)
3536                 fputs(o.obuf.buf, stdout);
3537         strbuf_release(&o.obuf);
3538         if (ret < 0) {
3539                 error(_("could not even attempt to merge '%.*s'"),
3540                       merge_arg_len, arg);
3541                 goto leave_merge;
3542         }
3543         /*
3544          * The return value of merge_recursive() is 1 on clean, and 0 on
3545          * unclean merge.
3546          *
3547          * Let's reverse that, so that do_merge() returns 0 upon success and
3548          * 1 upon failed merge (keeping the return value -1 for the cases where
3549          * we will want to reschedule the `merge` command).
3550          */
3551         ret = !ret;
3552
3553         if (r->index->cache_changed &&
3554             write_locked_index(r->index, &lock, COMMIT_LOCK)) {
3555                 ret = error(_("merge: Unable to write new index file"));
3556                 goto leave_merge;
3557         }
3558
3559         rollback_lock_file(&lock);
3560         if (ret)
3561                 repo_rerere(r, opts->allow_rerere_auto);
3562         else
3563                 /*
3564                  * In case of problems, we now want to return a positive
3565                  * value (a negative one would indicate that the `merge`
3566                  * command needs to be rescheduled).
3567                  */
3568         fast_forward_edit:
3569                 ret = !!run_git_commit(r, git_path_merge_msg(r), opts,
3570                                        run_commit_flags);
3571
3572 leave_merge:
3573         strbuf_release(&ref_name);
3574         rollback_lock_file(&lock);
3575         free_commit_list(to_merge);
3576         return ret;
3577 }
3578
3579 static int is_final_fixup(struct todo_list *todo_list)
3580 {
3581         int i = todo_list->current;
3582
3583         if (!is_fixup(todo_list->items[i].command))
3584                 return 0;
3585
3586         while (++i < todo_list->nr)
3587                 if (is_fixup(todo_list->items[i].command))
3588                         return 0;
3589                 else if (!is_noop(todo_list->items[i].command))
3590                         break;
3591         return 1;
3592 }
3593
3594 static enum todo_command peek_command(struct todo_list *todo_list, int offset)
3595 {
3596         int i;
3597
3598         for (i = todo_list->current + offset; i < todo_list->nr; i++)
3599                 if (!is_noop(todo_list->items[i].command))
3600                         return todo_list->items[i].command;
3601
3602         return -1;
3603 }
3604
3605 static int apply_autostash(struct replay_opts *opts)
3606 {
3607         struct strbuf stash_sha1 = STRBUF_INIT;
3608         struct child_process child = CHILD_PROCESS_INIT;
3609         int ret = 0;
3610
3611         if (!read_oneliner(&stash_sha1, rebase_path_autostash(), 1)) {
3612                 strbuf_release(&stash_sha1);
3613                 return 0;
3614         }
3615         strbuf_trim(&stash_sha1);
3616
3617         child.git_cmd = 1;
3618         child.no_stdout = 1;
3619         child.no_stderr = 1;
3620         argv_array_push(&child.args, "stash");
3621         argv_array_push(&child.args, "apply");
3622         argv_array_push(&child.args, stash_sha1.buf);
3623         if (!run_command(&child))
3624                 fprintf(stderr, _("Applied autostash.\n"));
3625         else {
3626                 struct child_process store = CHILD_PROCESS_INIT;
3627
3628                 store.git_cmd = 1;
3629                 argv_array_push(&store.args, "stash");
3630                 argv_array_push(&store.args, "store");
3631                 argv_array_push(&store.args, "-m");
3632                 argv_array_push(&store.args, "autostash");
3633                 argv_array_push(&store.args, "-q");
3634                 argv_array_push(&store.args, stash_sha1.buf);
3635                 if (run_command(&store))
3636                         ret = error(_("cannot store %s"), stash_sha1.buf);
3637                 else
3638                         fprintf(stderr,
3639                                 _("Applying autostash resulted in conflicts.\n"
3640                                   "Your changes are safe in the stash.\n"
3641                                   "You can run \"git stash pop\" or"
3642                                   " \"git stash drop\" at any time.\n"));
3643         }
3644
3645         strbuf_release(&stash_sha1);
3646         return ret;
3647 }
3648
3649 static const char *reflog_message(struct replay_opts *opts,
3650         const char *sub_action, const char *fmt, ...)
3651 {
3652         va_list ap;
3653         static struct strbuf buf = STRBUF_INIT;
3654
3655         va_start(ap, fmt);
3656         strbuf_reset(&buf);
3657         strbuf_addstr(&buf, action_name(opts));
3658         if (sub_action)
3659                 strbuf_addf(&buf, " (%s)", sub_action);
3660         if (fmt) {
3661                 strbuf_addstr(&buf, ": ");
3662                 strbuf_vaddf(&buf, fmt, ap);
3663         }
3664         va_end(ap);
3665
3666         return buf.buf;
3667 }
3668
3669 static int run_git_checkout(struct repository *r, struct replay_opts *opts,
3670                             const char *commit, const char *action)
3671 {
3672         struct child_process cmd = CHILD_PROCESS_INIT;
3673         int ret;
3674
3675         cmd.git_cmd = 1;
3676
3677         argv_array_push(&cmd.args, "checkout");
3678         argv_array_push(&cmd.args, commit);
3679         argv_array_pushf(&cmd.env_array, GIT_REFLOG_ACTION "=%s", action);
3680
3681         if (opts->verbose)
3682                 ret = run_command(&cmd);
3683         else
3684                 ret = run_command_silent_on_success(&cmd);
3685
3686         if (!ret)
3687                 discard_index(r->index);
3688
3689         return ret;
3690 }
3691
3692 int prepare_branch_to_be_rebased(struct repository *r, struct replay_opts *opts,
3693                                  const char *commit)
3694 {
3695         const char *action;
3696
3697         if (commit && *commit) {
3698                 action = reflog_message(opts, "start", "checkout %s", commit);
3699                 if (run_git_checkout(r, opts, commit, action))
3700                         return error(_("could not checkout %s"), commit);
3701         }
3702
3703         return 0;
3704 }
3705
3706 static int checkout_onto(struct repository *r, struct replay_opts *opts,
3707                          const char *onto_name, const struct object_id *onto,
3708                          const char *orig_head)
3709 {
3710         struct object_id oid;
3711         const char *action = reflog_message(opts, "start", "checkout %s", onto_name);
3712
3713         if (get_oid(orig_head, &oid))
3714                 return error(_("%s: not a valid OID"), orig_head);
3715
3716         if (run_git_checkout(r, opts, oid_to_hex(onto), action)) {
3717                 apply_autostash(opts);
3718                 sequencer_remove_state(opts);
3719                 return error(_("could not detach HEAD"));
3720         }
3721
3722         return update_ref(NULL, "ORIG_HEAD", &oid, NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3723 }
3724
3725 static int stopped_at_head(struct repository *r)
3726 {
3727         struct object_id head;
3728         struct commit *commit;
3729         struct commit_message message;
3730
3731         if (get_oid("HEAD", &head) ||
3732             !(commit = lookup_commit(r, &head)) ||
3733             parse_commit(commit) || get_message(commit, &message))
3734                 fprintf(stderr, _("Stopped at HEAD\n"));
3735         else {
3736                 fprintf(stderr, _("Stopped at %s\n"), message.label);
3737                 free_message(commit, &message);
3738         }
3739         return 0;
3740
3741 }
3742
3743 static const char rescheduled_advice[] =
3744 N_("Could not execute the todo command\n"
3745 "\n"
3746 "    %.*s"
3747 "\n"
3748 "It has been rescheduled; To edit the command before continuing, please\n"
3749 "edit the todo list first:\n"
3750 "\n"
3751 "    git rebase --edit-todo\n"
3752 "    git rebase --continue\n");
3753
3754 static int pick_commits(struct repository *r,
3755                         struct todo_list *todo_list,
3756                         struct replay_opts *opts)
3757 {
3758         int res = 0, reschedule = 0;
3759
3760         setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
3761         if (opts->allow_ff)
3762                 assert(!(opts->signoff || opts->no_commit ||
3763                                 opts->record_origin || opts->edit));
3764         if (read_and_refresh_cache(r, opts))
3765                 return -1;
3766
3767         while (todo_list->current < todo_list->nr) {
3768                 struct todo_item *item = todo_list->items + todo_list->current;
3769                 const char *arg = todo_item_get_arg(todo_list, item);
3770                 int check_todo = 0;
3771
3772                 if (save_todo(todo_list, opts))
3773                         return -1;
3774                 if (is_rebase_i(opts)) {
3775                         if (item->command != TODO_COMMENT) {
3776                                 FILE *f = fopen(rebase_path_msgnum(), "w");
3777
3778                                 todo_list->done_nr++;
3779
3780                                 if (f) {
3781                                         fprintf(f, "%d\n", todo_list->done_nr);
3782                                         fclose(f);
3783                                 }
3784                                 if (!opts->quiet)
3785                                         fprintf(stderr, "Rebasing (%d/%d)%s",
3786                                                 todo_list->done_nr,
3787                                                 todo_list->total_nr,
3788                                                 opts->verbose ? "\n" : "\r");
3789                         }
3790                         unlink(rebase_path_message());
3791                         unlink(rebase_path_author_script());
3792                         unlink(rebase_path_stopped_sha());
3793                         unlink(rebase_path_amend());
3794                         unlink(git_path_merge_head(r));
3795                         delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
3796
3797                         if (item->command == TODO_BREAK) {
3798                                 if (!opts->verbose)
3799                                         term_clear_line();
3800                                 return stopped_at_head(r);
3801                         }
3802                 }
3803                 if (item->command <= TODO_SQUASH) {
3804                         if (is_rebase_i(opts))
3805                                 setenv("GIT_REFLOG_ACTION", reflog_message(opts,
3806                                         command_to_string(item->command), NULL),
3807                                         1);
3808                         res = do_pick_commit(r, item->command, item->commit,
3809                                              opts, is_final_fixup(todo_list),
3810                                              &check_todo);
3811                         if (is_rebase_i(opts) && res < 0) {
3812                                 /* Reschedule */
3813                                 advise(_(rescheduled_advice),
3814                                        get_item_line_length(todo_list,
3815                                                             todo_list->current),
3816                                        get_item_line(todo_list,
3817                                                      todo_list->current));
3818                                 todo_list->current--;
3819                                 if (save_todo(todo_list, opts))
3820                                         return -1;
3821                         }
3822                         if (item->command == TODO_EDIT) {
3823                                 struct commit *commit = item->commit;
3824                                 if (!res) {
3825                                         if (!opts->verbose)
3826                                                 term_clear_line();
3827                                         fprintf(stderr,
3828                                                 _("Stopped at %s...  %.*s\n"),
3829                                                 short_commit_name(commit),
3830                                                 item->arg_len, arg);
3831                                 }
3832                                 return error_with_patch(r, commit,
3833                                         arg, item->arg_len, opts, res, !res);
3834                         }
3835                         if (is_rebase_i(opts) && !res)
3836                                 record_in_rewritten(&item->commit->object.oid,
3837                                         peek_command(todo_list, 1));
3838                         if (res && is_fixup(item->command)) {
3839                                 if (res == 1)
3840                                         intend_to_amend();
3841                                 return error_failed_squash(r, item->commit, opts,
3842                                         item->arg_len, arg);
3843                         } else if (res && is_rebase_i(opts) && item->commit) {
3844                                 int to_amend = 0;
3845                                 struct object_id oid;
3846
3847                                 /*
3848                                  * If we are rewording and have either
3849                                  * fast-forwarded already, or are about to
3850                                  * create a new root commit, we want to amend,
3851                                  * otherwise we do not.
3852                                  */
3853                                 if (item->command == TODO_REWORD &&
3854                                     !get_oid("HEAD", &oid) &&
3855                                     (oideq(&item->commit->object.oid, &oid) ||
3856                                      (opts->have_squash_onto &&
3857                                       oideq(&opts->squash_onto, &oid))))
3858                                         to_amend = 1;
3859
3860                                 return res | error_with_patch(r, item->commit,
3861                                                 arg, item->arg_len, opts,
3862                                                 res, to_amend);
3863                         }
3864                 } else if (item->command == TODO_EXEC) {
3865                         char *end_of_arg = (char *)(arg + item->arg_len);
3866                         int saved = *end_of_arg;
3867
3868                         if (!opts->verbose)
3869                                 term_clear_line();
3870                         *end_of_arg = '\0';
3871                         res = do_exec(r, arg);
3872                         *end_of_arg = saved;
3873
3874                         if (res) {
3875                                 if (opts->reschedule_failed_exec)
3876                                         reschedule = 1;
3877                         }
3878                         check_todo = 1;
3879                 } else if (item->command == TODO_LABEL) {
3880                         if ((res = do_label(r, arg, item->arg_len)))
3881                                 reschedule = 1;
3882                 } else if (item->command == TODO_RESET) {
3883                         if ((res = do_reset(r, arg, item->arg_len, opts)))
3884                                 reschedule = 1;
3885                 } else if (item->command == TODO_MERGE) {
3886                         if ((res = do_merge(r, item->commit,
3887                                             arg, item->arg_len,
3888                                             item->flags, opts)) < 0)
3889                                 reschedule = 1;
3890                         else if (item->commit)
3891                                 record_in_rewritten(&item->commit->object.oid,
3892                                                     peek_command(todo_list, 1));
3893                         if (res > 0)
3894                                 /* failed with merge conflicts */
3895                                 return error_with_patch(r, item->commit,
3896                                                         arg, item->arg_len,
3897                                                         opts, res, 0);
3898                 } else if (!is_noop(item->command))
3899                         return error(_("unknown command %d"), item->command);
3900
3901                 if (reschedule) {
3902                         advise(_(rescheduled_advice),
3903                                get_item_line_length(todo_list,
3904                                                     todo_list->current),
3905                                get_item_line(todo_list, todo_list->current));
3906                         todo_list->current--;
3907                         if (save_todo(todo_list, opts))
3908                                 return -1;
3909                         if (item->commit)
3910                                 return error_with_patch(r,
3911                                                         item->commit,
3912                                                         arg, item->arg_len,
3913                                                         opts, res, 0);
3914                 } else if (check_todo && !res) {
3915                         struct stat st;
3916
3917                         if (stat(get_todo_path(opts), &st)) {
3918                                 res = error_errno(_("could not stat '%s'"),
3919                                                   get_todo_path(opts));
3920                         } else if (match_stat_data(&todo_list->stat, &st)) {
3921                                 /* Reread the todo file if it has changed. */
3922                                 todo_list_release(todo_list);
3923                                 if (read_populate_todo(r, todo_list, opts))
3924                                         res = -1; /* message was printed */
3925                                 /* `current` will be incremented below */
3926                                 todo_list->current = -1;
3927                         }
3928                 }
3929
3930                 todo_list->current++;
3931                 if (res)
3932                         return res;
3933         }
3934
3935         if (is_rebase_i(opts)) {
3936                 struct strbuf head_ref = STRBUF_INIT, buf = STRBUF_INIT;
3937                 struct stat st;
3938
3939                 /* Stopped in the middle, as planned? */
3940                 if (todo_list->current < todo_list->nr)
3941                         return 0;
3942
3943                 if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
3944                                 starts_with(head_ref.buf, "refs/")) {
3945                         const char *msg;
3946                         struct object_id head, orig;
3947                         int res;
3948
3949                         if (get_oid("HEAD", &head)) {
3950                                 res = error(_("cannot read HEAD"));
3951 cleanup_head_ref:
3952                                 strbuf_release(&head_ref);
3953                                 strbuf_release(&buf);
3954                                 return res;
3955                         }
3956                         if (!read_oneliner(&buf, rebase_path_orig_head(), 0) ||
3957                                         get_oid_hex(buf.buf, &orig)) {
3958                                 res = error(_("could not read orig-head"));
3959                                 goto cleanup_head_ref;
3960                         }
3961                         strbuf_reset(&buf);
3962                         if (!read_oneliner(&buf, rebase_path_onto(), 0)) {
3963                                 res = error(_("could not read 'onto'"));
3964                                 goto cleanup_head_ref;
3965                         }
3966                         msg = reflog_message(opts, "finish", "%s onto %s",
3967                                 head_ref.buf, buf.buf);
3968                         if (update_ref(msg, head_ref.buf, &head, &orig,
3969                                        REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR)) {
3970                                 res = error(_("could not update %s"),
3971                                         head_ref.buf);
3972                                 goto cleanup_head_ref;
3973                         }
3974                         msg = reflog_message(opts, "finish", "returning to %s",
3975                                 head_ref.buf);
3976                         if (create_symref("HEAD", head_ref.buf, msg)) {
3977                                 res = error(_("could not update HEAD to %s"),
3978                                         head_ref.buf);
3979                                 goto cleanup_head_ref;
3980                         }
3981                         strbuf_reset(&buf);
3982                 }
3983
3984                 if (opts->verbose) {
3985                         struct rev_info log_tree_opt;
3986                         struct object_id orig, head;
3987
3988                         memset(&log_tree_opt, 0, sizeof(log_tree_opt));
3989                         repo_init_revisions(r, &log_tree_opt, NULL);
3990                         log_tree_opt.diff = 1;
3991                         log_tree_opt.diffopt.output_format =
3992                                 DIFF_FORMAT_DIFFSTAT;
3993                         log_tree_opt.disable_stdin = 1;
3994
3995                         if (read_oneliner(&buf, rebase_path_orig_head(), 0) &&
3996                             !get_oid(buf.buf, &orig) &&
3997                             !get_oid("HEAD", &head)) {
3998                                 diff_tree_oid(&orig, &head, "",
3999                                               &log_tree_opt.diffopt);
4000                                 log_tree_diff_flush(&log_tree_opt);
4001                         }
4002                 }
4003                 flush_rewritten_pending();
4004                 if (!stat(rebase_path_rewritten_list(), &st) &&
4005                                 st.st_size > 0) {
4006                         struct child_process child = CHILD_PROCESS_INIT;
4007                         const char *post_rewrite_hook =
4008                                 find_hook("post-rewrite");
4009
4010                         child.in = open(rebase_path_rewritten_list(), O_RDONLY);
4011                         child.git_cmd = 1;
4012                         argv_array_push(&child.args, "notes");
4013                         argv_array_push(&child.args, "copy");
4014                         argv_array_push(&child.args, "--for-rewrite=rebase");
4015                         /* we don't care if this copying failed */
4016                         run_command(&child);
4017
4018                         if (post_rewrite_hook) {
4019                                 struct child_process hook = CHILD_PROCESS_INIT;
4020
4021                                 hook.in = open(rebase_path_rewritten_list(),
4022                                         O_RDONLY);
4023                                 hook.stdout_to_stderr = 1;
4024                                 hook.trace2_hook_name = "post-rewrite";
4025                                 argv_array_push(&hook.args, post_rewrite_hook);
4026                                 argv_array_push(&hook.args, "rebase");
4027                                 /* we don't care if this hook failed */
4028                                 run_command(&hook);
4029                         }
4030                 }
4031                 apply_autostash(opts);
4032
4033                 if (!opts->quiet) {
4034                         if (!opts->verbose)
4035                                 term_clear_line();
4036                         fprintf(stderr,
4037                                 "Successfully rebased and updated %s.\n",
4038                                 head_ref.buf);
4039                 }
4040
4041                 strbuf_release(&buf);
4042                 strbuf_release(&head_ref);
4043         }
4044
4045         /*
4046          * Sequence of picks finished successfully; cleanup by
4047          * removing the .git/sequencer directory
4048          */
4049         return sequencer_remove_state(opts);
4050 }
4051
4052 static int continue_single_pick(struct repository *r)
4053 {
4054         const char *argv[] = { "commit", NULL };
4055
4056         if (!file_exists(git_path_cherry_pick_head(r)) &&
4057             !file_exists(git_path_revert_head(r)))
4058                 return error(_("no cherry-pick or revert in progress"));
4059         return run_command_v_opt(argv, RUN_GIT_CMD);
4060 }
4061
4062 static int commit_staged_changes(struct repository *r,
4063                                  struct replay_opts *opts,
4064                                  struct todo_list *todo_list)
4065 {
4066         unsigned int flags = ALLOW_EMPTY | EDIT_MSG;
4067         unsigned int final_fixup = 0, is_clean;
4068
4069         if (has_unstaged_changes(r, 1))
4070                 return error(_("cannot rebase: You have unstaged changes."));
4071
4072         is_clean = !has_uncommitted_changes(r, 0);
4073
4074         if (file_exists(rebase_path_amend())) {
4075                 struct strbuf rev = STRBUF_INIT;
4076                 struct object_id head, to_amend;
4077
4078                 if (get_oid("HEAD", &head))
4079                         return error(_("cannot amend non-existing commit"));
4080                 if (!read_oneliner(&rev, rebase_path_amend(), 0))
4081                         return error(_("invalid file: '%s'"), rebase_path_amend());
4082                 if (get_oid_hex(rev.buf, &to_amend))
4083                         return error(_("invalid contents: '%s'"),
4084                                 rebase_path_amend());
4085                 if (!is_clean && !oideq(&head, &to_amend))
4086                         return error(_("\nYou have uncommitted changes in your "
4087                                        "working tree. Please, commit them\n"
4088                                        "first and then run 'git rebase "
4089                                        "--continue' again."));
4090                 /*
4091                  * When skipping a failed fixup/squash, we need to edit the
4092                  * commit message, the current fixup list and count, and if it
4093                  * was the last fixup/squash in the chain, we need to clean up
4094                  * the commit message and if there was a squash, let the user
4095                  * edit it.
4096                  */
4097                 if (!is_clean || !opts->current_fixup_count)
4098                         ; /* this is not the final fixup */
4099                 else if (!oideq(&head, &to_amend) ||
4100                          !file_exists(rebase_path_stopped_sha())) {
4101                         /* was a final fixup or squash done manually? */
4102                         if (!is_fixup(peek_command(todo_list, 0))) {
4103                                 unlink(rebase_path_fixup_msg());
4104                                 unlink(rebase_path_squash_msg());
4105                                 unlink(rebase_path_current_fixups());
4106                                 strbuf_reset(&opts->current_fixups);
4107                                 opts->current_fixup_count = 0;
4108                         }
4109                 } else {
4110                         /* we are in a fixup/squash chain */
4111                         const char *p = opts->current_fixups.buf;
4112                         int len = opts->current_fixups.len;
4113
4114                         opts->current_fixup_count--;
4115                         if (!len)
4116                                 BUG("Incorrect current_fixups:\n%s", p);
4117                         while (len && p[len - 1] != '\n')
4118                                 len--;
4119                         strbuf_setlen(&opts->current_fixups, len);
4120                         if (write_message(p, len, rebase_path_current_fixups(),
4121                                           0) < 0)
4122                                 return error(_("could not write file: '%s'"),
4123                                              rebase_path_current_fixups());
4124
4125                         /*
4126                          * If a fixup/squash in a fixup/squash chain failed, the
4127                          * commit message is already correct, no need to commit
4128                          * it again.
4129                          *
4130                          * Only if it is the final command in the fixup/squash
4131                          * chain, and only if the chain is longer than a single
4132                          * fixup/squash command (which was just skipped), do we
4133                          * actually need to re-commit with a cleaned up commit
4134                          * message.
4135                          */
4136                         if (opts->current_fixup_count > 0 &&
4137                             !is_fixup(peek_command(todo_list, 0))) {
4138                                 final_fixup = 1;
4139                                 /*
4140                                  * If there was not a single "squash" in the
4141                                  * chain, we only need to clean up the commit
4142                                  * message, no need to bother the user with
4143                                  * opening the commit message in the editor.
4144                                  */
4145                                 if (!starts_with(p, "squash ") &&
4146                                     !strstr(p, "\nsquash "))
4147                                         flags = (flags & ~EDIT_MSG) | CLEANUP_MSG;
4148                         } else if (is_fixup(peek_command(todo_list, 0))) {
4149                                 /*
4150                                  * We need to update the squash message to skip
4151                                  * the latest commit message.
4152                                  */
4153                                 struct commit *commit;
4154                                 const char *path = rebase_path_squash_msg();
4155
4156                                 if (parse_head(r, &commit) ||
4157                                     !(p = get_commit_buffer(commit, NULL)) ||
4158                                     write_message(p, strlen(p), path, 0)) {
4159                                         unuse_commit_buffer(commit, p);
4160                                         return error(_("could not write file: "
4161                                                        "'%s'"), path);
4162                                 }
4163                                 unuse_commit_buffer(commit, p);
4164                         }
4165                 }
4166
4167                 strbuf_release(&rev);
4168                 flags |= AMEND_MSG;
4169         }
4170
4171         if (is_clean) {
4172                 const char *cherry_pick_head = git_path_cherry_pick_head(r);
4173
4174                 if (file_exists(cherry_pick_head) && unlink(cherry_pick_head))
4175                         return error(_("could not remove CHERRY_PICK_HEAD"));
4176                 if (!final_fixup)
4177                         return 0;
4178         }
4179
4180         if (run_git_commit(r, final_fixup ? NULL : rebase_path_message(),
4181                            opts, flags))
4182                 return error(_("could not commit staged changes."));
4183         unlink(rebase_path_amend());
4184         unlink(git_path_merge_head(r));
4185         if (final_fixup) {
4186                 unlink(rebase_path_fixup_msg());
4187                 unlink(rebase_path_squash_msg());
4188         }
4189         if (opts->current_fixup_count > 0) {
4190                 /*
4191                  * Whether final fixup or not, we just cleaned up the commit
4192                  * message...
4193                  */
4194                 unlink(rebase_path_current_fixups());
4195                 strbuf_reset(&opts->current_fixups);
4196                 opts->current_fixup_count = 0;
4197         }
4198         return 0;
4199 }
4200
4201 int sequencer_continue(struct repository *r, struct replay_opts *opts)
4202 {
4203         struct todo_list todo_list = TODO_LIST_INIT;
4204         int res;
4205
4206         if (read_and_refresh_cache(r, opts))
4207                 return -1;
4208
4209         if (read_populate_opts(opts))
4210                 return -1;
4211         if (is_rebase_i(opts)) {
4212                 if ((res = read_populate_todo(r, &todo_list, opts)))
4213                         goto release_todo_list;
4214                 if (commit_staged_changes(r, opts, &todo_list))
4215                         return -1;
4216         } else if (!file_exists(get_todo_path(opts)))
4217                 return continue_single_pick(r);
4218         else if ((res = read_populate_todo(r, &todo_list, opts)))
4219                 goto release_todo_list;
4220
4221         if (!is_rebase_i(opts)) {
4222                 /* Verify that the conflict has been resolved */
4223                 if (file_exists(git_path_cherry_pick_head(r)) ||
4224                     file_exists(git_path_revert_head(r))) {
4225                         res = continue_single_pick(r);
4226                         if (res)
4227                                 goto release_todo_list;
4228                 }
4229                 if (index_differs_from(r, "HEAD", NULL, 0)) {
4230                         res = error_dirty_index(r, opts);
4231                         goto release_todo_list;
4232                 }
4233                 todo_list.current++;
4234         } else if (file_exists(rebase_path_stopped_sha())) {
4235                 struct strbuf buf = STRBUF_INIT;
4236                 struct object_id oid;
4237
4238                 if (read_oneliner(&buf, rebase_path_stopped_sha(), 1) &&
4239                     !get_oid_committish(buf.buf, &oid))
4240                         record_in_rewritten(&oid, peek_command(&todo_list, 0));
4241                 strbuf_release(&buf);
4242         }
4243
4244         res = pick_commits(r, &todo_list, opts);
4245 release_todo_list:
4246         todo_list_release(&todo_list);
4247         return res;
4248 }
4249
4250 static int single_pick(struct repository *r,
4251                        struct commit *cmit,
4252                        struct replay_opts *opts)
4253 {
4254         int check_todo;
4255
4256         setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
4257         return do_pick_commit(r, opts->action == REPLAY_PICK ?
4258                               TODO_PICK : TODO_REVERT, cmit, opts, 0,
4259                               &check_todo);
4260 }
4261
4262 int sequencer_pick_revisions(struct repository *r,
4263                              struct replay_opts *opts)
4264 {
4265         struct todo_list todo_list = TODO_LIST_INIT;
4266         struct object_id oid;
4267         int i, res;
4268
4269         assert(opts->revs);
4270         if (read_and_refresh_cache(r, opts))
4271                 return -1;
4272
4273         for (i = 0; i < opts->revs->pending.nr; i++) {
4274                 struct object_id oid;
4275                 const char *name = opts->revs->pending.objects[i].name;
4276
4277                 /* This happens when using --stdin. */
4278                 if (!strlen(name))
4279                         continue;
4280
4281                 if (!get_oid(name, &oid)) {
4282                         if (!lookup_commit_reference_gently(r, &oid, 1)) {
4283                                 enum object_type type = oid_object_info(r,
4284                                                                         &oid,
4285                                                                         NULL);
4286                                 return error(_("%s: can't cherry-pick a %s"),
4287                                         name, type_name(type));
4288                         }
4289                 } else
4290                         return error(_("%s: bad revision"), name);
4291         }
4292
4293         /*
4294          * If we were called as "git cherry-pick <commit>", just
4295          * cherry-pick/revert it, set CHERRY_PICK_HEAD /
4296          * REVERT_HEAD, and don't touch the sequencer state.
4297          * This means it is possible to cherry-pick in the middle
4298          * of a cherry-pick sequence.
4299          */
4300         if (opts->revs->cmdline.nr == 1 &&
4301             opts->revs->cmdline.rev->whence == REV_CMD_REV &&
4302             opts->revs->no_walk &&
4303             !opts->revs->cmdline.rev->flags) {
4304                 struct commit *cmit;
4305                 if (prepare_revision_walk(opts->revs))
4306                         return error(_("revision walk setup failed"));
4307                 cmit = get_revision(opts->revs);
4308                 if (!cmit)
4309                         return error(_("empty commit set passed"));
4310                 if (get_revision(opts->revs))
4311                         BUG("unexpected extra commit from walk");
4312                 return single_pick(r, cmit, opts);
4313         }
4314
4315         /*
4316          * Start a new cherry-pick/ revert sequence; but
4317          * first, make sure that an existing one isn't in
4318          * progress
4319          */
4320
4321         if (walk_revs_populate_todo(&todo_list, opts) ||
4322                         create_seq_dir(r) < 0)
4323                 return -1;
4324         if (get_oid("HEAD", &oid) && (opts->action == REPLAY_REVERT))
4325                 return error(_("can't revert as initial commit"));
4326         if (save_head(oid_to_hex(&oid)))
4327                 return -1;
4328         if (save_opts(opts))
4329                 return -1;
4330         update_abort_safety_file();
4331         res = pick_commits(r, &todo_list, opts);
4332         todo_list_release(&todo_list);
4333         return res;
4334 }
4335
4336 void append_signoff(struct strbuf *msgbuf, size_t ignore_footer, unsigned flag)
4337 {
4338         unsigned no_dup_sob = flag & APPEND_SIGNOFF_DEDUP;
4339         struct strbuf sob = STRBUF_INIT;
4340         int has_footer;
4341
4342         strbuf_addstr(&sob, sign_off_header);
4343         strbuf_addstr(&sob, fmt_name(WANT_COMMITTER_IDENT));
4344         strbuf_addch(&sob, '\n');
4345
4346         if (!ignore_footer)
4347                 strbuf_complete_line(msgbuf);
4348
4349         /*
4350          * If the whole message buffer is equal to the sob, pretend that we
4351          * found a conforming footer with a matching sob
4352          */
4353         if (msgbuf->len - ignore_footer == sob.len &&
4354             !strncmp(msgbuf->buf, sob.buf, sob.len))
4355                 has_footer = 3;
4356         else
4357                 has_footer = has_conforming_footer(msgbuf, &sob, ignore_footer);
4358
4359         if (!has_footer) {
4360                 const char *append_newlines = NULL;
4361                 size_t len = msgbuf->len - ignore_footer;
4362
4363                 if (!len) {
4364                         /*
4365                          * The buffer is completely empty.  Leave foom for
4366                          * the title and body to be filled in by the user.
4367                          */
4368                         append_newlines = "\n\n";
4369                 } else if (len == 1) {
4370                         /*
4371                          * Buffer contains a single newline.  Add another
4372                          * so that we leave room for the title and body.
4373                          */
4374                         append_newlines = "\n";
4375                 } else if (msgbuf->buf[len - 2] != '\n') {
4376                         /*
4377                          * Buffer ends with a single newline.  Add another
4378                          * so that there is an empty line between the message
4379                          * body and the sob.
4380                          */
4381                         append_newlines = "\n";
4382                 } /* else, the buffer already ends with two newlines. */
4383
4384                 if (append_newlines)
4385                         strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4386                                 append_newlines, strlen(append_newlines));
4387         }
4388
4389         if (has_footer != 3 && (!no_dup_sob || has_footer != 2))
4390                 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4391                                 sob.buf, sob.len);
4392
4393         strbuf_release(&sob);
4394 }
4395
4396 struct labels_entry {
4397         struct hashmap_entry entry;
4398         char label[FLEX_ARRAY];
4399 };
4400
4401 static int labels_cmp(const void *fndata, const struct labels_entry *a,
4402                       const struct labels_entry *b, const void *key)
4403 {
4404         return key ? strcmp(a->label, key) : strcmp(a->label, b->label);
4405 }
4406
4407 struct string_entry {
4408         struct oidmap_entry entry;
4409         char string[FLEX_ARRAY];
4410 };
4411
4412 struct label_state {
4413         struct oidmap commit2label;
4414         struct hashmap labels;
4415         struct strbuf buf;
4416 };
4417
4418 static const char *label_oid(struct object_id *oid, const char *label,
4419                              struct label_state *state)
4420 {
4421         struct labels_entry *labels_entry;
4422         struct string_entry *string_entry;
4423         struct object_id dummy;
4424         size_t len;
4425         int i;
4426
4427         string_entry = oidmap_get(&state->commit2label, oid);
4428         if (string_entry)
4429                 return string_entry->string;
4430
4431         /*
4432          * For "uninteresting" commits, i.e. commits that are not to be
4433          * rebased, and which can therefore not be labeled, we use a unique
4434          * abbreviation of the commit name. This is slightly more complicated
4435          * than calling find_unique_abbrev() because we also need to make
4436          * sure that the abbreviation does not conflict with any other
4437          * label.
4438          *
4439          * We disallow "interesting" commits to be labeled by a string that
4440          * is a valid full-length hash, to ensure that we always can find an
4441          * abbreviation for any uninteresting commit's names that does not
4442          * clash with any other label.
4443          */
4444         if (!label) {
4445                 char *p;
4446
4447                 strbuf_reset(&state->buf);
4448                 strbuf_grow(&state->buf, GIT_MAX_HEXSZ);
4449                 label = p = state->buf.buf;
4450
4451                 find_unique_abbrev_r(p, oid, default_abbrev);
4452
4453                 /*
4454                  * We may need to extend the abbreviated hash so that there is
4455                  * no conflicting label.
4456                  */
4457                 if (hashmap_get_from_hash(&state->labels, strihash(p), p)) {
4458                         size_t i = strlen(p) + 1;
4459
4460                         oid_to_hex_r(p, oid);
4461                         for (; i < the_hash_algo->hexsz; i++) {
4462                                 char save = p[i];
4463                                 p[i] = '\0';
4464                                 if (!hashmap_get_from_hash(&state->labels,
4465                                                            strihash(p), p))
4466                                         break;
4467                                 p[i] = save;
4468                         }
4469                 }
4470         } else if (((len = strlen(label)) == the_hash_algo->hexsz &&
4471                     !get_oid_hex(label, &dummy)) ||
4472                    (len == 1 && *label == '#') ||
4473                    hashmap_get_from_hash(&state->labels,
4474                                          strihash(label), label)) {
4475                 /*
4476                  * If the label already exists, or if the label is a valid full
4477                  * OID, or the label is a '#' (which we use as a separator
4478                  * between merge heads and oneline), we append a dash and a
4479                  * number to make it unique.
4480                  */
4481                 struct strbuf *buf = &state->buf;
4482
4483                 strbuf_reset(buf);
4484                 strbuf_add(buf, label, len);
4485
4486                 for (i = 2; ; i++) {
4487                         strbuf_setlen(buf, len);
4488                         strbuf_addf(buf, "-%d", i);
4489                         if (!hashmap_get_from_hash(&state->labels,
4490                                                    strihash(buf->buf),
4491                                                    buf->buf))
4492                                 break;
4493                 }
4494
4495                 label = buf->buf;
4496         }
4497
4498         FLEX_ALLOC_STR(labels_entry, label, label);
4499         hashmap_entry_init(labels_entry, strihash(label));
4500         hashmap_add(&state->labels, labels_entry);
4501
4502         FLEX_ALLOC_STR(string_entry, string, label);
4503         oidcpy(&string_entry->entry.oid, oid);
4504         oidmap_put(&state->commit2label, string_entry);
4505
4506         return string_entry->string;
4507 }
4508
4509 static int make_script_with_merges(struct pretty_print_context *pp,
4510                                    struct rev_info *revs, struct strbuf *out,
4511                                    unsigned flags)
4512 {
4513         int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4514         int rebase_cousins = flags & TODO_LIST_REBASE_COUSINS;
4515         int root_with_onto = flags & TODO_LIST_ROOT_WITH_ONTO;
4516         struct strbuf buf = STRBUF_INIT, oneline = STRBUF_INIT;
4517         struct strbuf label = STRBUF_INIT;
4518         struct commit_list *commits = NULL, **tail = &commits, *iter;
4519         struct commit_list *tips = NULL, **tips_tail = &tips;
4520         struct commit *commit;
4521         struct oidmap commit2todo = OIDMAP_INIT;
4522         struct string_entry *entry;
4523         struct oidset interesting = OIDSET_INIT, child_seen = OIDSET_INIT,
4524                 shown = OIDSET_INIT;
4525         struct label_state state = { OIDMAP_INIT, { NULL }, STRBUF_INIT };
4526
4527         int abbr = flags & TODO_LIST_ABBREVIATE_CMDS;
4528         const char *cmd_pick = abbr ? "p" : "pick",
4529                 *cmd_label = abbr ? "l" : "label",
4530                 *cmd_reset = abbr ? "t" : "reset",
4531                 *cmd_merge = abbr ? "m" : "merge";
4532
4533         oidmap_init(&commit2todo, 0);
4534         oidmap_init(&state.commit2label, 0);
4535         hashmap_init(&state.labels, (hashmap_cmp_fn) labels_cmp, NULL, 0);
4536         strbuf_init(&state.buf, 32);
4537
4538         if (revs->cmdline.nr && (revs->cmdline.rev[0].flags & BOTTOM)) {
4539                 struct object_id *oid = &revs->cmdline.rev[0].item->oid;
4540                 FLEX_ALLOC_STR(entry, string, "onto");
4541                 oidcpy(&entry->entry.oid, oid);
4542                 oidmap_put(&state.commit2label, entry);
4543         }
4544
4545         /*
4546          * First phase:
4547          * - get onelines for all commits
4548          * - gather all branch tips (i.e. 2nd or later parents of merges)
4549          * - label all branch tips
4550          */
4551         while ((commit = get_revision(revs))) {
4552                 struct commit_list *to_merge;
4553                 const char *p1, *p2;
4554                 struct object_id *oid;
4555                 int is_empty;
4556
4557                 tail = &commit_list_insert(commit, tail)->next;
4558                 oidset_insert(&interesting, &commit->object.oid);
4559
4560                 is_empty = is_original_commit_empty(commit);
4561                 if (!is_empty && (commit->object.flags & PATCHSAME))
4562                         continue;
4563
4564                 strbuf_reset(&oneline);
4565                 pretty_print_commit(pp, commit, &oneline);
4566
4567                 to_merge = commit->parents ? commit->parents->next : NULL;
4568                 if (!to_merge) {
4569                         /* non-merge commit: easy case */
4570                         strbuf_reset(&buf);
4571                         if (!keep_empty && is_empty)
4572                                 strbuf_addf(&buf, "%c ", comment_line_char);
4573                         strbuf_addf(&buf, "%s %s %s", cmd_pick,
4574                                     oid_to_hex(&commit->object.oid),
4575                                     oneline.buf);
4576
4577                         FLEX_ALLOC_STR(entry, string, buf.buf);
4578                         oidcpy(&entry->entry.oid, &commit->object.oid);
4579                         oidmap_put(&commit2todo, entry);
4580
4581                         continue;
4582                 }
4583
4584                 /* Create a label */
4585                 strbuf_reset(&label);
4586                 if (skip_prefix(oneline.buf, "Merge ", &p1) &&
4587                     (p1 = strchr(p1, '\'')) &&
4588                     (p2 = strchr(++p1, '\'')))
4589                         strbuf_add(&label, p1, p2 - p1);
4590                 else if (skip_prefix(oneline.buf, "Merge pull request ",
4591                                      &p1) &&
4592                          (p1 = strstr(p1, " from ")))
4593                         strbuf_addstr(&label, p1 + strlen(" from "));
4594                 else
4595                         strbuf_addbuf(&label, &oneline);
4596
4597                 for (p1 = label.buf; *p1; p1++)
4598                         if (isspace(*p1))
4599                                 *(char *)p1 = '-';
4600
4601                 strbuf_reset(&buf);
4602                 strbuf_addf(&buf, "%s -C %s",
4603                             cmd_merge, oid_to_hex(&commit->object.oid));
4604
4605                 /* label the tips of merged branches */
4606                 for (; to_merge; to_merge = to_merge->next) {
4607                         oid = &to_merge->item->object.oid;
4608                         strbuf_addch(&buf, ' ');
4609
4610                         if (!oidset_contains(&interesting, oid)) {
4611                                 strbuf_addstr(&buf, label_oid(oid, NULL,
4612                                                               &state));
4613                                 continue;
4614                         }
4615
4616                         tips_tail = &commit_list_insert(to_merge->item,
4617                                                         tips_tail)->next;
4618
4619                         strbuf_addstr(&buf, label_oid(oid, label.buf, &state));
4620                 }
4621                 strbuf_addf(&buf, " # %s", oneline.buf);
4622
4623                 FLEX_ALLOC_STR(entry, string, buf.buf);
4624                 oidcpy(&entry->entry.oid, &commit->object.oid);
4625                 oidmap_put(&commit2todo, entry);
4626         }
4627
4628         /*
4629          * Second phase:
4630          * - label branch points
4631          * - add HEAD to the branch tips
4632          */
4633         for (iter = commits; iter; iter = iter->next) {
4634                 struct commit_list *parent = iter->item->parents;
4635                 for (; parent; parent = parent->next) {
4636                         struct object_id *oid = &parent->item->object.oid;
4637                         if (!oidset_contains(&interesting, oid))
4638                                 continue;
4639                         if (oidset_insert(&child_seen, oid))
4640                                 label_oid(oid, "branch-point", &state);
4641                 }
4642
4643                 /* Add HEAD as implict "tip of branch" */
4644                 if (!iter->next)
4645                         tips_tail = &commit_list_insert(iter->item,
4646                                                         tips_tail)->next;
4647         }
4648
4649         /*
4650          * Third phase: output the todo list. This is a bit tricky, as we
4651          * want to avoid jumping back and forth between revisions. To
4652          * accomplish that goal, we walk backwards from the branch tips,
4653          * gathering commits not yet shown, reversing the list on the fly,
4654          * then outputting that list (labeling revisions as needed).
4655          */
4656         strbuf_addf(out, "%s onto\n", cmd_label);
4657         for (iter = tips; iter; iter = iter->next) {
4658                 struct commit_list *list = NULL, *iter2;
4659
4660                 commit = iter->item;
4661                 if (oidset_contains(&shown, &commit->object.oid))
4662                         continue;
4663                 entry = oidmap_get(&state.commit2label, &commit->object.oid);
4664
4665                 if (entry)
4666                         strbuf_addf(out, "\n%c Branch %s\n", comment_line_char, entry->string);
4667                 else
4668                         strbuf_addch(out, '\n');
4669
4670                 while (oidset_contains(&interesting, &commit->object.oid) &&
4671                        !oidset_contains(&shown, &commit->object.oid)) {
4672                         commit_list_insert(commit, &list);
4673                         if (!commit->parents) {
4674                                 commit = NULL;
4675                                 break;
4676                         }
4677                         commit = commit->parents->item;
4678                 }
4679
4680                 if (!commit)
4681                         strbuf_addf(out, "%s %s\n", cmd_reset,
4682                                     rebase_cousins || root_with_onto ?
4683                                     "onto" : "[new root]");
4684                 else {
4685                         const char *to = NULL;
4686
4687                         entry = oidmap_get(&state.commit2label,
4688                                            &commit->object.oid);
4689                         if (entry)
4690                                 to = entry->string;
4691                         else if (!rebase_cousins)
4692                                 to = label_oid(&commit->object.oid, NULL,
4693                                                &state);
4694
4695                         if (!to || !strcmp(to, "onto"))
4696                                 strbuf_addf(out, "%s onto\n", cmd_reset);
4697                         else {
4698                                 strbuf_reset(&oneline);
4699                                 pretty_print_commit(pp, commit, &oneline);
4700                                 strbuf_addf(out, "%s %s # %s\n",
4701                                             cmd_reset, to, oneline.buf);
4702                         }
4703                 }
4704
4705                 for (iter2 = list; iter2; iter2 = iter2->next) {
4706                         struct object_id *oid = &iter2->item->object.oid;
4707                         entry = oidmap_get(&commit2todo, oid);
4708                         /* only show if not already upstream */
4709                         if (entry)
4710                                 strbuf_addf(out, "%s\n", entry->string);
4711                         entry = oidmap_get(&state.commit2label, oid);
4712                         if (entry)
4713                                 strbuf_addf(out, "%s %s\n",
4714                                             cmd_label, entry->string);
4715                         oidset_insert(&shown, oid);
4716                 }
4717
4718                 free_commit_list(list);
4719         }
4720
4721         free_commit_list(commits);
4722         free_commit_list(tips);
4723
4724         strbuf_release(&label);
4725         strbuf_release(&oneline);
4726         strbuf_release(&buf);
4727
4728         oidmap_free(&commit2todo, 1);
4729         oidmap_free(&state.commit2label, 1);
4730         hashmap_free(&state.labels, 1);
4731         strbuf_release(&state.buf);
4732
4733         return 0;
4734 }
4735
4736 int sequencer_make_script(struct repository *r, struct strbuf *out, int argc,
4737                           const char **argv, unsigned flags)
4738 {
4739         char *format = NULL;
4740         struct pretty_print_context pp = {0};
4741         struct rev_info revs;
4742         struct commit *commit;
4743         int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4744         const char *insn = flags & TODO_LIST_ABBREVIATE_CMDS ? "p" : "pick";
4745         int rebase_merges = flags & TODO_LIST_REBASE_MERGES;
4746
4747         repo_init_revisions(r, &revs, NULL);
4748         revs.verbose_header = 1;
4749         if (!rebase_merges)
4750                 revs.max_parents = 1;
4751         revs.cherry_mark = 1;
4752         revs.limited = 1;
4753         revs.reverse = 1;
4754         revs.right_only = 1;
4755         revs.sort_order = REV_SORT_IN_GRAPH_ORDER;
4756         revs.topo_order = 1;
4757
4758         revs.pretty_given = 1;
4759         git_config_get_string("rebase.instructionFormat", &format);
4760         if (!format || !*format) {
4761                 free(format);
4762                 format = xstrdup("%s");
4763         }
4764         get_commit_format(format, &revs);
4765         free(format);
4766         pp.fmt = revs.commit_format;
4767         pp.output_encoding = get_log_output_encoding();
4768
4769         if (setup_revisions(argc, argv, &revs, NULL) > 1)
4770                 return error(_("make_script: unhandled options"));
4771
4772         if (prepare_revision_walk(&revs) < 0)
4773                 return error(_("make_script: error preparing revisions"));
4774
4775         if (rebase_merges)
4776                 return make_script_with_merges(&pp, &revs, out, flags);
4777
4778         while ((commit = get_revision(&revs))) {
4779                 int is_empty  = is_original_commit_empty(commit);
4780
4781                 if (!is_empty && (commit->object.flags & PATCHSAME))
4782                         continue;
4783                 if (!keep_empty && is_empty)
4784                         strbuf_addf(out, "%c ", comment_line_char);
4785                 strbuf_addf(out, "%s %s ", insn,
4786                             oid_to_hex(&commit->object.oid));
4787                 pretty_print_commit(&pp, commit, out);
4788                 strbuf_addch(out, '\n');
4789         }
4790         return 0;
4791 }
4792
4793 /*
4794  * Add commands after pick and (series of) squash/fixup commands
4795  * in the todo list.
4796  */
4797 void todo_list_add_exec_commands(struct todo_list *todo_list,
4798                                  struct string_list *commands)
4799 {
4800         struct strbuf *buf = &todo_list->buf;
4801         size_t base_offset = buf->len;
4802         int i, insert, nr = 0, alloc = 0;
4803         struct todo_item *items = NULL, *base_items = NULL;
4804
4805         base_items = xcalloc(commands->nr, sizeof(struct todo_item));
4806         for (i = 0; i < commands->nr; i++) {
4807                 size_t command_len = strlen(commands->items[i].string);
4808
4809                 strbuf_addstr(buf, commands->items[i].string);
4810                 strbuf_addch(buf, '\n');
4811
4812                 base_items[i].command = TODO_EXEC;
4813                 base_items[i].offset_in_buf = base_offset;
4814                 base_items[i].arg_offset = base_offset + strlen("exec ");
4815                 base_items[i].arg_len = command_len - strlen("exec ");
4816
4817                 base_offset += command_len + 1;
4818         }
4819
4820         /*
4821          * Insert <commands> after every pick. Here, fixup/squash chains
4822          * are considered part of the pick, so we insert the commands *after*
4823          * those chains if there are any.
4824          *
4825          * As we insert the exec commands immediatly after rearranging
4826          * any fixups and before the user edits the list, a fixup chain
4827          * can never contain comments (any comments are empty picks that
4828          * have been commented out because the user did not specify
4829          * --keep-empty).  So, it is safe to insert an exec command
4830          * without looking at the command following a comment.
4831          */
4832         insert = 0;
4833         for (i = 0; i < todo_list->nr; i++) {
4834                 enum todo_command command = todo_list->items[i].command;
4835                 if (insert && !is_fixup(command)) {
4836                         ALLOC_GROW(items, nr + commands->nr, alloc);
4837                         COPY_ARRAY(items + nr, base_items, commands->nr);
4838                         nr += commands->nr;
4839
4840                         insert = 0;
4841                 }
4842
4843                 ALLOC_GROW(items, nr + 1, alloc);
4844                 items[nr++] = todo_list->items[i];
4845
4846                 if (command == TODO_PICK || command == TODO_MERGE)
4847                         insert = 1;
4848         }
4849
4850         /* insert or append final <commands> */
4851         if (insert || nr == todo_list->nr) {
4852                 ALLOC_GROW(items, nr + commands->nr, alloc);
4853                 COPY_ARRAY(items + nr, base_items, commands->nr);
4854                 nr += commands->nr;
4855         }
4856
4857         free(base_items);
4858         FREE_AND_NULL(todo_list->items);
4859         todo_list->items = items;
4860         todo_list->nr = nr;
4861         todo_list->alloc = alloc;
4862 }
4863
4864 static void todo_list_to_strbuf(struct repository *r, struct todo_list *todo_list,
4865                                 struct strbuf *buf, int num, unsigned flags)
4866 {
4867         struct todo_item *item;
4868         int i, max = todo_list->nr;
4869
4870         if (num > 0 && num < max)
4871                 max = num;
4872
4873         for (item = todo_list->items, i = 0; i < max; i++, item++) {
4874                 /* if the item is not a command write it and continue */
4875                 if (item->command >= TODO_COMMENT) {
4876                         strbuf_addf(buf, "%.*s\n", item->arg_len,
4877                                     todo_item_get_arg(todo_list, item));
4878                         continue;
4879                 }
4880
4881                 /* add command to the buffer */
4882                 if (flags & TODO_LIST_ABBREVIATE_CMDS)
4883                         strbuf_addch(buf, command_to_char(item->command));
4884                 else
4885                         strbuf_addstr(buf, command_to_string(item->command));
4886
4887                 /* add commit id */
4888                 if (item->commit) {
4889                         const char *oid = flags & TODO_LIST_SHORTEN_IDS ?
4890                                           short_commit_name(item->commit) :
4891                                           oid_to_hex(&item->commit->object.oid);
4892
4893                         if (item->command == TODO_MERGE) {
4894                                 if (item->flags & TODO_EDIT_MERGE_MSG)
4895                                         strbuf_addstr(buf, " -c");
4896                                 else
4897                                         strbuf_addstr(buf, " -C");
4898                         }
4899
4900                         strbuf_addf(buf, " %s", oid);
4901                 }
4902
4903                 /* add all the rest */
4904                 if (!item->arg_len)
4905                         strbuf_addch(buf, '\n');
4906                 else
4907                         strbuf_addf(buf, " %.*s\n", item->arg_len,
4908                                     todo_item_get_arg(todo_list, item));
4909         }
4910 }
4911
4912 int todo_list_write_to_file(struct repository *r, struct todo_list *todo_list,
4913                             const char *file, const char *shortrevisions,
4914                             const char *shortonto, int num, unsigned flags)
4915 {
4916         int res;
4917         struct strbuf buf = STRBUF_INIT;
4918
4919         todo_list_to_strbuf(r, todo_list, &buf, num, flags);
4920         if (flags & TODO_LIST_APPEND_TODO_HELP)
4921                 append_todo_help(flags & TODO_LIST_KEEP_EMPTY, count_commands(todo_list),
4922                                  shortrevisions, shortonto, &buf);
4923
4924         res = write_message(buf.buf, buf.len, file, 0);
4925         strbuf_release(&buf);
4926
4927         return res;
4928 }
4929
4930 static const char edit_todo_list_advice[] =
4931 N_("You can fix this with 'git rebase --edit-todo' "
4932 "and then run 'git rebase --continue'.\n"
4933 "Or you can abort the rebase with 'git rebase"
4934 " --abort'.\n");
4935
4936 int check_todo_list_from_file(struct repository *r)
4937 {
4938         struct todo_list old_todo = TODO_LIST_INIT, new_todo = TODO_LIST_INIT;
4939         int res = 0;
4940
4941         if (strbuf_read_file_or_whine(&new_todo.buf, rebase_path_todo()) < 0) {
4942                 res = -1;
4943                 goto out;
4944         }
4945
4946         if (strbuf_read_file_or_whine(&old_todo.buf, rebase_path_todo_backup()) < 0) {
4947                 res = -1;
4948                 goto out;
4949         }
4950
4951         res = todo_list_parse_insn_buffer(r, old_todo.buf.buf, &old_todo);
4952         if (!res)
4953                 res = todo_list_parse_insn_buffer(r, new_todo.buf.buf, &new_todo);
4954         if (!res)
4955                 res = todo_list_check(&old_todo, &new_todo);
4956         if (res)
4957                 fprintf(stderr, _(edit_todo_list_advice));
4958 out:
4959         todo_list_release(&old_todo);
4960         todo_list_release(&new_todo);
4961
4962         return res;
4963 }
4964
4965 /* skip picking commits whose parents are unchanged */
4966 static int skip_unnecessary_picks(struct repository *r,
4967                                   struct todo_list *todo_list,
4968                                   struct object_id *base_oid)
4969 {
4970         struct object_id *parent_oid;
4971         int i;
4972
4973         for (i = 0; i < todo_list->nr; i++) {
4974                 struct todo_item *item = todo_list->items + i;
4975
4976                 if (item->command >= TODO_NOOP)
4977                         continue;
4978                 if (item->command != TODO_PICK)
4979                         break;
4980                 if (parse_commit(item->commit)) {
4981                         return error(_("could not parse commit '%s'"),
4982                                 oid_to_hex(&item->commit->object.oid));
4983                 }
4984                 if (!item->commit->parents)
4985                         break; /* root commit */
4986                 if (item->commit->parents->next)
4987                         break; /* merge commit */
4988                 parent_oid = &item->commit->parents->item->object.oid;
4989                 if (!oideq(parent_oid, base_oid))
4990                         break;
4991                 oidcpy(base_oid, &item->commit->object.oid);
4992         }
4993         if (i > 0) {
4994                 const char *done_path = rebase_path_done();
4995
4996                 if (todo_list_write_to_file(r, todo_list, done_path, NULL, NULL, i, 0)) {
4997                         error_errno(_("could not write to '%s'"), done_path);
4998                         return -1;
4999                 }
5000
5001                 MOVE_ARRAY(todo_list->items, todo_list->items + i, todo_list->nr - i);
5002                 todo_list->nr -= i;
5003                 todo_list->current = 0;
5004
5005                 if (is_fixup(peek_command(todo_list, 0)))
5006                         record_in_rewritten(base_oid, peek_command(todo_list, 0));
5007         }
5008
5009         return 0;
5010 }
5011
5012 int complete_action(struct repository *r, struct replay_opts *opts, unsigned flags,
5013                     const char *shortrevisions, const char *onto_name,
5014                     struct commit *onto, const char *orig_head,
5015                     struct string_list *commands, unsigned autosquash,
5016                     struct todo_list *todo_list)
5017 {
5018         const char *shortonto, *todo_file = rebase_path_todo();
5019         struct todo_list new_todo = TODO_LIST_INIT;
5020         struct strbuf *buf = &todo_list->buf;
5021         struct object_id oid = onto->object.oid;
5022         int res;
5023
5024         shortonto = find_unique_abbrev(&oid, DEFAULT_ABBREV);
5025
5026         if (buf->len == 0) {
5027                 struct todo_item *item = append_new_todo(todo_list);
5028                 item->command = TODO_NOOP;
5029                 item->commit = NULL;
5030                 item->arg_len = item->arg_offset = item->flags = item->offset_in_buf = 0;
5031         }
5032
5033         if (autosquash && todo_list_rearrange_squash(todo_list))
5034                 return -1;
5035
5036         if (commands->nr)
5037                 todo_list_add_exec_commands(todo_list, commands);
5038
5039         if (count_commands(todo_list) == 0) {
5040                 apply_autostash(opts);
5041                 sequencer_remove_state(opts);
5042
5043                 return error(_("nothing to do"));
5044         }
5045
5046         res = edit_todo_list(r, todo_list, &new_todo, shortrevisions,
5047                              shortonto, flags);
5048         if (res == -1)
5049                 return -1;
5050         else if (res == -2) {
5051                 apply_autostash(opts);
5052                 sequencer_remove_state(opts);
5053
5054                 return -1;
5055         } else if (res == -3) {
5056                 apply_autostash(opts);
5057                 sequencer_remove_state(opts);
5058                 todo_list_release(&new_todo);
5059
5060                 return error(_("nothing to do"));
5061         }
5062
5063         if (todo_list_parse_insn_buffer(r, new_todo.buf.buf, &new_todo) ||
5064             todo_list_check(todo_list, &new_todo)) {
5065                 fprintf(stderr, _(edit_todo_list_advice));
5066                 checkout_onto(r, opts, onto_name, &onto->object.oid, orig_head);
5067                 todo_list_release(&new_todo);
5068
5069                 return -1;
5070         }
5071
5072         if (opts->allow_ff && skip_unnecessary_picks(r, &new_todo, &oid)) {
5073                 todo_list_release(&new_todo);
5074                 return error(_("could not skip unnecessary pick commands"));
5075         }
5076
5077         if (todo_list_write_to_file(r, &new_todo, todo_file, NULL, NULL, -1,
5078                                     flags & ~(TODO_LIST_SHORTEN_IDS))) {
5079                 todo_list_release(&new_todo);
5080                 return error_errno(_("could not write '%s'"), todo_file);
5081         }
5082
5083         todo_list_release(&new_todo);
5084
5085         if (checkout_onto(r, opts, onto_name, &oid, orig_head))
5086                 return -1;
5087
5088         if (require_clean_work_tree(r, "rebase", "", 1, 1))
5089                 return -1;
5090
5091         return sequencer_continue(r, opts);
5092 }
5093
5094 struct subject2item_entry {
5095         struct hashmap_entry entry;
5096         int i;
5097         char subject[FLEX_ARRAY];
5098 };
5099
5100 static int subject2item_cmp(const void *fndata,
5101                             const struct subject2item_entry *a,
5102                             const struct subject2item_entry *b, const void *key)
5103 {
5104         return key ? strcmp(a->subject, key) : strcmp(a->subject, b->subject);
5105 }
5106
5107 define_commit_slab(commit_todo_item, struct todo_item *);
5108
5109 /*
5110  * Rearrange the todo list that has both "pick commit-id msg" and "pick
5111  * commit-id fixup!/squash! msg" in it so that the latter is put immediately
5112  * after the former, and change "pick" to "fixup"/"squash".
5113  *
5114  * Note that if the config has specified a custom instruction format, each log
5115  * message will have to be retrieved from the commit (as the oneline in the
5116  * script cannot be trusted) in order to normalize the autosquash arrangement.
5117  */
5118 int todo_list_rearrange_squash(struct todo_list *todo_list)
5119 {
5120         struct hashmap subject2item;
5121         int rearranged = 0, *next, *tail, i, nr = 0, alloc = 0;
5122         char **subjects;
5123         struct commit_todo_item commit_todo;
5124         struct todo_item *items = NULL;
5125
5126         init_commit_todo_item(&commit_todo);
5127         /*
5128          * The hashmap maps onelines to the respective todo list index.
5129          *
5130          * If any items need to be rearranged, the next[i] value will indicate
5131          * which item was moved directly after the i'th.
5132          *
5133          * In that case, last[i] will indicate the index of the latest item to
5134          * be moved to appear after the i'th.
5135          */
5136         hashmap_init(&subject2item, (hashmap_cmp_fn) subject2item_cmp,
5137                      NULL, todo_list->nr);
5138         ALLOC_ARRAY(next, todo_list->nr);
5139         ALLOC_ARRAY(tail, todo_list->nr);
5140         ALLOC_ARRAY(subjects, todo_list->nr);
5141         for (i = 0; i < todo_list->nr; i++) {
5142                 struct strbuf buf = STRBUF_INIT;
5143                 struct todo_item *item = todo_list->items + i;
5144                 const char *commit_buffer, *subject, *p;
5145                 size_t subject_len;
5146                 int i2 = -1;
5147                 struct subject2item_entry *entry;
5148
5149                 next[i] = tail[i] = -1;
5150                 if (!item->commit || item->command == TODO_DROP) {
5151                         subjects[i] = NULL;
5152                         continue;
5153                 }
5154
5155                 if (is_fixup(item->command)) {
5156                         clear_commit_todo_item(&commit_todo);
5157                         return error(_("the script was already rearranged."));
5158                 }
5159
5160                 *commit_todo_item_at(&commit_todo, item->commit) = item;
5161
5162                 parse_commit(item->commit);
5163                 commit_buffer = get_commit_buffer(item->commit, NULL);
5164                 find_commit_subject(commit_buffer, &subject);
5165                 format_subject(&buf, subject, " ");
5166                 subject = subjects[i] = strbuf_detach(&buf, &subject_len);
5167                 unuse_commit_buffer(item->commit, commit_buffer);
5168                 if ((skip_prefix(subject, "fixup! ", &p) ||
5169                      skip_prefix(subject, "squash! ", &p))) {
5170                         struct commit *commit2;
5171
5172                         for (;;) {
5173                                 while (isspace(*p))
5174                                         p++;
5175                                 if (!skip_prefix(p, "fixup! ", &p) &&
5176                                     !skip_prefix(p, "squash! ", &p))
5177                                         break;
5178                         }
5179
5180                         if ((entry = hashmap_get_from_hash(&subject2item,
5181                                                            strhash(p), p)))
5182                                 /* found by title */
5183                                 i2 = entry->i;
5184                         else if (!strchr(p, ' ') &&
5185                                  (commit2 =
5186                                   lookup_commit_reference_by_name(p)) &&
5187                                  *commit_todo_item_at(&commit_todo, commit2))
5188                                 /* found by commit name */
5189                                 i2 = *commit_todo_item_at(&commit_todo, commit2)
5190                                         - todo_list->items;
5191                         else {
5192                                 /* copy can be a prefix of the commit subject */
5193                                 for (i2 = 0; i2 < i; i2++)
5194                                         if (subjects[i2] &&
5195                                             starts_with(subjects[i2], p))
5196                                                 break;
5197                                 if (i2 == i)
5198                                         i2 = -1;
5199                         }
5200                 }
5201                 if (i2 >= 0) {
5202                         rearranged = 1;
5203                         todo_list->items[i].command =
5204                                 starts_with(subject, "fixup!") ?
5205                                 TODO_FIXUP : TODO_SQUASH;
5206                         if (next[i2] < 0)
5207                                 next[i2] = i;
5208                         else
5209                                 next[tail[i2]] = i;
5210                         tail[i2] = i;
5211                 } else if (!hashmap_get_from_hash(&subject2item,
5212                                                 strhash(subject), subject)) {
5213                         FLEX_ALLOC_MEM(entry, subject, subject, subject_len);
5214                         entry->i = i;
5215                         hashmap_entry_init(entry, strhash(entry->subject));
5216                         hashmap_put(&subject2item, entry);
5217                 }
5218         }
5219
5220         if (rearranged) {
5221                 for (i = 0; i < todo_list->nr; i++) {
5222                         enum todo_command command = todo_list->items[i].command;
5223                         int cur = i;
5224
5225                         /*
5226                          * Initially, all commands are 'pick's. If it is a
5227                          * fixup or a squash now, we have rearranged it.
5228                          */
5229                         if (is_fixup(command))
5230                                 continue;
5231
5232                         while (cur >= 0) {
5233                                 ALLOC_GROW(items, nr + 1, alloc);
5234                                 items[nr++] = todo_list->items[cur];
5235                                 cur = next[cur];
5236                         }
5237                 }
5238
5239                 FREE_AND_NULL(todo_list->items);
5240                 todo_list->items = items;
5241                 todo_list->nr = nr;
5242                 todo_list->alloc = alloc;
5243         }
5244
5245         free(next);
5246         free(tail);
5247         for (i = 0; i < todo_list->nr; i++)
5248                 free(subjects[i]);
5249         free(subjects);
5250         hashmap_free(&subject2item, 1);
5251
5252         clear_commit_todo_item(&commit_todo);
5253
5254         return 0;
5255 }