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