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