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