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