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