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