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