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