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