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