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