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