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