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