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