Merge branch 'dd/rebase-merge-reserves-onto-label'
[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) && oideq(current_head ?
1354                                             get_commit_tree_oid(current_head) :
1355                                             the_hash_algo->empty_tree, &tree)) {
1356                 res = 1; /* run 'git commit' to display error message */
1357                 goto out;
1358         }
1359
1360         if (find_hook("prepare-commit-msg")) {
1361                 res = run_prepare_commit_msg_hook(r, msg, hook_commit);
1362                 if (res)
1363                         goto out;
1364                 if (strbuf_read_file(&commit_msg, git_path_commit_editmsg(),
1365                                      2048) < 0) {
1366                         res = error_errno(_("unable to read commit message "
1367                                               "from '%s'"),
1368                                             git_path_commit_editmsg());
1369                         goto out;
1370                 }
1371                 msg = &commit_msg;
1372         }
1373
1374         if (flags & CLEANUP_MSG)
1375                 cleanup = COMMIT_MSG_CLEANUP_ALL;
1376         else if ((opts->signoff || opts->record_origin) &&
1377                  !opts->explicit_cleanup)
1378                 cleanup = COMMIT_MSG_CLEANUP_SPACE;
1379         else
1380                 cleanup = opts->default_msg_cleanup;
1381
1382         if (cleanup != COMMIT_MSG_CLEANUP_NONE)
1383                 strbuf_stripspace(msg, cleanup == COMMIT_MSG_CLEANUP_ALL);
1384         if ((flags & EDIT_MSG) && message_is_empty(msg, cleanup)) {
1385                 res = 1; /* run 'git commit' to display error message */
1386                 goto out;
1387         }
1388
1389         reset_ident_date();
1390
1391         if (commit_tree_extended(msg->buf, msg->len, &tree, parents,
1392                                  oid, author, opts->gpg_sign, extra)) {
1393                 res = error(_("failed to write commit object"));
1394                 goto out;
1395         }
1396
1397         if (update_head_with_reflog(current_head, oid,
1398                                     getenv("GIT_REFLOG_ACTION"), msg, &err)) {
1399                 res = error("%s", err.buf);
1400                 goto out;
1401         }
1402
1403         run_commit_hook(0, r->index_file, "post-commit", NULL);
1404         if (flags & AMEND_MSG)
1405                 commit_post_rewrite(r, current_head, oid);
1406
1407 out:
1408         free_commit_extra_headers(extra);
1409         strbuf_release(&err);
1410         strbuf_release(&commit_msg);
1411         free(amend_author);
1412
1413         return res;
1414 }
1415
1416 static int do_commit(struct repository *r,
1417                      const char *msg_file, const char *author,
1418                      struct replay_opts *opts, unsigned int flags)
1419 {
1420         int res = 1;
1421
1422         if (!(flags & EDIT_MSG) && !(flags & VERIFY_MSG)) {
1423                 struct object_id oid;
1424                 struct strbuf sb = STRBUF_INIT;
1425
1426                 if (msg_file && strbuf_read_file(&sb, msg_file, 2048) < 0)
1427                         return error_errno(_("unable to read commit message "
1428                                              "from '%s'"),
1429                                            msg_file);
1430
1431                 res = try_to_commit(r, msg_file ? &sb : NULL,
1432                                     author, opts, flags, &oid);
1433                 strbuf_release(&sb);
1434                 if (!res) {
1435                         unlink(git_path_cherry_pick_head(r));
1436                         unlink(git_path_merge_msg(r));
1437                         if (!is_rebase_i(opts))
1438                                 print_commit_summary(r, NULL, &oid,
1439                                                 SUMMARY_SHOW_AUTHOR_DATE);
1440                         return res;
1441                 }
1442         }
1443         if (res == 1)
1444                 return run_git_commit(r, msg_file, opts, flags);
1445
1446         return res;
1447 }
1448
1449 static int is_original_commit_empty(struct commit *commit)
1450 {
1451         const struct object_id *ptree_oid;
1452
1453         if (parse_commit(commit))
1454                 return error(_("could not parse commit %s"),
1455                              oid_to_hex(&commit->object.oid));
1456         if (commit->parents) {
1457                 struct commit *parent = commit->parents->item;
1458                 if (parse_commit(parent))
1459                         return error(_("could not parse parent commit %s"),
1460                                 oid_to_hex(&parent->object.oid));
1461                 ptree_oid = get_commit_tree_oid(parent);
1462         } else {
1463                 ptree_oid = the_hash_algo->empty_tree; /* commit is root */
1464         }
1465
1466         return oideq(ptree_oid, get_commit_tree_oid(commit));
1467 }
1468
1469 /*
1470  * Do we run "git commit" with "--allow-empty"?
1471  */
1472 static int allow_empty(struct repository *r,
1473                        struct replay_opts *opts,
1474                        struct commit *commit)
1475 {
1476         int index_unchanged, empty_commit;
1477
1478         /*
1479          * Three cases:
1480          *
1481          * (1) we do not allow empty at all and error out.
1482          *
1483          * (2) we allow ones that were initially empty, but
1484          * forbid the ones that become empty;
1485          *
1486          * (3) we allow both.
1487          */
1488         if (!opts->allow_empty)
1489                 return 0; /* let "git commit" barf as necessary */
1490
1491         index_unchanged = is_index_unchanged(r);
1492         if (index_unchanged < 0)
1493                 return index_unchanged;
1494         if (!index_unchanged)
1495                 return 0; /* we do not have to say --allow-empty */
1496
1497         if (opts->keep_redundant_commits)
1498                 return 1;
1499
1500         empty_commit = is_original_commit_empty(commit);
1501         if (empty_commit < 0)
1502                 return empty_commit;
1503         if (!empty_commit)
1504                 return 0;
1505         else
1506                 return 1;
1507 }
1508
1509 static struct {
1510         char c;
1511         const char *str;
1512 } todo_command_info[] = {
1513         { 'p', "pick" },
1514         { 0,   "revert" },
1515         { 'e', "edit" },
1516         { 'r', "reword" },
1517         { 'f', "fixup" },
1518         { 's', "squash" },
1519         { 'x', "exec" },
1520         { 'b', "break" },
1521         { 'l', "label" },
1522         { 't', "reset" },
1523         { 'm', "merge" },
1524         { 0,   "noop" },
1525         { 'd', "drop" },
1526         { 0,   NULL }
1527 };
1528
1529 static const char *command_to_string(const enum todo_command command)
1530 {
1531         if (command < TODO_COMMENT)
1532                 return todo_command_info[command].str;
1533         die(_("unknown command: %d"), command);
1534 }
1535
1536 static char command_to_char(const enum todo_command command)
1537 {
1538         if (command < TODO_COMMENT && todo_command_info[command].c)
1539                 return todo_command_info[command].c;
1540         return comment_line_char;
1541 }
1542
1543 static int is_noop(const enum todo_command command)
1544 {
1545         return TODO_NOOP <= command;
1546 }
1547
1548 static int is_fixup(enum todo_command command)
1549 {
1550         return command == TODO_FIXUP || command == TODO_SQUASH;
1551 }
1552
1553 /* Does this command create a (non-merge) commit? */
1554 static int is_pick_or_similar(enum todo_command command)
1555 {
1556         switch (command) {
1557         case TODO_PICK:
1558         case TODO_REVERT:
1559         case TODO_EDIT:
1560         case TODO_REWORD:
1561         case TODO_FIXUP:
1562         case TODO_SQUASH:
1563                 return 1;
1564         default:
1565                 return 0;
1566         }
1567 }
1568
1569 static int update_squash_messages(struct repository *r,
1570                                   enum todo_command command,
1571                                   struct commit *commit,
1572                                   struct replay_opts *opts)
1573 {
1574         struct strbuf buf = STRBUF_INIT;
1575         int res;
1576         const char *message, *body;
1577         const char *encoding = get_commit_output_encoding();
1578
1579         if (opts->current_fixup_count > 0) {
1580                 struct strbuf header = STRBUF_INIT;
1581                 char *eol;
1582
1583                 if (strbuf_read_file(&buf, rebase_path_squash_msg(), 9) <= 0)
1584                         return error(_("could not read '%s'"),
1585                                 rebase_path_squash_msg());
1586
1587                 eol = buf.buf[0] != comment_line_char ?
1588                         buf.buf : strchrnul(buf.buf, '\n');
1589
1590                 strbuf_addf(&header, "%c ", comment_line_char);
1591                 strbuf_addf(&header, _("This is a combination of %d commits."),
1592                             opts->current_fixup_count + 2);
1593                 strbuf_splice(&buf, 0, eol - buf.buf, header.buf, header.len);
1594                 strbuf_release(&header);
1595         } else {
1596                 struct object_id head;
1597                 struct commit *head_commit;
1598                 const char *head_message, *body;
1599
1600                 if (get_oid("HEAD", &head))
1601                         return error(_("need a HEAD to fixup"));
1602                 if (!(head_commit = lookup_commit_reference(r, &head)))
1603                         return error(_("could not read HEAD"));
1604                 if (!(head_message = logmsg_reencode(head_commit, NULL, encoding)))
1605                         return error(_("could not read HEAD's commit message"));
1606
1607                 find_commit_subject(head_message, &body);
1608                 if (write_message(body, strlen(body),
1609                                   rebase_path_fixup_msg(), 0)) {
1610                         unuse_commit_buffer(head_commit, head_message);
1611                         return error(_("cannot write '%s'"),
1612                                      rebase_path_fixup_msg());
1613                 }
1614
1615                 strbuf_addf(&buf, "%c ", comment_line_char);
1616                 strbuf_addf(&buf, _("This is a combination of %d commits."), 2);
1617                 strbuf_addf(&buf, "\n%c ", comment_line_char);
1618                 strbuf_addstr(&buf, _("This is the 1st commit message:"));
1619                 strbuf_addstr(&buf, "\n\n");
1620                 strbuf_addstr(&buf, body);
1621
1622                 unuse_commit_buffer(head_commit, head_message);
1623         }
1624
1625         if (!(message = logmsg_reencode(commit, NULL, encoding)))
1626                 return error(_("could not read commit message of %s"),
1627                              oid_to_hex(&commit->object.oid));
1628         find_commit_subject(message, &body);
1629
1630         if (command == TODO_SQUASH) {
1631                 unlink(rebase_path_fixup_msg());
1632                 strbuf_addf(&buf, "\n%c ", comment_line_char);
1633                 strbuf_addf(&buf, _("This is the commit message #%d:"),
1634                             ++opts->current_fixup_count + 1);
1635                 strbuf_addstr(&buf, "\n\n");
1636                 strbuf_addstr(&buf, body);
1637         } else if (command == TODO_FIXUP) {
1638                 strbuf_addf(&buf, "\n%c ", comment_line_char);
1639                 strbuf_addf(&buf, _("The commit message #%d will be skipped:"),
1640                             ++opts->current_fixup_count + 1);
1641                 strbuf_addstr(&buf, "\n\n");
1642                 strbuf_add_commented_lines(&buf, body, strlen(body));
1643         } else
1644                 return error(_("unknown command: %d"), command);
1645         unuse_commit_buffer(commit, message);
1646
1647         res = write_message(buf.buf, buf.len, rebase_path_squash_msg(), 0);
1648         strbuf_release(&buf);
1649
1650         if (!res) {
1651                 strbuf_addf(&opts->current_fixups, "%s%s %s",
1652                             opts->current_fixups.len ? "\n" : "",
1653                             command_to_string(command),
1654                             oid_to_hex(&commit->object.oid));
1655                 res = write_message(opts->current_fixups.buf,
1656                                     opts->current_fixups.len,
1657                                     rebase_path_current_fixups(), 0);
1658         }
1659
1660         return res;
1661 }
1662
1663 static void flush_rewritten_pending(void)
1664 {
1665         struct strbuf buf = STRBUF_INIT;
1666         struct object_id newoid;
1667         FILE *out;
1668
1669         if (strbuf_read_file(&buf, rebase_path_rewritten_pending(), (GIT_MAX_HEXSZ + 1) * 2) > 0 &&
1670             !get_oid("HEAD", &newoid) &&
1671             (out = fopen_or_warn(rebase_path_rewritten_list(), "a"))) {
1672                 char *bol = buf.buf, *eol;
1673
1674                 while (*bol) {
1675                         eol = strchrnul(bol, '\n');
1676                         fprintf(out, "%.*s %s\n", (int)(eol - bol),
1677                                         bol, oid_to_hex(&newoid));
1678                         if (!*eol)
1679                                 break;
1680                         bol = eol + 1;
1681                 }
1682                 fclose(out);
1683                 unlink(rebase_path_rewritten_pending());
1684         }
1685         strbuf_release(&buf);
1686 }
1687
1688 static void record_in_rewritten(struct object_id *oid,
1689                 enum todo_command next_command)
1690 {
1691         FILE *out = fopen_or_warn(rebase_path_rewritten_pending(), "a");
1692
1693         if (!out)
1694                 return;
1695
1696         fprintf(out, "%s\n", oid_to_hex(oid));
1697         fclose(out);
1698
1699         if (!is_fixup(next_command))
1700                 flush_rewritten_pending();
1701 }
1702
1703 static int do_pick_commit(struct repository *r,
1704                           enum todo_command command,
1705                           struct commit *commit,
1706                           struct replay_opts *opts,
1707                           int final_fixup, int *check_todo)
1708 {
1709         unsigned int flags = opts->edit ? EDIT_MSG : 0;
1710         const char *msg_file = opts->edit ? NULL : git_path_merge_msg(r);
1711         struct object_id head;
1712         struct commit *base, *next, *parent;
1713         const char *base_label, *next_label;
1714         char *author = NULL;
1715         struct commit_message msg = { NULL, NULL, NULL, NULL };
1716         struct strbuf msgbuf = STRBUF_INIT;
1717         int res, unborn = 0, reword = 0, allow;
1718
1719         if (opts->no_commit) {
1720                 /*
1721                  * We do not intend to commit immediately.  We just want to
1722                  * merge the differences in, so let's compute the tree
1723                  * that represents the "current" state for merge-recursive
1724                  * to work on.
1725                  */
1726                 if (write_index_as_tree(&head, r->index, r->index_file, 0, NULL))
1727                         return error(_("your index file is unmerged."));
1728         } else {
1729                 unborn = get_oid("HEAD", &head);
1730                 /* Do we want to generate a root commit? */
1731                 if (is_pick_or_similar(command) && opts->have_squash_onto &&
1732                     oideq(&head, &opts->squash_onto)) {
1733                         if (is_fixup(command))
1734                                 return error(_("cannot fixup root commit"));
1735                         flags |= CREATE_ROOT_COMMIT;
1736                         unborn = 1;
1737                 } else if (unborn)
1738                         oidcpy(&head, the_hash_algo->empty_tree);
1739                 if (index_differs_from(r, unborn ? empty_tree_oid_hex() : "HEAD",
1740                                        NULL, 0))
1741                         return error_dirty_index(r, opts);
1742         }
1743         discard_index(r->index);
1744
1745         if (!commit->parents)
1746                 parent = NULL;
1747         else if (commit->parents->next) {
1748                 /* Reverting or cherry-picking a merge commit */
1749                 int cnt;
1750                 struct commit_list *p;
1751
1752                 if (!opts->mainline)
1753                         return error(_("commit %s is a merge but no -m option was given."),
1754                                 oid_to_hex(&commit->object.oid));
1755
1756                 for (cnt = 1, p = commit->parents;
1757                      cnt != opts->mainline && p;
1758                      cnt++)
1759                         p = p->next;
1760                 if (cnt != opts->mainline || !p)
1761                         return error(_("commit %s does not have parent %d"),
1762                                 oid_to_hex(&commit->object.oid), opts->mainline);
1763                 parent = p->item;
1764         } else if (1 < opts->mainline)
1765                 /*
1766                  *  Non-first parent explicitly specified as mainline for
1767                  *  non-merge commit
1768                  */
1769                 return error(_("commit %s does not have parent %d"),
1770                              oid_to_hex(&commit->object.oid), opts->mainline);
1771         else
1772                 parent = commit->parents->item;
1773
1774         if (get_message(commit, &msg) != 0)
1775                 return error(_("cannot get commit message for %s"),
1776                         oid_to_hex(&commit->object.oid));
1777
1778         if (opts->allow_ff && !is_fixup(command) &&
1779             ((parent && oideq(&parent->object.oid, &head)) ||
1780              (!parent && unborn))) {
1781                 if (is_rebase_i(opts))
1782                         write_author_script(msg.message);
1783                 res = fast_forward_to(r, &commit->object.oid, &head, unborn,
1784                         opts);
1785                 if (res || command != TODO_REWORD)
1786                         goto leave;
1787                 reword = 1;
1788                 msg_file = NULL;
1789                 goto fast_forward_edit;
1790         }
1791         if (parent && parse_commit(parent) < 0)
1792                 /* TRANSLATORS: The first %s will be a "todo" command like
1793                    "revert" or "pick", the second %s a SHA1. */
1794                 return error(_("%s: cannot parse parent commit %s"),
1795                         command_to_string(command),
1796                         oid_to_hex(&parent->object.oid));
1797
1798         /*
1799          * "commit" is an existing commit.  We would want to apply
1800          * the difference it introduces since its first parent "prev"
1801          * on top of the current HEAD if we are cherry-pick.  Or the
1802          * reverse of it if we are revert.
1803          */
1804
1805         if (command == TODO_REVERT) {
1806                 base = commit;
1807                 base_label = msg.label;
1808                 next = parent;
1809                 next_label = msg.parent_label;
1810                 strbuf_addstr(&msgbuf, "Revert \"");
1811                 strbuf_addstr(&msgbuf, msg.subject);
1812                 strbuf_addstr(&msgbuf, "\"\n\nThis reverts commit ");
1813                 strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1814
1815                 if (commit->parents && commit->parents->next) {
1816                         strbuf_addstr(&msgbuf, ", reversing\nchanges made to ");
1817                         strbuf_addstr(&msgbuf, oid_to_hex(&parent->object.oid));
1818                 }
1819                 strbuf_addstr(&msgbuf, ".\n");
1820         } else {
1821                 const char *p;
1822
1823                 base = parent;
1824                 base_label = msg.parent_label;
1825                 next = commit;
1826                 next_label = msg.label;
1827
1828                 /* Append the commit log message to msgbuf. */
1829                 if (find_commit_subject(msg.message, &p))
1830                         strbuf_addstr(&msgbuf, p);
1831
1832                 if (opts->record_origin) {
1833                         strbuf_complete_line(&msgbuf);
1834                         if (!has_conforming_footer(&msgbuf, NULL, 0))
1835                                 strbuf_addch(&msgbuf, '\n');
1836                         strbuf_addstr(&msgbuf, cherry_picked_prefix);
1837                         strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1838                         strbuf_addstr(&msgbuf, ")\n");
1839                 }
1840                 if (!is_fixup(command))
1841                         author = get_author(msg.message);
1842         }
1843
1844         if (command == TODO_REWORD)
1845                 reword = 1;
1846         else if (is_fixup(command)) {
1847                 if (update_squash_messages(r, command, commit, opts))
1848                         return -1;
1849                 flags |= AMEND_MSG;
1850                 if (!final_fixup)
1851                         msg_file = rebase_path_squash_msg();
1852                 else if (file_exists(rebase_path_fixup_msg())) {
1853                         flags |= CLEANUP_MSG;
1854                         msg_file = rebase_path_fixup_msg();
1855                 } else {
1856                         const char *dest = git_path_squash_msg(r);
1857                         unlink(dest);
1858                         if (copy_file(dest, rebase_path_squash_msg(), 0666))
1859                                 return error(_("could not rename '%s' to '%s'"),
1860                                              rebase_path_squash_msg(), dest);
1861                         unlink(git_path_merge_msg(r));
1862                         msg_file = dest;
1863                         flags |= EDIT_MSG;
1864                 }
1865         }
1866
1867         if (opts->signoff && !is_fixup(command))
1868                 append_signoff(&msgbuf, 0, 0);
1869
1870         if (is_rebase_i(opts) && write_author_script(msg.message) < 0)
1871                 res = -1;
1872         else if (!opts->strategy || !strcmp(opts->strategy, "recursive") || command == TODO_REVERT) {
1873                 res = do_recursive_merge(r, base, next, base_label, next_label,
1874                                          &head, &msgbuf, opts);
1875                 if (res < 0)
1876                         goto leave;
1877
1878                 res |= write_message(msgbuf.buf, msgbuf.len,
1879                                      git_path_merge_msg(r), 0);
1880         } else {
1881                 struct commit_list *common = NULL;
1882                 struct commit_list *remotes = NULL;
1883
1884                 res = write_message(msgbuf.buf, msgbuf.len,
1885                                     git_path_merge_msg(r), 0);
1886
1887                 commit_list_insert(base, &common);
1888                 commit_list_insert(next, &remotes);
1889                 res |= try_merge_command(r, opts->strategy,
1890                                          opts->xopts_nr, (const char **)opts->xopts,
1891                                         common, oid_to_hex(&head), remotes);
1892                 free_commit_list(common);
1893                 free_commit_list(remotes);
1894         }
1895         strbuf_release(&msgbuf);
1896
1897         /*
1898          * If the merge was clean or if it failed due to conflict, we write
1899          * CHERRY_PICK_HEAD for the subsequent invocation of commit to use.
1900          * However, if the merge did not even start, then we don't want to
1901          * write it at all.
1902          */
1903         if (command == TODO_PICK && !opts->no_commit && (res == 0 || res == 1) &&
1904             update_ref(NULL, "CHERRY_PICK_HEAD", &commit->object.oid, NULL,
1905                        REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1906                 res = -1;
1907         if (command == TODO_REVERT && ((opts->no_commit && res == 0) || res == 1) &&
1908             update_ref(NULL, "REVERT_HEAD", &commit->object.oid, NULL,
1909                        REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1910                 res = -1;
1911
1912         if (res) {
1913                 error(command == TODO_REVERT
1914                       ? _("could not revert %s... %s")
1915                       : _("could not apply %s... %s"),
1916                       short_commit_name(commit), msg.subject);
1917                 print_advice(r, res == 1, opts);
1918                 repo_rerere(r, opts->allow_rerere_auto);
1919                 goto leave;
1920         }
1921
1922         allow = allow_empty(r, opts, commit);
1923         if (allow < 0) {
1924                 res = allow;
1925                 goto leave;
1926         } else if (allow)
1927                 flags |= ALLOW_EMPTY;
1928         if (!opts->no_commit) {
1929                 if (author || command == TODO_REVERT || (flags & AMEND_MSG))
1930                         res = do_commit(r, msg_file, author, opts, flags);
1931                 else
1932                         res = error(_("unable to parse commit author"));
1933                 *check_todo = !!(flags & EDIT_MSG);
1934                 if (!res && reword) {
1935 fast_forward_edit:
1936                         res = run_git_commit(r, NULL, opts, EDIT_MSG |
1937                                              VERIFY_MSG | AMEND_MSG |
1938                                              (flags & ALLOW_EMPTY));
1939                         *check_todo = 1;
1940                 }
1941         }
1942
1943
1944         if (!res && final_fixup) {
1945                 unlink(rebase_path_fixup_msg());
1946                 unlink(rebase_path_squash_msg());
1947                 unlink(rebase_path_current_fixups());
1948                 strbuf_reset(&opts->current_fixups);
1949                 opts->current_fixup_count = 0;
1950         }
1951
1952 leave:
1953         free_message(commit, &msg);
1954         free(author);
1955         update_abort_safety_file();
1956
1957         return res;
1958 }
1959
1960 static int prepare_revs(struct replay_opts *opts)
1961 {
1962         /*
1963          * picking (but not reverting) ranges (but not individual revisions)
1964          * should be done in reverse
1965          */
1966         if (opts->action == REPLAY_PICK && !opts->revs->no_walk)
1967                 opts->revs->reverse ^= 1;
1968
1969         if (prepare_revision_walk(opts->revs))
1970                 return error(_("revision walk setup failed"));
1971
1972         return 0;
1973 }
1974
1975 static int read_and_refresh_cache(struct repository *r,
1976                                   struct replay_opts *opts)
1977 {
1978         struct lock_file index_lock = LOCK_INIT;
1979         int index_fd = repo_hold_locked_index(r, &index_lock, 0);
1980         if (repo_read_index(r) < 0) {
1981                 rollback_lock_file(&index_lock);
1982                 return error(_("git %s: failed to read the index"),
1983                         _(action_name(opts)));
1984         }
1985         refresh_index(r->index, REFRESH_QUIET|REFRESH_UNMERGED, NULL, NULL, NULL);
1986         if (index_fd >= 0) {
1987                 if (write_locked_index(r->index, &index_lock,
1988                                        COMMIT_LOCK | SKIP_IF_UNCHANGED)) {
1989                         return error(_("git %s: failed to refresh the index"),
1990                                 _(action_name(opts)));
1991                 }
1992         }
1993         return 0;
1994 }
1995
1996 enum todo_item_flags {
1997         TODO_EDIT_MERGE_MSG = 1
1998 };
1999
2000 void todo_list_release(struct todo_list *todo_list)
2001 {
2002         strbuf_release(&todo_list->buf);
2003         FREE_AND_NULL(todo_list->items);
2004         todo_list->nr = todo_list->alloc = 0;
2005 }
2006
2007 static struct todo_item *append_new_todo(struct todo_list *todo_list)
2008 {
2009         ALLOC_GROW(todo_list->items, todo_list->nr + 1, todo_list->alloc);
2010         return todo_list->items + todo_list->nr++;
2011 }
2012
2013 const char *todo_item_get_arg(struct todo_list *todo_list,
2014                               struct todo_item *item)
2015 {
2016         return todo_list->buf.buf + item->arg_offset;
2017 }
2018
2019 static int is_command(enum todo_command command, const char **bol)
2020 {
2021         const char *str = todo_command_info[command].str;
2022         const char nick = todo_command_info[command].c;
2023         const char *p = *bol + 1;
2024
2025         return skip_prefix(*bol, str, bol) ||
2026                 ((nick && **bol == nick) &&
2027                  (*p == ' ' || *p == '\t' || *p == '\n' || *p == '\r' || !*p) &&
2028                  (*bol = p));
2029 }
2030
2031 static int parse_insn_line(struct repository *r, struct todo_item *item,
2032                            const char *buf, const char *bol, char *eol)
2033 {
2034         struct object_id commit_oid;
2035         char *end_of_object_name;
2036         int i, saved, status, padding;
2037
2038         item->flags = 0;
2039
2040         /* left-trim */
2041         bol += strspn(bol, " \t");
2042
2043         if (bol == eol || *bol == '\r' || *bol == comment_line_char) {
2044                 item->command = TODO_COMMENT;
2045                 item->commit = NULL;
2046                 item->arg_offset = bol - buf;
2047                 item->arg_len = eol - bol;
2048                 return 0;
2049         }
2050
2051         for (i = 0; i < TODO_COMMENT; i++)
2052                 if (is_command(i, &bol)) {
2053                         item->command = i;
2054                         break;
2055                 }
2056         if (i >= TODO_COMMENT)
2057                 return -1;
2058
2059         /* Eat up extra spaces/ tabs before object name */
2060         padding = strspn(bol, " \t");
2061         bol += padding;
2062
2063         if (item->command == TODO_NOOP || item->command == TODO_BREAK) {
2064                 if (bol != eol)
2065                         return error(_("%s does not accept arguments: '%s'"),
2066                                      command_to_string(item->command), bol);
2067                 item->commit = NULL;
2068                 item->arg_offset = bol - buf;
2069                 item->arg_len = eol - bol;
2070                 return 0;
2071         }
2072
2073         if (!padding)
2074                 return error(_("missing arguments for %s"),
2075                              command_to_string(item->command));
2076
2077         if (item->command == TODO_EXEC || item->command == TODO_LABEL ||
2078             item->command == TODO_RESET) {
2079                 item->commit = NULL;
2080                 item->arg_offset = bol - buf;
2081                 item->arg_len = (int)(eol - bol);
2082                 return 0;
2083         }
2084
2085         if (item->command == TODO_MERGE) {
2086                 if (skip_prefix(bol, "-C", &bol))
2087                         bol += strspn(bol, " \t");
2088                 else if (skip_prefix(bol, "-c", &bol)) {
2089                         bol += strspn(bol, " \t");
2090                         item->flags |= TODO_EDIT_MERGE_MSG;
2091                 } else {
2092                         item->flags |= TODO_EDIT_MERGE_MSG;
2093                         item->commit = NULL;
2094                         item->arg_offset = bol - buf;
2095                         item->arg_len = (int)(eol - bol);
2096                         return 0;
2097                 }
2098         }
2099
2100         end_of_object_name = (char *) bol + strcspn(bol, " \t\n");
2101         saved = *end_of_object_name;
2102         *end_of_object_name = '\0';
2103         status = get_oid(bol, &commit_oid);
2104         *end_of_object_name = saved;
2105
2106         bol = end_of_object_name + strspn(end_of_object_name, " \t");
2107         item->arg_offset = bol - buf;
2108         item->arg_len = (int)(eol - bol);
2109
2110         if (status < 0)
2111                 return error(_("could not parse '%.*s'"),
2112                              (int)(end_of_object_name - bol), bol);
2113
2114         item->commit = lookup_commit_reference(r, &commit_oid);
2115         return !item->commit;
2116 }
2117
2118 int sequencer_get_last_command(struct repository *r, enum replay_action *action)
2119 {
2120         const char *todo_file, *bol;
2121         struct strbuf buf = STRBUF_INIT;
2122         int ret = 0;
2123
2124         todo_file = git_path_todo_file();
2125         if (strbuf_read_file(&buf, todo_file, 0) < 0) {
2126                 if (errno == ENOENT || errno == ENOTDIR)
2127                         return -1;
2128                 else
2129                         return error_errno("unable to open '%s'", todo_file);
2130         }
2131         bol = buf.buf + strspn(buf.buf, " \t\r\n");
2132         if (is_command(TODO_PICK, &bol) && (*bol == ' ' || *bol == '\t'))
2133                 *action = REPLAY_PICK;
2134         else if (is_command(TODO_REVERT, &bol) &&
2135                  (*bol == ' ' || *bol == '\t'))
2136                 *action = REPLAY_REVERT;
2137         else
2138                 ret = -1;
2139
2140         strbuf_release(&buf);
2141
2142         return ret;
2143 }
2144
2145 int todo_list_parse_insn_buffer(struct repository *r, char *buf,
2146                                 struct todo_list *todo_list)
2147 {
2148         struct todo_item *item;
2149         char *p = buf, *next_p;
2150         int i, res = 0, fixup_okay = file_exists(rebase_path_done());
2151
2152         todo_list->current = todo_list->nr = 0;
2153
2154         for (i = 1; *p; i++, p = next_p) {
2155                 char *eol = strchrnul(p, '\n');
2156
2157                 next_p = *eol ? eol + 1 /* skip LF */ : eol;
2158
2159                 if (p != eol && eol[-1] == '\r')
2160                         eol--; /* strip Carriage Return */
2161
2162                 item = append_new_todo(todo_list);
2163                 item->offset_in_buf = p - todo_list->buf.buf;
2164                 if (parse_insn_line(r, item, buf, p, eol)) {
2165                         res = error(_("invalid line %d: %.*s"),
2166                                 i, (int)(eol - p), p);
2167                         item->command = TODO_COMMENT + 1;
2168                         item->arg_offset = p - buf;
2169                         item->arg_len = (int)(eol - p);
2170                         item->commit = NULL;
2171                 }
2172
2173                 if (fixup_okay)
2174                         ; /* do nothing */
2175                 else if (is_fixup(item->command))
2176                         return error(_("cannot '%s' without a previous commit"),
2177                                 command_to_string(item->command));
2178                 else if (!is_noop(item->command))
2179                         fixup_okay = 1;
2180         }
2181
2182         return res;
2183 }
2184
2185 static int count_commands(struct todo_list *todo_list)
2186 {
2187         int count = 0, i;
2188
2189         for (i = 0; i < todo_list->nr; i++)
2190                 if (todo_list->items[i].command != TODO_COMMENT)
2191                         count++;
2192
2193         return count;
2194 }
2195
2196 static int get_item_line_offset(struct todo_list *todo_list, int index)
2197 {
2198         return index < todo_list->nr ?
2199                 todo_list->items[index].offset_in_buf : todo_list->buf.len;
2200 }
2201
2202 static const char *get_item_line(struct todo_list *todo_list, int index)
2203 {
2204         return todo_list->buf.buf + get_item_line_offset(todo_list, index);
2205 }
2206
2207 static int get_item_line_length(struct todo_list *todo_list, int index)
2208 {
2209         return get_item_line_offset(todo_list, index + 1)
2210                 -  get_item_line_offset(todo_list, index);
2211 }
2212
2213 static ssize_t strbuf_read_file_or_whine(struct strbuf *sb, const char *path)
2214 {
2215         int fd;
2216         ssize_t len;
2217
2218         fd = open(path, O_RDONLY);
2219         if (fd < 0)
2220                 return error_errno(_("could not open '%s'"), path);
2221         len = strbuf_read(sb, fd, 0);
2222         close(fd);
2223         if (len < 0)
2224                 return error(_("could not read '%s'."), path);
2225         return len;
2226 }
2227
2228 static int have_finished_the_last_pick(void)
2229 {
2230         struct strbuf buf = STRBUF_INIT;
2231         const char *eol;
2232         const char *todo_path = git_path_todo_file();
2233         int ret = 0;
2234
2235         if (strbuf_read_file(&buf, todo_path, 0) < 0) {
2236                 if (errno == ENOENT) {
2237                         return 0;
2238                 } else {
2239                         error_errno("unable to open '%s'", todo_path);
2240                         return 0;
2241                 }
2242         }
2243         /* If there is only one line then we are done */
2244         eol = strchr(buf.buf, '\n');
2245         if (!eol || !eol[1])
2246                 ret = 1;
2247
2248         strbuf_release(&buf);
2249
2250         return ret;
2251 }
2252
2253 void sequencer_post_commit_cleanup(struct repository *r, int verbose)
2254 {
2255         struct replay_opts opts = REPLAY_OPTS_INIT;
2256         int need_cleanup = 0;
2257
2258         if (file_exists(git_path_cherry_pick_head(r))) {
2259                 if (!unlink(git_path_cherry_pick_head(r)) && verbose)
2260                         warning(_("cancelling a cherry picking in progress"));
2261                 opts.action = REPLAY_PICK;
2262                 need_cleanup = 1;
2263         }
2264
2265         if (file_exists(git_path_revert_head(r))) {
2266                 if (!unlink(git_path_revert_head(r)) && verbose)
2267                         warning(_("cancelling a revert in progress"));
2268                 opts.action = REPLAY_REVERT;
2269                 need_cleanup = 1;
2270         }
2271
2272         if (!need_cleanup)
2273                 return;
2274
2275         if (!have_finished_the_last_pick())
2276                 return;
2277
2278         sequencer_remove_state(&opts);
2279 }
2280
2281 static int read_populate_todo(struct repository *r,
2282                               struct todo_list *todo_list,
2283                               struct replay_opts *opts)
2284 {
2285         struct stat st;
2286         const char *todo_file = get_todo_path(opts);
2287         int res;
2288
2289         strbuf_reset(&todo_list->buf);
2290         if (strbuf_read_file_or_whine(&todo_list->buf, todo_file) < 0)
2291                 return -1;
2292
2293         res = stat(todo_file, &st);
2294         if (res)
2295                 return error(_("could not stat '%s'"), todo_file);
2296         fill_stat_data(&todo_list->stat, &st);
2297
2298         res = todo_list_parse_insn_buffer(r, todo_list->buf.buf, todo_list);
2299         if (res) {
2300                 if (is_rebase_i(opts))
2301                         return error(_("please fix this using "
2302                                        "'git rebase --edit-todo'."));
2303                 return error(_("unusable instruction sheet: '%s'"), todo_file);
2304         }
2305
2306         if (!todo_list->nr &&
2307             (!is_rebase_i(opts) || !file_exists(rebase_path_done())))
2308                 return error(_("no commits parsed."));
2309
2310         if (!is_rebase_i(opts)) {
2311                 enum todo_command valid =
2312                         opts->action == REPLAY_PICK ? TODO_PICK : TODO_REVERT;
2313                 int i;
2314
2315                 for (i = 0; i < todo_list->nr; i++)
2316                         if (valid == todo_list->items[i].command)
2317                                 continue;
2318                         else if (valid == TODO_PICK)
2319                                 return error(_("cannot cherry-pick during a revert."));
2320                         else
2321                                 return error(_("cannot revert during a cherry-pick."));
2322         }
2323
2324         if (is_rebase_i(opts)) {
2325                 struct todo_list done = TODO_LIST_INIT;
2326                 FILE *f = fopen_or_warn(rebase_path_msgtotal(), "w");
2327
2328                 if (strbuf_read_file(&done.buf, rebase_path_done(), 0) > 0 &&
2329                     !todo_list_parse_insn_buffer(r, done.buf.buf, &done))
2330                         todo_list->done_nr = count_commands(&done);
2331                 else
2332                         todo_list->done_nr = 0;
2333
2334                 todo_list->total_nr = todo_list->done_nr
2335                         + count_commands(todo_list);
2336                 todo_list_release(&done);
2337
2338                 if (f) {
2339                         fprintf(f, "%d\n", todo_list->total_nr);
2340                         fclose(f);
2341                 }
2342         }
2343
2344         return 0;
2345 }
2346
2347 static int git_config_string_dup(char **dest,
2348                                  const char *var, const char *value)
2349 {
2350         if (!value)
2351                 return config_error_nonbool(var);
2352         free(*dest);
2353         *dest = xstrdup(value);
2354         return 0;
2355 }
2356
2357 static int populate_opts_cb(const char *key, const char *value, void *data)
2358 {
2359         struct replay_opts *opts = data;
2360         int error_flag = 1;
2361
2362         if (!value)
2363                 error_flag = 0;
2364         else if (!strcmp(key, "options.no-commit"))
2365                 opts->no_commit = git_config_bool_or_int(key, value, &error_flag);
2366         else if (!strcmp(key, "options.edit"))
2367                 opts->edit = git_config_bool_or_int(key, value, &error_flag);
2368         else if (!strcmp(key, "options.allow-empty"))
2369                 opts->allow_empty =
2370                         git_config_bool_or_int(key, value, &error_flag);
2371         else if (!strcmp(key, "options.allow-empty-message"))
2372                 opts->allow_empty_message =
2373                         git_config_bool_or_int(key, value, &error_flag);
2374         else if (!strcmp(key, "options.keep-redundant-commits"))
2375                 opts->keep_redundant_commits =
2376                         git_config_bool_or_int(key, value, &error_flag);
2377         else if (!strcmp(key, "options.signoff"))
2378                 opts->signoff = git_config_bool_or_int(key, value, &error_flag);
2379         else if (!strcmp(key, "options.record-origin"))
2380                 opts->record_origin = git_config_bool_or_int(key, value, &error_flag);
2381         else if (!strcmp(key, "options.allow-ff"))
2382                 opts->allow_ff = git_config_bool_or_int(key, value, &error_flag);
2383         else if (!strcmp(key, "options.mainline"))
2384                 opts->mainline = git_config_int(key, value);
2385         else if (!strcmp(key, "options.strategy"))
2386                 git_config_string_dup(&opts->strategy, key, value);
2387         else if (!strcmp(key, "options.gpg-sign"))
2388                 git_config_string_dup(&opts->gpg_sign, key, value);
2389         else if (!strcmp(key, "options.strategy-option")) {
2390                 ALLOC_GROW(opts->xopts, opts->xopts_nr + 1, opts->xopts_alloc);
2391                 opts->xopts[opts->xopts_nr++] = xstrdup(value);
2392         } else if (!strcmp(key, "options.allow-rerere-auto"))
2393                 opts->allow_rerere_auto =
2394                         git_config_bool_or_int(key, value, &error_flag) ?
2395                                 RERERE_AUTOUPDATE : RERERE_NOAUTOUPDATE;
2396         else if (!strcmp(key, "options.default-msg-cleanup")) {
2397                 opts->explicit_cleanup = 1;
2398                 opts->default_msg_cleanup = get_cleanup_mode(value, 1);
2399         } else
2400                 return error(_("invalid key: %s"), key);
2401
2402         if (!error_flag)
2403                 return error(_("invalid value for %s: %s"), key, value);
2404
2405         return 0;
2406 }
2407
2408 void parse_strategy_opts(struct replay_opts *opts, char *raw_opts)
2409 {
2410         int i;
2411         char *strategy_opts_string = raw_opts;
2412
2413         if (*strategy_opts_string == ' ')
2414                 strategy_opts_string++;
2415
2416         opts->xopts_nr = split_cmdline(strategy_opts_string,
2417                                        (const char ***)&opts->xopts);
2418         for (i = 0; i < opts->xopts_nr; i++) {
2419                 const char *arg = opts->xopts[i];
2420
2421                 skip_prefix(arg, "--", &arg);
2422                 opts->xopts[i] = xstrdup(arg);
2423         }
2424 }
2425
2426 static void read_strategy_opts(struct replay_opts *opts, struct strbuf *buf)
2427 {
2428         strbuf_reset(buf);
2429         if (!read_oneliner(buf, rebase_path_strategy(), 0))
2430                 return;
2431         opts->strategy = strbuf_detach(buf, NULL);
2432         if (!read_oneliner(buf, rebase_path_strategy_opts(), 0))
2433                 return;
2434
2435         parse_strategy_opts(opts, buf->buf);
2436 }
2437
2438 static int read_populate_opts(struct replay_opts *opts)
2439 {
2440         if (is_rebase_i(opts)) {
2441                 struct strbuf buf = STRBUF_INIT;
2442
2443                 if (read_oneliner(&buf, rebase_path_gpg_sign_opt(), 1)) {
2444                         if (!starts_with(buf.buf, "-S"))
2445                                 strbuf_reset(&buf);
2446                         else {
2447                                 free(opts->gpg_sign);
2448                                 opts->gpg_sign = xstrdup(buf.buf + 2);
2449                         }
2450                         strbuf_reset(&buf);
2451                 }
2452
2453                 if (read_oneliner(&buf, rebase_path_allow_rerere_autoupdate(), 1)) {
2454                         if (!strcmp(buf.buf, "--rerere-autoupdate"))
2455                                 opts->allow_rerere_auto = RERERE_AUTOUPDATE;
2456                         else if (!strcmp(buf.buf, "--no-rerere-autoupdate"))
2457                                 opts->allow_rerere_auto = RERERE_NOAUTOUPDATE;
2458                         strbuf_reset(&buf);
2459                 }
2460
2461                 if (file_exists(rebase_path_verbose()))
2462                         opts->verbose = 1;
2463
2464                 if (file_exists(rebase_path_quiet()))
2465                         opts->quiet = 1;
2466
2467                 if (file_exists(rebase_path_signoff())) {
2468                         opts->allow_ff = 0;
2469                         opts->signoff = 1;
2470                 }
2471
2472                 if (file_exists(rebase_path_reschedule_failed_exec()))
2473                         opts->reschedule_failed_exec = 1;
2474
2475                 read_strategy_opts(opts, &buf);
2476                 strbuf_release(&buf);
2477
2478                 if (read_oneliner(&opts->current_fixups,
2479                                   rebase_path_current_fixups(), 1)) {
2480                         const char *p = opts->current_fixups.buf;
2481                         opts->current_fixup_count = 1;
2482                         while ((p = strchr(p, '\n'))) {
2483                                 opts->current_fixup_count++;
2484                                 p++;
2485                         }
2486                 }
2487
2488                 if (read_oneliner(&buf, rebase_path_squash_onto(), 0)) {
2489                         if (get_oid_hex(buf.buf, &opts->squash_onto) < 0)
2490                                 return error(_("unusable squash-onto"));
2491                         opts->have_squash_onto = 1;
2492                 }
2493
2494                 return 0;
2495         }
2496
2497         if (!file_exists(git_path_opts_file()))
2498                 return 0;
2499         /*
2500          * The function git_parse_source(), called from git_config_from_file(),
2501          * may die() in case of a syntactically incorrect file. We do not care
2502          * about this case, though, because we wrote that file ourselves, so we
2503          * are pretty certain that it is syntactically correct.
2504          */
2505         if (git_config_from_file(populate_opts_cb, git_path_opts_file(), opts) < 0)
2506                 return error(_("malformed options sheet: '%s'"),
2507                         git_path_opts_file());
2508         return 0;
2509 }
2510
2511 static void write_strategy_opts(struct replay_opts *opts)
2512 {
2513         int i;
2514         struct strbuf buf = STRBUF_INIT;
2515
2516         for (i = 0; i < opts->xopts_nr; ++i)
2517                 strbuf_addf(&buf, " --%s", opts->xopts[i]);
2518
2519         write_file(rebase_path_strategy_opts(), "%s\n", buf.buf);
2520         strbuf_release(&buf);
2521 }
2522
2523 int write_basic_state(struct replay_opts *opts, const char *head_name,
2524                       struct commit *onto, const char *orig_head)
2525 {
2526         const char *quiet = getenv("GIT_QUIET");
2527
2528         if (head_name)
2529                 write_file(rebase_path_head_name(), "%s\n", head_name);
2530         if (onto)
2531                 write_file(rebase_path_onto(), "%s\n",
2532                            oid_to_hex(&onto->object.oid));
2533         if (orig_head)
2534                 write_file(rebase_path_orig_head(), "%s\n", orig_head);
2535
2536         if (quiet)
2537                 write_file(rebase_path_quiet(), "%s\n", quiet);
2538         if (opts->verbose)
2539                 write_file(rebase_path_verbose(), "%s", "");
2540         if (opts->strategy)
2541                 write_file(rebase_path_strategy(), "%s\n", opts->strategy);
2542         if (opts->xopts_nr > 0)
2543                 write_strategy_opts(opts);
2544
2545         if (opts->allow_rerere_auto == RERERE_AUTOUPDATE)
2546                 write_file(rebase_path_allow_rerere_autoupdate(), "--rerere-autoupdate\n");
2547         else if (opts->allow_rerere_auto == RERERE_NOAUTOUPDATE)
2548                 write_file(rebase_path_allow_rerere_autoupdate(), "--no-rerere-autoupdate\n");
2549
2550         if (opts->gpg_sign)
2551                 write_file(rebase_path_gpg_sign_opt(), "-S%s\n", opts->gpg_sign);
2552         if (opts->signoff)
2553                 write_file(rebase_path_signoff(), "--signoff\n");
2554         if (opts->reschedule_failed_exec)
2555                 write_file(rebase_path_reschedule_failed_exec(), "%s", "");
2556
2557         return 0;
2558 }
2559
2560 static int walk_revs_populate_todo(struct todo_list *todo_list,
2561                                 struct replay_opts *opts)
2562 {
2563         enum todo_command command = opts->action == REPLAY_PICK ?
2564                 TODO_PICK : TODO_REVERT;
2565         const char *command_string = todo_command_info[command].str;
2566         const char *encoding;
2567         struct commit *commit;
2568
2569         if (prepare_revs(opts))
2570                 return -1;
2571
2572         encoding = get_log_output_encoding();
2573
2574         while ((commit = get_revision(opts->revs))) {
2575                 struct todo_item *item = append_new_todo(todo_list);
2576                 const char *commit_buffer = logmsg_reencode(commit, NULL, encoding);
2577                 const char *subject;
2578                 int subject_len;
2579
2580                 item->command = command;
2581                 item->commit = commit;
2582                 item->arg_offset = 0;
2583                 item->arg_len = 0;
2584                 item->offset_in_buf = todo_list->buf.len;
2585                 subject_len = find_commit_subject(commit_buffer, &subject);
2586                 strbuf_addf(&todo_list->buf, "%s %s %.*s\n", command_string,
2587                         short_commit_name(commit), subject_len, subject);
2588                 unuse_commit_buffer(commit, commit_buffer);
2589         }
2590
2591         if (!todo_list->nr)
2592                 return error(_("empty commit set passed"));
2593
2594         return 0;
2595 }
2596
2597 static int create_seq_dir(struct repository *r)
2598 {
2599         enum replay_action action;
2600         const char *in_progress_error = NULL;
2601         const char *in_progress_advice = NULL;
2602         unsigned int advise_skip = file_exists(git_path_revert_head(r)) ||
2603                                 file_exists(git_path_cherry_pick_head(r));
2604
2605         if (!sequencer_get_last_command(r, &action)) {
2606                 switch (action) {
2607                 case REPLAY_REVERT:
2608                         in_progress_error = _("revert is already in progress");
2609                         in_progress_advice =
2610                         _("try \"git revert (--continue | %s--abort | --quit)\"");
2611                         break;
2612                 case REPLAY_PICK:
2613                         in_progress_error = _("cherry-pick is already in progress");
2614                         in_progress_advice =
2615                         _("try \"git cherry-pick (--continue | %s--abort | --quit)\"");
2616                         break;
2617                 default:
2618                         BUG("unexpected action in create_seq_dir");
2619                 }
2620         }
2621         if (in_progress_error) {
2622                 error("%s", in_progress_error);
2623                 if (advice_sequencer_in_use)
2624                         advise(in_progress_advice,
2625                                 advise_skip ? "--skip | " : "");
2626                 return -1;
2627         }
2628         if (mkdir(git_path_seq_dir(), 0777) < 0)
2629                 return error_errno(_("could not create sequencer directory '%s'"),
2630                                    git_path_seq_dir());
2631
2632         return 0;
2633 }
2634
2635 static int save_head(const char *head)
2636 {
2637         struct lock_file head_lock = LOCK_INIT;
2638         struct strbuf buf = STRBUF_INIT;
2639         int fd;
2640         ssize_t written;
2641
2642         fd = hold_lock_file_for_update(&head_lock, git_path_head_file(), 0);
2643         if (fd < 0)
2644                 return error_errno(_("could not lock HEAD"));
2645         strbuf_addf(&buf, "%s\n", head);
2646         written = write_in_full(fd, buf.buf, buf.len);
2647         strbuf_release(&buf);
2648         if (written < 0) {
2649                 error_errno(_("could not write to '%s'"), git_path_head_file());
2650                 rollback_lock_file(&head_lock);
2651                 return -1;
2652         }
2653         if (commit_lock_file(&head_lock) < 0)
2654                 return error(_("failed to finalize '%s'"), git_path_head_file());
2655         return 0;
2656 }
2657
2658 static int rollback_is_safe(void)
2659 {
2660         struct strbuf sb = STRBUF_INIT;
2661         struct object_id expected_head, actual_head;
2662
2663         if (strbuf_read_file(&sb, git_path_abort_safety_file(), 0) >= 0) {
2664                 strbuf_trim(&sb);
2665                 if (get_oid_hex(sb.buf, &expected_head)) {
2666                         strbuf_release(&sb);
2667                         die(_("could not parse %s"), git_path_abort_safety_file());
2668                 }
2669                 strbuf_release(&sb);
2670         }
2671         else if (errno == ENOENT)
2672                 oidclr(&expected_head);
2673         else
2674                 die_errno(_("could not read '%s'"), git_path_abort_safety_file());
2675
2676         if (get_oid("HEAD", &actual_head))
2677                 oidclr(&actual_head);
2678
2679         return oideq(&actual_head, &expected_head);
2680 }
2681
2682 static int reset_merge(const struct object_id *oid)
2683 {
2684         int ret;
2685         struct argv_array argv = ARGV_ARRAY_INIT;
2686
2687         argv_array_pushl(&argv, "reset", "--merge", NULL);
2688
2689         if (!is_null_oid(oid))
2690                 argv_array_push(&argv, oid_to_hex(oid));
2691
2692         ret = run_command_v_opt(argv.argv, RUN_GIT_CMD);
2693         argv_array_clear(&argv);
2694
2695         return ret;
2696 }
2697
2698 static int rollback_single_pick(struct repository *r)
2699 {
2700         struct object_id head_oid;
2701
2702         if (!file_exists(git_path_cherry_pick_head(r)) &&
2703             !file_exists(git_path_revert_head(r)))
2704                 return error(_("no cherry-pick or revert in progress"));
2705         if (read_ref_full("HEAD", 0, &head_oid, NULL))
2706                 return error(_("cannot resolve HEAD"));
2707         if (is_null_oid(&head_oid))
2708                 return error(_("cannot abort from a branch yet to be born"));
2709         return reset_merge(&head_oid);
2710 }
2711
2712 static int skip_single_pick(void)
2713 {
2714         struct object_id head;
2715
2716         if (read_ref_full("HEAD", 0, &head, NULL))
2717                 return error(_("cannot resolve HEAD"));
2718         return reset_merge(&head);
2719 }
2720
2721 int sequencer_rollback(struct repository *r, struct replay_opts *opts)
2722 {
2723         FILE *f;
2724         struct object_id oid;
2725         struct strbuf buf = STRBUF_INIT;
2726         const char *p;
2727
2728         f = fopen(git_path_head_file(), "r");
2729         if (!f && errno == ENOENT) {
2730                 /*
2731                  * There is no multiple-cherry-pick in progress.
2732                  * If CHERRY_PICK_HEAD or REVERT_HEAD indicates
2733                  * a single-cherry-pick in progress, abort that.
2734                  */
2735                 return rollback_single_pick(r);
2736         }
2737         if (!f)
2738                 return error_errno(_("cannot open '%s'"), git_path_head_file());
2739         if (strbuf_getline_lf(&buf, f)) {
2740                 error(_("cannot read '%s': %s"), git_path_head_file(),
2741                       ferror(f) ?  strerror(errno) : _("unexpected end of file"));
2742                 fclose(f);
2743                 goto fail;
2744         }
2745         fclose(f);
2746         if (parse_oid_hex(buf.buf, &oid, &p) || *p != '\0') {
2747                 error(_("stored pre-cherry-pick HEAD file '%s' is corrupt"),
2748                         git_path_head_file());
2749                 goto fail;
2750         }
2751         if (is_null_oid(&oid)) {
2752                 error(_("cannot abort from a branch yet to be born"));
2753                 goto fail;
2754         }
2755
2756         if (!rollback_is_safe()) {
2757                 /* Do not error, just do not rollback */
2758                 warning(_("You seem to have moved HEAD. "
2759                           "Not rewinding, check your HEAD!"));
2760         } else
2761         if (reset_merge(&oid))
2762                 goto fail;
2763         strbuf_release(&buf);
2764         return sequencer_remove_state(opts);
2765 fail:
2766         strbuf_release(&buf);
2767         return -1;
2768 }
2769
2770 int sequencer_skip(struct repository *r, struct replay_opts *opts)
2771 {
2772         enum replay_action action = -1;
2773         sequencer_get_last_command(r, &action);
2774
2775         /*
2776          * Check whether the subcommand requested to skip the commit is actually
2777          * in progress and that it's safe to skip the commit.
2778          *
2779          * opts->action tells us which subcommand requested to skip the commit.
2780          * If the corresponding .git/<ACTION>_HEAD exists, we know that the
2781          * action is in progress and we can skip the commit.
2782          *
2783          * Otherwise we check that the last instruction was related to the
2784          * particular subcommand we're trying to execute and barf if that's not
2785          * the case.
2786          *
2787          * Finally we check that the rollback is "safe", i.e., has the HEAD
2788          * moved? In this case, it doesn't make sense to "reset the merge" and
2789          * "skip the commit" as the user already handled this by committing. But
2790          * we'd not want to barf here, instead give advice on how to proceed. We
2791          * only need to check that when .git/<ACTION>_HEAD doesn't exist because
2792          * it gets removed when the user commits, so if it still exists we're
2793          * sure the user can't have committed before.
2794          */
2795         switch (opts->action) {
2796         case REPLAY_REVERT:
2797                 if (!file_exists(git_path_revert_head(r))) {
2798                         if (action != REPLAY_REVERT)
2799                                 return error(_("no revert in progress"));
2800                         if (!rollback_is_safe())
2801                                 goto give_advice;
2802                 }
2803                 break;
2804         case REPLAY_PICK:
2805                 if (!file_exists(git_path_cherry_pick_head(r))) {
2806                         if (action != REPLAY_PICK)
2807                                 return error(_("no cherry-pick in progress"));
2808                         if (!rollback_is_safe())
2809                                 goto give_advice;
2810                 }
2811                 break;
2812         default:
2813                 BUG("unexpected action in sequencer_skip");
2814         }
2815
2816         if (skip_single_pick())
2817                 return error(_("failed to skip the commit"));
2818         if (!is_directory(git_path_seq_dir()))
2819                 return 0;
2820
2821         return sequencer_continue(r, opts);
2822
2823 give_advice:
2824         error(_("there is nothing to skip"));
2825
2826         if (advice_resolve_conflict) {
2827                 advise(_("have you committed already?\n"
2828                          "try \"git %s --continue\""),
2829                          action == REPLAY_REVERT ? "revert" : "cherry-pick");
2830         }
2831         return -1;
2832 }
2833
2834 static int save_todo(struct todo_list *todo_list, struct replay_opts *opts)
2835 {
2836         struct lock_file todo_lock = LOCK_INIT;
2837         const char *todo_path = get_todo_path(opts);
2838         int next = todo_list->current, offset, fd;
2839
2840         /*
2841          * rebase -i writes "git-rebase-todo" without the currently executing
2842          * command, appending it to "done" instead.
2843          */
2844         if (is_rebase_i(opts))
2845                 next++;
2846
2847         fd = hold_lock_file_for_update(&todo_lock, todo_path, 0);
2848         if (fd < 0)
2849                 return error_errno(_("could not lock '%s'"), todo_path);
2850         offset = get_item_line_offset(todo_list, next);
2851         if (write_in_full(fd, todo_list->buf.buf + offset,
2852                         todo_list->buf.len - offset) < 0)
2853                 return error_errno(_("could not write to '%s'"), todo_path);
2854         if (commit_lock_file(&todo_lock) < 0)
2855                 return error(_("failed to finalize '%s'"), todo_path);
2856
2857         if (is_rebase_i(opts) && next > 0) {
2858                 const char *done = rebase_path_done();
2859                 int fd = open(done, O_CREAT | O_WRONLY | O_APPEND, 0666);
2860                 int ret = 0;
2861
2862                 if (fd < 0)
2863                         return 0;
2864                 if (write_in_full(fd, get_item_line(todo_list, next - 1),
2865                                   get_item_line_length(todo_list, next - 1))
2866                     < 0)
2867                         ret = error_errno(_("could not write to '%s'"), done);
2868                 if (close(fd) < 0)
2869                         ret = error_errno(_("failed to finalize '%s'"), done);
2870                 return ret;
2871         }
2872         return 0;
2873 }
2874
2875 static int save_opts(struct replay_opts *opts)
2876 {
2877         const char *opts_file = git_path_opts_file();
2878         int res = 0;
2879
2880         if (opts->no_commit)
2881                 res |= git_config_set_in_file_gently(opts_file,
2882                                         "options.no-commit", "true");
2883         if (opts->edit)
2884                 res |= git_config_set_in_file_gently(opts_file,
2885                                         "options.edit", "true");
2886         if (opts->allow_empty)
2887                 res |= git_config_set_in_file_gently(opts_file,
2888                                         "options.allow-empty", "true");
2889         if (opts->allow_empty_message)
2890                 res |= git_config_set_in_file_gently(opts_file,
2891                                 "options.allow-empty-message", "true");
2892         if (opts->keep_redundant_commits)
2893                 res |= git_config_set_in_file_gently(opts_file,
2894                                 "options.keep-redundant-commits", "true");
2895         if (opts->signoff)
2896                 res |= git_config_set_in_file_gently(opts_file,
2897                                         "options.signoff", "true");
2898         if (opts->record_origin)
2899                 res |= git_config_set_in_file_gently(opts_file,
2900                                         "options.record-origin", "true");
2901         if (opts->allow_ff)
2902                 res |= git_config_set_in_file_gently(opts_file,
2903                                         "options.allow-ff", "true");
2904         if (opts->mainline) {
2905                 struct strbuf buf = STRBUF_INIT;
2906                 strbuf_addf(&buf, "%d", opts->mainline);
2907                 res |= git_config_set_in_file_gently(opts_file,
2908                                         "options.mainline", buf.buf);
2909                 strbuf_release(&buf);
2910         }
2911         if (opts->strategy)
2912                 res |= git_config_set_in_file_gently(opts_file,
2913                                         "options.strategy", opts->strategy);
2914         if (opts->gpg_sign)
2915                 res |= git_config_set_in_file_gently(opts_file,
2916                                         "options.gpg-sign", opts->gpg_sign);
2917         if (opts->xopts) {
2918                 int i;
2919                 for (i = 0; i < opts->xopts_nr; i++)
2920                         res |= git_config_set_multivar_in_file_gently(opts_file,
2921                                         "options.strategy-option",
2922                                         opts->xopts[i], "^$", 0);
2923         }
2924         if (opts->allow_rerere_auto)
2925                 res |= git_config_set_in_file_gently(opts_file,
2926                                 "options.allow-rerere-auto",
2927                                 opts->allow_rerere_auto == RERERE_AUTOUPDATE ?
2928                                 "true" : "false");
2929
2930         if (opts->explicit_cleanup)
2931                 res |= git_config_set_in_file_gently(opts_file,
2932                                 "options.default-msg-cleanup",
2933                                 describe_cleanup_mode(opts->default_msg_cleanup));
2934         return res;
2935 }
2936
2937 static int make_patch(struct repository *r,
2938                       struct commit *commit,
2939                       struct replay_opts *opts)
2940 {
2941         struct strbuf buf = STRBUF_INIT;
2942         struct rev_info log_tree_opt;
2943         const char *subject, *p;
2944         int res = 0;
2945
2946         p = short_commit_name(commit);
2947         if (write_message(p, strlen(p), rebase_path_stopped_sha(), 1) < 0)
2948                 return -1;
2949         if (update_ref("rebase", "REBASE_HEAD", &commit->object.oid,
2950                        NULL, REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
2951                 res |= error(_("could not update %s"), "REBASE_HEAD");
2952
2953         strbuf_addf(&buf, "%s/patch", get_dir(opts));
2954         memset(&log_tree_opt, 0, sizeof(log_tree_opt));
2955         repo_init_revisions(r, &log_tree_opt, NULL);
2956         log_tree_opt.abbrev = 0;
2957         log_tree_opt.diff = 1;
2958         log_tree_opt.diffopt.output_format = DIFF_FORMAT_PATCH;
2959         log_tree_opt.disable_stdin = 1;
2960         log_tree_opt.no_commit_id = 1;
2961         log_tree_opt.diffopt.file = fopen(buf.buf, "w");
2962         log_tree_opt.diffopt.use_color = GIT_COLOR_NEVER;
2963         if (!log_tree_opt.diffopt.file)
2964                 res |= error_errno(_("could not open '%s'"), buf.buf);
2965         else {
2966                 res |= log_tree_commit(&log_tree_opt, commit);
2967                 fclose(log_tree_opt.diffopt.file);
2968         }
2969         strbuf_reset(&buf);
2970
2971         strbuf_addf(&buf, "%s/message", get_dir(opts));
2972         if (!file_exists(buf.buf)) {
2973                 const char *encoding = get_commit_output_encoding();
2974                 const char *commit_buffer = logmsg_reencode(commit, NULL, encoding);
2975                 find_commit_subject(commit_buffer, &subject);
2976                 res |= write_message(subject, strlen(subject), buf.buf, 1);
2977                 unuse_commit_buffer(commit, commit_buffer);
2978         }
2979         strbuf_release(&buf);
2980
2981         return res;
2982 }
2983
2984 static int intend_to_amend(void)
2985 {
2986         struct object_id head;
2987         char *p;
2988
2989         if (get_oid("HEAD", &head))
2990                 return error(_("cannot read HEAD"));
2991
2992         p = oid_to_hex(&head);
2993         return write_message(p, strlen(p), rebase_path_amend(), 1);
2994 }
2995
2996 static int error_with_patch(struct repository *r,
2997                             struct commit *commit,
2998                             const char *subject, int subject_len,
2999                             struct replay_opts *opts,
3000                             int exit_code, int to_amend)
3001 {
3002         if (commit) {
3003                 if (make_patch(r, commit, opts))
3004                         return -1;
3005         } else if (copy_file(rebase_path_message(),
3006                              git_path_merge_msg(r), 0666))
3007                 return error(_("unable to copy '%s' to '%s'"),
3008                              git_path_merge_msg(r), rebase_path_message());
3009
3010         if (to_amend) {
3011                 if (intend_to_amend())
3012                         return -1;
3013
3014                 fprintf(stderr,
3015                         _("You can amend the commit now, with\n"
3016                           "\n"
3017                           "  git commit --amend %s\n"
3018                           "\n"
3019                           "Once you are satisfied with your changes, run\n"
3020                           "\n"
3021                           "  git rebase --continue\n"),
3022                         gpg_sign_opt_quoted(opts));
3023         } else if (exit_code) {
3024                 if (commit)
3025                         fprintf_ln(stderr, _("Could not apply %s... %.*s"),
3026                                    short_commit_name(commit), subject_len, subject);
3027                 else
3028                         /*
3029                          * We don't have the hash of the parent so
3030                          * just print the line from the todo file.
3031                          */
3032                         fprintf_ln(stderr, _("Could not merge %.*s"),
3033                                    subject_len, subject);
3034         }
3035
3036         return exit_code;
3037 }
3038
3039 static int error_failed_squash(struct repository *r,
3040                                struct commit *commit,
3041                                struct replay_opts *opts,
3042                                int subject_len,
3043                                const char *subject)
3044 {
3045         if (copy_file(rebase_path_message(), rebase_path_squash_msg(), 0666))
3046                 return error(_("could not copy '%s' to '%s'"),
3047                         rebase_path_squash_msg(), rebase_path_message());
3048         unlink(git_path_merge_msg(r));
3049         if (copy_file(git_path_merge_msg(r), rebase_path_message(), 0666))
3050                 return error(_("could not copy '%s' to '%s'"),
3051                              rebase_path_message(),
3052                              git_path_merge_msg(r));
3053         return error_with_patch(r, commit, subject, subject_len, opts, 1, 0);
3054 }
3055
3056 static int do_exec(struct repository *r, const char *command_line)
3057 {
3058         struct argv_array child_env = ARGV_ARRAY_INIT;
3059         const char *child_argv[] = { NULL, NULL };
3060         int dirty, status;
3061
3062         fprintf(stderr, "Executing: %s\n", command_line);
3063         child_argv[0] = command_line;
3064         argv_array_pushf(&child_env, "GIT_DIR=%s", absolute_path(get_git_dir()));
3065         argv_array_pushf(&child_env, "GIT_WORK_TREE=%s",
3066                          absolute_path(get_git_work_tree()));
3067         status = run_command_v_opt_cd_env(child_argv, RUN_USING_SHELL, NULL,
3068                                           child_env.argv);
3069
3070         /* force re-reading of the cache */
3071         if (discard_index(r->index) < 0 || repo_read_index(r) < 0)
3072                 return error(_("could not read index"));
3073
3074         dirty = require_clean_work_tree(r, "rebase", NULL, 1, 1);
3075
3076         if (status) {
3077                 warning(_("execution failed: %s\n%s"
3078                           "You can fix the problem, and then run\n"
3079                           "\n"
3080                           "  git rebase --continue\n"
3081                           "\n"),
3082                         command_line,
3083                         dirty ? N_("and made changes to the index and/or the "
3084                                 "working tree\n") : "");
3085                 if (status == 127)
3086                         /* command not found */
3087                         status = 1;
3088         } else if (dirty) {
3089                 warning(_("execution succeeded: %s\nbut "
3090                           "left changes to the index and/or the working tree\n"
3091                           "Commit or stash your changes, and then run\n"
3092                           "\n"
3093                           "  git rebase --continue\n"
3094                           "\n"), command_line);
3095                 status = 1;
3096         }
3097
3098         argv_array_clear(&child_env);
3099
3100         return status;
3101 }
3102
3103 static int safe_append(const char *filename, const char *fmt, ...)
3104 {
3105         va_list ap;
3106         struct lock_file lock = LOCK_INIT;
3107         int fd = hold_lock_file_for_update(&lock, filename,
3108                                            LOCK_REPORT_ON_ERROR);
3109         struct strbuf buf = STRBUF_INIT;
3110
3111         if (fd < 0)
3112                 return -1;
3113
3114         if (strbuf_read_file(&buf, filename, 0) < 0 && errno != ENOENT) {
3115                 error_errno(_("could not read '%s'"), filename);
3116                 rollback_lock_file(&lock);
3117                 return -1;
3118         }
3119         strbuf_complete(&buf, '\n');
3120         va_start(ap, fmt);
3121         strbuf_vaddf(&buf, fmt, ap);
3122         va_end(ap);
3123
3124         if (write_in_full(fd, buf.buf, buf.len) < 0) {
3125                 error_errno(_("could not write to '%s'"), filename);
3126                 strbuf_release(&buf);
3127                 rollback_lock_file(&lock);
3128                 return -1;
3129         }
3130         if (commit_lock_file(&lock) < 0) {
3131                 strbuf_release(&buf);
3132                 rollback_lock_file(&lock);
3133                 return error(_("failed to finalize '%s'"), filename);
3134         }
3135
3136         strbuf_release(&buf);
3137         return 0;
3138 }
3139
3140 static int do_label(struct repository *r, const char *name, int len)
3141 {
3142         struct ref_store *refs = get_main_ref_store(r);
3143         struct ref_transaction *transaction;
3144         struct strbuf ref_name = STRBUF_INIT, err = STRBUF_INIT;
3145         struct strbuf msg = STRBUF_INIT;
3146         int ret = 0;
3147         struct object_id head_oid;
3148
3149         if (len == 1 && *name == '#')
3150                 return error(_("illegal label name: '%.*s'"), len, name);
3151
3152         strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
3153         strbuf_addf(&msg, "rebase -i (label) '%.*s'", len, name);
3154
3155         transaction = ref_store_transaction_begin(refs, &err);
3156         if (!transaction) {
3157                 error("%s", err.buf);
3158                 ret = -1;
3159         } else if (get_oid("HEAD", &head_oid)) {
3160                 error(_("could not read HEAD"));
3161                 ret = -1;
3162         } else if (ref_transaction_update(transaction, ref_name.buf, &head_oid,
3163                                           NULL, 0, msg.buf, &err) < 0 ||
3164                    ref_transaction_commit(transaction, &err)) {
3165                 error("%s", err.buf);
3166                 ret = -1;
3167         }
3168         ref_transaction_free(transaction);
3169         strbuf_release(&err);
3170         strbuf_release(&msg);
3171
3172         if (!ret)
3173                 ret = safe_append(rebase_path_refs_to_delete(),
3174                                   "%s\n", ref_name.buf);
3175         strbuf_release(&ref_name);
3176
3177         return ret;
3178 }
3179
3180 static const char *reflog_message(struct replay_opts *opts,
3181         const char *sub_action, const char *fmt, ...);
3182
3183 static int do_reset(struct repository *r,
3184                     const char *name, int len,
3185                     struct replay_opts *opts)
3186 {
3187         struct strbuf ref_name = STRBUF_INIT;
3188         struct object_id oid;
3189         struct lock_file lock = LOCK_INIT;
3190         struct tree_desc desc;
3191         struct tree *tree;
3192         struct unpack_trees_options unpack_tree_opts;
3193         int ret = 0;
3194
3195         if (repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0)
3196                 return -1;
3197
3198         if (len == 10 && !strncmp("[new root]", name, len)) {
3199                 if (!opts->have_squash_onto) {
3200                         const char *hex;
3201                         if (commit_tree("", 0, the_hash_algo->empty_tree,
3202                                         NULL, &opts->squash_onto,
3203                                         NULL, NULL))
3204                                 return error(_("writing fake root commit"));
3205                         opts->have_squash_onto = 1;
3206                         hex = oid_to_hex(&opts->squash_onto);
3207                         if (write_message(hex, strlen(hex),
3208                                           rebase_path_squash_onto(), 0))
3209                                 return error(_("writing squash-onto"));
3210                 }
3211                 oidcpy(&oid, &opts->squash_onto);
3212         } else {
3213                 int i;
3214
3215                 /* Determine the length of the label */
3216                 for (i = 0; i < len; i++)
3217                         if (isspace(name[i]))
3218                                 break;
3219                 len = i;
3220
3221                 strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
3222                 if (get_oid(ref_name.buf, &oid) &&
3223                     get_oid(ref_name.buf + strlen("refs/rewritten/"), &oid)) {
3224                         error(_("could not read '%s'"), ref_name.buf);
3225                         rollback_lock_file(&lock);
3226                         strbuf_release(&ref_name);
3227                         return -1;
3228                 }
3229         }
3230
3231         memset(&unpack_tree_opts, 0, sizeof(unpack_tree_opts));
3232         setup_unpack_trees_porcelain(&unpack_tree_opts, "reset");
3233         unpack_tree_opts.head_idx = 1;
3234         unpack_tree_opts.src_index = r->index;
3235         unpack_tree_opts.dst_index = r->index;
3236         unpack_tree_opts.fn = oneway_merge;
3237         unpack_tree_opts.merge = 1;
3238         unpack_tree_opts.update = 1;
3239
3240         if (repo_read_index_unmerged(r)) {
3241                 rollback_lock_file(&lock);
3242                 strbuf_release(&ref_name);
3243                 return error_resolve_conflict(_(action_name(opts)));
3244         }
3245
3246         if (!fill_tree_descriptor(r, &desc, &oid)) {
3247                 error(_("failed to find tree of %s"), oid_to_hex(&oid));
3248                 rollback_lock_file(&lock);
3249                 free((void *)desc.buffer);
3250                 strbuf_release(&ref_name);
3251                 return -1;
3252         }
3253
3254         if (unpack_trees(1, &desc, &unpack_tree_opts)) {
3255                 rollback_lock_file(&lock);
3256                 free((void *)desc.buffer);
3257                 strbuf_release(&ref_name);
3258                 return -1;
3259         }
3260
3261         tree = parse_tree_indirect(&oid);
3262         prime_cache_tree(r, r->index, tree);
3263
3264         if (write_locked_index(r->index, &lock, COMMIT_LOCK) < 0)
3265                 ret = error(_("could not write index"));
3266         free((void *)desc.buffer);
3267
3268         if (!ret)
3269                 ret = update_ref(reflog_message(opts, "reset", "'%.*s'",
3270                                                 len, name), "HEAD", &oid,
3271                                  NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3272
3273         strbuf_release(&ref_name);
3274         return ret;
3275 }
3276
3277 static struct commit *lookup_label(const char *label, int len,
3278                                    struct strbuf *buf)
3279 {
3280         struct commit *commit;
3281
3282         strbuf_reset(buf);
3283         strbuf_addf(buf, "refs/rewritten/%.*s", len, label);
3284         commit = lookup_commit_reference_by_name(buf->buf);
3285         if (!commit) {
3286                 /* fall back to non-rewritten ref or commit */
3287                 strbuf_splice(buf, 0, strlen("refs/rewritten/"), "", 0);
3288                 commit = lookup_commit_reference_by_name(buf->buf);
3289         }
3290
3291         if (!commit)
3292                 error(_("could not resolve '%s'"), buf->buf);
3293
3294         return commit;
3295 }
3296
3297 static int do_merge(struct repository *r,
3298                     struct commit *commit,
3299                     const char *arg, int arg_len,
3300                     int flags, struct replay_opts *opts)
3301 {
3302         int run_commit_flags = (flags & TODO_EDIT_MERGE_MSG) ?
3303                 EDIT_MSG | VERIFY_MSG : 0;
3304         struct strbuf ref_name = STRBUF_INIT;
3305         struct commit *head_commit, *merge_commit, *i;
3306         struct commit_list *bases, *j, *reversed = NULL;
3307         struct commit_list *to_merge = NULL, **tail = &to_merge;
3308         const char *strategy = !opts->xopts_nr &&
3309                 (!opts->strategy || !strcmp(opts->strategy, "recursive")) ?
3310                 NULL : opts->strategy;
3311         struct merge_options o;
3312         int merge_arg_len, oneline_offset, can_fast_forward, ret, k;
3313         static struct lock_file lock;
3314         const char *p;
3315
3316         if (repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0) {
3317                 ret = -1;
3318                 goto leave_merge;
3319         }
3320
3321         head_commit = lookup_commit_reference_by_name("HEAD");
3322         if (!head_commit) {
3323                 ret = error(_("cannot merge without a current revision"));
3324                 goto leave_merge;
3325         }
3326
3327         /*
3328          * For octopus merges, the arg starts with the list of revisions to be
3329          * merged. The list is optionally followed by '#' and the oneline.
3330          */
3331         merge_arg_len = oneline_offset = arg_len;
3332         for (p = arg; p - arg < arg_len; p += strspn(p, " \t\n")) {
3333                 if (!*p)
3334                         break;
3335                 if (*p == '#' && (!p[1] || isspace(p[1]))) {
3336                         p += 1 + strspn(p + 1, " \t\n");
3337                         oneline_offset = p - arg;
3338                         break;
3339                 }
3340                 k = strcspn(p, " \t\n");
3341                 if (!k)
3342                         continue;
3343                 merge_commit = lookup_label(p, k, &ref_name);
3344                 if (!merge_commit) {
3345                         ret = error(_("unable to parse '%.*s'"), k, p);
3346                         goto leave_merge;
3347                 }
3348                 tail = &commit_list_insert(merge_commit, tail)->next;
3349                 p += k;
3350                 merge_arg_len = p - arg;
3351         }
3352
3353         if (!to_merge) {
3354                 ret = error(_("nothing to merge: '%.*s'"), arg_len, arg);
3355                 goto leave_merge;
3356         }
3357
3358         if (opts->have_squash_onto &&
3359             oideq(&head_commit->object.oid, &opts->squash_onto)) {
3360                 /*
3361                  * When the user tells us to "merge" something into a
3362                  * "[new root]", let's simply fast-forward to the merge head.
3363                  */
3364                 rollback_lock_file(&lock);
3365                 if (to_merge->next)
3366                         ret = error(_("octopus merge cannot be executed on "
3367                                       "top of a [new root]"));
3368                 else
3369                         ret = fast_forward_to(r, &to_merge->item->object.oid,
3370                                               &head_commit->object.oid, 0,
3371                                               opts);
3372                 goto leave_merge;
3373         }
3374
3375         if (commit) {
3376                 const char *encoding = get_commit_output_encoding();
3377                 const char *message = logmsg_reencode(commit, NULL, encoding);
3378                 const char *body;
3379                 int len;
3380
3381                 if (!message) {
3382                         ret = error(_("could not get commit message of '%s'"),
3383                                     oid_to_hex(&commit->object.oid));
3384                         goto leave_merge;
3385                 }
3386                 write_author_script(message);
3387                 find_commit_subject(message, &body);
3388                 len = strlen(body);
3389                 ret = write_message(body, len, git_path_merge_msg(r), 0);
3390                 unuse_commit_buffer(commit, message);
3391                 if (ret) {
3392                         error_errno(_("could not write '%s'"),
3393                                     git_path_merge_msg(r));
3394                         goto leave_merge;
3395                 }
3396         } else {
3397                 struct strbuf buf = STRBUF_INIT;
3398                 int len;
3399
3400                 strbuf_addf(&buf, "author %s", git_author_info(0));
3401                 write_author_script(buf.buf);
3402                 strbuf_reset(&buf);
3403
3404                 if (oneline_offset < arg_len) {
3405                         p = arg + oneline_offset;
3406                         len = arg_len - oneline_offset;
3407                 } else {
3408                         strbuf_addf(&buf, "Merge %s '%.*s'",
3409                                     to_merge->next ? "branches" : "branch",
3410                                     merge_arg_len, arg);
3411                         p = buf.buf;
3412                         len = buf.len;
3413                 }
3414
3415                 ret = write_message(p, len, git_path_merge_msg(r), 0);
3416                 strbuf_release(&buf);
3417                 if (ret) {
3418                         error_errno(_("could not write '%s'"),
3419                                     git_path_merge_msg(r));
3420                         goto leave_merge;
3421                 }
3422         }
3423
3424         /*
3425          * If HEAD is not identical to the first parent of the original merge
3426          * commit, we cannot fast-forward.
3427          */
3428         can_fast_forward = opts->allow_ff && commit && commit->parents &&
3429                 oideq(&commit->parents->item->object.oid,
3430                       &head_commit->object.oid);
3431
3432         /*
3433          * If any merge head is different from the original one, we cannot
3434          * fast-forward.
3435          */
3436         if (can_fast_forward) {
3437                 struct commit_list *p = commit->parents->next;
3438
3439                 for (j = to_merge; j && p; j = j->next, p = p->next)
3440                         if (!oideq(&j->item->object.oid,
3441                                    &p->item->object.oid)) {
3442                                 can_fast_forward = 0;
3443                                 break;
3444                         }
3445                 /*
3446                  * If the number of merge heads differs from the original merge
3447                  * commit, we cannot fast-forward.
3448                  */
3449                 if (j || p)
3450                         can_fast_forward = 0;
3451         }
3452
3453         if (can_fast_forward) {
3454                 rollback_lock_file(&lock);
3455                 ret = fast_forward_to(r, &commit->object.oid,
3456                                       &head_commit->object.oid, 0, opts);
3457                 if (flags & TODO_EDIT_MERGE_MSG) {
3458                         run_commit_flags |= AMEND_MSG;
3459                         goto fast_forward_edit;
3460                 }
3461                 goto leave_merge;
3462         }
3463
3464         if (strategy || to_merge->next) {
3465                 /* Octopus merge */
3466                 struct child_process cmd = CHILD_PROCESS_INIT;
3467
3468                 if (read_env_script(&cmd.env_array)) {
3469                         const char *gpg_opt = gpg_sign_opt_quoted(opts);
3470
3471                         ret = error(_(staged_changes_advice), gpg_opt, gpg_opt);
3472                         goto leave_merge;
3473                 }
3474
3475                 cmd.git_cmd = 1;
3476                 argv_array_push(&cmd.args, "merge");
3477                 argv_array_push(&cmd.args, "-s");
3478                 if (!strategy)
3479                         argv_array_push(&cmd.args, "octopus");
3480                 else {
3481                         argv_array_push(&cmd.args, strategy);
3482                         for (k = 0; k < opts->xopts_nr; k++)
3483                                 argv_array_pushf(&cmd.args,
3484                                                  "-X%s", opts->xopts[k]);
3485                 }
3486                 argv_array_push(&cmd.args, "--no-edit");
3487                 argv_array_push(&cmd.args, "--no-ff");
3488                 argv_array_push(&cmd.args, "--no-log");
3489                 argv_array_push(&cmd.args, "--no-stat");
3490                 argv_array_push(&cmd.args, "-F");
3491                 argv_array_push(&cmd.args, git_path_merge_msg(r));
3492                 if (opts->gpg_sign)
3493                         argv_array_push(&cmd.args, opts->gpg_sign);
3494
3495                 /* Add the tips to be merged */
3496                 for (j = to_merge; j; j = j->next)
3497                         argv_array_push(&cmd.args,
3498                                         oid_to_hex(&j->item->object.oid));
3499
3500                 strbuf_release(&ref_name);
3501                 unlink(git_path_cherry_pick_head(r));
3502                 rollback_lock_file(&lock);
3503
3504                 rollback_lock_file(&lock);
3505                 ret = run_command(&cmd);
3506
3507                 /* force re-reading of the cache */
3508                 if (!ret && (discard_index(r->index) < 0 ||
3509                              repo_read_index(r) < 0))
3510                         ret = error(_("could not read index"));
3511                 goto leave_merge;
3512         }
3513
3514         merge_commit = to_merge->item;
3515         bases = get_merge_bases(head_commit, merge_commit);
3516         if (bases && oideq(&merge_commit->object.oid,
3517                            &bases->item->object.oid)) {
3518                 ret = 0;
3519                 /* skip merging an ancestor of HEAD */
3520                 goto leave_merge;
3521         }
3522
3523         write_message(oid_to_hex(&merge_commit->object.oid), the_hash_algo->hexsz,
3524                       git_path_merge_head(r), 0);
3525         write_message("no-ff", 5, git_path_merge_mode(r), 0);
3526
3527         for (j = bases; j; j = j->next)
3528                 commit_list_insert(j->item, &reversed);
3529         free_commit_list(bases);
3530
3531         repo_read_index(r);
3532         init_merge_options(&o, r);
3533         o.branch1 = "HEAD";
3534         o.branch2 = ref_name.buf;
3535         o.buffer_output = 2;
3536
3537         ret = merge_recursive(&o, head_commit, merge_commit, reversed, &i);
3538         if (ret <= 0)
3539                 fputs(o.obuf.buf, stdout);
3540         strbuf_release(&o.obuf);
3541         if (ret < 0) {
3542                 error(_("could not even attempt to merge '%.*s'"),
3543                       merge_arg_len, arg);
3544                 goto leave_merge;
3545         }
3546         /*
3547          * The return value of merge_recursive() is 1 on clean, and 0 on
3548          * unclean merge.
3549          *
3550          * Let's reverse that, so that do_merge() returns 0 upon success and
3551          * 1 upon failed merge (keeping the return value -1 for the cases where
3552          * we will want to reschedule the `merge` command).
3553          */
3554         ret = !ret;
3555
3556         if (r->index->cache_changed &&
3557             write_locked_index(r->index, &lock, COMMIT_LOCK)) {
3558                 ret = error(_("merge: Unable to write new index file"));
3559                 goto leave_merge;
3560         }
3561
3562         rollback_lock_file(&lock);
3563         if (ret)
3564                 repo_rerere(r, opts->allow_rerere_auto);
3565         else
3566                 /*
3567                  * In case of problems, we now want to return a positive
3568                  * value (a negative one would indicate that the `merge`
3569                  * command needs to be rescheduled).
3570                  */
3571         fast_forward_edit:
3572                 ret = !!run_git_commit(r, git_path_merge_msg(r), opts,
3573                                        run_commit_flags);
3574
3575 leave_merge:
3576         strbuf_release(&ref_name);
3577         rollback_lock_file(&lock);
3578         free_commit_list(to_merge);
3579         return ret;
3580 }
3581
3582 static int is_final_fixup(struct todo_list *todo_list)
3583 {
3584         int i = todo_list->current;
3585
3586         if (!is_fixup(todo_list->items[i].command))
3587                 return 0;
3588
3589         while (++i < todo_list->nr)
3590                 if (is_fixup(todo_list->items[i].command))
3591                         return 0;
3592                 else if (!is_noop(todo_list->items[i].command))
3593                         break;
3594         return 1;
3595 }
3596
3597 static enum todo_command peek_command(struct todo_list *todo_list, int offset)
3598 {
3599         int i;
3600
3601         for (i = todo_list->current + offset; i < todo_list->nr; i++)
3602                 if (!is_noop(todo_list->items[i].command))
3603                         return todo_list->items[i].command;
3604
3605         return -1;
3606 }
3607
3608 static int apply_autostash(struct replay_opts *opts)
3609 {
3610         struct strbuf stash_sha1 = STRBUF_INIT;
3611         struct child_process child = CHILD_PROCESS_INIT;
3612         int ret = 0;
3613
3614         if (!read_oneliner(&stash_sha1, rebase_path_autostash(), 1)) {
3615                 strbuf_release(&stash_sha1);
3616                 return 0;
3617         }
3618         strbuf_trim(&stash_sha1);
3619
3620         child.git_cmd = 1;
3621         child.no_stdout = 1;
3622         child.no_stderr = 1;
3623         argv_array_push(&child.args, "stash");
3624         argv_array_push(&child.args, "apply");
3625         argv_array_push(&child.args, stash_sha1.buf);
3626         if (!run_command(&child))
3627                 fprintf(stderr, _("Applied autostash.\n"));
3628         else {
3629                 struct child_process store = CHILD_PROCESS_INIT;
3630
3631                 store.git_cmd = 1;
3632                 argv_array_push(&store.args, "stash");
3633                 argv_array_push(&store.args, "store");
3634                 argv_array_push(&store.args, "-m");
3635                 argv_array_push(&store.args, "autostash");
3636                 argv_array_push(&store.args, "-q");
3637                 argv_array_push(&store.args, stash_sha1.buf);
3638                 if (run_command(&store))
3639                         ret = error(_("cannot store %s"), stash_sha1.buf);
3640                 else
3641                         fprintf(stderr,
3642                                 _("Applying autostash resulted in conflicts.\n"
3643                                   "Your changes are safe in the stash.\n"
3644                                   "You can run \"git stash pop\" or"
3645                                   " \"git stash drop\" at any time.\n"));
3646         }
3647
3648         strbuf_release(&stash_sha1);
3649         return ret;
3650 }
3651
3652 static const char *reflog_message(struct replay_opts *opts,
3653         const char *sub_action, const char *fmt, ...)
3654 {
3655         va_list ap;
3656         static struct strbuf buf = STRBUF_INIT;
3657
3658         va_start(ap, fmt);
3659         strbuf_reset(&buf);
3660         strbuf_addstr(&buf, action_name(opts));
3661         if (sub_action)
3662                 strbuf_addf(&buf, " (%s)", sub_action);
3663         if (fmt) {
3664                 strbuf_addstr(&buf, ": ");
3665                 strbuf_vaddf(&buf, fmt, ap);
3666         }
3667         va_end(ap);
3668
3669         return buf.buf;
3670 }
3671
3672 static int run_git_checkout(struct repository *r, struct replay_opts *opts,
3673                             const char *commit, const char *action)
3674 {
3675         struct child_process cmd = CHILD_PROCESS_INIT;
3676         int ret;
3677
3678         cmd.git_cmd = 1;
3679
3680         argv_array_push(&cmd.args, "checkout");
3681         argv_array_push(&cmd.args, commit);
3682         argv_array_pushf(&cmd.env_array, GIT_REFLOG_ACTION "=%s", action);
3683
3684         if (opts->verbose)
3685                 ret = run_command(&cmd);
3686         else
3687                 ret = run_command_silent_on_success(&cmd);
3688
3689         if (!ret)
3690                 discard_index(r->index);
3691
3692         return ret;
3693 }
3694
3695 int prepare_branch_to_be_rebased(struct repository *r, struct replay_opts *opts,
3696                                  const char *commit)
3697 {
3698         const char *action;
3699
3700         if (commit && *commit) {
3701                 action = reflog_message(opts, "start", "checkout %s", commit);
3702                 if (run_git_checkout(r, opts, commit, action))
3703                         return error(_("could not checkout %s"), commit);
3704         }
3705
3706         return 0;
3707 }
3708
3709 static int checkout_onto(struct repository *r, struct replay_opts *opts,
3710                          const char *onto_name, const struct object_id *onto,
3711                          const char *orig_head)
3712 {
3713         struct object_id oid;
3714         const char *action = reflog_message(opts, "start", "checkout %s", onto_name);
3715
3716         if (get_oid(orig_head, &oid))
3717                 return error(_("%s: not a valid OID"), orig_head);
3718
3719         if (run_git_checkout(r, opts, oid_to_hex(onto), action)) {
3720                 apply_autostash(opts);
3721                 sequencer_remove_state(opts);
3722                 return error(_("could not detach HEAD"));
3723         }
3724
3725         return update_ref(NULL, "ORIG_HEAD", &oid, NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3726 }
3727
3728 static int stopped_at_head(struct repository *r)
3729 {
3730         struct object_id head;
3731         struct commit *commit;
3732         struct commit_message message;
3733
3734         if (get_oid("HEAD", &head) ||
3735             !(commit = lookup_commit(r, &head)) ||
3736             parse_commit(commit) || get_message(commit, &message))
3737                 fprintf(stderr, _("Stopped at HEAD\n"));
3738         else {
3739                 fprintf(stderr, _("Stopped at %s\n"), message.label);
3740                 free_message(commit, &message);
3741         }
3742         return 0;
3743
3744 }
3745
3746 static const char rescheduled_advice[] =
3747 N_("Could not execute the todo command\n"
3748 "\n"
3749 "    %.*s"
3750 "\n"
3751 "It has been rescheduled; To edit the command before continuing, please\n"
3752 "edit the todo list first:\n"
3753 "\n"
3754 "    git rebase --edit-todo\n"
3755 "    git rebase --continue\n");
3756
3757 static int pick_commits(struct repository *r,
3758                         struct todo_list *todo_list,
3759                         struct replay_opts *opts)
3760 {
3761         int res = 0, reschedule = 0;
3762
3763         setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
3764         if (opts->allow_ff)
3765                 assert(!(opts->signoff || opts->no_commit ||
3766                                 opts->record_origin || opts->edit));
3767         if (read_and_refresh_cache(r, opts))
3768                 return -1;
3769
3770         while (todo_list->current < todo_list->nr) {
3771                 struct todo_item *item = todo_list->items + todo_list->current;
3772                 const char *arg = todo_item_get_arg(todo_list, item);
3773                 int check_todo = 0;
3774
3775                 if (save_todo(todo_list, opts))
3776                         return -1;
3777                 if (is_rebase_i(opts)) {
3778                         if (item->command != TODO_COMMENT) {
3779                                 FILE *f = fopen(rebase_path_msgnum(), "w");
3780
3781                                 todo_list->done_nr++;
3782
3783                                 if (f) {
3784                                         fprintf(f, "%d\n", todo_list->done_nr);
3785                                         fclose(f);
3786                                 }
3787                                 if (!opts->quiet)
3788                                         fprintf(stderr, "Rebasing (%d/%d)%s",
3789                                                 todo_list->done_nr,
3790                                                 todo_list->total_nr,
3791                                                 opts->verbose ? "\n" : "\r");
3792                         }
3793                         unlink(rebase_path_message());
3794                         unlink(rebase_path_author_script());
3795                         unlink(rebase_path_stopped_sha());
3796                         unlink(rebase_path_amend());
3797                         unlink(git_path_merge_head(r));
3798                         delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
3799
3800                         if (item->command == TODO_BREAK) {
3801                                 if (!opts->verbose)
3802                                         term_clear_line();
3803                                 return stopped_at_head(r);
3804                         }
3805                 }
3806                 if (item->command <= TODO_SQUASH) {
3807                         if (is_rebase_i(opts))
3808                                 setenv("GIT_REFLOG_ACTION", reflog_message(opts,
3809                                         command_to_string(item->command), NULL),
3810                                         1);
3811                         res = do_pick_commit(r, item->command, item->commit,
3812                                              opts, is_final_fixup(todo_list),
3813                                              &check_todo);
3814                         if (is_rebase_i(opts) && res < 0) {
3815                                 /* Reschedule */
3816                                 advise(_(rescheduled_advice),
3817                                        get_item_line_length(todo_list,
3818                                                             todo_list->current),
3819                                        get_item_line(todo_list,
3820                                                      todo_list->current));
3821                                 todo_list->current--;
3822                                 if (save_todo(todo_list, opts))
3823                                         return -1;
3824                         }
3825                         if (item->command == TODO_EDIT) {
3826                                 struct commit *commit = item->commit;
3827                                 if (!res) {
3828                                         if (!opts->verbose)
3829                                                 term_clear_line();
3830                                         fprintf(stderr,
3831                                                 _("Stopped at %s...  %.*s\n"),
3832                                                 short_commit_name(commit),
3833                                                 item->arg_len, arg);
3834                                 }
3835                                 return error_with_patch(r, commit,
3836                                         arg, item->arg_len, opts, res, !res);
3837                         }
3838                         if (is_rebase_i(opts) && !res)
3839                                 record_in_rewritten(&item->commit->object.oid,
3840                                         peek_command(todo_list, 1));
3841                         if (res && is_fixup(item->command)) {
3842                                 if (res == 1)
3843                                         intend_to_amend();
3844                                 return error_failed_squash(r, item->commit, opts,
3845                                         item->arg_len, arg);
3846                         } else if (res && is_rebase_i(opts) && item->commit) {
3847                                 int to_amend = 0;
3848                                 struct object_id oid;
3849
3850                                 /*
3851                                  * If we are rewording and have either
3852                                  * fast-forwarded already, or are about to
3853                                  * create a new root commit, we want to amend,
3854                                  * otherwise we do not.
3855                                  */
3856                                 if (item->command == TODO_REWORD &&
3857                                     !get_oid("HEAD", &oid) &&
3858                                     (oideq(&item->commit->object.oid, &oid) ||
3859                                      (opts->have_squash_onto &&
3860                                       oideq(&opts->squash_onto, &oid))))
3861                                         to_amend = 1;
3862
3863                                 return res | error_with_patch(r, item->commit,
3864                                                 arg, item->arg_len, opts,
3865                                                 res, to_amend);
3866                         }
3867                 } else if (item->command == TODO_EXEC) {
3868                         char *end_of_arg = (char *)(arg + item->arg_len);
3869                         int saved = *end_of_arg;
3870
3871                         if (!opts->verbose)
3872                                 term_clear_line();
3873                         *end_of_arg = '\0';
3874                         res = do_exec(r, arg);
3875                         *end_of_arg = saved;
3876
3877                         if (res) {
3878                                 if (opts->reschedule_failed_exec)
3879                                         reschedule = 1;
3880                         }
3881                         check_todo = 1;
3882                 } else if (item->command == TODO_LABEL) {
3883                         if ((res = do_label(r, arg, item->arg_len)))
3884                                 reschedule = 1;
3885                 } else if (item->command == TODO_RESET) {
3886                         if ((res = do_reset(r, arg, item->arg_len, opts)))
3887                                 reschedule = 1;
3888                 } else if (item->command == TODO_MERGE) {
3889                         if ((res = do_merge(r, item->commit,
3890                                             arg, item->arg_len,
3891                                             item->flags, opts)) < 0)
3892                                 reschedule = 1;
3893                         else if (item->commit)
3894                                 record_in_rewritten(&item->commit->object.oid,
3895                                                     peek_command(todo_list, 1));
3896                         if (res > 0)
3897                                 /* failed with merge conflicts */
3898                                 return error_with_patch(r, item->commit,
3899                                                         arg, item->arg_len,
3900                                                         opts, res, 0);
3901                 } else if (!is_noop(item->command))
3902                         return error(_("unknown command %d"), item->command);
3903
3904                 if (reschedule) {
3905                         advise(_(rescheduled_advice),
3906                                get_item_line_length(todo_list,
3907                                                     todo_list->current),
3908                                get_item_line(todo_list, todo_list->current));
3909                         todo_list->current--;
3910                         if (save_todo(todo_list, opts))
3911                                 return -1;
3912                         if (item->commit)
3913                                 return error_with_patch(r,
3914                                                         item->commit,
3915                                                         arg, item->arg_len,
3916                                                         opts, res, 0);
3917                 } else if (check_todo && !res) {
3918                         struct stat st;
3919
3920                         if (stat(get_todo_path(opts), &st)) {
3921                                 res = error_errno(_("could not stat '%s'"),
3922                                                   get_todo_path(opts));
3923                         } else if (match_stat_data(&todo_list->stat, &st)) {
3924                                 /* Reread the todo file if it has changed. */
3925                                 todo_list_release(todo_list);
3926                                 if (read_populate_todo(r, todo_list, opts))
3927                                         res = -1; /* message was printed */
3928                                 /* `current` will be incremented below */
3929                                 todo_list->current = -1;
3930                         }
3931                 }
3932
3933                 todo_list->current++;
3934                 if (res)
3935                         return res;
3936         }
3937
3938         if (is_rebase_i(opts)) {
3939                 struct strbuf head_ref = STRBUF_INIT, buf = STRBUF_INIT;
3940                 struct stat st;
3941
3942                 /* Stopped in the middle, as planned? */
3943                 if (todo_list->current < todo_list->nr)
3944                         return 0;
3945
3946                 if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
3947                                 starts_with(head_ref.buf, "refs/")) {
3948                         const char *msg;
3949                         struct object_id head, orig;
3950                         int res;
3951
3952                         if (get_oid("HEAD", &head)) {
3953                                 res = error(_("cannot read HEAD"));
3954 cleanup_head_ref:
3955                                 strbuf_release(&head_ref);
3956                                 strbuf_release(&buf);
3957                                 return res;
3958                         }
3959                         if (!read_oneliner(&buf, rebase_path_orig_head(), 0) ||
3960                                         get_oid_hex(buf.buf, &orig)) {
3961                                 res = error(_("could not read orig-head"));
3962                                 goto cleanup_head_ref;
3963                         }
3964                         strbuf_reset(&buf);
3965                         if (!read_oneliner(&buf, rebase_path_onto(), 0)) {
3966                                 res = error(_("could not read 'onto'"));
3967                                 goto cleanup_head_ref;
3968                         }
3969                         msg = reflog_message(opts, "finish", "%s onto %s",
3970                                 head_ref.buf, buf.buf);
3971                         if (update_ref(msg, head_ref.buf, &head, &orig,
3972                                        REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR)) {
3973                                 res = error(_("could not update %s"),
3974                                         head_ref.buf);
3975                                 goto cleanup_head_ref;
3976                         }
3977                         msg = reflog_message(opts, "finish", "returning to %s",
3978                                 head_ref.buf);
3979                         if (create_symref("HEAD", head_ref.buf, msg)) {
3980                                 res = error(_("could not update HEAD to %s"),
3981                                         head_ref.buf);
3982                                 goto cleanup_head_ref;
3983                         }
3984                         strbuf_reset(&buf);
3985                 }
3986
3987                 if (opts->verbose) {
3988                         struct rev_info log_tree_opt;
3989                         struct object_id orig, head;
3990
3991                         memset(&log_tree_opt, 0, sizeof(log_tree_opt));
3992                         repo_init_revisions(r, &log_tree_opt, NULL);
3993                         log_tree_opt.diff = 1;
3994                         log_tree_opt.diffopt.output_format =
3995                                 DIFF_FORMAT_DIFFSTAT;
3996                         log_tree_opt.disable_stdin = 1;
3997
3998                         if (read_oneliner(&buf, rebase_path_orig_head(), 0) &&
3999                             !get_oid(buf.buf, &orig) &&
4000                             !get_oid("HEAD", &head)) {
4001                                 diff_tree_oid(&orig, &head, "",
4002                                               &log_tree_opt.diffopt);
4003                                 log_tree_diff_flush(&log_tree_opt);
4004                         }
4005                 }
4006                 flush_rewritten_pending();
4007                 if (!stat(rebase_path_rewritten_list(), &st) &&
4008                                 st.st_size > 0) {
4009                         struct child_process child = CHILD_PROCESS_INIT;
4010                         const char *post_rewrite_hook =
4011                                 find_hook("post-rewrite");
4012
4013                         child.in = open(rebase_path_rewritten_list(), O_RDONLY);
4014                         child.git_cmd = 1;
4015                         argv_array_push(&child.args, "notes");
4016                         argv_array_push(&child.args, "copy");
4017                         argv_array_push(&child.args, "--for-rewrite=rebase");
4018                         /* we don't care if this copying failed */
4019                         run_command(&child);
4020
4021                         if (post_rewrite_hook) {
4022                                 struct child_process hook = CHILD_PROCESS_INIT;
4023
4024                                 hook.in = open(rebase_path_rewritten_list(),
4025                                         O_RDONLY);
4026                                 hook.stdout_to_stderr = 1;
4027                                 hook.trace2_hook_name = "post-rewrite";
4028                                 argv_array_push(&hook.args, post_rewrite_hook);
4029                                 argv_array_push(&hook.args, "rebase");
4030                                 /* we don't care if this hook failed */
4031                                 run_command(&hook);
4032                         }
4033                 }
4034                 apply_autostash(opts);
4035
4036                 if (!opts->quiet) {
4037                         if (!opts->verbose)
4038                                 term_clear_line();
4039                         fprintf(stderr,
4040                                 "Successfully rebased and updated %s.\n",
4041                                 head_ref.buf);
4042                 }
4043
4044                 strbuf_release(&buf);
4045                 strbuf_release(&head_ref);
4046         }
4047
4048         /*
4049          * Sequence of picks finished successfully; cleanup by
4050          * removing the .git/sequencer directory
4051          */
4052         return sequencer_remove_state(opts);
4053 }
4054
4055 static int continue_single_pick(struct repository *r)
4056 {
4057         const char *argv[] = { "commit", NULL };
4058
4059         if (!file_exists(git_path_cherry_pick_head(r)) &&
4060             !file_exists(git_path_revert_head(r)))
4061                 return error(_("no cherry-pick or revert in progress"));
4062         return run_command_v_opt(argv, RUN_GIT_CMD);
4063 }
4064
4065 static int commit_staged_changes(struct repository *r,
4066                                  struct replay_opts *opts,
4067                                  struct todo_list *todo_list)
4068 {
4069         unsigned int flags = ALLOW_EMPTY | EDIT_MSG;
4070         unsigned int final_fixup = 0, is_clean;
4071
4072         if (has_unstaged_changes(r, 1))
4073                 return error(_("cannot rebase: You have unstaged changes."));
4074
4075         is_clean = !has_uncommitted_changes(r, 0);
4076
4077         if (file_exists(rebase_path_amend())) {
4078                 struct strbuf rev = STRBUF_INIT;
4079                 struct object_id head, to_amend;
4080
4081                 if (get_oid("HEAD", &head))
4082                         return error(_("cannot amend non-existing commit"));
4083                 if (!read_oneliner(&rev, rebase_path_amend(), 0))
4084                         return error(_("invalid file: '%s'"), rebase_path_amend());
4085                 if (get_oid_hex(rev.buf, &to_amend))
4086                         return error(_("invalid contents: '%s'"),
4087                                 rebase_path_amend());
4088                 if (!is_clean && !oideq(&head, &to_amend))
4089                         return error(_("\nYou have uncommitted changes in your "
4090                                        "working tree. Please, commit them\n"
4091                                        "first and then run 'git rebase "
4092                                        "--continue' again."));
4093                 /*
4094                  * When skipping a failed fixup/squash, we need to edit the
4095                  * commit message, the current fixup list and count, and if it
4096                  * was the last fixup/squash in the chain, we need to clean up
4097                  * the commit message and if there was a squash, let the user
4098                  * edit it.
4099                  */
4100                 if (!is_clean || !opts->current_fixup_count)
4101                         ; /* this is not the final fixup */
4102                 else if (!oideq(&head, &to_amend) ||
4103                          !file_exists(rebase_path_stopped_sha())) {
4104                         /* was a final fixup or squash done manually? */
4105                         if (!is_fixup(peek_command(todo_list, 0))) {
4106                                 unlink(rebase_path_fixup_msg());
4107                                 unlink(rebase_path_squash_msg());
4108                                 unlink(rebase_path_current_fixups());
4109                                 strbuf_reset(&opts->current_fixups);
4110                                 opts->current_fixup_count = 0;
4111                         }
4112                 } else {
4113                         /* we are in a fixup/squash chain */
4114                         const char *p = opts->current_fixups.buf;
4115                         int len = opts->current_fixups.len;
4116
4117                         opts->current_fixup_count--;
4118                         if (!len)
4119                                 BUG("Incorrect current_fixups:\n%s", p);
4120                         while (len && p[len - 1] != '\n')
4121                                 len--;
4122                         strbuf_setlen(&opts->current_fixups, len);
4123                         if (write_message(p, len, rebase_path_current_fixups(),
4124                                           0) < 0)
4125                                 return error(_("could not write file: '%s'"),
4126                                              rebase_path_current_fixups());
4127
4128                         /*
4129                          * If a fixup/squash in a fixup/squash chain failed, the
4130                          * commit message is already correct, no need to commit
4131                          * it again.
4132                          *
4133                          * Only if it is the final command in the fixup/squash
4134                          * chain, and only if the chain is longer than a single
4135                          * fixup/squash command (which was just skipped), do we
4136                          * actually need to re-commit with a cleaned up commit
4137                          * message.
4138                          */
4139                         if (opts->current_fixup_count > 0 &&
4140                             !is_fixup(peek_command(todo_list, 0))) {
4141                                 final_fixup = 1;
4142                                 /*
4143                                  * If there was not a single "squash" in the
4144                                  * chain, we only need to clean up the commit
4145                                  * message, no need to bother the user with
4146                                  * opening the commit message in the editor.
4147                                  */
4148                                 if (!starts_with(p, "squash ") &&
4149                                     !strstr(p, "\nsquash "))
4150                                         flags = (flags & ~EDIT_MSG) | CLEANUP_MSG;
4151                         } else if (is_fixup(peek_command(todo_list, 0))) {
4152                                 /*
4153                                  * We need to update the squash message to skip
4154                                  * the latest commit message.
4155                                  */
4156                                 struct commit *commit;
4157                                 const char *path = rebase_path_squash_msg();
4158                                 const char *encoding = get_commit_output_encoding();
4159
4160                                 if (parse_head(r, &commit) ||
4161                                     !(p = logmsg_reencode(commit, NULL, encoding)) ||
4162                                     write_message(p, strlen(p), path, 0)) {
4163                                         unuse_commit_buffer(commit, p);
4164                                         return error(_("could not write file: "
4165                                                        "'%s'"), path);
4166                                 }
4167                                 unuse_commit_buffer(commit, p);
4168                         }
4169                 }
4170
4171                 strbuf_release(&rev);
4172                 flags |= AMEND_MSG;
4173         }
4174
4175         if (is_clean) {
4176                 const char *cherry_pick_head = git_path_cherry_pick_head(r);
4177
4178                 if (file_exists(cherry_pick_head) && unlink(cherry_pick_head))
4179                         return error(_("could not remove CHERRY_PICK_HEAD"));
4180                 if (!final_fixup)
4181                         return 0;
4182         }
4183
4184         if (run_git_commit(r, final_fixup ? NULL : rebase_path_message(),
4185                            opts, flags))
4186                 return error(_("could not commit staged changes."));
4187         unlink(rebase_path_amend());
4188         unlink(git_path_merge_head(r));
4189         if (final_fixup) {
4190                 unlink(rebase_path_fixup_msg());
4191                 unlink(rebase_path_squash_msg());
4192         }
4193         if (opts->current_fixup_count > 0) {
4194                 /*
4195                  * Whether final fixup or not, we just cleaned up the commit
4196                  * message...
4197                  */
4198                 unlink(rebase_path_current_fixups());
4199                 strbuf_reset(&opts->current_fixups);
4200                 opts->current_fixup_count = 0;
4201         }
4202         return 0;
4203 }
4204
4205 int sequencer_continue(struct repository *r, struct replay_opts *opts)
4206 {
4207         struct todo_list todo_list = TODO_LIST_INIT;
4208         int res;
4209
4210         if (read_and_refresh_cache(r, opts))
4211                 return -1;
4212
4213         if (read_populate_opts(opts))
4214                 return -1;
4215         if (is_rebase_i(opts)) {
4216                 if ((res = read_populate_todo(r, &todo_list, opts)))
4217                         goto release_todo_list;
4218                 if (commit_staged_changes(r, opts, &todo_list))
4219                         return -1;
4220         } else if (!file_exists(get_todo_path(opts)))
4221                 return continue_single_pick(r);
4222         else if ((res = read_populate_todo(r, &todo_list, opts)))
4223                 goto release_todo_list;
4224
4225         if (!is_rebase_i(opts)) {
4226                 /* Verify that the conflict has been resolved */
4227                 if (file_exists(git_path_cherry_pick_head(r)) ||
4228                     file_exists(git_path_revert_head(r))) {
4229                         res = continue_single_pick(r);
4230                         if (res)
4231                                 goto release_todo_list;
4232                 }
4233                 if (index_differs_from(r, "HEAD", NULL, 0)) {
4234                         res = error_dirty_index(r, opts);
4235                         goto release_todo_list;
4236                 }
4237                 todo_list.current++;
4238         } else if (file_exists(rebase_path_stopped_sha())) {
4239                 struct strbuf buf = STRBUF_INIT;
4240                 struct object_id oid;
4241
4242                 if (read_oneliner(&buf, rebase_path_stopped_sha(), 1) &&
4243                     !get_oid_committish(buf.buf, &oid))
4244                         record_in_rewritten(&oid, peek_command(&todo_list, 0));
4245                 strbuf_release(&buf);
4246         }
4247
4248         res = pick_commits(r, &todo_list, opts);
4249 release_todo_list:
4250         todo_list_release(&todo_list);
4251         return res;
4252 }
4253
4254 static int single_pick(struct repository *r,
4255                        struct commit *cmit,
4256                        struct replay_opts *opts)
4257 {
4258         int check_todo;
4259
4260         setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
4261         return do_pick_commit(r, opts->action == REPLAY_PICK ?
4262                               TODO_PICK : TODO_REVERT, cmit, opts, 0,
4263                               &check_todo);
4264 }
4265
4266 int sequencer_pick_revisions(struct repository *r,
4267                              struct replay_opts *opts)
4268 {
4269         struct todo_list todo_list = TODO_LIST_INIT;
4270         struct object_id oid;
4271         int i, res;
4272
4273         assert(opts->revs);
4274         if (read_and_refresh_cache(r, opts))
4275                 return -1;
4276
4277         for (i = 0; i < opts->revs->pending.nr; i++) {
4278                 struct object_id oid;
4279                 const char *name = opts->revs->pending.objects[i].name;
4280
4281                 /* This happens when using --stdin. */
4282                 if (!strlen(name))
4283                         continue;
4284
4285                 if (!get_oid(name, &oid)) {
4286                         if (!lookup_commit_reference_gently(r, &oid, 1)) {
4287                                 enum object_type type = oid_object_info(r,
4288                                                                         &oid,
4289                                                                         NULL);
4290                                 return error(_("%s: can't cherry-pick a %s"),
4291                                         name, type_name(type));
4292                         }
4293                 } else
4294                         return error(_("%s: bad revision"), name);
4295         }
4296
4297         /*
4298          * If we were called as "git cherry-pick <commit>", just
4299          * cherry-pick/revert it, set CHERRY_PICK_HEAD /
4300          * REVERT_HEAD, and don't touch the sequencer state.
4301          * This means it is possible to cherry-pick in the middle
4302          * of a cherry-pick sequence.
4303          */
4304         if (opts->revs->cmdline.nr == 1 &&
4305             opts->revs->cmdline.rev->whence == REV_CMD_REV &&
4306             opts->revs->no_walk &&
4307             !opts->revs->cmdline.rev->flags) {
4308                 struct commit *cmit;
4309                 if (prepare_revision_walk(opts->revs))
4310                         return error(_("revision walk setup failed"));
4311                 cmit = get_revision(opts->revs);
4312                 if (!cmit)
4313                         return error(_("empty commit set passed"));
4314                 if (get_revision(opts->revs))
4315                         BUG("unexpected extra commit from walk");
4316                 return single_pick(r, cmit, opts);
4317         }
4318
4319         /*
4320          * Start a new cherry-pick/ revert sequence; but
4321          * first, make sure that an existing one isn't in
4322          * progress
4323          */
4324
4325         if (walk_revs_populate_todo(&todo_list, opts) ||
4326                         create_seq_dir(r) < 0)
4327                 return -1;
4328         if (get_oid("HEAD", &oid) && (opts->action == REPLAY_REVERT))
4329                 return error(_("can't revert as initial commit"));
4330         if (save_head(oid_to_hex(&oid)))
4331                 return -1;
4332         if (save_opts(opts))
4333                 return -1;
4334         update_abort_safety_file();
4335         res = pick_commits(r, &todo_list, opts);
4336         todo_list_release(&todo_list);
4337         return res;
4338 }
4339
4340 void append_signoff(struct strbuf *msgbuf, size_t ignore_footer, unsigned flag)
4341 {
4342         unsigned no_dup_sob = flag & APPEND_SIGNOFF_DEDUP;
4343         struct strbuf sob = STRBUF_INIT;
4344         int has_footer;
4345
4346         strbuf_addstr(&sob, sign_off_header);
4347         strbuf_addstr(&sob, fmt_name(WANT_COMMITTER_IDENT));
4348         strbuf_addch(&sob, '\n');
4349
4350         if (!ignore_footer)
4351                 strbuf_complete_line(msgbuf);
4352
4353         /*
4354          * If the whole message buffer is equal to the sob, pretend that we
4355          * found a conforming footer with a matching sob
4356          */
4357         if (msgbuf->len - ignore_footer == sob.len &&
4358             !strncmp(msgbuf->buf, sob.buf, sob.len))
4359                 has_footer = 3;
4360         else
4361                 has_footer = has_conforming_footer(msgbuf, &sob, ignore_footer);
4362
4363         if (!has_footer) {
4364                 const char *append_newlines = NULL;
4365                 size_t len = msgbuf->len - ignore_footer;
4366
4367                 if (!len) {
4368                         /*
4369                          * The buffer is completely empty.  Leave foom for
4370                          * the title and body to be filled in by the user.
4371                          */
4372                         append_newlines = "\n\n";
4373                 } else if (len == 1) {
4374                         /*
4375                          * Buffer contains a single newline.  Add another
4376                          * so that we leave room for the title and body.
4377                          */
4378                         append_newlines = "\n";
4379                 } else if (msgbuf->buf[len - 2] != '\n') {
4380                         /*
4381                          * Buffer ends with a single newline.  Add another
4382                          * so that there is an empty line between the message
4383                          * body and the sob.
4384                          */
4385                         append_newlines = "\n";
4386                 } /* else, the buffer already ends with two newlines. */
4387
4388                 if (append_newlines)
4389                         strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4390                                 append_newlines, strlen(append_newlines));
4391         }
4392
4393         if (has_footer != 3 && (!no_dup_sob || has_footer != 2))
4394                 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4395                                 sob.buf, sob.len);
4396
4397         strbuf_release(&sob);
4398 }
4399
4400 struct labels_entry {
4401         struct hashmap_entry entry;
4402         char label[FLEX_ARRAY];
4403 };
4404
4405 static int labels_cmp(const void *fndata, const struct hashmap_entry *eptr,
4406                       const struct hashmap_entry *entry_or_key, const void *key)
4407 {
4408         const struct labels_entry *a, *b;
4409
4410         a = container_of(eptr, const struct labels_entry, entry);
4411         b = container_of(entry_or_key, const struct labels_entry, entry);
4412
4413         return key ? strcmp(a->label, key) : strcmp(a->label, b->label);
4414 }
4415
4416 struct string_entry {
4417         struct oidmap_entry entry;
4418         char string[FLEX_ARRAY];
4419 };
4420
4421 struct label_state {
4422         struct oidmap commit2label;
4423         struct hashmap labels;
4424         struct strbuf buf;
4425 };
4426
4427 static const char *label_oid(struct object_id *oid, const char *label,
4428                              struct label_state *state)
4429 {
4430         struct labels_entry *labels_entry;
4431         struct string_entry *string_entry;
4432         struct object_id dummy;
4433         int i;
4434
4435         string_entry = oidmap_get(&state->commit2label, oid);
4436         if (string_entry)
4437                 return string_entry->string;
4438
4439         /*
4440          * For "uninteresting" commits, i.e. commits that are not to be
4441          * rebased, and which can therefore not be labeled, we use a unique
4442          * abbreviation of the commit name. This is slightly more complicated
4443          * than calling find_unique_abbrev() because we also need to make
4444          * sure that the abbreviation does not conflict with any other
4445          * label.
4446          *
4447          * We disallow "interesting" commits to be labeled by a string that
4448          * is a valid full-length hash, to ensure that we always can find an
4449          * abbreviation for any uninteresting commit's names that does not
4450          * clash with any other label.
4451          */
4452         strbuf_reset(&state->buf);
4453         if (!label) {
4454                 char *p;
4455
4456                 strbuf_grow(&state->buf, GIT_MAX_HEXSZ);
4457                 label = p = state->buf.buf;
4458
4459                 find_unique_abbrev_r(p, oid, default_abbrev);
4460
4461                 /*
4462                  * We may need to extend the abbreviated hash so that there is
4463                  * no conflicting label.
4464                  */
4465                 if (hashmap_get_from_hash(&state->labels, strihash(p), p)) {
4466                         size_t i = strlen(p) + 1;
4467
4468                         oid_to_hex_r(p, oid);
4469                         for (; i < the_hash_algo->hexsz; i++) {
4470                                 char save = p[i];
4471                                 p[i] = '\0';
4472                                 if (!hashmap_get_from_hash(&state->labels,
4473                                                            strihash(p), p))
4474                                         break;
4475                                 p[i] = save;
4476                         }
4477                 }
4478         } else {
4479                 struct strbuf *buf = &state->buf;
4480
4481                 /*
4482                  * Sanitize labels by replacing non-alpha-numeric characters
4483                  * (including white-space ones) by dashes, as they might be
4484                  * illegal in file names (and hence in ref names).
4485                  *
4486                  * Note that we retain non-ASCII UTF-8 characters (identified
4487                  * via the most significant bit). They should be all acceptable
4488                  * in file names. We do not validate the UTF-8 here, that's not
4489                  * the job of this function.
4490                  */
4491                 for (; *label; label++)
4492                         if ((*label & 0x80) || isalnum(*label))
4493                                 strbuf_addch(buf, *label);
4494                         /* avoid leading dash and double-dashes */
4495                         else if (buf->len && buf->buf[buf->len - 1] != '-')
4496                                 strbuf_addch(buf, '-');
4497                 if (!buf->len) {
4498                         strbuf_addstr(buf, "rev-");
4499                         strbuf_add_unique_abbrev(buf, oid, default_abbrev);
4500                 }
4501                 label = buf->buf;
4502
4503                 if ((buf->len == the_hash_algo->hexsz &&
4504                      !get_oid_hex(label, &dummy)) ||
4505                     (buf->len == 1 && *label == '#') ||
4506                     hashmap_get_from_hash(&state->labels,
4507                                           strihash(label), label)) {
4508                         /*
4509                          * If the label already exists, or if the label is a
4510                          * valid full OID, or the label is a '#' (which we use
4511                          * as a separator between merge heads and oneline), we
4512                          * append a dash and a number to make it unique.
4513                          */
4514                         size_t len = buf->len;
4515
4516                         for (i = 2; ; i++) {
4517                                 strbuf_setlen(buf, len);
4518                                 strbuf_addf(buf, "-%d", i);
4519                                 if (!hashmap_get_from_hash(&state->labels,
4520                                                            strihash(buf->buf),
4521                                                            buf->buf))
4522                                         break;
4523                         }
4524
4525                         label = buf->buf;
4526                 }
4527         }
4528
4529         FLEX_ALLOC_STR(labels_entry, label, label);
4530         hashmap_entry_init(&labels_entry->entry, strihash(label));
4531         hashmap_add(&state->labels, &labels_entry->entry);
4532
4533         FLEX_ALLOC_STR(string_entry, string, label);
4534         oidcpy(&string_entry->entry.oid, oid);
4535         oidmap_put(&state->commit2label, string_entry);
4536
4537         return string_entry->string;
4538 }
4539
4540 static int make_script_with_merges(struct pretty_print_context *pp,
4541                                    struct rev_info *revs, struct strbuf *out,
4542                                    unsigned flags)
4543 {
4544         int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4545         int rebase_cousins = flags & TODO_LIST_REBASE_COUSINS;
4546         int root_with_onto = flags & TODO_LIST_ROOT_WITH_ONTO;
4547         struct strbuf buf = STRBUF_INIT, oneline = STRBUF_INIT;
4548         struct strbuf label = STRBUF_INIT;
4549         struct commit_list *commits = NULL, **tail = &commits, *iter;
4550         struct commit_list *tips = NULL, **tips_tail = &tips;
4551         struct commit *commit;
4552         struct oidmap commit2todo = OIDMAP_INIT;
4553         struct string_entry *entry;
4554         struct oidset interesting = OIDSET_INIT, child_seen = OIDSET_INIT,
4555                 shown = OIDSET_INIT;
4556         struct label_state state = { OIDMAP_INIT, { NULL }, STRBUF_INIT };
4557
4558         int abbr = flags & TODO_LIST_ABBREVIATE_CMDS;
4559         const char *cmd_pick = abbr ? "p" : "pick",
4560                 *cmd_label = abbr ? "l" : "label",
4561                 *cmd_reset = abbr ? "t" : "reset",
4562                 *cmd_merge = abbr ? "m" : "merge";
4563
4564         oidmap_init(&commit2todo, 0);
4565         oidmap_init(&state.commit2label, 0);
4566         hashmap_init(&state.labels, labels_cmp, NULL, 0);
4567         strbuf_init(&state.buf, 32);
4568
4569         if (revs->cmdline.nr && (revs->cmdline.rev[0].flags & BOTTOM)) {
4570                 struct labels_entry *onto_label_entry;
4571                 struct object_id *oid = &revs->cmdline.rev[0].item->oid;
4572                 FLEX_ALLOC_STR(entry, string, "onto");
4573                 oidcpy(&entry->entry.oid, oid);
4574                 oidmap_put(&state.commit2label, entry);
4575
4576                 FLEX_ALLOC_STR(onto_label_entry, label, "onto");
4577                 hashmap_entry_init(&onto_label_entry->entry, strihash("onto"));
4578                 hashmap_add(&state.labels, &onto_label_entry->entry);
4579         }
4580
4581         /*
4582          * First phase:
4583          * - get onelines for all commits
4584          * - gather all branch tips (i.e. 2nd or later parents of merges)
4585          * - label all branch tips
4586          */
4587         while ((commit = get_revision(revs))) {
4588                 struct commit_list *to_merge;
4589                 const char *p1, *p2;
4590                 struct object_id *oid;
4591                 int is_empty;
4592
4593                 tail = &commit_list_insert(commit, tail)->next;
4594                 oidset_insert(&interesting, &commit->object.oid);
4595
4596                 is_empty = is_original_commit_empty(commit);
4597                 if (!is_empty && (commit->object.flags & PATCHSAME))
4598                         continue;
4599
4600                 strbuf_reset(&oneline);
4601                 pretty_print_commit(pp, commit, &oneline);
4602
4603                 to_merge = commit->parents ? commit->parents->next : NULL;
4604                 if (!to_merge) {
4605                         /* non-merge commit: easy case */
4606                         strbuf_reset(&buf);
4607                         if (!keep_empty && is_empty)
4608                                 strbuf_addf(&buf, "%c ", comment_line_char);
4609                         strbuf_addf(&buf, "%s %s %s", cmd_pick,
4610                                     oid_to_hex(&commit->object.oid),
4611                                     oneline.buf);
4612
4613                         FLEX_ALLOC_STR(entry, string, buf.buf);
4614                         oidcpy(&entry->entry.oid, &commit->object.oid);
4615                         oidmap_put(&commit2todo, entry);
4616
4617                         continue;
4618                 }
4619
4620                 /* Create a label */
4621                 strbuf_reset(&label);
4622                 if (skip_prefix(oneline.buf, "Merge ", &p1) &&
4623                     (p1 = strchr(p1, '\'')) &&
4624                     (p2 = strchr(++p1, '\'')))
4625                         strbuf_add(&label, p1, p2 - p1);
4626                 else if (skip_prefix(oneline.buf, "Merge pull request ",
4627                                      &p1) &&
4628                          (p1 = strstr(p1, " from ")))
4629                         strbuf_addstr(&label, p1 + strlen(" from "));
4630                 else
4631                         strbuf_addbuf(&label, &oneline);
4632
4633                 strbuf_reset(&buf);
4634                 strbuf_addf(&buf, "%s -C %s",
4635                             cmd_merge, oid_to_hex(&commit->object.oid));
4636
4637                 /* label the tips of merged branches */
4638                 for (; to_merge; to_merge = to_merge->next) {
4639                         oid = &to_merge->item->object.oid;
4640                         strbuf_addch(&buf, ' ');
4641
4642                         if (!oidset_contains(&interesting, oid)) {
4643                                 strbuf_addstr(&buf, label_oid(oid, NULL,
4644                                                               &state));
4645                                 continue;
4646                         }
4647
4648                         tips_tail = &commit_list_insert(to_merge->item,
4649                                                         tips_tail)->next;
4650
4651                         strbuf_addstr(&buf, label_oid(oid, label.buf, &state));
4652                 }
4653                 strbuf_addf(&buf, " # %s", oneline.buf);
4654
4655                 FLEX_ALLOC_STR(entry, string, buf.buf);
4656                 oidcpy(&entry->entry.oid, &commit->object.oid);
4657                 oidmap_put(&commit2todo, entry);
4658         }
4659
4660         /*
4661          * Second phase:
4662          * - label branch points
4663          * - add HEAD to the branch tips
4664          */
4665         for (iter = commits; iter; iter = iter->next) {
4666                 struct commit_list *parent = iter->item->parents;
4667                 for (; parent; parent = parent->next) {
4668                         struct object_id *oid = &parent->item->object.oid;
4669                         if (!oidset_contains(&interesting, oid))
4670                                 continue;
4671                         if (oidset_insert(&child_seen, oid))
4672                                 label_oid(oid, "branch-point", &state);
4673                 }
4674
4675                 /* Add HEAD as implicit "tip of branch" */
4676                 if (!iter->next)
4677                         tips_tail = &commit_list_insert(iter->item,
4678                                                         tips_tail)->next;
4679         }
4680
4681         /*
4682          * Third phase: output the todo list. This is a bit tricky, as we
4683          * want to avoid jumping back and forth between revisions. To
4684          * accomplish that goal, we walk backwards from the branch tips,
4685          * gathering commits not yet shown, reversing the list on the fly,
4686          * then outputting that list (labeling revisions as needed).
4687          */
4688         strbuf_addf(out, "%s onto\n", cmd_label);
4689         for (iter = tips; iter; iter = iter->next) {
4690                 struct commit_list *list = NULL, *iter2;
4691
4692                 commit = iter->item;
4693                 if (oidset_contains(&shown, &commit->object.oid))
4694                         continue;
4695                 entry = oidmap_get(&state.commit2label, &commit->object.oid);
4696
4697                 if (entry)
4698                         strbuf_addf(out, "\n%c Branch %s\n", comment_line_char, entry->string);
4699                 else
4700                         strbuf_addch(out, '\n');
4701
4702                 while (oidset_contains(&interesting, &commit->object.oid) &&
4703                        !oidset_contains(&shown, &commit->object.oid)) {
4704                         commit_list_insert(commit, &list);
4705                         if (!commit->parents) {
4706                                 commit = NULL;
4707                                 break;
4708                         }
4709                         commit = commit->parents->item;
4710                 }
4711
4712                 if (!commit)
4713                         strbuf_addf(out, "%s %s\n", cmd_reset,
4714                                     rebase_cousins || root_with_onto ?
4715                                     "onto" : "[new root]");
4716                 else {
4717                         const char *to = NULL;
4718
4719                         entry = oidmap_get(&state.commit2label,
4720                                            &commit->object.oid);
4721                         if (entry)
4722                                 to = entry->string;
4723                         else if (!rebase_cousins)
4724                                 to = label_oid(&commit->object.oid, NULL,
4725                                                &state);
4726
4727                         if (!to || !strcmp(to, "onto"))
4728                                 strbuf_addf(out, "%s onto\n", cmd_reset);
4729                         else {
4730                                 strbuf_reset(&oneline);
4731                                 pretty_print_commit(pp, commit, &oneline);
4732                                 strbuf_addf(out, "%s %s # %s\n",
4733                                             cmd_reset, to, oneline.buf);
4734                         }
4735                 }
4736
4737                 for (iter2 = list; iter2; iter2 = iter2->next) {
4738                         struct object_id *oid = &iter2->item->object.oid;
4739                         entry = oidmap_get(&commit2todo, oid);
4740                         /* only show if not already upstream */
4741                         if (entry)
4742                                 strbuf_addf(out, "%s\n", entry->string);
4743                         entry = oidmap_get(&state.commit2label, oid);
4744                         if (entry)
4745                                 strbuf_addf(out, "%s %s\n",
4746                                             cmd_label, entry->string);
4747                         oidset_insert(&shown, oid);
4748                 }
4749
4750                 free_commit_list(list);
4751         }
4752
4753         free_commit_list(commits);
4754         free_commit_list(tips);
4755
4756         strbuf_release(&label);
4757         strbuf_release(&oneline);
4758         strbuf_release(&buf);
4759
4760         oidmap_free(&commit2todo, 1);
4761         oidmap_free(&state.commit2label, 1);
4762         hashmap_free_entries(&state.labels, struct labels_entry, entry);
4763         strbuf_release(&state.buf);
4764
4765         return 0;
4766 }
4767
4768 int sequencer_make_script(struct repository *r, struct strbuf *out, int argc,
4769                           const char **argv, unsigned flags)
4770 {
4771         char *format = NULL;
4772         struct pretty_print_context pp = {0};
4773         struct rev_info revs;
4774         struct commit *commit;
4775         int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4776         const char *insn = flags & TODO_LIST_ABBREVIATE_CMDS ? "p" : "pick";
4777         int rebase_merges = flags & TODO_LIST_REBASE_MERGES;
4778
4779         repo_init_revisions(r, &revs, NULL);
4780         revs.verbose_header = 1;
4781         if (!rebase_merges)
4782                 revs.max_parents = 1;
4783         revs.cherry_mark = 1;
4784         revs.limited = 1;
4785         revs.reverse = 1;
4786         revs.right_only = 1;
4787         revs.sort_order = REV_SORT_IN_GRAPH_ORDER;
4788         revs.topo_order = 1;
4789
4790         revs.pretty_given = 1;
4791         git_config_get_string("rebase.instructionFormat", &format);
4792         if (!format || !*format) {
4793                 free(format);
4794                 format = xstrdup("%s");
4795         }
4796         get_commit_format(format, &revs);
4797         free(format);
4798         pp.fmt = revs.commit_format;
4799         pp.output_encoding = get_log_output_encoding();
4800
4801         if (setup_revisions(argc, argv, &revs, NULL) > 1)
4802                 return error(_("make_script: unhandled options"));
4803
4804         if (prepare_revision_walk(&revs) < 0)
4805                 return error(_("make_script: error preparing revisions"));
4806
4807         if (rebase_merges)
4808                 return make_script_with_merges(&pp, &revs, out, flags);
4809
4810         while ((commit = get_revision(&revs))) {
4811                 int is_empty  = is_original_commit_empty(commit);
4812
4813                 if (!is_empty && (commit->object.flags & PATCHSAME))
4814                         continue;
4815                 if (!keep_empty && is_empty)
4816                         strbuf_addf(out, "%c ", comment_line_char);
4817                 strbuf_addf(out, "%s %s ", insn,
4818                             oid_to_hex(&commit->object.oid));
4819                 pretty_print_commit(&pp, commit, out);
4820                 strbuf_addch(out, '\n');
4821         }
4822         return 0;
4823 }
4824
4825 /*
4826  * Add commands after pick and (series of) squash/fixup commands
4827  * in the todo list.
4828  */
4829 void todo_list_add_exec_commands(struct todo_list *todo_list,
4830                                  struct string_list *commands)
4831 {
4832         struct strbuf *buf = &todo_list->buf;
4833         size_t base_offset = buf->len;
4834         int i, insert, nr = 0, alloc = 0;
4835         struct todo_item *items = NULL, *base_items = NULL;
4836
4837         base_items = xcalloc(commands->nr, sizeof(struct todo_item));
4838         for (i = 0; i < commands->nr; i++) {
4839                 size_t command_len = strlen(commands->items[i].string);
4840
4841                 strbuf_addstr(buf, commands->items[i].string);
4842                 strbuf_addch(buf, '\n');
4843
4844                 base_items[i].command = TODO_EXEC;
4845                 base_items[i].offset_in_buf = base_offset;
4846                 base_items[i].arg_offset = base_offset + strlen("exec ");
4847                 base_items[i].arg_len = command_len - strlen("exec ");
4848
4849                 base_offset += command_len + 1;
4850         }
4851
4852         /*
4853          * Insert <commands> after every pick. Here, fixup/squash chains
4854          * are considered part of the pick, so we insert the commands *after*
4855          * those chains if there are any.
4856          *
4857          * As we insert the exec commands immediately after rearranging
4858          * any fixups and before the user edits the list, a fixup chain
4859          * can never contain comments (any comments are empty picks that
4860          * have been commented out because the user did not specify
4861          * --keep-empty).  So, it is safe to insert an exec command
4862          * without looking at the command following a comment.
4863          */
4864         insert = 0;
4865         for (i = 0; i < todo_list->nr; i++) {
4866                 enum todo_command command = todo_list->items[i].command;
4867                 if (insert && !is_fixup(command)) {
4868                         ALLOC_GROW(items, nr + commands->nr, alloc);
4869                         COPY_ARRAY(items + nr, base_items, commands->nr);
4870                         nr += commands->nr;
4871
4872                         insert = 0;
4873                 }
4874
4875                 ALLOC_GROW(items, nr + 1, alloc);
4876                 items[nr++] = todo_list->items[i];
4877
4878                 if (command == TODO_PICK || command == TODO_MERGE)
4879                         insert = 1;
4880         }
4881
4882         /* insert or append final <commands> */
4883         if (insert || nr == todo_list->nr) {
4884                 ALLOC_GROW(items, nr + commands->nr, alloc);
4885                 COPY_ARRAY(items + nr, base_items, commands->nr);
4886                 nr += commands->nr;
4887         }
4888
4889         free(base_items);
4890         FREE_AND_NULL(todo_list->items);
4891         todo_list->items = items;
4892         todo_list->nr = nr;
4893         todo_list->alloc = alloc;
4894 }
4895
4896 static void todo_list_to_strbuf(struct repository *r, struct todo_list *todo_list,
4897                                 struct strbuf *buf, int num, unsigned flags)
4898 {
4899         struct todo_item *item;
4900         int i, max = todo_list->nr;
4901
4902         if (num > 0 && num < max)
4903                 max = num;
4904
4905         for (item = todo_list->items, i = 0; i < max; i++, item++) {
4906                 /* if the item is not a command write it and continue */
4907                 if (item->command >= TODO_COMMENT) {
4908                         strbuf_addf(buf, "%.*s\n", item->arg_len,
4909                                     todo_item_get_arg(todo_list, item));
4910                         continue;
4911                 }
4912
4913                 /* add command to the buffer */
4914                 if (flags & TODO_LIST_ABBREVIATE_CMDS)
4915                         strbuf_addch(buf, command_to_char(item->command));
4916                 else
4917                         strbuf_addstr(buf, command_to_string(item->command));
4918
4919                 /* add commit id */
4920                 if (item->commit) {
4921                         const char *oid = flags & TODO_LIST_SHORTEN_IDS ?
4922                                           short_commit_name(item->commit) :
4923                                           oid_to_hex(&item->commit->object.oid);
4924
4925                         if (item->command == TODO_MERGE) {
4926                                 if (item->flags & TODO_EDIT_MERGE_MSG)
4927                                         strbuf_addstr(buf, " -c");
4928                                 else
4929                                         strbuf_addstr(buf, " -C");
4930                         }
4931
4932                         strbuf_addf(buf, " %s", oid);
4933                 }
4934
4935                 /* add all the rest */
4936                 if (!item->arg_len)
4937                         strbuf_addch(buf, '\n');
4938                 else
4939                         strbuf_addf(buf, " %.*s\n", item->arg_len,
4940                                     todo_item_get_arg(todo_list, item));
4941         }
4942 }
4943
4944 int todo_list_write_to_file(struct repository *r, struct todo_list *todo_list,
4945                             const char *file, const char *shortrevisions,
4946                             const char *shortonto, int num, unsigned flags)
4947 {
4948         int res;
4949         struct strbuf buf = STRBUF_INIT;
4950
4951         todo_list_to_strbuf(r, todo_list, &buf, num, flags);
4952         if (flags & TODO_LIST_APPEND_TODO_HELP)
4953                 append_todo_help(flags & TODO_LIST_KEEP_EMPTY, count_commands(todo_list),
4954                                  shortrevisions, shortonto, &buf);
4955
4956         res = write_message(buf.buf, buf.len, file, 0);
4957         strbuf_release(&buf);
4958
4959         return res;
4960 }
4961
4962 static const char edit_todo_list_advice[] =
4963 N_("You can fix this with 'git rebase --edit-todo' "
4964 "and then run 'git rebase --continue'.\n"
4965 "Or you can abort the rebase with 'git rebase"
4966 " --abort'.\n");
4967
4968 int check_todo_list_from_file(struct repository *r)
4969 {
4970         struct todo_list old_todo = TODO_LIST_INIT, new_todo = TODO_LIST_INIT;
4971         int res = 0;
4972
4973         if (strbuf_read_file_or_whine(&new_todo.buf, rebase_path_todo()) < 0) {
4974                 res = -1;
4975                 goto out;
4976         }
4977
4978         if (strbuf_read_file_or_whine(&old_todo.buf, rebase_path_todo_backup()) < 0) {
4979                 res = -1;
4980                 goto out;
4981         }
4982
4983         res = todo_list_parse_insn_buffer(r, old_todo.buf.buf, &old_todo);
4984         if (!res)
4985                 res = todo_list_parse_insn_buffer(r, new_todo.buf.buf, &new_todo);
4986         if (!res)
4987                 res = todo_list_check(&old_todo, &new_todo);
4988         if (res)
4989                 fprintf(stderr, _(edit_todo_list_advice));
4990 out:
4991         todo_list_release(&old_todo);
4992         todo_list_release(&new_todo);
4993
4994         return res;
4995 }
4996
4997 /* skip picking commits whose parents are unchanged */
4998 static int skip_unnecessary_picks(struct repository *r,
4999                                   struct todo_list *todo_list,
5000                                   struct object_id *base_oid)
5001 {
5002         struct object_id *parent_oid;
5003         int i;
5004
5005         for (i = 0; i < todo_list->nr; i++) {
5006                 struct todo_item *item = todo_list->items + i;
5007
5008                 if (item->command >= TODO_NOOP)
5009                         continue;
5010                 if (item->command != TODO_PICK)
5011                         break;
5012                 if (parse_commit(item->commit)) {
5013                         return error(_("could not parse commit '%s'"),
5014                                 oid_to_hex(&item->commit->object.oid));
5015                 }
5016                 if (!item->commit->parents)
5017                         break; /* root commit */
5018                 if (item->commit->parents->next)
5019                         break; /* merge commit */
5020                 parent_oid = &item->commit->parents->item->object.oid;
5021                 if (!oideq(parent_oid, base_oid))
5022                         break;
5023                 oidcpy(base_oid, &item->commit->object.oid);
5024         }
5025         if (i > 0) {
5026                 const char *done_path = rebase_path_done();
5027
5028                 if (todo_list_write_to_file(r, todo_list, done_path, NULL, NULL, i, 0)) {
5029                         error_errno(_("could not write to '%s'"), done_path);
5030                         return -1;
5031                 }
5032
5033                 MOVE_ARRAY(todo_list->items, todo_list->items + i, todo_list->nr - i);
5034                 todo_list->nr -= i;
5035                 todo_list->current = 0;
5036
5037                 if (is_fixup(peek_command(todo_list, 0)))
5038                         record_in_rewritten(base_oid, peek_command(todo_list, 0));
5039         }
5040
5041         return 0;
5042 }
5043
5044 int complete_action(struct repository *r, struct replay_opts *opts, unsigned flags,
5045                     const char *shortrevisions, const char *onto_name,
5046                     struct commit *onto, const char *orig_head,
5047                     struct string_list *commands, unsigned autosquash,
5048                     struct todo_list *todo_list)
5049 {
5050         const char *shortonto, *todo_file = rebase_path_todo();
5051         struct todo_list new_todo = TODO_LIST_INIT;
5052         struct strbuf *buf = &todo_list->buf;
5053         struct object_id oid = onto->object.oid;
5054         int res;
5055
5056         shortonto = find_unique_abbrev(&oid, DEFAULT_ABBREV);
5057
5058         if (buf->len == 0) {
5059                 struct todo_item *item = append_new_todo(todo_list);
5060                 item->command = TODO_NOOP;
5061                 item->commit = NULL;
5062                 item->arg_len = item->arg_offset = item->flags = item->offset_in_buf = 0;
5063         }
5064
5065         if (autosquash && todo_list_rearrange_squash(todo_list))
5066                 return -1;
5067
5068         if (commands->nr)
5069                 todo_list_add_exec_commands(todo_list, commands);
5070
5071         if (count_commands(todo_list) == 0) {
5072                 apply_autostash(opts);
5073                 sequencer_remove_state(opts);
5074
5075                 return error(_("nothing to do"));
5076         }
5077
5078         res = edit_todo_list(r, todo_list, &new_todo, shortrevisions,
5079                              shortonto, flags);
5080         if (res == -1)
5081                 return -1;
5082         else if (res == -2) {
5083                 apply_autostash(opts);
5084                 sequencer_remove_state(opts);
5085
5086                 return -1;
5087         } else if (res == -3) {
5088                 apply_autostash(opts);
5089                 sequencer_remove_state(opts);
5090                 todo_list_release(&new_todo);
5091
5092                 return error(_("nothing to do"));
5093         }
5094
5095         if (todo_list_parse_insn_buffer(r, new_todo.buf.buf, &new_todo) ||
5096             todo_list_check(todo_list, &new_todo)) {
5097                 fprintf(stderr, _(edit_todo_list_advice));
5098                 checkout_onto(r, opts, onto_name, &onto->object.oid, orig_head);
5099                 todo_list_release(&new_todo);
5100
5101                 return -1;
5102         }
5103
5104         if (opts->allow_ff && skip_unnecessary_picks(r, &new_todo, &oid)) {
5105                 todo_list_release(&new_todo);
5106                 return error(_("could not skip unnecessary pick commands"));
5107         }
5108
5109         if (todo_list_write_to_file(r, &new_todo, todo_file, NULL, NULL, -1,
5110                                     flags & ~(TODO_LIST_SHORTEN_IDS))) {
5111                 todo_list_release(&new_todo);
5112                 return error_errno(_("could not write '%s'"), todo_file);
5113         }
5114
5115         todo_list_release(&new_todo);
5116
5117         if (checkout_onto(r, opts, onto_name, &oid, orig_head))
5118                 return -1;
5119
5120         if (require_clean_work_tree(r, "rebase", "", 1, 1))
5121                 return -1;
5122
5123         return sequencer_continue(r, opts);
5124 }
5125
5126 struct subject2item_entry {
5127         struct hashmap_entry entry;
5128         int i;
5129         char subject[FLEX_ARRAY];
5130 };
5131
5132 static int subject2item_cmp(const void *fndata,
5133                             const struct hashmap_entry *eptr,
5134                             const struct hashmap_entry *entry_or_key,
5135                             const void *key)
5136 {
5137         const struct subject2item_entry *a, *b;
5138
5139         a = container_of(eptr, const struct subject2item_entry, entry);
5140         b = container_of(entry_or_key, const struct subject2item_entry, entry);
5141
5142         return key ? strcmp(a->subject, key) : strcmp(a->subject, b->subject);
5143 }
5144
5145 define_commit_slab(commit_todo_item, struct todo_item *);
5146
5147 /*
5148  * Rearrange the todo list that has both "pick commit-id msg" and "pick
5149  * commit-id fixup!/squash! msg" in it so that the latter is put immediately
5150  * after the former, and change "pick" to "fixup"/"squash".
5151  *
5152  * Note that if the config has specified a custom instruction format, each log
5153  * message will have to be retrieved from the commit (as the oneline in the
5154  * script cannot be trusted) in order to normalize the autosquash arrangement.
5155  */
5156 int todo_list_rearrange_squash(struct todo_list *todo_list)
5157 {
5158         struct hashmap subject2item;
5159         int rearranged = 0, *next, *tail, i, nr = 0, alloc = 0;
5160         char **subjects;
5161         struct commit_todo_item commit_todo;
5162         struct todo_item *items = NULL;
5163
5164         init_commit_todo_item(&commit_todo);
5165         /*
5166          * The hashmap maps onelines to the respective todo list index.
5167          *
5168          * If any items need to be rearranged, the next[i] value will indicate
5169          * which item was moved directly after the i'th.
5170          *
5171          * In that case, last[i] will indicate the index of the latest item to
5172          * be moved to appear after the i'th.
5173          */
5174         hashmap_init(&subject2item, subject2item_cmp, NULL, todo_list->nr);
5175         ALLOC_ARRAY(next, todo_list->nr);
5176         ALLOC_ARRAY(tail, todo_list->nr);
5177         ALLOC_ARRAY(subjects, todo_list->nr);
5178         for (i = 0; i < todo_list->nr; i++) {
5179                 struct strbuf buf = STRBUF_INIT;
5180                 struct todo_item *item = todo_list->items + i;
5181                 const char *commit_buffer, *subject, *p;
5182                 size_t subject_len;
5183                 int i2 = -1;
5184                 struct subject2item_entry *entry;
5185
5186                 next[i] = tail[i] = -1;
5187                 if (!item->commit || item->command == TODO_DROP) {
5188                         subjects[i] = NULL;
5189                         continue;
5190                 }
5191
5192                 if (is_fixup(item->command)) {
5193                         clear_commit_todo_item(&commit_todo);
5194                         return error(_("the script was already rearranged."));
5195                 }
5196
5197                 *commit_todo_item_at(&commit_todo, item->commit) = item;
5198
5199                 parse_commit(item->commit);
5200                 commit_buffer = logmsg_reencode(item->commit, NULL, "UTF-8");
5201                 find_commit_subject(commit_buffer, &subject);
5202                 format_subject(&buf, subject, " ");
5203                 subject = subjects[i] = strbuf_detach(&buf, &subject_len);
5204                 unuse_commit_buffer(item->commit, commit_buffer);
5205                 if ((skip_prefix(subject, "fixup! ", &p) ||
5206                      skip_prefix(subject, "squash! ", &p))) {
5207                         struct commit *commit2;
5208
5209                         for (;;) {
5210                                 while (isspace(*p))
5211                                         p++;
5212                                 if (!skip_prefix(p, "fixup! ", &p) &&
5213                                     !skip_prefix(p, "squash! ", &p))
5214                                         break;
5215                         }
5216
5217                         entry = hashmap_get_entry_from_hash(&subject2item,
5218                                                 strhash(p), p,
5219                                                 struct subject2item_entry,
5220                                                 entry);
5221                         if (entry)
5222                                 /* found by title */
5223                                 i2 = entry->i;
5224                         else if (!strchr(p, ' ') &&
5225                                  (commit2 =
5226                                   lookup_commit_reference_by_name(p)) &&
5227                                  *commit_todo_item_at(&commit_todo, commit2))
5228                                 /* found by commit name */
5229                                 i2 = *commit_todo_item_at(&commit_todo, commit2)
5230                                         - todo_list->items;
5231                         else {
5232                                 /* copy can be a prefix of the commit subject */
5233                                 for (i2 = 0; i2 < i; i2++)
5234                                         if (subjects[i2] &&
5235                                             starts_with(subjects[i2], p))
5236                                                 break;
5237                                 if (i2 == i)
5238                                         i2 = -1;
5239                         }
5240                 }
5241                 if (i2 >= 0) {
5242                         rearranged = 1;
5243                         todo_list->items[i].command =
5244                                 starts_with(subject, "fixup!") ?
5245                                 TODO_FIXUP : TODO_SQUASH;
5246                         if (next[i2] < 0)
5247                                 next[i2] = i;
5248                         else
5249                                 next[tail[i2]] = i;
5250                         tail[i2] = i;
5251                 } else if (!hashmap_get_from_hash(&subject2item,
5252                                                 strhash(subject), subject)) {
5253                         FLEX_ALLOC_MEM(entry, subject, subject, subject_len);
5254                         entry->i = i;
5255                         hashmap_entry_init(&entry->entry,
5256                                         strhash(entry->subject));
5257                         hashmap_put(&subject2item, &entry->entry);
5258                 }
5259         }
5260
5261         if (rearranged) {
5262                 for (i = 0; i < todo_list->nr; i++) {
5263                         enum todo_command command = todo_list->items[i].command;
5264                         int cur = i;
5265
5266                         /*
5267                          * Initially, all commands are 'pick's. If it is a
5268                          * fixup or a squash now, we have rearranged it.
5269                          */
5270                         if (is_fixup(command))
5271                                 continue;
5272
5273                         while (cur >= 0) {
5274                                 ALLOC_GROW(items, nr + 1, alloc);
5275                                 items[nr++] = todo_list->items[cur];
5276                                 cur = next[cur];
5277                         }
5278                 }
5279
5280                 FREE_AND_NULL(todo_list->items);
5281                 todo_list->items = items;
5282                 todo_list->nr = nr;
5283                 todo_list->alloc = alloc;
5284         }
5285
5286         free(next);
5287         free(tail);
5288         for (i = 0; i < todo_list->nr; i++)
5289                 free(subjects[i]);
5290         free(subjects);
5291         hashmap_free_entries(&subject2item, struct subject2item_entry, entry);
5292
5293         clear_commit_todo_item(&commit_todo);
5294
5295         return 0;
5296 }