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