94f4831a0c3abdbe60c2abd135332ac6a293730f
   1#include "cache.h"
   2#include "config.h"
   3#include "lockfile.h"
   4#include "dir.h"
   5#include "object.h"
   6#include "commit.h"
   7#include "sequencer.h"
   8#include "tag.h"
   9#include "run-command.h"
  10#include "exec-cmd.h"
  11#include "utf8.h"
  12#include "cache-tree.h"
  13#include "diff.h"
  14#include "revision.h"
  15#include "rerere.h"
  16#include "merge-recursive.h"
  17#include "refs.h"
  18#include "argv-array.h"
  19#include "quote.h"
  20#include "trailer.h"
  21#include "log-tree.h"
  22#include "wt-status.h"
  23#include "hashmap.h"
  24#include "notes-utils.h"
  25#include "sigchain.h"
  26#include "unpack-trees.h"
  27#include "worktree.h"
  28
  29#define GIT_REFLOG_ACTION "GIT_REFLOG_ACTION"
  30
  31const char sign_off_header[] = "Signed-off-by: ";
  32static const char cherry_picked_prefix[] = "(cherry picked from commit ";
  33
  34GIT_PATH_FUNC(git_path_commit_editmsg, "COMMIT_EDITMSG")
  35
  36GIT_PATH_FUNC(git_path_seq_dir, "sequencer")
  37
  38static GIT_PATH_FUNC(git_path_todo_file, "sequencer/todo")
  39static GIT_PATH_FUNC(git_path_opts_file, "sequencer/opts")
  40static GIT_PATH_FUNC(git_path_head_file, "sequencer/head")
  41static GIT_PATH_FUNC(git_path_abort_safety_file, "sequencer/abort-safety")
  42
  43static GIT_PATH_FUNC(rebase_path, "rebase-merge")
  44/*
  45 * The file containing rebase commands, comments, and empty lines.
  46 * This file is created by "git rebase -i" then edited by the user. As
  47 * the lines are processed, they are removed from the front of this
  48 * file and written to the tail of 'done'.
  49 */
  50static GIT_PATH_FUNC(rebase_path_todo, "rebase-merge/git-rebase-todo")
  51/*
  52 * The rebase command lines that have already been processed. A line
  53 * is moved here when it is first handled, before any associated user
  54 * actions.
  55 */
  56static GIT_PATH_FUNC(rebase_path_done, "rebase-merge/done")
  57/*
  58 * The file to keep track of how many commands were already processed (e.g.
  59 * for the prompt).
  60 */
  61static GIT_PATH_FUNC(rebase_path_msgnum, "rebase-merge/msgnum");
  62/*
  63 * The file to keep track of how many commands are to be processed in total
  64 * (e.g. for the prompt).
  65 */
  66static GIT_PATH_FUNC(rebase_path_msgtotal, "rebase-merge/end");
  67/*
  68 * The commit message that is planned to be used for any changes that
  69 * need to be committed following a user interaction.
  70 */
  71static GIT_PATH_FUNC(rebase_path_message, "rebase-merge/message")
  72/*
  73 * The file into which is accumulated the suggested commit message for
  74 * squash/fixup commands. When the first of a series of squash/fixups
  75 * is seen, the file is created and the commit message from the
  76 * previous commit and from the first squash/fixup commit are written
  77 * to it. The commit message for each subsequent squash/fixup commit
  78 * is appended to the file as it is processed.
  79 *
  80 * The first line of the file is of the form
  81 *     # This is a combination of $count commits.
  82 * where $count is the number of commits whose messages have been
  83 * written to the file so far (including the initial "pick" commit).
  84 * Each time that a commit message is processed, this line is read and
  85 * updated. It is deleted just before the combined commit is made.
  86 */
  87static GIT_PATH_FUNC(rebase_path_squash_msg, "rebase-merge/message-squash")
  88/*
  89 * If the current series of squash/fixups has not yet included a squash
  90 * command, then this file exists and holds the commit message of the
  91 * original "pick" commit.  (If the series ends without a "squash"
  92 * command, then this can be used as the commit message of the combined
  93 * commit without opening the editor.)
  94 */
  95static GIT_PATH_FUNC(rebase_path_fixup_msg, "rebase-merge/message-fixup")
  96/*
  97 * A script to set the GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, and
  98 * GIT_AUTHOR_DATE that will be used for the commit that is currently
  99 * being rebased.
 100 */
 101static GIT_PATH_FUNC(rebase_path_author_script, "rebase-merge/author-script")
 102/*
 103 * When an "edit" rebase command is being processed, the SHA1 of the
 104 * commit to be edited is recorded in this file.  When "git rebase
 105 * --continue" is executed, if there are any staged changes then they
 106 * will be amended to the HEAD commit, but only provided the HEAD
 107 * commit is still the commit to be edited.  When any other rebase
 108 * command is processed, this file is deleted.
 109 */
 110static GIT_PATH_FUNC(rebase_path_amend, "rebase-merge/amend")
 111/*
 112 * When we stop at a given patch via the "edit" command, this file contains
 113 * the abbreviated commit name of the corresponding patch.
 114 */
 115static GIT_PATH_FUNC(rebase_path_stopped_sha, "rebase-merge/stopped-sha")
 116/*
 117 * For the post-rewrite hook, we make a list of rewritten commits and
 118 * their new sha1s.  The rewritten-pending list keeps the sha1s of
 119 * commits that have been processed, but not committed yet,
 120 * e.g. because they are waiting for a 'squash' command.
 121 */
 122static GIT_PATH_FUNC(rebase_path_rewritten_list, "rebase-merge/rewritten-list")
 123static GIT_PATH_FUNC(rebase_path_rewritten_pending,
 124        "rebase-merge/rewritten-pending")
 125
 126/*
 127 * The path of the file listing refs that need to be deleted after the rebase
 128 * finishes. This is used by the `label` command to record the need for cleanup.
 129 */
 130static GIT_PATH_FUNC(rebase_path_refs_to_delete, "rebase-merge/refs-to-delete")
 131
 132/*
 133 * The following files are written by git-rebase just after parsing the
 134 * command-line (and are only consumed, not modified, by the sequencer).
 135 */
 136static GIT_PATH_FUNC(rebase_path_gpg_sign_opt, "rebase-merge/gpg_sign_opt")
 137static GIT_PATH_FUNC(rebase_path_orig_head, "rebase-merge/orig-head")
 138static GIT_PATH_FUNC(rebase_path_verbose, "rebase-merge/verbose")
 139static GIT_PATH_FUNC(rebase_path_signoff, "rebase-merge/signoff")
 140static GIT_PATH_FUNC(rebase_path_head_name, "rebase-merge/head-name")
 141static GIT_PATH_FUNC(rebase_path_onto, "rebase-merge/onto")
 142static GIT_PATH_FUNC(rebase_path_autostash, "rebase-merge/autostash")
 143static GIT_PATH_FUNC(rebase_path_strategy, "rebase-merge/strategy")
 144static GIT_PATH_FUNC(rebase_path_strategy_opts, "rebase-merge/strategy_opts")
 145static GIT_PATH_FUNC(rebase_path_allow_rerere_autoupdate, "rebase-merge/allow_rerere_autoupdate")
 146
 147static int git_sequencer_config(const char *k, const char *v, void *cb)
 148{
 149        struct replay_opts *opts = cb;
 150        int status;
 151
 152        if (!strcmp(k, "commit.cleanup")) {
 153                const char *s;
 154
 155                status = git_config_string(&s, k, v);
 156                if (status)
 157                        return status;
 158
 159                if (!strcmp(s, "verbatim"))
 160                        opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_NONE;
 161                else if (!strcmp(s, "whitespace"))
 162                        opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_SPACE;
 163                else if (!strcmp(s, "strip"))
 164                        opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_ALL;
 165                else if (!strcmp(s, "scissors"))
 166                        opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_SPACE;
 167                else
 168                        warning(_("invalid commit message cleanup mode '%s'"),
 169                                  s);
 170
 171                return status;
 172        }
 173
 174        if (!strcmp(k, "commit.gpgsign")) {
 175                opts->gpg_sign = git_config_bool(k, v) ? xstrdup("") : NULL;
 176                return 0;
 177        }
 178
 179        status = git_gpg_config(k, v, NULL);
 180        if (status)
 181                return status;
 182
 183        return git_diff_basic_config(k, v, NULL);
 184}
 185
 186void sequencer_init_config(struct replay_opts *opts)
 187{
 188        opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_NONE;
 189        git_config(git_sequencer_config, opts);
 190}
 191
 192static inline int is_rebase_i(const struct replay_opts *opts)
 193{
 194        return opts->action == REPLAY_INTERACTIVE_REBASE;
 195}
 196
 197static const char *get_dir(const struct replay_opts *opts)
 198{
 199        if (is_rebase_i(opts))
 200                return rebase_path();
 201        return git_path_seq_dir();
 202}
 203
 204static const char *get_todo_path(const struct replay_opts *opts)
 205{
 206        if (is_rebase_i(opts))
 207                return rebase_path_todo();
 208        return git_path_todo_file();
 209}
 210
 211/*
 212 * Returns 0 for non-conforming footer
 213 * Returns 1 for conforming footer
 214 * Returns 2 when sob exists within conforming footer
 215 * Returns 3 when sob exists within conforming footer as last entry
 216 */
 217static int has_conforming_footer(struct strbuf *sb, struct strbuf *sob,
 218        int ignore_footer)
 219{
 220        struct trailer_info info;
 221        int i;
 222        int found_sob = 0, found_sob_last = 0;
 223
 224        trailer_info_get(&info, sb->buf);
 225
 226        if (info.trailer_start == info.trailer_end)
 227                return 0;
 228
 229        for (i = 0; i < info.trailer_nr; i++)
 230                if (sob && !strncmp(info.trailers[i], sob->buf, sob->len)) {
 231                        found_sob = 1;
 232                        if (i == info.trailer_nr - 1)
 233                                found_sob_last = 1;
 234                }
 235
 236        trailer_info_release(&info);
 237
 238        if (found_sob_last)
 239                return 3;
 240        if (found_sob)
 241                return 2;
 242        return 1;
 243}
 244
 245static const char *gpg_sign_opt_quoted(struct replay_opts *opts)
 246{
 247        static struct strbuf buf = STRBUF_INIT;
 248
 249        strbuf_reset(&buf);
 250        if (opts->gpg_sign)
 251                sq_quotef(&buf, "-S%s", opts->gpg_sign);
 252        return buf.buf;
 253}
 254
 255int sequencer_remove_state(struct replay_opts *opts)
 256{
 257        struct strbuf buf = STRBUF_INIT;
 258        int i;
 259
 260        if (is_rebase_i(opts) &&
 261            strbuf_read_file(&buf, rebase_path_refs_to_delete(), 0) > 0) {
 262                char *p = buf.buf;
 263                while (*p) {
 264                        char *eol = strchr(p, '\n');
 265                        if (eol)
 266                                *eol = '\0';
 267                        if (delete_ref("(rebase -i) cleanup", p, NULL, 0) < 0)
 268                                warning(_("could not delete '%s'"), p);
 269                        if (!eol)
 270                                break;
 271                        p = eol + 1;
 272                }
 273        }
 274
 275        free(opts->gpg_sign);
 276        free(opts->strategy);
 277        for (i = 0; i < opts->xopts_nr; i++)
 278                free(opts->xopts[i]);
 279        free(opts->xopts);
 280
 281        strbuf_reset(&buf);
 282        strbuf_addstr(&buf, get_dir(opts));
 283        remove_dir_recursively(&buf, 0);
 284        strbuf_release(&buf);
 285
 286        return 0;
 287}
 288
 289static const char *action_name(const struct replay_opts *opts)
 290{
 291        switch (opts->action) {
 292        case REPLAY_REVERT:
 293                return N_("revert");
 294        case REPLAY_PICK:
 295                return N_("cherry-pick");
 296        case REPLAY_INTERACTIVE_REBASE:
 297                return N_("rebase -i");
 298        }
 299        die(_("Unknown action: %d"), opts->action);
 300}
 301
 302struct commit_message {
 303        char *parent_label;
 304        char *label;
 305        char *subject;
 306        const char *message;
 307};
 308
 309static const char *short_commit_name(struct commit *commit)
 310{
 311        return find_unique_abbrev(&commit->object.oid, DEFAULT_ABBREV);
 312}
 313
 314static int get_message(struct commit *commit, struct commit_message *out)
 315{
 316        const char *abbrev, *subject;
 317        int subject_len;
 318
 319        out->message = logmsg_reencode(commit, NULL, get_commit_output_encoding());
 320        abbrev = short_commit_name(commit);
 321
 322        subject_len = find_commit_subject(out->message, &subject);
 323
 324        out->subject = xmemdupz(subject, subject_len);
 325        out->label = xstrfmt("%s... %s", abbrev, out->subject);
 326        out->parent_label = xstrfmt("parent of %s", out->label);
 327
 328        return 0;
 329}
 330
 331static void free_message(struct commit *commit, struct commit_message *msg)
 332{
 333        free(msg->parent_label);
 334        free(msg->label);
 335        free(msg->subject);
 336        unuse_commit_buffer(commit, msg->message);
 337}
 338
 339static void print_advice(int show_hint, struct replay_opts *opts)
 340{
 341        char *msg = getenv("GIT_CHERRY_PICK_HELP");
 342
 343        if (msg) {
 344                fprintf(stderr, "%s\n", msg);
 345                /*
 346                 * A conflict has occurred but the porcelain
 347                 * (typically rebase --interactive) wants to take care
 348                 * of the commit itself so remove CHERRY_PICK_HEAD
 349                 */
 350                unlink(git_path_cherry_pick_head());
 351                return;
 352        }
 353
 354        if (show_hint) {
 355                if (opts->no_commit)
 356                        advise(_("after resolving the conflicts, mark the corrected paths\n"
 357                                 "with 'git add <paths>' or 'git rm <paths>'"));
 358                else
 359                        advise(_("after resolving the conflicts, mark the corrected paths\n"
 360                                 "with 'git add <paths>' or 'git rm <paths>'\n"
 361                                 "and commit the result with 'git commit'"));
 362        }
 363}
 364
 365static int write_message(const void *buf, size_t len, const char *filename,
 366                         int append_eol)
 367{
 368        struct lock_file msg_file = LOCK_INIT;
 369
 370        int msg_fd = hold_lock_file_for_update(&msg_file, filename, 0);
 371        if (msg_fd < 0)
 372                return error_errno(_("could not lock '%s'"), filename);
 373        if (write_in_full(msg_fd, buf, len) < 0) {
 374                error_errno(_("could not write to '%s'"), filename);
 375                rollback_lock_file(&msg_file);
 376                return -1;
 377        }
 378        if (append_eol && write(msg_fd, "\n", 1) < 0) {
 379                error_errno(_("could not write eol to '%s'"), filename);
 380                rollback_lock_file(&msg_file);
 381                return -1;
 382        }
 383        if (commit_lock_file(&msg_file) < 0)
 384                return error(_("failed to finalize '%s'"), filename);
 385
 386        return 0;
 387}
 388
 389/*
 390 * Reads a file that was presumably written by a shell script, i.e. with an
 391 * end-of-line marker that needs to be stripped.
 392 *
 393 * Note that only the last end-of-line marker is stripped, consistent with the
 394 * behavior of "$(cat path)" in a shell script.
 395 *
 396 * Returns 1 if the file was read, 0 if it could not be read or does not exist.
 397 */
 398static int read_oneliner(struct strbuf *buf,
 399        const char *path, int skip_if_empty)
 400{
 401        int orig_len = buf->len;
 402
 403        if (!file_exists(path))
 404                return 0;
 405
 406        if (strbuf_read_file(buf, path, 0) < 0) {
 407                warning_errno(_("could not read '%s'"), path);
 408                return 0;
 409        }
 410
 411        if (buf->len > orig_len && buf->buf[buf->len - 1] == '\n') {
 412                if (--buf->len > orig_len && buf->buf[buf->len - 1] == '\r')
 413                        --buf->len;
 414                buf->buf[buf->len] = '\0';
 415        }
 416
 417        if (skip_if_empty && buf->len == orig_len)
 418                return 0;
 419
 420        return 1;
 421}
 422
 423static struct tree *empty_tree(void)
 424{
 425        return lookup_tree(the_hash_algo->empty_tree);
 426}
 427
 428static int error_dirty_index(struct replay_opts *opts)
 429{
 430        if (read_cache_unmerged())
 431                return error_resolve_conflict(_(action_name(opts)));
 432
 433        error(_("your local changes would be overwritten by %s."),
 434                _(action_name(opts)));
 435
 436        if (advice_commit_before_merge)
 437                advise(_("commit your changes or stash them to proceed."));
 438        return -1;
 439}
 440
 441static void update_abort_safety_file(void)
 442{
 443        struct object_id head;
 444
 445        /* Do nothing on a single-pick */
 446        if (!file_exists(git_path_seq_dir()))
 447                return;
 448
 449        if (!get_oid("HEAD", &head))
 450                write_file(git_path_abort_safety_file(), "%s", oid_to_hex(&head));
 451        else
 452                write_file(git_path_abort_safety_file(), "%s", "");
 453}
 454
 455static int fast_forward_to(const struct object_id *to, const struct object_id *from,
 456                        int unborn, struct replay_opts *opts)
 457{
 458        struct ref_transaction *transaction;
 459        struct strbuf sb = STRBUF_INIT;
 460        struct strbuf err = STRBUF_INIT;
 461
 462        read_cache();
 463        if (checkout_fast_forward(from, to, 1))
 464                return -1; /* the callee should have complained already */
 465
 466        strbuf_addf(&sb, _("%s: fast-forward"), _(action_name(opts)));
 467
 468        transaction = ref_transaction_begin(&err);
 469        if (!transaction ||
 470            ref_transaction_update(transaction, "HEAD",
 471                                   to, unborn ? &null_oid : from,
 472                                   0, sb.buf, &err) ||
 473            ref_transaction_commit(transaction, &err)) {
 474                ref_transaction_free(transaction);
 475                error("%s", err.buf);
 476                strbuf_release(&sb);
 477                strbuf_release(&err);
 478                return -1;
 479        }
 480
 481        strbuf_release(&sb);
 482        strbuf_release(&err);
 483        ref_transaction_free(transaction);
 484        update_abort_safety_file();
 485        return 0;
 486}
 487
 488void append_conflicts_hint(struct strbuf *msgbuf)
 489{
 490        int i;
 491
 492        strbuf_addch(msgbuf, '\n');
 493        strbuf_commented_addf(msgbuf, "Conflicts:\n");
 494        for (i = 0; i < active_nr;) {
 495                const struct cache_entry *ce = active_cache[i++];
 496                if (ce_stage(ce)) {
 497                        strbuf_commented_addf(msgbuf, "\t%s\n", ce->name);
 498                        while (i < active_nr && !strcmp(ce->name,
 499                                                        active_cache[i]->name))
 500                                i++;
 501                }
 502        }
 503}
 504
 505static int do_recursive_merge(struct commit *base, struct commit *next,
 506                              const char *base_label, const char *next_label,
 507                              struct object_id *head, struct strbuf *msgbuf,
 508                              struct replay_opts *opts)
 509{
 510        struct merge_options o;
 511        struct tree *result, *next_tree, *base_tree, *head_tree;
 512        int clean;
 513        char **xopt;
 514        struct lock_file index_lock = LOCK_INIT;
 515
 516        if (hold_locked_index(&index_lock, LOCK_REPORT_ON_ERROR) < 0)
 517                return -1;
 518
 519        read_cache();
 520
 521        init_merge_options(&o);
 522        o.ancestor = base ? base_label : "(empty tree)";
 523        o.branch1 = "HEAD";
 524        o.branch2 = next ? next_label : "(empty tree)";
 525        if (is_rebase_i(opts))
 526                o.buffer_output = 2;
 527        o.show_rename_progress = 1;
 528
 529        head_tree = parse_tree_indirect(head);
 530        next_tree = next ? next->tree : empty_tree();
 531        base_tree = base ? base->tree : empty_tree();
 532
 533        for (xopt = opts->xopts; xopt != opts->xopts + opts->xopts_nr; xopt++)
 534                parse_merge_opt(&o, *xopt);
 535
 536        clean = merge_trees(&o,
 537                            head_tree,
 538                            next_tree, base_tree, &result);
 539        if (is_rebase_i(opts) && clean <= 0)
 540                fputs(o.obuf.buf, stdout);
 541        strbuf_release(&o.obuf);
 542        diff_warn_rename_limit("merge.renamelimit", o.needed_rename_limit, 0);
 543        if (clean < 0) {
 544                rollback_lock_file(&index_lock);
 545                return clean;
 546        }
 547
 548        if (write_locked_index(&the_index, &index_lock,
 549                               COMMIT_LOCK | SKIP_IF_UNCHANGED))
 550                /*
 551                 * TRANSLATORS: %s will be "revert", "cherry-pick" or
 552                 * "rebase -i".
 553                 */
 554                return error(_("%s: Unable to write new index file"),
 555                        _(action_name(opts)));
 556
 557        if (!clean)
 558                append_conflicts_hint(msgbuf);
 559
 560        return !clean;
 561}
 562
 563static int is_index_unchanged(void)
 564{
 565        struct object_id head_oid;
 566        struct commit *head_commit;
 567
 568        if (!resolve_ref_unsafe("HEAD", RESOLVE_REF_READING, &head_oid, NULL))
 569                return error(_("could not resolve HEAD commit"));
 570
 571        head_commit = lookup_commit(&head_oid);
 572
 573        /*
 574         * If head_commit is NULL, check_commit, called from
 575         * lookup_commit, would have indicated that head_commit is not
 576         * a commit object already.  parse_commit() will return failure
 577         * without further complaints in such a case.  Otherwise, if
 578         * the commit is invalid, parse_commit() will complain.  So
 579         * there is nothing for us to say here.  Just return failure.
 580         */
 581        if (parse_commit(head_commit))
 582                return -1;
 583
 584        if (!active_cache_tree)
 585                active_cache_tree = cache_tree();
 586
 587        if (!cache_tree_fully_valid(active_cache_tree))
 588                if (cache_tree_update(&the_index, 0))
 589                        return error(_("unable to update cache tree"));
 590
 591        return !oidcmp(&active_cache_tree->oid,
 592                       &head_commit->tree->object.oid);
 593}
 594
 595static int write_author_script(const char *message)
 596{
 597        struct strbuf buf = STRBUF_INIT;
 598        const char *eol;
 599        int res;
 600
 601        for (;;)
 602                if (!*message || starts_with(message, "\n")) {
 603missing_author:
 604                        /* Missing 'author' line? */
 605                        unlink(rebase_path_author_script());
 606                        return 0;
 607                } else if (skip_prefix(message, "author ", &message))
 608                        break;
 609                else if ((eol = strchr(message, '\n')))
 610                        message = eol + 1;
 611                else
 612                        goto missing_author;
 613
 614        strbuf_addstr(&buf, "GIT_AUTHOR_NAME='");
 615        while (*message && *message != '\n' && *message != '\r')
 616                if (skip_prefix(message, " <", &message))
 617                        break;
 618                else if (*message != '\'')
 619                        strbuf_addch(&buf, *(message++));
 620                else
 621                        strbuf_addf(&buf, "'\\\\%c'", *(message++));
 622        strbuf_addstr(&buf, "'\nGIT_AUTHOR_EMAIL='");
 623        while (*message && *message != '\n' && *message != '\r')
 624                if (skip_prefix(message, "> ", &message))
 625                        break;
 626                else if (*message != '\'')
 627                        strbuf_addch(&buf, *(message++));
 628                else
 629                        strbuf_addf(&buf, "'\\\\%c'", *(message++));
 630        strbuf_addstr(&buf, "'\nGIT_AUTHOR_DATE='@");
 631        while (*message && *message != '\n' && *message != '\r')
 632                if (*message != '\'')
 633                        strbuf_addch(&buf, *(message++));
 634                else
 635                        strbuf_addf(&buf, "'\\\\%c'", *(message++));
 636        res = write_message(buf.buf, buf.len, rebase_path_author_script(), 1);
 637        strbuf_release(&buf);
 638        return res;
 639}
 640
 641/*
 642 * Read a list of environment variable assignments (such as the author-script
 643 * file) into an environment block. Returns -1 on error, 0 otherwise.
 644 */
 645static int read_env_script(struct argv_array *env)
 646{
 647        struct strbuf script = STRBUF_INIT;
 648        int i, count = 0;
 649        char *p, *p2;
 650
 651        if (strbuf_read_file(&script, rebase_path_author_script(), 256) <= 0)
 652                return -1;
 653
 654        for (p = script.buf; *p; p++)
 655                if (skip_prefix(p, "'\\\\''", (const char **)&p2))
 656                        strbuf_splice(&script, p - script.buf, p2 - p, "'", 1);
 657                else if (*p == '\'')
 658                        strbuf_splice(&script, p-- - script.buf, 1, "", 0);
 659                else if (*p == '\n') {
 660                        *p = '\0';
 661                        count++;
 662                }
 663
 664        for (i = 0, p = script.buf; i < count; i++) {
 665                argv_array_push(env, p);
 666                p += strlen(p) + 1;
 667        }
 668
 669        return 0;
 670}
 671
 672static char *get_author(const char *message)
 673{
 674        size_t len;
 675        const char *a;
 676
 677        a = find_commit_header(message, "author", &len);
 678        if (a)
 679                return xmemdupz(a, len);
 680
 681        return NULL;
 682}
 683
 684static const char staged_changes_advice[] =
 685N_("you have staged changes in your working tree\n"
 686"If these changes are meant to be squashed into the previous commit, run:\n"
 687"\n"
 688"  git commit --amend %s\n"
 689"\n"
 690"If they are meant to go into a new commit, run:\n"
 691"\n"
 692"  git commit %s\n"
 693"\n"
 694"In both cases, once you're done, continue with:\n"
 695"\n"
 696"  git rebase --continue\n");
 697
 698#define ALLOW_EMPTY (1<<0)
 699#define EDIT_MSG    (1<<1)
 700#define AMEND_MSG   (1<<2)
 701#define CLEANUP_MSG (1<<3)
 702#define VERIFY_MSG  (1<<4)
 703
 704/*
 705 * If we are cherry-pick, and if the merge did not result in
 706 * hand-editing, we will hit this commit and inherit the original
 707 * author date and name.
 708 *
 709 * If we are revert, or if our cherry-pick results in a hand merge,
 710 * we had better say that the current user is responsible for that.
 711 *
 712 * An exception is when run_git_commit() is called during an
 713 * interactive rebase: in that case, we will want to retain the
 714 * author metadata.
 715 */
 716static int run_git_commit(const char *defmsg, struct replay_opts *opts,
 717                          unsigned int flags)
 718{
 719        struct child_process cmd = CHILD_PROCESS_INIT;
 720        const char *value;
 721
 722        cmd.git_cmd = 1;
 723
 724        if (is_rebase_i(opts)) {
 725                if (!(flags & EDIT_MSG)) {
 726                        cmd.stdout_to_stderr = 1;
 727                        cmd.err = -1;
 728                }
 729
 730                if (read_env_script(&cmd.env_array)) {
 731                        const char *gpg_opt = gpg_sign_opt_quoted(opts);
 732
 733                        return error(_(staged_changes_advice),
 734                                     gpg_opt, gpg_opt);
 735                }
 736        }
 737
 738        argv_array_push(&cmd.args, "commit");
 739
 740        if (!(flags & VERIFY_MSG))
 741                argv_array_push(&cmd.args, "-n");
 742        if ((flags & AMEND_MSG))
 743                argv_array_push(&cmd.args, "--amend");
 744        if (opts->gpg_sign)
 745                argv_array_pushf(&cmd.args, "-S%s", opts->gpg_sign);
 746        if (defmsg)
 747                argv_array_pushl(&cmd.args, "-F", defmsg, NULL);
 748        if ((flags & CLEANUP_MSG))
 749                argv_array_push(&cmd.args, "--cleanup=strip");
 750        if ((flags & EDIT_MSG))
 751                argv_array_push(&cmd.args, "-e");
 752        else if (!(flags & CLEANUP_MSG) &&
 753                 !opts->signoff && !opts->record_origin &&
 754                 git_config_get_value("commit.cleanup", &value))
 755                argv_array_push(&cmd.args, "--cleanup=verbatim");
 756
 757        if ((flags & ALLOW_EMPTY))
 758                argv_array_push(&cmd.args, "--allow-empty");
 759
 760        if (opts->allow_empty_message)
 761                argv_array_push(&cmd.args, "--allow-empty-message");
 762
 763        if (cmd.err == -1) {
 764                /* hide stderr on success */
 765                struct strbuf buf = STRBUF_INIT;
 766                int rc = pipe_command(&cmd,
 767                                      NULL, 0,
 768                                      /* stdout is already redirected */
 769                                      NULL, 0,
 770                                      &buf, 0);
 771                if (rc)
 772                        fputs(buf.buf, stderr);
 773                strbuf_release(&buf);
 774                return rc;
 775        }
 776
 777        return run_command(&cmd);
 778}
 779
 780static int rest_is_empty(const struct strbuf *sb, int start)
 781{
 782        int i, eol;
 783        const char *nl;
 784
 785        /* Check if the rest is just whitespace and Signed-off-by's. */
 786        for (i = start; i < sb->len; i++) {
 787                nl = memchr(sb->buf + i, '\n', sb->len - i);
 788                if (nl)
 789                        eol = nl - sb->buf;
 790                else
 791                        eol = sb->len;
 792
 793                if (strlen(sign_off_header) <= eol - i &&
 794                    starts_with(sb->buf + i, sign_off_header)) {
 795                        i = eol;
 796                        continue;
 797                }
 798                while (i < eol)
 799                        if (!isspace(sb->buf[i++]))
 800                                return 0;
 801        }
 802
 803        return 1;
 804}
 805
 806/*
 807 * Find out if the message in the strbuf contains only whitespace and
 808 * Signed-off-by lines.
 809 */
 810int message_is_empty(const struct strbuf *sb,
 811                     enum commit_msg_cleanup_mode cleanup_mode)
 812{
 813        if (cleanup_mode == COMMIT_MSG_CLEANUP_NONE && sb->len)
 814                return 0;
 815        return rest_is_empty(sb, 0);
 816}
 817
 818/*
 819 * See if the user edited the message in the editor or left what
 820 * was in the template intact
 821 */
 822int template_untouched(const struct strbuf *sb, const char *template_file,
 823                       enum commit_msg_cleanup_mode cleanup_mode)
 824{
 825        struct strbuf tmpl = STRBUF_INIT;
 826        const char *start;
 827
 828        if (cleanup_mode == COMMIT_MSG_CLEANUP_NONE && sb->len)
 829                return 0;
 830
 831        if (!template_file || strbuf_read_file(&tmpl, template_file, 0) <= 0)
 832                return 0;
 833
 834        strbuf_stripspace(&tmpl, cleanup_mode == COMMIT_MSG_CLEANUP_ALL);
 835        if (!skip_prefix(sb->buf, tmpl.buf, &start))
 836                start = sb->buf;
 837        strbuf_release(&tmpl);
 838        return rest_is_empty(sb, start - sb->buf);
 839}
 840
 841int update_head_with_reflog(const struct commit *old_head,
 842                            const struct object_id *new_head,
 843                            const char *action, const struct strbuf *msg,
 844                            struct strbuf *err)
 845{
 846        struct ref_transaction *transaction;
 847        struct strbuf sb = STRBUF_INIT;
 848        const char *nl;
 849        int ret = 0;
 850
 851        if (action) {
 852                strbuf_addstr(&sb, action);
 853                strbuf_addstr(&sb, ": ");
 854        }
 855
 856        nl = strchr(msg->buf, '\n');
 857        if (nl) {
 858                strbuf_add(&sb, msg->buf, nl + 1 - msg->buf);
 859        } else {
 860                strbuf_addbuf(&sb, msg);
 861                strbuf_addch(&sb, '\n');
 862        }
 863
 864        transaction = ref_transaction_begin(err);
 865        if (!transaction ||
 866            ref_transaction_update(transaction, "HEAD", new_head,
 867                                   old_head ? &old_head->object.oid : &null_oid,
 868                                   0, sb.buf, err) ||
 869            ref_transaction_commit(transaction, err)) {
 870                ret = -1;
 871        }
 872        ref_transaction_free(transaction);
 873        strbuf_release(&sb);
 874
 875        return ret;
 876}
 877
 878static int run_rewrite_hook(const struct object_id *oldoid,
 879                            const struct object_id *newoid)
 880{
 881        struct child_process proc = CHILD_PROCESS_INIT;
 882        const char *argv[3];
 883        int code;
 884        struct strbuf sb = STRBUF_INIT;
 885
 886        argv[0] = find_hook("post-rewrite");
 887        if (!argv[0])
 888                return 0;
 889
 890        argv[1] = "amend";
 891        argv[2] = NULL;
 892
 893        proc.argv = argv;
 894        proc.in = -1;
 895        proc.stdout_to_stderr = 1;
 896
 897        code = start_command(&proc);
 898        if (code)
 899                return code;
 900        strbuf_addf(&sb, "%s %s\n", oid_to_hex(oldoid), oid_to_hex(newoid));
 901        sigchain_push(SIGPIPE, SIG_IGN);
 902        write_in_full(proc.in, sb.buf, sb.len);
 903        close(proc.in);
 904        strbuf_release(&sb);
 905        sigchain_pop(SIGPIPE);
 906        return finish_command(&proc);
 907}
 908
 909void commit_post_rewrite(const struct commit *old_head,
 910                         const struct object_id *new_head)
 911{
 912        struct notes_rewrite_cfg *cfg;
 913
 914        cfg = init_copy_notes_for_rewrite("amend");
 915        if (cfg) {
 916                /* we are amending, so old_head is not NULL */
 917                copy_note_for_rewrite(cfg, &old_head->object.oid, new_head);
 918                finish_copy_notes_for_rewrite(cfg, "Notes added by 'git commit --amend'");
 919        }
 920        run_rewrite_hook(&old_head->object.oid, new_head);
 921}
 922
 923static int run_prepare_commit_msg_hook(struct strbuf *msg, const char *commit)
 924{
 925        struct argv_array hook_env = ARGV_ARRAY_INIT;
 926        int ret;
 927        const char *name;
 928
 929        name = git_path_commit_editmsg();
 930        if (write_message(msg->buf, msg->len, name, 0))
 931                return -1;
 932
 933        argv_array_pushf(&hook_env, "GIT_INDEX_FILE=%s", get_index_file());
 934        argv_array_push(&hook_env, "GIT_EDITOR=:");
 935        if (commit)
 936                ret = run_hook_le(hook_env.argv, "prepare-commit-msg", name,
 937                                  "commit", commit, NULL);
 938        else
 939                ret = run_hook_le(hook_env.argv, "prepare-commit-msg", name,
 940                                  "message", NULL);
 941        if (ret)
 942                ret = error(_("'prepare-commit-msg' hook failed"));
 943        argv_array_clear(&hook_env);
 944
 945        return ret;
 946}
 947
 948static const char implicit_ident_advice_noconfig[] =
 949N_("Your name and email address were configured automatically based\n"
 950"on your username and hostname. Please check that they are accurate.\n"
 951"You can suppress this message by setting them explicitly. Run the\n"
 952"following command and follow the instructions in your editor to edit\n"
 953"your configuration file:\n"
 954"\n"
 955"    git config --global --edit\n"
 956"\n"
 957"After doing this, you may fix the identity used for this commit with:\n"
 958"\n"
 959"    git commit --amend --reset-author\n");
 960
 961static const char implicit_ident_advice_config[] =
 962N_("Your name and email address were configured automatically based\n"
 963"on your username and hostname. Please check that they are accurate.\n"
 964"You can suppress this message by setting them explicitly:\n"
 965"\n"
 966"    git config --global user.name \"Your Name\"\n"
 967"    git config --global user.email you@example.com\n"
 968"\n"
 969"After doing this, you may fix the identity used for this commit with:\n"
 970"\n"
 971"    git commit --amend --reset-author\n");
 972
 973static const char *implicit_ident_advice(void)
 974{
 975        char *user_config = expand_user_path("~/.gitconfig", 0);
 976        char *xdg_config = xdg_config_home("config");
 977        int config_exists = file_exists(user_config) || file_exists(xdg_config);
 978
 979        free(user_config);
 980        free(xdg_config);
 981
 982        if (config_exists)
 983                return _(implicit_ident_advice_config);
 984        else
 985                return _(implicit_ident_advice_noconfig);
 986
 987}
 988
 989void print_commit_summary(const char *prefix, const struct object_id *oid,
 990                          unsigned int flags)
 991{
 992        struct rev_info rev;
 993        struct commit *commit;
 994        struct strbuf format = STRBUF_INIT;
 995        const char *head;
 996        struct pretty_print_context pctx = {0};
 997        struct strbuf author_ident = STRBUF_INIT;
 998        struct strbuf committer_ident = STRBUF_INIT;
 999
1000        commit = lookup_commit(oid);
1001        if (!commit)
1002                die(_("couldn't look up newly created commit"));
1003        if (parse_commit(commit))
1004                die(_("could not parse newly created commit"));
1005
1006        strbuf_addstr(&format, "format:%h] %s");
1007
1008        format_commit_message(commit, "%an <%ae>", &author_ident, &pctx);
1009        format_commit_message(commit, "%cn <%ce>", &committer_ident, &pctx);
1010        if (strbuf_cmp(&author_ident, &committer_ident)) {
1011                strbuf_addstr(&format, "\n Author: ");
1012                strbuf_addbuf_percentquote(&format, &author_ident);
1013        }
1014        if (flags & SUMMARY_SHOW_AUTHOR_DATE) {
1015                struct strbuf date = STRBUF_INIT;
1016
1017                format_commit_message(commit, "%ad", &date, &pctx);
1018                strbuf_addstr(&format, "\n Date: ");
1019                strbuf_addbuf_percentquote(&format, &date);
1020                strbuf_release(&date);
1021        }
1022        if (!committer_ident_sufficiently_given()) {
1023                strbuf_addstr(&format, "\n Committer: ");
1024                strbuf_addbuf_percentquote(&format, &committer_ident);
1025                if (advice_implicit_identity) {
1026                        strbuf_addch(&format, '\n');
1027                        strbuf_addstr(&format, implicit_ident_advice());
1028                }
1029        }
1030        strbuf_release(&author_ident);
1031        strbuf_release(&committer_ident);
1032
1033        init_revisions(&rev, prefix);
1034        setup_revisions(0, NULL, &rev, NULL);
1035
1036        rev.diff = 1;
1037        rev.diffopt.output_format =
1038                DIFF_FORMAT_SHORTSTAT | DIFF_FORMAT_SUMMARY;
1039
1040        rev.verbose_header = 1;
1041        rev.show_root_diff = 1;
1042        get_commit_format(format.buf, &rev);
1043        rev.always_show_header = 0;
1044        rev.diffopt.detect_rename = DIFF_DETECT_RENAME;
1045        rev.diffopt.break_opt = 0;
1046        diff_setup_done(&rev.diffopt);
1047
1048        head = resolve_ref_unsafe("HEAD", 0, NULL, NULL);
1049        if (!head)
1050                die_errno(_("unable to resolve HEAD after creating commit"));
1051        if (!strcmp(head, "HEAD"))
1052                head = _("detached HEAD");
1053        else
1054                skip_prefix(head, "refs/heads/", &head);
1055        printf("[%s%s ", head, (flags & SUMMARY_INITIAL_COMMIT) ?
1056                                                _(" (root-commit)") : "");
1057
1058        if (!log_tree_commit(&rev, commit)) {
1059                rev.always_show_header = 1;
1060                rev.use_terminator = 1;
1061                log_tree_commit(&rev, commit);
1062        }
1063
1064        strbuf_release(&format);
1065}
1066
1067static int parse_head(struct commit **head)
1068{
1069        struct commit *current_head;
1070        struct object_id oid;
1071
1072        if (get_oid("HEAD", &oid)) {
1073                current_head = NULL;
1074        } else {
1075                current_head = lookup_commit_reference(&oid);
1076                if (!current_head)
1077                        return error(_("could not parse HEAD"));
1078                if (oidcmp(&oid, &current_head->object.oid)) {
1079                        warning(_("HEAD %s is not a commit!"),
1080                                oid_to_hex(&oid));
1081                }
1082                if (parse_commit(current_head))
1083                        return error(_("could not parse HEAD commit"));
1084        }
1085        *head = current_head;
1086
1087        return 0;
1088}
1089
1090/*
1091 * Try to commit without forking 'git commit'. In some cases we need
1092 * to run 'git commit' to display an error message
1093 *
1094 * Returns:
1095 *  -1 - error unable to commit
1096 *   0 - success
1097 *   1 - run 'git commit'
1098 */
1099static int try_to_commit(struct strbuf *msg, const char *author,
1100                         struct replay_opts *opts, unsigned int flags,
1101                         struct object_id *oid)
1102{
1103        struct object_id tree;
1104        struct commit *current_head;
1105        struct commit_list *parents = NULL;
1106        struct commit_extra_header *extra = NULL;
1107        struct strbuf err = STRBUF_INIT;
1108        struct strbuf commit_msg = STRBUF_INIT;
1109        char *amend_author = NULL;
1110        const char *hook_commit = NULL;
1111        enum commit_msg_cleanup_mode cleanup;
1112        int res = 0;
1113
1114        if (parse_head(&current_head))
1115                return -1;
1116
1117        if (flags & AMEND_MSG) {
1118                const char *exclude_gpgsig[] = { "gpgsig", NULL };
1119                const char *out_enc = get_commit_output_encoding();
1120                const char *message = logmsg_reencode(current_head, NULL,
1121                                                      out_enc);
1122
1123                if (!msg) {
1124                        const char *orig_message = NULL;
1125
1126                        find_commit_subject(message, &orig_message);
1127                        msg = &commit_msg;
1128                        strbuf_addstr(msg, orig_message);
1129                        hook_commit = "HEAD";
1130                }
1131                author = amend_author = get_author(message);
1132                unuse_commit_buffer(current_head, message);
1133                if (!author) {
1134                        res = error(_("unable to parse commit author"));
1135                        goto out;
1136                }
1137                parents = copy_commit_list(current_head->parents);
1138                extra = read_commit_extra_headers(current_head, exclude_gpgsig);
1139        } else if (current_head) {
1140                commit_list_insert(current_head, &parents);
1141        }
1142
1143        if (write_cache_as_tree(&tree, 0, NULL)) {
1144                res = error(_("git write-tree failed to write a tree"));
1145                goto out;
1146        }
1147
1148        if (!(flags & ALLOW_EMPTY) && !oidcmp(current_head ?
1149                                              &current_head->tree->object.oid :
1150                                              &empty_tree_oid, &tree)) {
1151                res = 1; /* run 'git commit' to display error message */
1152                goto out;
1153        }
1154
1155        if (find_hook("prepare-commit-msg")) {
1156                res = run_prepare_commit_msg_hook(msg, hook_commit);
1157                if (res)
1158                        goto out;
1159                if (strbuf_read_file(&commit_msg, git_path_commit_editmsg(),
1160                                     2048) < 0) {
1161                        res = error_errno(_("unable to read commit message "
1162                                              "from '%s'"),
1163                                            git_path_commit_editmsg());
1164                        goto out;
1165                }
1166                msg = &commit_msg;
1167        }
1168
1169        cleanup = (flags & CLEANUP_MSG) ? COMMIT_MSG_CLEANUP_ALL :
1170                                          opts->default_msg_cleanup;
1171
1172        if (cleanup != COMMIT_MSG_CLEANUP_NONE)
1173                strbuf_stripspace(msg, cleanup == COMMIT_MSG_CLEANUP_ALL);
1174        if (!opts->allow_empty_message && message_is_empty(msg, cleanup)) {
1175                res = 1; /* run 'git commit' to display error message */
1176                goto out;
1177        }
1178
1179        if (commit_tree_extended(msg->buf, msg->len, &tree, parents,
1180                                 oid, author, opts->gpg_sign, extra)) {
1181                res = error(_("failed to write commit object"));
1182                goto out;
1183        }
1184
1185        if (update_head_with_reflog(current_head, oid,
1186                                    getenv("GIT_REFLOG_ACTION"), msg, &err)) {
1187                res = error("%s", err.buf);
1188                goto out;
1189        }
1190
1191        if (flags & AMEND_MSG)
1192                commit_post_rewrite(current_head, oid);
1193
1194out:
1195        free_commit_extra_headers(extra);
1196        strbuf_release(&err);
1197        strbuf_release(&commit_msg);
1198        free(amend_author);
1199
1200        return res;
1201}
1202
1203static int do_commit(const char *msg_file, const char *author,
1204                     struct replay_opts *opts, unsigned int flags)
1205{
1206        int res = 1;
1207
1208        if (!(flags & EDIT_MSG) && !(flags & VERIFY_MSG)) {
1209                struct object_id oid;
1210                struct strbuf sb = STRBUF_INIT;
1211
1212                if (msg_file && strbuf_read_file(&sb, msg_file, 2048) < 0)
1213                        return error_errno(_("unable to read commit message "
1214                                             "from '%s'"),
1215                                           msg_file);
1216
1217                res = try_to_commit(msg_file ? &sb : NULL, author, opts, flags,
1218                                    &oid);
1219                strbuf_release(&sb);
1220                if (!res) {
1221                        unlink(git_path_cherry_pick_head());
1222                        unlink(git_path_merge_msg());
1223                        if (!is_rebase_i(opts))
1224                                print_commit_summary(NULL, &oid,
1225                                                SUMMARY_SHOW_AUTHOR_DATE);
1226                        return res;
1227                }
1228        }
1229        if (res == 1)
1230                return run_git_commit(msg_file, opts, flags);
1231
1232        return res;
1233}
1234
1235static int is_original_commit_empty(struct commit *commit)
1236{
1237        const struct object_id *ptree_oid;
1238
1239        if (parse_commit(commit))
1240                return error(_("could not parse commit %s"),
1241                             oid_to_hex(&commit->object.oid));
1242        if (commit->parents) {
1243                struct commit *parent = commit->parents->item;
1244                if (parse_commit(parent))
1245                        return error(_("could not parse parent commit %s"),
1246                                oid_to_hex(&parent->object.oid));
1247                ptree_oid = &parent->tree->object.oid;
1248        } else {
1249                ptree_oid = the_hash_algo->empty_tree; /* commit is root */
1250        }
1251
1252        return !oidcmp(ptree_oid, &commit->tree->object.oid);
1253}
1254
1255/*
1256 * Do we run "git commit" with "--allow-empty"?
1257 */
1258static int allow_empty(struct replay_opts *opts, struct commit *commit)
1259{
1260        int index_unchanged, empty_commit;
1261
1262        /*
1263         * Three cases:
1264         *
1265         * (1) we do not allow empty at all and error out.
1266         *
1267         * (2) we allow ones that were initially empty, but
1268         * forbid the ones that become empty;
1269         *
1270         * (3) we allow both.
1271         */
1272        if (!opts->allow_empty)
1273                return 0; /* let "git commit" barf as necessary */
1274
1275        index_unchanged = is_index_unchanged();
1276        if (index_unchanged < 0)
1277                return index_unchanged;
1278        if (!index_unchanged)
1279                return 0; /* we do not have to say --allow-empty */
1280
1281        if (opts->keep_redundant_commits)
1282                return 1;
1283
1284        empty_commit = is_original_commit_empty(commit);
1285        if (empty_commit < 0)
1286                return empty_commit;
1287        if (!empty_commit)
1288                return 0;
1289        else
1290                return 1;
1291}
1292
1293/*
1294 * Note that ordering matters in this enum. Not only must it match the mapping
1295 * below, it is also divided into several sections that matter.  When adding
1296 * new commands, make sure you add it in the right section.
1297 */
1298enum todo_command {
1299        /* commands that handle commits */
1300        TODO_PICK = 0,
1301        TODO_REVERT,
1302        TODO_EDIT,
1303        TODO_REWORD,
1304        TODO_FIXUP,
1305        TODO_SQUASH,
1306        /* commands that do something else than handling a single commit */
1307        TODO_EXEC,
1308        TODO_LABEL,
1309        TODO_RESET,
1310        TODO_MERGE,
1311        /* commands that do nothing but are counted for reporting progress */
1312        TODO_NOOP,
1313        TODO_DROP,
1314        /* comments (not counted for reporting progress) */
1315        TODO_COMMENT
1316};
1317
1318static struct {
1319        char c;
1320        const char *str;
1321} todo_command_info[] = {
1322        { 'p', "pick" },
1323        { 0,   "revert" },
1324        { 'e', "edit" },
1325        { 'r', "reword" },
1326        { 'f', "fixup" },
1327        { 's', "squash" },
1328        { 'x', "exec" },
1329        { 'l', "label" },
1330        { 't', "reset" },
1331        { 'm', "merge" },
1332        { 0,   "noop" },
1333        { 'd', "drop" },
1334        { 0,   NULL }
1335};
1336
1337static const char *command_to_string(const enum todo_command command)
1338{
1339        if (command < TODO_COMMENT)
1340                return todo_command_info[command].str;
1341        die("Unknown command: %d", command);
1342}
1343
1344static char command_to_char(const enum todo_command command)
1345{
1346        if (command < TODO_COMMENT && todo_command_info[command].c)
1347                return todo_command_info[command].c;
1348        return comment_line_char;
1349}
1350
1351static int is_noop(const enum todo_command command)
1352{
1353        return TODO_NOOP <= command;
1354}
1355
1356static int is_fixup(enum todo_command command)
1357{
1358        return command == TODO_FIXUP || command == TODO_SQUASH;
1359}
1360
1361static int update_squash_messages(enum todo_command command,
1362                struct commit *commit, struct replay_opts *opts)
1363{
1364        struct strbuf buf = STRBUF_INIT;
1365        int count, res;
1366        const char *message, *body;
1367
1368        if (file_exists(rebase_path_squash_msg())) {
1369                struct strbuf header = STRBUF_INIT;
1370                char *eol, *p;
1371
1372                if (strbuf_read_file(&buf, rebase_path_squash_msg(), 2048) <= 0)
1373                        return error(_("could not read '%s'"),
1374                                rebase_path_squash_msg());
1375
1376                p = buf.buf + 1;
1377                eol = strchrnul(buf.buf, '\n');
1378                if (buf.buf[0] != comment_line_char ||
1379                    (p += strcspn(p, "0123456789\n")) == eol)
1380                        return error(_("unexpected 1st line of squash message:"
1381                                       "\n\n\t%.*s"),
1382                                     (int)(eol - buf.buf), buf.buf);
1383                count = strtol(p, NULL, 10);
1384
1385                if (count < 1)
1386                        return error(_("invalid 1st line of squash message:\n"
1387                                       "\n\t%.*s"),
1388                                     (int)(eol - buf.buf), buf.buf);
1389
1390                strbuf_addf(&header, "%c ", comment_line_char);
1391                strbuf_addf(&header,
1392                            _("This is a combination of %d commits."), ++count);
1393                strbuf_splice(&buf, 0, eol - buf.buf, header.buf, header.len);
1394                strbuf_release(&header);
1395        } else {
1396                struct object_id head;
1397                struct commit *head_commit;
1398                const char *head_message, *body;
1399
1400                if (get_oid("HEAD", &head))
1401                        return error(_("need a HEAD to fixup"));
1402                if (!(head_commit = lookup_commit_reference(&head)))
1403                        return error(_("could not read HEAD"));
1404                if (!(head_message = get_commit_buffer(head_commit, NULL)))
1405                        return error(_("could not read HEAD's commit message"));
1406
1407                find_commit_subject(head_message, &body);
1408                if (write_message(body, strlen(body),
1409                                  rebase_path_fixup_msg(), 0)) {
1410                        unuse_commit_buffer(head_commit, head_message);
1411                        return error(_("cannot write '%s'"),
1412                                     rebase_path_fixup_msg());
1413                }
1414
1415                count = 2;
1416                strbuf_addf(&buf, "%c ", comment_line_char);
1417                strbuf_addf(&buf, _("This is a combination of %d commits."),
1418                            count);
1419                strbuf_addf(&buf, "\n%c ", comment_line_char);
1420                strbuf_addstr(&buf, _("This is the 1st commit message:"));
1421                strbuf_addstr(&buf, "\n\n");
1422                strbuf_addstr(&buf, body);
1423
1424                unuse_commit_buffer(head_commit, head_message);
1425        }
1426
1427        if (!(message = get_commit_buffer(commit, NULL)))
1428                return error(_("could not read commit message of %s"),
1429                             oid_to_hex(&commit->object.oid));
1430        find_commit_subject(message, &body);
1431
1432        if (command == TODO_SQUASH) {
1433                unlink(rebase_path_fixup_msg());
1434                strbuf_addf(&buf, "\n%c ", comment_line_char);
1435                strbuf_addf(&buf, _("This is the commit message #%d:"), count);
1436                strbuf_addstr(&buf, "\n\n");
1437                strbuf_addstr(&buf, body);
1438        } else if (command == TODO_FIXUP) {
1439                strbuf_addf(&buf, "\n%c ", comment_line_char);
1440                strbuf_addf(&buf, _("The commit message #%d will be skipped:"),
1441                            count);
1442                strbuf_addstr(&buf, "\n\n");
1443                strbuf_add_commented_lines(&buf, body, strlen(body));
1444        } else
1445                return error(_("unknown command: %d"), command);
1446        unuse_commit_buffer(commit, message);
1447
1448        res = write_message(buf.buf, buf.len, rebase_path_squash_msg(), 0);
1449        strbuf_release(&buf);
1450        return res;
1451}
1452
1453static void flush_rewritten_pending(void) {
1454        struct strbuf buf = STRBUF_INIT;
1455        struct object_id newoid;
1456        FILE *out;
1457
1458        if (strbuf_read_file(&buf, rebase_path_rewritten_pending(), (GIT_MAX_HEXSZ + 1) * 2) > 0 &&
1459            !get_oid("HEAD", &newoid) &&
1460            (out = fopen_or_warn(rebase_path_rewritten_list(), "a"))) {
1461                char *bol = buf.buf, *eol;
1462
1463                while (*bol) {
1464                        eol = strchrnul(bol, '\n');
1465                        fprintf(out, "%.*s %s\n", (int)(eol - bol),
1466                                        bol, oid_to_hex(&newoid));
1467                        if (!*eol)
1468                                break;
1469                        bol = eol + 1;
1470                }
1471                fclose(out);
1472                unlink(rebase_path_rewritten_pending());
1473        }
1474        strbuf_release(&buf);
1475}
1476
1477static void record_in_rewritten(struct object_id *oid,
1478                enum todo_command next_command) {
1479        FILE *out = fopen_or_warn(rebase_path_rewritten_pending(), "a");
1480
1481        if (!out)
1482                return;
1483
1484        fprintf(out, "%s\n", oid_to_hex(oid));
1485        fclose(out);
1486
1487        if (!is_fixup(next_command))
1488                flush_rewritten_pending();
1489}
1490
1491static int do_pick_commit(enum todo_command command, struct commit *commit,
1492                struct replay_opts *opts, int final_fixup)
1493{
1494        unsigned int flags = opts->edit ? EDIT_MSG : 0;
1495        const char *msg_file = opts->edit ? NULL : git_path_merge_msg();
1496        struct object_id head;
1497        struct commit *base, *next, *parent;
1498        const char *base_label, *next_label;
1499        char *author = NULL;
1500        struct commit_message msg = { NULL, NULL, NULL, NULL };
1501        struct strbuf msgbuf = STRBUF_INIT;
1502        int res, unborn = 0, allow;
1503
1504        if (opts->no_commit) {
1505                /*
1506                 * We do not intend to commit immediately.  We just want to
1507                 * merge the differences in, so let's compute the tree
1508                 * that represents the "current" state for merge-recursive
1509                 * to work on.
1510                 */
1511                if (write_cache_as_tree(&head, 0, NULL))
1512                        return error(_("your index file is unmerged."));
1513        } else {
1514                unborn = get_oid("HEAD", &head);
1515                if (unborn)
1516                        oidcpy(&head, the_hash_algo->empty_tree);
1517                if (index_differs_from(unborn ? EMPTY_TREE_SHA1_HEX : "HEAD",
1518                                       NULL, 0))
1519                        return error_dirty_index(opts);
1520        }
1521        discard_cache();
1522
1523        if (!commit->parents)
1524                parent = NULL;
1525        else if (commit->parents->next) {
1526                /* Reverting or cherry-picking a merge commit */
1527                int cnt;
1528                struct commit_list *p;
1529
1530                if (!opts->mainline)
1531                        return error(_("commit %s is a merge but no -m option was given."),
1532                                oid_to_hex(&commit->object.oid));
1533
1534                for (cnt = 1, p = commit->parents;
1535                     cnt != opts->mainline && p;
1536                     cnt++)
1537                        p = p->next;
1538                if (cnt != opts->mainline || !p)
1539                        return error(_("commit %s does not have parent %d"),
1540                                oid_to_hex(&commit->object.oid), opts->mainline);
1541                parent = p->item;
1542        } else if (0 < opts->mainline)
1543                return error(_("mainline was specified but commit %s is not a merge."),
1544                        oid_to_hex(&commit->object.oid));
1545        else
1546                parent = commit->parents->item;
1547
1548        if (get_message(commit, &msg) != 0)
1549                return error(_("cannot get commit message for %s"),
1550                        oid_to_hex(&commit->object.oid));
1551
1552        if (opts->allow_ff && !is_fixup(command) &&
1553            ((parent && !oidcmp(&parent->object.oid, &head)) ||
1554             (!parent && unborn))) {
1555                if (is_rebase_i(opts))
1556                        write_author_script(msg.message);
1557                res = fast_forward_to(&commit->object.oid, &head, unborn,
1558                        opts);
1559                if (res || command != TODO_REWORD)
1560                        goto leave;
1561                flags |= EDIT_MSG | AMEND_MSG | VERIFY_MSG;
1562                msg_file = NULL;
1563                goto fast_forward_edit;
1564        }
1565        if (parent && parse_commit(parent) < 0)
1566                /* TRANSLATORS: The first %s will be a "todo" command like
1567                   "revert" or "pick", the second %s a SHA1. */
1568                return error(_("%s: cannot parse parent commit %s"),
1569                        command_to_string(command),
1570                        oid_to_hex(&parent->object.oid));
1571
1572        /*
1573         * "commit" is an existing commit.  We would want to apply
1574         * the difference it introduces since its first parent "prev"
1575         * on top of the current HEAD if we are cherry-pick.  Or the
1576         * reverse of it if we are revert.
1577         */
1578
1579        if (command == TODO_REVERT) {
1580                base = commit;
1581                base_label = msg.label;
1582                next = parent;
1583                next_label = msg.parent_label;
1584                strbuf_addstr(&msgbuf, "Revert \"");
1585                strbuf_addstr(&msgbuf, msg.subject);
1586                strbuf_addstr(&msgbuf, "\"\n\nThis reverts commit ");
1587                strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1588
1589                if (commit->parents && commit->parents->next) {
1590                        strbuf_addstr(&msgbuf, ", reversing\nchanges made to ");
1591                        strbuf_addstr(&msgbuf, oid_to_hex(&parent->object.oid));
1592                }
1593                strbuf_addstr(&msgbuf, ".\n");
1594        } else {
1595                const char *p;
1596
1597                base = parent;
1598                base_label = msg.parent_label;
1599                next = commit;
1600                next_label = msg.label;
1601
1602                /* Append the commit log message to msgbuf. */
1603                if (find_commit_subject(msg.message, &p))
1604                        strbuf_addstr(&msgbuf, p);
1605
1606                if (opts->record_origin) {
1607                        strbuf_complete_line(&msgbuf);
1608                        if (!has_conforming_footer(&msgbuf, NULL, 0))
1609                                strbuf_addch(&msgbuf, '\n');
1610                        strbuf_addstr(&msgbuf, cherry_picked_prefix);
1611                        strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1612                        strbuf_addstr(&msgbuf, ")\n");
1613                }
1614                if (!is_fixup(command))
1615                        author = get_author(msg.message);
1616        }
1617
1618        if (command == TODO_REWORD)
1619                flags |= EDIT_MSG | VERIFY_MSG;
1620        else if (is_fixup(command)) {
1621                if (update_squash_messages(command, commit, opts))
1622                        return -1;
1623                flags |= AMEND_MSG;
1624                if (!final_fixup)
1625                        msg_file = rebase_path_squash_msg();
1626                else if (file_exists(rebase_path_fixup_msg())) {
1627                        flags |= CLEANUP_MSG;
1628                        msg_file = rebase_path_fixup_msg();
1629                } else {
1630                        const char *dest = git_path_squash_msg();
1631                        unlink(dest);
1632                        if (copy_file(dest, rebase_path_squash_msg(), 0666))
1633                                return error(_("could not rename '%s' to '%s'"),
1634                                             rebase_path_squash_msg(), dest);
1635                        unlink(git_path_merge_msg());
1636                        msg_file = dest;
1637                        flags |= EDIT_MSG;
1638                }
1639        }
1640
1641        if (opts->signoff && !is_fixup(command))
1642                append_signoff(&msgbuf, 0, 0);
1643
1644        if (is_rebase_i(opts) && write_author_script(msg.message) < 0)
1645                res = -1;
1646        else if (!opts->strategy || !strcmp(opts->strategy, "recursive") || command == TODO_REVERT) {
1647                res = do_recursive_merge(base, next, base_label, next_label,
1648                                         &head, &msgbuf, opts);
1649                if (res < 0)
1650                        return res;
1651                res |= write_message(msgbuf.buf, msgbuf.len,
1652                                     git_path_merge_msg(), 0);
1653        } else {
1654                struct commit_list *common = NULL;
1655                struct commit_list *remotes = NULL;
1656
1657                res = write_message(msgbuf.buf, msgbuf.len,
1658                                    git_path_merge_msg(), 0);
1659
1660                commit_list_insert(base, &common);
1661                commit_list_insert(next, &remotes);
1662                res |= try_merge_command(opts->strategy,
1663                                         opts->xopts_nr, (const char **)opts->xopts,
1664                                        common, oid_to_hex(&head), remotes);
1665                free_commit_list(common);
1666                free_commit_list(remotes);
1667        }
1668        strbuf_release(&msgbuf);
1669
1670        /*
1671         * If the merge was clean or if it failed due to conflict, we write
1672         * CHERRY_PICK_HEAD for the subsequent invocation of commit to use.
1673         * However, if the merge did not even start, then we don't want to
1674         * write it at all.
1675         */
1676        if (command == TODO_PICK && !opts->no_commit && (res == 0 || res == 1) &&
1677            update_ref(NULL, "CHERRY_PICK_HEAD", &commit->object.oid, NULL,
1678                       REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1679                res = -1;
1680        if (command == TODO_REVERT && ((opts->no_commit && res == 0) || res == 1) &&
1681            update_ref(NULL, "REVERT_HEAD", &commit->object.oid, NULL,
1682                       REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1683                res = -1;
1684
1685        if (res) {
1686                error(command == TODO_REVERT
1687                      ? _("could not revert %s... %s")
1688                      : _("could not apply %s... %s"),
1689                      short_commit_name(commit), msg.subject);
1690                print_advice(res == 1, opts);
1691                rerere(opts->allow_rerere_auto);
1692                goto leave;
1693        }
1694
1695        allow = allow_empty(opts, commit);
1696        if (allow < 0) {
1697                res = allow;
1698                goto leave;
1699        } else if (allow)
1700                flags |= ALLOW_EMPTY;
1701        if (!opts->no_commit) {
1702fast_forward_edit:
1703                if (author || command == TODO_REVERT || (flags & AMEND_MSG))
1704                        res = do_commit(msg_file, author, opts, flags);
1705                else
1706                        res = error(_("unable to parse commit author"));
1707        }
1708
1709        if (!res && final_fixup) {
1710                unlink(rebase_path_fixup_msg());
1711                unlink(rebase_path_squash_msg());
1712        }
1713
1714leave:
1715        free_message(commit, &msg);
1716        free(author);
1717        update_abort_safety_file();
1718
1719        return res;
1720}
1721
1722static int prepare_revs(struct replay_opts *opts)
1723{
1724        /*
1725         * picking (but not reverting) ranges (but not individual revisions)
1726         * should be done in reverse
1727         */
1728        if (opts->action == REPLAY_PICK && !opts->revs->no_walk)
1729                opts->revs->reverse ^= 1;
1730
1731        if (prepare_revision_walk(opts->revs))
1732                return error(_("revision walk setup failed"));
1733
1734        if (!opts->revs->commits)
1735                return error(_("empty commit set passed"));
1736        return 0;
1737}
1738
1739static int read_and_refresh_cache(struct replay_opts *opts)
1740{
1741        struct lock_file index_lock = LOCK_INIT;
1742        int index_fd = hold_locked_index(&index_lock, 0);
1743        if (read_index_preload(&the_index, NULL) < 0) {
1744                rollback_lock_file(&index_lock);
1745                return error(_("git %s: failed to read the index"),
1746                        _(action_name(opts)));
1747        }
1748        refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED, NULL, NULL, NULL);
1749        if (index_fd >= 0) {
1750                if (write_locked_index(&the_index, &index_lock,
1751                                       COMMIT_LOCK | SKIP_IF_UNCHANGED)) {
1752                        return error(_("git %s: failed to refresh the index"),
1753                                _(action_name(opts)));
1754                }
1755        }
1756        return 0;
1757}
1758
1759enum todo_item_flags {
1760        TODO_EDIT_MERGE_MSG = 1
1761};
1762
1763struct todo_item {
1764        enum todo_command command;
1765        struct commit *commit;
1766        unsigned int flags;
1767        const char *arg;
1768        int arg_len;
1769        size_t offset_in_buf;
1770};
1771
1772struct todo_list {
1773        struct strbuf buf;
1774        struct todo_item *items;
1775        int nr, alloc, current;
1776        int done_nr, total_nr;
1777        struct stat_data stat;
1778};
1779
1780#define TODO_LIST_INIT { STRBUF_INIT }
1781
1782static void todo_list_release(struct todo_list *todo_list)
1783{
1784        strbuf_release(&todo_list->buf);
1785        FREE_AND_NULL(todo_list->items);
1786        todo_list->nr = todo_list->alloc = 0;
1787}
1788
1789static struct todo_item *append_new_todo(struct todo_list *todo_list)
1790{
1791        ALLOC_GROW(todo_list->items, todo_list->nr + 1, todo_list->alloc);
1792        return todo_list->items + todo_list->nr++;
1793}
1794
1795static int parse_insn_line(struct todo_item *item, const char *bol, char *eol)
1796{
1797        struct object_id commit_oid;
1798        char *end_of_object_name;
1799        int i, saved, status, padding;
1800
1801        item->flags = 0;
1802
1803        /* left-trim */
1804        bol += strspn(bol, " \t");
1805
1806        if (bol == eol || *bol == '\r' || *bol == comment_line_char) {
1807                item->command = TODO_COMMENT;
1808                item->commit = NULL;
1809                item->arg = bol;
1810                item->arg_len = eol - bol;
1811                return 0;
1812        }
1813
1814        for (i = 0; i < TODO_COMMENT; i++)
1815                if (skip_prefix(bol, todo_command_info[i].str, &bol)) {
1816                        item->command = i;
1817                        break;
1818                } else if (bol[1] == ' ' && *bol == todo_command_info[i].c) {
1819                        bol++;
1820                        item->command = i;
1821                        break;
1822                }
1823        if (i >= TODO_COMMENT)
1824                return -1;
1825
1826        /* Eat up extra spaces/ tabs before object name */
1827        padding = strspn(bol, " \t");
1828        bol += padding;
1829
1830        if (item->command == TODO_NOOP) {
1831                if (bol != eol)
1832                        return error(_("%s does not accept arguments: '%s'"),
1833                                     command_to_string(item->command), bol);
1834                item->commit = NULL;
1835                item->arg = bol;
1836                item->arg_len = eol - bol;
1837                return 0;
1838        }
1839
1840        if (!padding)
1841                return error(_("missing arguments for %s"),
1842                             command_to_string(item->command));
1843
1844        if (item->command == TODO_EXEC || item->command == TODO_LABEL ||
1845            item->command == TODO_RESET) {
1846                item->commit = NULL;
1847                item->arg = bol;
1848                item->arg_len = (int)(eol - bol);
1849                return 0;
1850        }
1851
1852        if (item->command == TODO_MERGE) {
1853                if (skip_prefix(bol, "-C", &bol))
1854                        bol += strspn(bol, " \t");
1855                else if (skip_prefix(bol, "-c", &bol)) {
1856                        bol += strspn(bol, " \t");
1857                        item->flags |= TODO_EDIT_MERGE_MSG;
1858                } else {
1859                        item->flags |= TODO_EDIT_MERGE_MSG;
1860                        item->commit = NULL;
1861                        item->arg = bol;
1862                        item->arg_len = (int)(eol - bol);
1863                        return 0;
1864                }
1865        }
1866
1867        end_of_object_name = (char *) bol + strcspn(bol, " \t\n");
1868        saved = *end_of_object_name;
1869        *end_of_object_name = '\0';
1870        status = get_oid(bol, &commit_oid);
1871        *end_of_object_name = saved;
1872
1873        item->arg = end_of_object_name + strspn(end_of_object_name, " \t");
1874        item->arg_len = (int)(eol - item->arg);
1875
1876        if (status < 0)
1877                return -1;
1878
1879        item->commit = lookup_commit_reference(&commit_oid);
1880        return !item->commit;
1881}
1882
1883static int parse_insn_buffer(char *buf, struct todo_list *todo_list)
1884{
1885        struct todo_item *item;
1886        char *p = buf, *next_p;
1887        int i, res = 0, fixup_okay = file_exists(rebase_path_done());
1888
1889        for (i = 1; *p; i++, p = next_p) {
1890                char *eol = strchrnul(p, '\n');
1891
1892                next_p = *eol ? eol + 1 /* skip LF */ : eol;
1893
1894                if (p != eol && eol[-1] == '\r')
1895                        eol--; /* strip Carriage Return */
1896
1897                item = append_new_todo(todo_list);
1898                item->offset_in_buf = p - todo_list->buf.buf;
1899                if (parse_insn_line(item, p, eol)) {
1900                        res = error(_("invalid line %d: %.*s"),
1901                                i, (int)(eol - p), p);
1902                        item->command = TODO_NOOP;
1903                }
1904
1905                if (fixup_okay)
1906                        ; /* do nothing */
1907                else if (is_fixup(item->command))
1908                        return error(_("cannot '%s' without a previous commit"),
1909                                command_to_string(item->command));
1910                else if (!is_noop(item->command))
1911                        fixup_okay = 1;
1912        }
1913
1914        return res;
1915}
1916
1917static int count_commands(struct todo_list *todo_list)
1918{
1919        int count = 0, i;
1920
1921        for (i = 0; i < todo_list->nr; i++)
1922                if (todo_list->items[i].command != TODO_COMMENT)
1923                        count++;
1924
1925        return count;
1926}
1927
1928static int get_item_line_offset(struct todo_list *todo_list, int index)
1929{
1930        return index < todo_list->nr ?
1931                todo_list->items[index].offset_in_buf : todo_list->buf.len;
1932}
1933
1934static const char *get_item_line(struct todo_list *todo_list, int index)
1935{
1936        return todo_list->buf.buf + get_item_line_offset(todo_list, index);
1937}
1938
1939static int get_item_line_length(struct todo_list *todo_list, int index)
1940{
1941        return get_item_line_offset(todo_list, index + 1)
1942                -  get_item_line_offset(todo_list, index);
1943}
1944
1945static ssize_t strbuf_read_file_or_whine(struct strbuf *sb, const char *path)
1946{
1947        int fd;
1948        ssize_t len;
1949
1950        fd = open(path, O_RDONLY);
1951        if (fd < 0)
1952                return error_errno(_("could not open '%s'"), path);
1953        len = strbuf_read(sb, fd, 0);
1954        close(fd);
1955        if (len < 0)
1956                return error(_("could not read '%s'."), path);
1957        return len;
1958}
1959
1960static int read_populate_todo(struct todo_list *todo_list,
1961                        struct replay_opts *opts)
1962{
1963        struct stat st;
1964        const char *todo_file = get_todo_path(opts);
1965        int res;
1966
1967        strbuf_reset(&todo_list->buf);
1968        if (strbuf_read_file_or_whine(&todo_list->buf, todo_file) < 0)
1969                return -1;
1970
1971        res = stat(todo_file, &st);
1972        if (res)
1973                return error(_("could not stat '%s'"), todo_file);
1974        fill_stat_data(&todo_list->stat, &st);
1975
1976        res = parse_insn_buffer(todo_list->buf.buf, todo_list);
1977        if (res) {
1978                if (is_rebase_i(opts))
1979                        return error(_("please fix this using "
1980                                       "'git rebase --edit-todo'."));
1981                return error(_("unusable instruction sheet: '%s'"), todo_file);
1982        }
1983
1984        if (!todo_list->nr &&
1985            (!is_rebase_i(opts) || !file_exists(rebase_path_done())))
1986                return error(_("no commits parsed."));
1987
1988        if (!is_rebase_i(opts)) {
1989                enum todo_command valid =
1990                        opts->action == REPLAY_PICK ? TODO_PICK : TODO_REVERT;
1991                int i;
1992
1993                for (i = 0; i < todo_list->nr; i++)
1994                        if (valid == todo_list->items[i].command)
1995                                continue;
1996                        else if (valid == TODO_PICK)
1997                                return error(_("cannot cherry-pick during a revert."));
1998                        else
1999                                return error(_("cannot revert during a cherry-pick."));
2000        }
2001
2002        if (is_rebase_i(opts)) {
2003                struct todo_list done = TODO_LIST_INIT;
2004                FILE *f = fopen_or_warn(rebase_path_msgtotal(), "w");
2005
2006                if (strbuf_read_file(&done.buf, rebase_path_done(), 0) > 0 &&
2007                                !parse_insn_buffer(done.buf.buf, &done))
2008                        todo_list->done_nr = count_commands(&done);
2009                else
2010                        todo_list->done_nr = 0;
2011
2012                todo_list->total_nr = todo_list->done_nr
2013                        + count_commands(todo_list);
2014                todo_list_release(&done);
2015
2016                if (f) {
2017                        fprintf(f, "%d\n", todo_list->total_nr);
2018                        fclose(f);
2019                }
2020        }
2021
2022        return 0;
2023}
2024
2025static int git_config_string_dup(char **dest,
2026                                 const char *var, const char *value)
2027{
2028        if (!value)
2029                return config_error_nonbool(var);
2030        free(*dest);
2031        *dest = xstrdup(value);
2032        return 0;
2033}
2034
2035static int populate_opts_cb(const char *key, const char *value, void *data)
2036{
2037        struct replay_opts *opts = data;
2038        int error_flag = 1;
2039
2040        if (!value)
2041                error_flag = 0;
2042        else if (!strcmp(key, "options.no-commit"))
2043                opts->no_commit = git_config_bool_or_int(key, value, &error_flag);
2044        else if (!strcmp(key, "options.edit"))
2045                opts->edit = git_config_bool_or_int(key, value, &error_flag);
2046        else if (!strcmp(key, "options.signoff"))
2047                opts->signoff = git_config_bool_or_int(key, value, &error_flag);
2048        else if (!strcmp(key, "options.record-origin"))
2049                opts->record_origin = git_config_bool_or_int(key, value, &error_flag);
2050        else if (!strcmp(key, "options.allow-ff"))
2051                opts->allow_ff = git_config_bool_or_int(key, value, &error_flag);
2052        else if (!strcmp(key, "options.mainline"))
2053                opts->mainline = git_config_int(key, value);
2054        else if (!strcmp(key, "options.strategy"))
2055                git_config_string_dup(&opts->strategy, key, value);
2056        else if (!strcmp(key, "options.gpg-sign"))
2057                git_config_string_dup(&opts->gpg_sign, key, value);
2058        else if (!strcmp(key, "options.strategy-option")) {
2059                ALLOC_GROW(opts->xopts, opts->xopts_nr + 1, opts->xopts_alloc);
2060                opts->xopts[opts->xopts_nr++] = xstrdup(value);
2061        } else if (!strcmp(key, "options.allow-rerere-auto"))
2062                opts->allow_rerere_auto =
2063                        git_config_bool_or_int(key, value, &error_flag) ?
2064                                RERERE_AUTOUPDATE : RERERE_NOAUTOUPDATE;
2065        else
2066                return error(_("invalid key: %s"), key);
2067
2068        if (!error_flag)
2069                return error(_("invalid value for %s: %s"), key, value);
2070
2071        return 0;
2072}
2073
2074static void read_strategy_opts(struct replay_opts *opts, struct strbuf *buf)
2075{
2076        int i;
2077
2078        strbuf_reset(buf);
2079        if (!read_oneliner(buf, rebase_path_strategy(), 0))
2080                return;
2081        opts->strategy = strbuf_detach(buf, NULL);
2082        if (!read_oneliner(buf, rebase_path_strategy_opts(), 0))
2083                return;
2084
2085        opts->xopts_nr = split_cmdline(buf->buf, (const char ***)&opts->xopts);
2086        for (i = 0; i < opts->xopts_nr; i++) {
2087                const char *arg = opts->xopts[i];
2088
2089                skip_prefix(arg, "--", &arg);
2090                opts->xopts[i] = xstrdup(arg);
2091        }
2092}
2093
2094static int read_populate_opts(struct replay_opts *opts)
2095{
2096        if (is_rebase_i(opts)) {
2097                struct strbuf buf = STRBUF_INIT;
2098
2099                if (read_oneliner(&buf, rebase_path_gpg_sign_opt(), 1)) {
2100                        if (!starts_with(buf.buf, "-S"))
2101                                strbuf_reset(&buf);
2102                        else {
2103                                free(opts->gpg_sign);
2104                                opts->gpg_sign = xstrdup(buf.buf + 2);
2105                        }
2106                        strbuf_reset(&buf);
2107                }
2108
2109                if (read_oneliner(&buf, rebase_path_allow_rerere_autoupdate(), 1)) {
2110                        if (!strcmp(buf.buf, "--rerere-autoupdate"))
2111                                opts->allow_rerere_auto = RERERE_AUTOUPDATE;
2112                        else if (!strcmp(buf.buf, "--no-rerere-autoupdate"))
2113                                opts->allow_rerere_auto = RERERE_NOAUTOUPDATE;
2114                        strbuf_reset(&buf);
2115                }
2116
2117                if (file_exists(rebase_path_verbose()))
2118                        opts->verbose = 1;
2119
2120                if (file_exists(rebase_path_signoff())) {
2121                        opts->allow_ff = 0;
2122                        opts->signoff = 1;
2123                }
2124
2125                read_strategy_opts(opts, &buf);
2126                strbuf_release(&buf);
2127
2128                return 0;
2129        }
2130
2131        if (!file_exists(git_path_opts_file()))
2132                return 0;
2133        /*
2134         * The function git_parse_source(), called from git_config_from_file(),
2135         * may die() in case of a syntactically incorrect file. We do not care
2136         * about this case, though, because we wrote that file ourselves, so we
2137         * are pretty certain that it is syntactically correct.
2138         */
2139        if (git_config_from_file(populate_opts_cb, git_path_opts_file(), opts) < 0)
2140                return error(_("malformed options sheet: '%s'"),
2141                        git_path_opts_file());
2142        return 0;
2143}
2144
2145static int walk_revs_populate_todo(struct todo_list *todo_list,
2146                                struct replay_opts *opts)
2147{
2148        enum todo_command command = opts->action == REPLAY_PICK ?
2149                TODO_PICK : TODO_REVERT;
2150        const char *command_string = todo_command_info[command].str;
2151        struct commit *commit;
2152
2153        if (prepare_revs(opts))
2154                return -1;
2155
2156        while ((commit = get_revision(opts->revs))) {
2157                struct todo_item *item = append_new_todo(todo_list);
2158                const char *commit_buffer = get_commit_buffer(commit, NULL);
2159                const char *subject;
2160                int subject_len;
2161
2162                item->command = command;
2163                item->commit = commit;
2164                item->arg = NULL;
2165                item->arg_len = 0;
2166                item->offset_in_buf = todo_list->buf.len;
2167                subject_len = find_commit_subject(commit_buffer, &subject);
2168                strbuf_addf(&todo_list->buf, "%s %s %.*s\n", command_string,
2169                        short_commit_name(commit), subject_len, subject);
2170                unuse_commit_buffer(commit, commit_buffer);
2171        }
2172        return 0;
2173}
2174
2175static int create_seq_dir(void)
2176{
2177        if (file_exists(git_path_seq_dir())) {
2178                error(_("a cherry-pick or revert is already in progress"));
2179                advise(_("try \"git cherry-pick (--continue | --quit | --abort)\""));
2180                return -1;
2181        } else if (mkdir(git_path_seq_dir(), 0777) < 0)
2182                return error_errno(_("could not create sequencer directory '%s'"),
2183                                   git_path_seq_dir());
2184        return 0;
2185}
2186
2187static int save_head(const char *head)
2188{
2189        struct lock_file head_lock = LOCK_INIT;
2190        struct strbuf buf = STRBUF_INIT;
2191        int fd;
2192        ssize_t written;
2193
2194        fd = hold_lock_file_for_update(&head_lock, git_path_head_file(), 0);
2195        if (fd < 0)
2196                return error_errno(_("could not lock HEAD"));
2197        strbuf_addf(&buf, "%s\n", head);
2198        written = write_in_full(fd, buf.buf, buf.len);
2199        strbuf_release(&buf);
2200        if (written < 0) {
2201                error_errno(_("could not write to '%s'"), git_path_head_file());
2202                rollback_lock_file(&head_lock);
2203                return -1;
2204        }
2205        if (commit_lock_file(&head_lock) < 0)
2206                return error(_("failed to finalize '%s'"), git_path_head_file());
2207        return 0;
2208}
2209
2210static int rollback_is_safe(void)
2211{
2212        struct strbuf sb = STRBUF_INIT;
2213        struct object_id expected_head, actual_head;
2214
2215        if (strbuf_read_file(&sb, git_path_abort_safety_file(), 0) >= 0) {
2216                strbuf_trim(&sb);
2217                if (get_oid_hex(sb.buf, &expected_head)) {
2218                        strbuf_release(&sb);
2219                        die(_("could not parse %s"), git_path_abort_safety_file());
2220                }
2221                strbuf_release(&sb);
2222        }
2223        else if (errno == ENOENT)
2224                oidclr(&expected_head);
2225        else
2226                die_errno(_("could not read '%s'"), git_path_abort_safety_file());
2227
2228        if (get_oid("HEAD", &actual_head))
2229                oidclr(&actual_head);
2230
2231        return !oidcmp(&actual_head, &expected_head);
2232}
2233
2234static int reset_for_rollback(const struct object_id *oid)
2235{
2236        const char *argv[4];    /* reset --merge <arg> + NULL */
2237
2238        argv[0] = "reset";
2239        argv[1] = "--merge";
2240        argv[2] = oid_to_hex(oid);
2241        argv[3] = NULL;
2242        return run_command_v_opt(argv, RUN_GIT_CMD);
2243}
2244
2245static int rollback_single_pick(void)
2246{
2247        struct object_id head_oid;
2248
2249        if (!file_exists(git_path_cherry_pick_head()) &&
2250            !file_exists(git_path_revert_head()))
2251                return error(_("no cherry-pick or revert in progress"));
2252        if (read_ref_full("HEAD", 0, &head_oid, NULL))
2253                return error(_("cannot resolve HEAD"));
2254        if (is_null_oid(&head_oid))
2255                return error(_("cannot abort from a branch yet to be born"));
2256        return reset_for_rollback(&head_oid);
2257}
2258
2259int sequencer_rollback(struct replay_opts *opts)
2260{
2261        FILE *f;
2262        struct object_id oid;
2263        struct strbuf buf = STRBUF_INIT;
2264        const char *p;
2265
2266        f = fopen(git_path_head_file(), "r");
2267        if (!f && errno == ENOENT) {
2268                /*
2269                 * There is no multiple-cherry-pick in progress.
2270                 * If CHERRY_PICK_HEAD or REVERT_HEAD indicates
2271                 * a single-cherry-pick in progress, abort that.
2272                 */
2273                return rollback_single_pick();
2274        }
2275        if (!f)
2276                return error_errno(_("cannot open '%s'"), git_path_head_file());
2277        if (strbuf_getline_lf(&buf, f)) {
2278                error(_("cannot read '%s': %s"), git_path_head_file(),
2279                      ferror(f) ?  strerror(errno) : _("unexpected end of file"));
2280                fclose(f);
2281                goto fail;
2282        }
2283        fclose(f);
2284        if (parse_oid_hex(buf.buf, &oid, &p) || *p != '\0') {
2285                error(_("stored pre-cherry-pick HEAD file '%s' is corrupt"),
2286                        git_path_head_file());
2287                goto fail;
2288        }
2289        if (is_null_oid(&oid)) {
2290                error(_("cannot abort from a branch yet to be born"));
2291                goto fail;
2292        }
2293
2294        if (!rollback_is_safe()) {
2295                /* Do not error, just do not rollback */
2296                warning(_("You seem to have moved HEAD. "
2297                          "Not rewinding, check your HEAD!"));
2298        } else
2299        if (reset_for_rollback(&oid))
2300                goto fail;
2301        strbuf_release(&buf);
2302        return sequencer_remove_state(opts);
2303fail:
2304        strbuf_release(&buf);
2305        return -1;
2306}
2307
2308static int save_todo(struct todo_list *todo_list, struct replay_opts *opts)
2309{
2310        struct lock_file todo_lock = LOCK_INIT;
2311        const char *todo_path = get_todo_path(opts);
2312        int next = todo_list->current, offset, fd;
2313
2314        /*
2315         * rebase -i writes "git-rebase-todo" without the currently executing
2316         * command, appending it to "done" instead.
2317         */
2318        if (is_rebase_i(opts))
2319                next++;
2320
2321        fd = hold_lock_file_for_update(&todo_lock, todo_path, 0);
2322        if (fd < 0)
2323                return error_errno(_("could not lock '%s'"), todo_path);
2324        offset = get_item_line_offset(todo_list, next);
2325        if (write_in_full(fd, todo_list->buf.buf + offset,
2326                        todo_list->buf.len - offset) < 0)
2327                return error_errno(_("could not write to '%s'"), todo_path);
2328        if (commit_lock_file(&todo_lock) < 0)
2329                return error(_("failed to finalize '%s'"), todo_path);
2330
2331        if (is_rebase_i(opts) && next > 0) {
2332                const char *done = rebase_path_done();
2333                int fd = open(done, O_CREAT | O_WRONLY | O_APPEND, 0666);
2334                int ret = 0;
2335
2336                if (fd < 0)
2337                        return 0;
2338                if (write_in_full(fd, get_item_line(todo_list, next - 1),
2339                                  get_item_line_length(todo_list, next - 1))
2340                    < 0)
2341                        ret = error_errno(_("could not write to '%s'"), done);
2342                if (close(fd) < 0)
2343                        ret = error_errno(_("failed to finalize '%s'"), done);
2344                return ret;
2345        }
2346        return 0;
2347}
2348
2349static int save_opts(struct replay_opts *opts)
2350{
2351        const char *opts_file = git_path_opts_file();
2352        int res = 0;
2353
2354        if (opts->no_commit)
2355                res |= git_config_set_in_file_gently(opts_file, "options.no-commit", "true");
2356        if (opts->edit)
2357                res |= git_config_set_in_file_gently(opts_file, "options.edit", "true");
2358        if (opts->signoff)
2359                res |= git_config_set_in_file_gently(opts_file, "options.signoff", "true");
2360        if (opts->record_origin)
2361                res |= git_config_set_in_file_gently(opts_file, "options.record-origin", "true");
2362        if (opts->allow_ff)
2363                res |= git_config_set_in_file_gently(opts_file, "options.allow-ff", "true");
2364        if (opts->mainline) {
2365                struct strbuf buf = STRBUF_INIT;
2366                strbuf_addf(&buf, "%d", opts->mainline);
2367                res |= git_config_set_in_file_gently(opts_file, "options.mainline", buf.buf);
2368                strbuf_release(&buf);
2369        }
2370        if (opts->strategy)
2371                res |= git_config_set_in_file_gently(opts_file, "options.strategy", opts->strategy);
2372        if (opts->gpg_sign)
2373                res |= git_config_set_in_file_gently(opts_file, "options.gpg-sign", opts->gpg_sign);
2374        if (opts->xopts) {
2375                int i;
2376                for (i = 0; i < opts->xopts_nr; i++)
2377                        res |= git_config_set_multivar_in_file_gently(opts_file,
2378                                                        "options.strategy-option",
2379                                                        opts->xopts[i], "^$", 0);
2380        }
2381        if (opts->allow_rerere_auto)
2382                res |= git_config_set_in_file_gently(opts_file, "options.allow-rerere-auto",
2383                                                     opts->allow_rerere_auto == RERERE_AUTOUPDATE ?
2384                                                     "true" : "false");
2385        return res;
2386}
2387
2388static int make_patch(struct commit *commit, struct replay_opts *opts)
2389{
2390        struct strbuf buf = STRBUF_INIT;
2391        struct rev_info log_tree_opt;
2392        const char *subject, *p;
2393        int res = 0;
2394
2395        p = short_commit_name(commit);
2396        if (write_message(p, strlen(p), rebase_path_stopped_sha(), 1) < 0)
2397                return -1;
2398        if (update_ref("rebase", "REBASE_HEAD", &commit->object.oid,
2399                       NULL, REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
2400                res |= error(_("could not update %s"), "REBASE_HEAD");
2401
2402        strbuf_addf(&buf, "%s/patch", get_dir(opts));
2403        memset(&log_tree_opt, 0, sizeof(log_tree_opt));
2404        init_revisions(&log_tree_opt, NULL);
2405        log_tree_opt.abbrev = 0;
2406        log_tree_opt.diff = 1;
2407        log_tree_opt.diffopt.output_format = DIFF_FORMAT_PATCH;
2408        log_tree_opt.disable_stdin = 1;
2409        log_tree_opt.no_commit_id = 1;
2410        log_tree_opt.diffopt.file = fopen(buf.buf, "w");
2411        log_tree_opt.diffopt.use_color = GIT_COLOR_NEVER;
2412        if (!log_tree_opt.diffopt.file)
2413                res |= error_errno(_("could not open '%s'"), buf.buf);
2414        else {
2415                res |= log_tree_commit(&log_tree_opt, commit);
2416                fclose(log_tree_opt.diffopt.file);
2417        }
2418        strbuf_reset(&buf);
2419
2420        strbuf_addf(&buf, "%s/message", get_dir(opts));
2421        if (!file_exists(buf.buf)) {
2422                const char *commit_buffer = get_commit_buffer(commit, NULL);
2423                find_commit_subject(commit_buffer, &subject);
2424                res |= write_message(subject, strlen(subject), buf.buf, 1);
2425                unuse_commit_buffer(commit, commit_buffer);
2426        }
2427        strbuf_release(&buf);
2428
2429        return res;
2430}
2431
2432static int intend_to_amend(void)
2433{
2434        struct object_id head;
2435        char *p;
2436
2437        if (get_oid("HEAD", &head))
2438                return error(_("cannot read HEAD"));
2439
2440        p = oid_to_hex(&head);
2441        return write_message(p, strlen(p), rebase_path_amend(), 1);
2442}
2443
2444static int error_with_patch(struct commit *commit,
2445        const char *subject, int subject_len,
2446        struct replay_opts *opts, int exit_code, int to_amend)
2447{
2448        if (make_patch(commit, opts))
2449                return -1;
2450
2451        if (to_amend) {
2452                if (intend_to_amend())
2453                        return -1;
2454
2455                fprintf(stderr, "You can amend the commit now, with\n"
2456                        "\n"
2457                        "  git commit --amend %s\n"
2458                        "\n"
2459                        "Once you are satisfied with your changes, run\n"
2460                        "\n"
2461                        "  git rebase --continue\n", gpg_sign_opt_quoted(opts));
2462        } else if (exit_code)
2463                fprintf(stderr, "Could not apply %s... %.*s\n",
2464                        short_commit_name(commit), subject_len, subject);
2465
2466        return exit_code;
2467}
2468
2469static int error_failed_squash(struct commit *commit,
2470        struct replay_opts *opts, int subject_len, const char *subject)
2471{
2472        if (rename(rebase_path_squash_msg(), rebase_path_message()))
2473                return error(_("could not rename '%s' to '%s'"),
2474                        rebase_path_squash_msg(), rebase_path_message());
2475        unlink(rebase_path_fixup_msg());
2476        unlink(git_path_merge_msg());
2477        if (copy_file(git_path_merge_msg(), rebase_path_message(), 0666))
2478                return error(_("could not copy '%s' to '%s'"),
2479                             rebase_path_message(), git_path_merge_msg());
2480        return error_with_patch(commit, subject, subject_len, opts, 1, 0);
2481}
2482
2483static int do_exec(const char *command_line)
2484{
2485        struct argv_array child_env = ARGV_ARRAY_INIT;
2486        const char *child_argv[] = { NULL, NULL };
2487        int dirty, status;
2488
2489        fprintf(stderr, "Executing: %s\n", command_line);
2490        child_argv[0] = command_line;
2491        argv_array_pushf(&child_env, "GIT_DIR=%s", absolute_path(get_git_dir()));
2492        status = run_command_v_opt_cd_env(child_argv, RUN_USING_SHELL, NULL,
2493                                          child_env.argv);
2494
2495        /* force re-reading of the cache */
2496        if (discard_cache() < 0 || read_cache() < 0)
2497                return error(_("could not read index"));
2498
2499        dirty = require_clean_work_tree("rebase", NULL, 1, 1);
2500
2501        if (status) {
2502                warning(_("execution failed: %s\n%s"
2503                          "You can fix the problem, and then run\n"
2504                          "\n"
2505                          "  git rebase --continue\n"
2506                          "\n"),
2507                        command_line,
2508                        dirty ? N_("and made changes to the index and/or the "
2509                                "working tree\n") : "");
2510                if (status == 127)
2511                        /* command not found */
2512                        status = 1;
2513        } else if (dirty) {
2514                warning(_("execution succeeded: %s\nbut "
2515                          "left changes to the index and/or the working tree\n"
2516                          "Commit or stash your changes, and then run\n"
2517                          "\n"
2518                          "  git rebase --continue\n"
2519                          "\n"), command_line);
2520                status = 1;
2521        }
2522
2523        argv_array_clear(&child_env);
2524
2525        return status;
2526}
2527
2528static int safe_append(const char *filename, const char *fmt, ...)
2529{
2530        va_list ap;
2531        struct lock_file lock = LOCK_INIT;
2532        int fd = hold_lock_file_for_update(&lock, filename,
2533                                           LOCK_REPORT_ON_ERROR);
2534        struct strbuf buf = STRBUF_INIT;
2535
2536        if (fd < 0)
2537                return -1;
2538
2539        if (strbuf_read_file(&buf, filename, 0) < 0 && errno != ENOENT) {
2540                error_errno(_("could not read '%s'"), filename);
2541                rollback_lock_file(&lock);
2542                return -1;
2543        }
2544        strbuf_complete(&buf, '\n');
2545        va_start(ap, fmt);
2546        strbuf_vaddf(&buf, fmt, ap);
2547        va_end(ap);
2548
2549        if (write_in_full(fd, buf.buf, buf.len) < 0) {
2550                error_errno(_("could not write to '%s'"), filename);
2551                strbuf_release(&buf);
2552                rollback_lock_file(&lock);
2553                return -1;
2554        }
2555        if (commit_lock_file(&lock) < 0) {
2556                strbuf_release(&buf);
2557                rollback_lock_file(&lock);
2558                return error(_("failed to finalize '%s'"), filename);
2559        }
2560
2561        strbuf_release(&buf);
2562        return 0;
2563}
2564
2565static int do_label(const char *name, int len)
2566{
2567        struct ref_store *refs = get_main_ref_store();
2568        struct ref_transaction *transaction;
2569        struct strbuf ref_name = STRBUF_INIT, err = STRBUF_INIT;
2570        struct strbuf msg = STRBUF_INIT;
2571        int ret = 0;
2572        struct object_id head_oid;
2573
2574        if (len == 1 && *name == '#')
2575                return error("Illegal label name: '%.*s'", len, name);
2576
2577        strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
2578        strbuf_addf(&msg, "rebase -i (label) '%.*s'", len, name);
2579
2580        transaction = ref_store_transaction_begin(refs, &err);
2581        if (!transaction) {
2582                error("%s", err.buf);
2583                ret = -1;
2584        } else if (get_oid("HEAD", &head_oid)) {
2585                error(_("could not read HEAD"));
2586                ret = -1;
2587        } else if (ref_transaction_update(transaction, ref_name.buf, &head_oid,
2588                                          NULL, 0, msg.buf, &err) < 0 ||
2589                   ref_transaction_commit(transaction, &err)) {
2590                error("%s", err.buf);
2591                ret = -1;
2592        }
2593        ref_transaction_free(transaction);
2594        strbuf_release(&err);
2595        strbuf_release(&msg);
2596
2597        if (!ret)
2598                ret = safe_append(rebase_path_refs_to_delete(),
2599                                  "%s\n", ref_name.buf);
2600        strbuf_release(&ref_name);
2601
2602        return ret;
2603}
2604
2605static const char *reflog_message(struct replay_opts *opts,
2606        const char *sub_action, const char *fmt, ...);
2607
2608static int do_reset(const char *name, int len, struct replay_opts *opts)
2609{
2610        struct strbuf ref_name = STRBUF_INIT;
2611        struct object_id oid;
2612        struct lock_file lock = LOCK_INIT;
2613        struct tree_desc desc;
2614        struct tree *tree;
2615        struct unpack_trees_options unpack_tree_opts;
2616        int ret = 0, i;
2617
2618        if (hold_locked_index(&lock, LOCK_REPORT_ON_ERROR) < 0)
2619                return -1;
2620
2621        /* Determine the length of the label */
2622        for (i = 0; i < len; i++)
2623                if (isspace(name[i]))
2624                        len = i;
2625
2626        strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
2627        if (get_oid(ref_name.buf, &oid) &&
2628            get_oid(ref_name.buf + strlen("refs/rewritten/"), &oid)) {
2629                error(_("could not read '%s'"), ref_name.buf);
2630                rollback_lock_file(&lock);
2631                strbuf_release(&ref_name);
2632                return -1;
2633        }
2634
2635        memset(&unpack_tree_opts, 0, sizeof(unpack_tree_opts));
2636        setup_unpack_trees_porcelain(&unpack_tree_opts, "reset");
2637        unpack_tree_opts.head_idx = 1;
2638        unpack_tree_opts.src_index = &the_index;
2639        unpack_tree_opts.dst_index = &the_index;
2640        unpack_tree_opts.fn = oneway_merge;
2641        unpack_tree_opts.merge = 1;
2642        unpack_tree_opts.update = 1;
2643
2644        if (read_cache_unmerged()) {
2645                rollback_lock_file(&lock);
2646                strbuf_release(&ref_name);
2647                return error_resolve_conflict(_(action_name(opts)));
2648        }
2649
2650        if (!fill_tree_descriptor(&desc, &oid)) {
2651                error(_("failed to find tree of %s"), oid_to_hex(&oid));
2652                rollback_lock_file(&lock);
2653                free((void *)desc.buffer);
2654                strbuf_release(&ref_name);
2655                return -1;
2656        }
2657
2658        if (unpack_trees(1, &desc, &unpack_tree_opts)) {
2659                rollback_lock_file(&lock);
2660                free((void *)desc.buffer);
2661                strbuf_release(&ref_name);
2662                return -1;
2663        }
2664
2665        tree = parse_tree_indirect(&oid);
2666        prime_cache_tree(&the_index, tree);
2667
2668        if (write_locked_index(&the_index, &lock, COMMIT_LOCK) < 0)
2669                ret = error(_("could not write index"));
2670        free((void *)desc.buffer);
2671
2672        if (!ret)
2673                ret = update_ref(reflog_message(opts, "reset", "'%.*s'",
2674                                                len, name), "HEAD", &oid,
2675                                 NULL, 0, UPDATE_REFS_MSG_ON_ERR);
2676
2677        strbuf_release(&ref_name);
2678        return ret;
2679}
2680
2681static int do_merge(struct commit *commit, const char *arg, int arg_len,
2682                    int flags, struct replay_opts *opts)
2683{
2684        int run_commit_flags = (flags & TODO_EDIT_MERGE_MSG) ?
2685                EDIT_MSG | VERIFY_MSG : 0;
2686        struct strbuf ref_name = STRBUF_INIT;
2687        struct commit *head_commit, *merge_commit, *i;
2688        struct commit_list *bases, *j, *reversed = NULL;
2689        struct merge_options o;
2690        int merge_arg_len, oneline_offset, ret;
2691        static struct lock_file lock;
2692        const char *p;
2693
2694        if (hold_locked_index(&lock, LOCK_REPORT_ON_ERROR) < 0) {
2695                ret = -1;
2696                goto leave_merge;
2697        }
2698
2699        head_commit = lookup_commit_reference_by_name("HEAD");
2700        if (!head_commit) {
2701                ret = error(_("cannot merge without a current revision"));
2702                goto leave_merge;
2703        }
2704
2705        oneline_offset = arg_len;
2706        merge_arg_len = strcspn(arg, " \t\n");
2707        p = arg + merge_arg_len;
2708        p += strspn(p, " \t\n");
2709        if (*p == '#' && (!p[1] || isspace(p[1]))) {
2710                p += 1 + strspn(p + 1, " \t\n");
2711                oneline_offset = p - arg;
2712        } else if (p - arg < arg_len)
2713                BUG("octopus merges are not supported yet: '%s'", p);
2714
2715        strbuf_addf(&ref_name, "refs/rewritten/%.*s", merge_arg_len, arg);
2716        merge_commit = lookup_commit_reference_by_name(ref_name.buf);
2717        if (!merge_commit) {
2718                /* fall back to non-rewritten ref or commit */
2719                strbuf_splice(&ref_name, 0, strlen("refs/rewritten/"), "", 0);
2720                merge_commit = lookup_commit_reference_by_name(ref_name.buf);
2721        }
2722
2723        if (!merge_commit) {
2724                ret = error(_("could not resolve '%s'"), ref_name.buf);
2725                goto leave_merge;
2726        }
2727
2728        if (commit) {
2729                const char *message = get_commit_buffer(commit, NULL);
2730                const char *body;
2731                int len;
2732
2733                if (!message) {
2734                        ret = error(_("could not get commit message of '%s'"),
2735                                    oid_to_hex(&commit->object.oid));
2736                        goto leave_merge;
2737                }
2738                write_author_script(message);
2739                find_commit_subject(message, &body);
2740                len = strlen(body);
2741                ret = write_message(body, len, git_path_merge_msg(), 0);
2742                unuse_commit_buffer(commit, message);
2743                if (ret) {
2744                        error_errno(_("could not write '%s'"),
2745                                    git_path_merge_msg());
2746                        goto leave_merge;
2747                }
2748        } else {
2749                struct strbuf buf = STRBUF_INIT;
2750                int len;
2751
2752                strbuf_addf(&buf, "author %s", git_author_info(0));
2753                write_author_script(buf.buf);
2754                strbuf_reset(&buf);
2755
2756                if (oneline_offset < arg_len) {
2757                        p = arg + oneline_offset;
2758                        len = arg_len - oneline_offset;
2759                } else {
2760                        strbuf_addf(&buf, "Merge branch '%.*s'",
2761                                    merge_arg_len, arg);
2762                        p = buf.buf;
2763                        len = buf.len;
2764                }
2765
2766                ret = write_message(p, len, git_path_merge_msg(), 0);
2767                strbuf_release(&buf);
2768                if (ret) {
2769                        error_errno(_("could not write '%s'"),
2770                                    git_path_merge_msg());
2771                        goto leave_merge;
2772                }
2773        }
2774
2775        write_message(oid_to_hex(&merge_commit->object.oid), GIT_SHA1_HEXSZ,
2776                      git_path_merge_head(), 0);
2777        write_message("no-ff", 5, git_path_merge_mode(), 0);
2778
2779        bases = get_merge_bases(head_commit, merge_commit);
2780        for (j = bases; j; j = j->next)
2781                commit_list_insert(j->item, &reversed);
2782        free_commit_list(bases);
2783
2784        read_cache();
2785        init_merge_options(&o);
2786        o.branch1 = "HEAD";
2787        o.branch2 = ref_name.buf;
2788        o.buffer_output = 2;
2789
2790        ret = merge_recursive(&o, head_commit, merge_commit, reversed, &i);
2791        if (ret <= 0)
2792                fputs(o.obuf.buf, stdout);
2793        strbuf_release(&o.obuf);
2794        if (ret < 0) {
2795                error(_("could not even attempt to merge '%.*s'"),
2796                      merge_arg_len, arg);
2797                goto leave_merge;
2798        }
2799        /*
2800         * The return value of merge_recursive() is 1 on clean, and 0 on
2801         * unclean merge.
2802         *
2803         * Let's reverse that, so that do_merge() returns 0 upon success and
2804         * 1 upon failed merge (keeping the return value -1 for the cases where
2805         * we will want to reschedule the `merge` command).
2806         */
2807        ret = !ret;
2808
2809        if (active_cache_changed &&
2810            write_locked_index(&the_index, &lock, COMMIT_LOCK)) {
2811                ret = error(_("merge: Unable to write new index file"));
2812                goto leave_merge;
2813        }
2814
2815        rollback_lock_file(&lock);
2816        if (ret)
2817                rerere(opts->allow_rerere_auto);
2818        else
2819                /*
2820                 * In case of problems, we now want to return a positive
2821                 * value (a negative one would indicate that the `merge`
2822                 * command needs to be rescheduled).
2823                 */
2824                ret = !!run_git_commit(git_path_merge_msg(), opts,
2825                                     run_commit_flags);
2826
2827leave_merge:
2828        strbuf_release(&ref_name);
2829        rollback_lock_file(&lock);
2830        return ret;
2831}
2832
2833static int is_final_fixup(struct todo_list *todo_list)
2834{
2835        int i = todo_list->current;
2836
2837        if (!is_fixup(todo_list->items[i].command))
2838                return 0;
2839
2840        while (++i < todo_list->nr)
2841                if (is_fixup(todo_list->items[i].command))
2842                        return 0;
2843                else if (!is_noop(todo_list->items[i].command))
2844                        break;
2845        return 1;
2846}
2847
2848static enum todo_command peek_command(struct todo_list *todo_list, int offset)
2849{
2850        int i;
2851
2852        for (i = todo_list->current + offset; i < todo_list->nr; i++)
2853                if (!is_noop(todo_list->items[i].command))
2854                        return todo_list->items[i].command;
2855
2856        return -1;
2857}
2858
2859static int apply_autostash(struct replay_opts *opts)
2860{
2861        struct strbuf stash_sha1 = STRBUF_INIT;
2862        struct child_process child = CHILD_PROCESS_INIT;
2863        int ret = 0;
2864
2865        if (!read_oneliner(&stash_sha1, rebase_path_autostash(), 1)) {
2866                strbuf_release(&stash_sha1);
2867                return 0;
2868        }
2869        strbuf_trim(&stash_sha1);
2870
2871        child.git_cmd = 1;
2872        child.no_stdout = 1;
2873        child.no_stderr = 1;
2874        argv_array_push(&child.args, "stash");
2875        argv_array_push(&child.args, "apply");
2876        argv_array_push(&child.args, stash_sha1.buf);
2877        if (!run_command(&child))
2878                fprintf(stderr, _("Applied autostash.\n"));
2879        else {
2880                struct child_process store = CHILD_PROCESS_INIT;
2881
2882                store.git_cmd = 1;
2883                argv_array_push(&store.args, "stash");
2884                argv_array_push(&store.args, "store");
2885                argv_array_push(&store.args, "-m");
2886                argv_array_push(&store.args, "autostash");
2887                argv_array_push(&store.args, "-q");
2888                argv_array_push(&store.args, stash_sha1.buf);
2889                if (run_command(&store))
2890                        ret = error(_("cannot store %s"), stash_sha1.buf);
2891                else
2892                        fprintf(stderr,
2893                                _("Applying autostash resulted in conflicts.\n"
2894                                  "Your changes are safe in the stash.\n"
2895                                  "You can run \"git stash pop\" or"
2896                                  " \"git stash drop\" at any time.\n"));
2897        }
2898
2899        strbuf_release(&stash_sha1);
2900        return ret;
2901}
2902
2903static const char *reflog_message(struct replay_opts *opts,
2904        const char *sub_action, const char *fmt, ...)
2905{
2906        va_list ap;
2907        static struct strbuf buf = STRBUF_INIT;
2908
2909        va_start(ap, fmt);
2910        strbuf_reset(&buf);
2911        strbuf_addstr(&buf, action_name(opts));
2912        if (sub_action)
2913                strbuf_addf(&buf, " (%s)", sub_action);
2914        if (fmt) {
2915                strbuf_addstr(&buf, ": ");
2916                strbuf_vaddf(&buf, fmt, ap);
2917        }
2918        va_end(ap);
2919
2920        return buf.buf;
2921}
2922
2923static const char rescheduled_advice[] =
2924N_("Could not execute the todo command\n"
2925"\n"
2926"    %.*s"
2927"\n"
2928"It has been rescheduled; To edit the command before continuing, please\n"
2929"edit the todo list first:\n"
2930"\n"
2931"    git rebase --edit-todo\n"
2932"    git rebase --continue\n");
2933
2934static int pick_commits(struct todo_list *todo_list, struct replay_opts *opts)
2935{
2936        int res = 0, reschedule = 0;
2937
2938        setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
2939        if (opts->allow_ff)
2940                assert(!(opts->signoff || opts->no_commit ||
2941                                opts->record_origin || opts->edit));
2942        if (read_and_refresh_cache(opts))
2943                return -1;
2944
2945        while (todo_list->current < todo_list->nr) {
2946                struct todo_item *item = todo_list->items + todo_list->current;
2947                if (save_todo(todo_list, opts))
2948                        return -1;
2949                if (is_rebase_i(opts)) {
2950                        if (item->command != TODO_COMMENT) {
2951                                FILE *f = fopen(rebase_path_msgnum(), "w");
2952
2953                                todo_list->done_nr++;
2954
2955                                if (f) {
2956                                        fprintf(f, "%d\n", todo_list->done_nr);
2957                                        fclose(f);
2958                                }
2959                                fprintf(stderr, "Rebasing (%d/%d)%s",
2960                                        todo_list->done_nr,
2961                                        todo_list->total_nr,
2962                                        opts->verbose ? "\n" : "\r");
2963                        }
2964                        unlink(rebase_path_message());
2965                        unlink(rebase_path_author_script());
2966                        unlink(rebase_path_stopped_sha());
2967                        unlink(rebase_path_amend());
2968                        delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
2969                }
2970                if (item->command <= TODO_SQUASH) {
2971                        if (is_rebase_i(opts))
2972                                setenv("GIT_REFLOG_ACTION", reflog_message(opts,
2973                                        command_to_string(item->command), NULL),
2974                                        1);
2975                        res = do_pick_commit(item->command, item->commit,
2976                                        opts, is_final_fixup(todo_list));
2977                        if (is_rebase_i(opts) && res < 0) {
2978                                /* Reschedule */
2979                                advise(_(rescheduled_advice),
2980                                       get_item_line_length(todo_list,
2981                                                            todo_list->current),
2982                                       get_item_line(todo_list,
2983                                                     todo_list->current));
2984                                todo_list->current--;
2985                                if (save_todo(todo_list, opts))
2986                                        return -1;
2987                        }
2988                        if (item->command == TODO_EDIT) {
2989                                struct commit *commit = item->commit;
2990                                if (!res)
2991                                        fprintf(stderr,
2992                                                _("Stopped at %s...  %.*s\n"),
2993                                                short_commit_name(commit),
2994                                                item->arg_len, item->arg);
2995                                return error_with_patch(commit,
2996                                        item->arg, item->arg_len, opts, res,
2997                                        !res);
2998                        }
2999                        if (is_rebase_i(opts) && !res)
3000                                record_in_rewritten(&item->commit->object.oid,
3001                                        peek_command(todo_list, 1));
3002                        if (res && is_fixup(item->command)) {
3003                                if (res == 1)
3004                                        intend_to_amend();
3005                                return error_failed_squash(item->commit, opts,
3006                                        item->arg_len, item->arg);
3007                        } else if (res && is_rebase_i(opts) && item->commit)
3008                                return res | error_with_patch(item->commit,
3009                                        item->arg, item->arg_len, opts, res,
3010                                        item->command == TODO_REWORD);
3011                } else if (item->command == TODO_EXEC) {
3012                        char *end_of_arg = (char *)(item->arg + item->arg_len);
3013                        int saved = *end_of_arg;
3014                        struct stat st;
3015
3016                        *end_of_arg = '\0';
3017                        res = do_exec(item->arg);
3018                        *end_of_arg = saved;
3019
3020                        /* Reread the todo file if it has changed. */
3021                        if (res)
3022                                ; /* fall through */
3023                        else if (stat(get_todo_path(opts), &st))
3024                                res = error_errno(_("could not stat '%s'"),
3025                                                  get_todo_path(opts));
3026                        else if (match_stat_data(&todo_list->stat, &st)) {
3027                                todo_list_release(todo_list);
3028                                if (read_populate_todo(todo_list, opts))
3029                                        res = -1; /* message was printed */
3030                                /* `current` will be incremented below */
3031                                todo_list->current = -1;
3032                        }
3033                } else if (item->command == TODO_LABEL) {
3034                        if ((res = do_label(item->arg, item->arg_len)))
3035                                reschedule = 1;
3036                } else if (item->command == TODO_RESET) {
3037                        if ((res = do_reset(item->arg, item->arg_len, opts)))
3038                                reschedule = 1;
3039                } else if (item->command == TODO_MERGE) {
3040                        if ((res = do_merge(item->commit,
3041                                            item->arg, item->arg_len,
3042                                            item->flags, opts)) < 0)
3043                                reschedule = 1;
3044                        else if (res > 0)
3045                                /* failed with merge conflicts */
3046                                return error_with_patch(item->commit,
3047                                                        item->arg,
3048                                                        item->arg_len, opts,
3049                                                        res, 0);
3050                } else if (!is_noop(item->command))
3051                        return error(_("unknown command %d"), item->command);
3052
3053                if (reschedule) {
3054                        advise(_(rescheduled_advice),
3055                               get_item_line_length(todo_list,
3056                                                    todo_list->current),
3057                               get_item_line(todo_list, todo_list->current));
3058                        todo_list->current--;
3059                        if (save_todo(todo_list, opts))
3060                                return -1;
3061                        if (item->commit)
3062                                return error_with_patch(item->commit,
3063                                                        item->arg,
3064                                                        item->arg_len, opts,
3065                                                        res, 0);
3066                }
3067
3068                todo_list->current++;
3069                if (res)
3070                        return res;
3071        }
3072
3073        if (is_rebase_i(opts)) {
3074                struct strbuf head_ref = STRBUF_INIT, buf = STRBUF_INIT;
3075                struct stat st;
3076
3077                /* Stopped in the middle, as planned? */
3078                if (todo_list->current < todo_list->nr)
3079                        return 0;
3080
3081                if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
3082                                starts_with(head_ref.buf, "refs/")) {
3083                        const char *msg;
3084                        struct object_id head, orig;
3085                        int res;
3086
3087                        if (get_oid("HEAD", &head)) {
3088                                res = error(_("cannot read HEAD"));
3089cleanup_head_ref:
3090                                strbuf_release(&head_ref);
3091                                strbuf_release(&buf);
3092                                return res;
3093                        }
3094                        if (!read_oneliner(&buf, rebase_path_orig_head(), 0) ||
3095                                        get_oid_hex(buf.buf, &orig)) {
3096                                res = error(_("could not read orig-head"));
3097                                goto cleanup_head_ref;
3098                        }
3099                        strbuf_reset(&buf);
3100                        if (!read_oneliner(&buf, rebase_path_onto(), 0)) {
3101                                res = error(_("could not read 'onto'"));
3102                                goto cleanup_head_ref;
3103                        }
3104                        msg = reflog_message(opts, "finish", "%s onto %s",
3105                                head_ref.buf, buf.buf);
3106                        if (update_ref(msg, head_ref.buf, &head, &orig,
3107                                       REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR)) {
3108                                res = error(_("could not update %s"),
3109                                        head_ref.buf);
3110                                goto cleanup_head_ref;
3111                        }
3112                        msg = reflog_message(opts, "finish", "returning to %s",
3113                                head_ref.buf);
3114                        if (create_symref("HEAD", head_ref.buf, msg)) {
3115                                res = error(_("could not update HEAD to %s"),
3116                                        head_ref.buf);
3117                                goto cleanup_head_ref;
3118                        }
3119                        strbuf_reset(&buf);
3120                }
3121
3122                if (opts->verbose) {
3123                        struct rev_info log_tree_opt;
3124                        struct object_id orig, head;
3125
3126                        memset(&log_tree_opt, 0, sizeof(log_tree_opt));
3127                        init_revisions(&log_tree_opt, NULL);
3128                        log_tree_opt.diff = 1;
3129                        log_tree_opt.diffopt.output_format =
3130                                DIFF_FORMAT_DIFFSTAT;
3131                        log_tree_opt.disable_stdin = 1;
3132
3133                        if (read_oneliner(&buf, rebase_path_orig_head(), 0) &&
3134                            !get_oid(buf.buf, &orig) &&
3135                            !get_oid("HEAD", &head)) {
3136                                diff_tree_oid(&orig, &head, "",
3137                                              &log_tree_opt.diffopt);
3138                                log_tree_diff_flush(&log_tree_opt);
3139                        }
3140                }
3141                flush_rewritten_pending();
3142                if (!stat(rebase_path_rewritten_list(), &st) &&
3143                                st.st_size > 0) {
3144                        struct child_process child = CHILD_PROCESS_INIT;
3145                        const char *post_rewrite_hook =
3146                                find_hook("post-rewrite");
3147
3148                        child.in = open(rebase_path_rewritten_list(), O_RDONLY);
3149                        child.git_cmd = 1;
3150                        argv_array_push(&child.args, "notes");
3151                        argv_array_push(&child.args, "copy");
3152                        argv_array_push(&child.args, "--for-rewrite=rebase");
3153                        /* we don't care if this copying failed */
3154                        run_command(&child);
3155
3156                        if (post_rewrite_hook) {
3157                                struct child_process hook = CHILD_PROCESS_INIT;
3158
3159                                hook.in = open(rebase_path_rewritten_list(),
3160                                        O_RDONLY);
3161                                hook.stdout_to_stderr = 1;
3162                                argv_array_push(&hook.args, post_rewrite_hook);
3163                                argv_array_push(&hook.args, "rebase");
3164                                /* we don't care if this hook failed */
3165                                run_command(&hook);
3166                        }
3167                }
3168                apply_autostash(opts);
3169
3170                fprintf(stderr, "Successfully rebased and updated %s.\n",
3171                        head_ref.buf);
3172
3173                strbuf_release(&buf);
3174                strbuf_release(&head_ref);
3175        }
3176
3177        /*
3178         * Sequence of picks finished successfully; cleanup by
3179         * removing the .git/sequencer directory
3180         */
3181        return sequencer_remove_state(opts);
3182}
3183
3184static int continue_single_pick(void)
3185{
3186        const char *argv[] = { "commit", NULL };
3187
3188        if (!file_exists(git_path_cherry_pick_head()) &&
3189            !file_exists(git_path_revert_head()))
3190                return error(_("no cherry-pick or revert in progress"));
3191        return run_command_v_opt(argv, RUN_GIT_CMD);
3192}
3193
3194static int commit_staged_changes(struct replay_opts *opts)
3195{
3196        unsigned int flags = ALLOW_EMPTY | EDIT_MSG;
3197
3198        if (has_unstaged_changes(1))
3199                return error(_("cannot rebase: You have unstaged changes."));
3200        if (!has_uncommitted_changes(0)) {
3201                const char *cherry_pick_head = git_path_cherry_pick_head();
3202
3203                if (file_exists(cherry_pick_head) && unlink(cherry_pick_head))
3204                        return error(_("could not remove CHERRY_PICK_HEAD"));
3205                return 0;
3206        }
3207
3208        if (file_exists(rebase_path_amend())) {
3209                struct strbuf rev = STRBUF_INIT;
3210                struct object_id head, to_amend;
3211
3212                if (get_oid("HEAD", &head))
3213                        return error(_("cannot amend non-existing commit"));
3214                if (!read_oneliner(&rev, rebase_path_amend(), 0))
3215                        return error(_("invalid file: '%s'"), rebase_path_amend());
3216                if (get_oid_hex(rev.buf, &to_amend))
3217                        return error(_("invalid contents: '%s'"),
3218                                rebase_path_amend());
3219                if (oidcmp(&head, &to_amend))
3220                        return error(_("\nYou have uncommitted changes in your "
3221                                       "working tree. Please, commit them\n"
3222                                       "first and then run 'git rebase "
3223                                       "--continue' again."));
3224
3225                strbuf_release(&rev);
3226                flags |= AMEND_MSG;
3227        }
3228
3229        if (run_git_commit(rebase_path_message(), opts, flags))
3230                return error(_("could not commit staged changes."));
3231        unlink(rebase_path_amend());
3232        return 0;
3233}
3234
3235int sequencer_continue(struct replay_opts *opts)
3236{
3237        struct todo_list todo_list = TODO_LIST_INIT;
3238        int res;
3239
3240        if (read_and_refresh_cache(opts))
3241                return -1;
3242
3243        if (is_rebase_i(opts)) {
3244                if (commit_staged_changes(opts))
3245                        return -1;
3246        } else if (!file_exists(get_todo_path(opts)))
3247                return continue_single_pick();
3248        if (read_populate_opts(opts))
3249                return -1;
3250        if ((res = read_populate_todo(&todo_list, opts)))
3251                goto release_todo_list;
3252
3253        if (!is_rebase_i(opts)) {
3254                /* Verify that the conflict has been resolved */
3255                if (file_exists(git_path_cherry_pick_head()) ||
3256                    file_exists(git_path_revert_head())) {
3257                        res = continue_single_pick();
3258                        if (res)
3259                                goto release_todo_list;
3260                }
3261                if (index_differs_from("HEAD", NULL, 0)) {
3262                        res = error_dirty_index(opts);
3263                        goto release_todo_list;
3264                }
3265                todo_list.current++;
3266        } else if (file_exists(rebase_path_stopped_sha())) {
3267                struct strbuf buf = STRBUF_INIT;
3268                struct object_id oid;
3269
3270                if (read_oneliner(&buf, rebase_path_stopped_sha(), 1) &&
3271                    !get_oid_committish(buf.buf, &oid))
3272                        record_in_rewritten(&oid, peek_command(&todo_list, 0));
3273                strbuf_release(&buf);
3274        }
3275
3276        res = pick_commits(&todo_list, opts);
3277release_todo_list:
3278        todo_list_release(&todo_list);
3279        return res;
3280}
3281
3282static int single_pick(struct commit *cmit, struct replay_opts *opts)
3283{
3284        setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
3285        return do_pick_commit(opts->action == REPLAY_PICK ?
3286                TODO_PICK : TODO_REVERT, cmit, opts, 0);
3287}
3288
3289int sequencer_pick_revisions(struct replay_opts *opts)
3290{
3291        struct todo_list todo_list = TODO_LIST_INIT;
3292        struct object_id oid;
3293        int i, res;
3294
3295        assert(opts->revs);
3296        if (read_and_refresh_cache(opts))
3297                return -1;
3298
3299        for (i = 0; i < opts->revs->pending.nr; i++) {
3300                struct object_id oid;
3301                const char *name = opts->revs->pending.objects[i].name;
3302
3303                /* This happens when using --stdin. */
3304                if (!strlen(name))
3305                        continue;
3306
3307                if (!get_oid(name, &oid)) {
3308                        if (!lookup_commit_reference_gently(&oid, 1)) {
3309                                enum object_type type = oid_object_info(&oid,
3310                                                                        NULL);
3311                                return error(_("%s: can't cherry-pick a %s"),
3312                                        name, type_name(type));
3313                        }
3314                } else
3315                        return error(_("%s: bad revision"), name);
3316        }
3317
3318        /*
3319         * If we were called as "git cherry-pick <commit>", just
3320         * cherry-pick/revert it, set CHERRY_PICK_HEAD /
3321         * REVERT_HEAD, and don't touch the sequencer state.
3322         * This means it is possible to cherry-pick in the middle
3323         * of a cherry-pick sequence.
3324         */
3325        if (opts->revs->cmdline.nr == 1 &&
3326            opts->revs->cmdline.rev->whence == REV_CMD_REV &&
3327            opts->revs->no_walk &&
3328            !opts->revs->cmdline.rev->flags) {
3329                struct commit *cmit;
3330                if (prepare_revision_walk(opts->revs))
3331                        return error(_("revision walk setup failed"));
3332                cmit = get_revision(opts->revs);
3333                if (!cmit || get_revision(opts->revs))
3334                        return error("BUG: expected exactly one commit from walk");
3335                return single_pick(cmit, opts);
3336        }
3337
3338        /*
3339         * Start a new cherry-pick/ revert sequence; but
3340         * first, make sure that an existing one isn't in
3341         * progress
3342         */
3343
3344        if (walk_revs_populate_todo(&todo_list, opts) ||
3345                        create_seq_dir() < 0)
3346                return -1;
3347        if (get_oid("HEAD", &oid) && (opts->action == REPLAY_REVERT))
3348                return error(_("can't revert as initial commit"));
3349        if (save_head(oid_to_hex(&oid)))
3350                return -1;
3351        if (save_opts(opts))
3352                return -1;
3353        update_abort_safety_file();
3354        res = pick_commits(&todo_list, opts);
3355        todo_list_release(&todo_list);
3356        return res;
3357}
3358
3359void append_signoff(struct strbuf *msgbuf, int ignore_footer, unsigned flag)
3360{
3361        unsigned no_dup_sob = flag & APPEND_SIGNOFF_DEDUP;
3362        struct strbuf sob = STRBUF_INIT;
3363        int has_footer;
3364
3365        strbuf_addstr(&sob, sign_off_header);
3366        strbuf_addstr(&sob, fmt_name(getenv("GIT_COMMITTER_NAME"),
3367                                getenv("GIT_COMMITTER_EMAIL")));
3368        strbuf_addch(&sob, '\n');
3369
3370        if (!ignore_footer)
3371                strbuf_complete_line(msgbuf);
3372
3373        /*
3374         * If the whole message buffer is equal to the sob, pretend that we
3375         * found a conforming footer with a matching sob
3376         */
3377        if (msgbuf->len - ignore_footer == sob.len &&
3378            !strncmp(msgbuf->buf, sob.buf, sob.len))
3379                has_footer = 3;
3380        else
3381                has_footer = has_conforming_footer(msgbuf, &sob, ignore_footer);
3382
3383        if (!has_footer) {
3384                const char *append_newlines = NULL;
3385                size_t len = msgbuf->len - ignore_footer;
3386
3387                if (!len) {
3388                        /*
3389                         * The buffer is completely empty.  Leave foom for
3390                         * the title and body to be filled in by the user.
3391                         */
3392                        append_newlines = "\n\n";
3393                } else if (len == 1) {
3394                        /*
3395                         * Buffer contains a single newline.  Add another
3396                         * so that we leave room for the title and body.
3397                         */
3398                        append_newlines = "\n";
3399                } else if (msgbuf->buf[len - 2] != '\n') {
3400                        /*
3401                         * Buffer ends with a single newline.  Add another
3402                         * so that there is an empty line between the message
3403                         * body and the sob.
3404                         */
3405                        append_newlines = "\n";
3406                } /* else, the buffer already ends with two newlines. */
3407
3408                if (append_newlines)
3409                        strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
3410                                append_newlines, strlen(append_newlines));
3411        }
3412
3413        if (has_footer != 3 && (!no_dup_sob || has_footer != 2))
3414                strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
3415                                sob.buf, sob.len);
3416
3417        strbuf_release(&sob);
3418}
3419
3420int sequencer_make_script(FILE *out, int argc, const char **argv,
3421                          unsigned flags)
3422{
3423        char *format = NULL;
3424        struct pretty_print_context pp = {0};
3425        struct strbuf buf = STRBUF_INIT;
3426        struct rev_info revs;
3427        struct commit *commit;
3428        int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
3429        const char *insn = flags & TODO_LIST_ABBREVIATE_CMDS ? "p" : "pick";
3430
3431        init_revisions(&revs, NULL);
3432        revs.verbose_header = 1;
3433        revs.max_parents = 1;
3434        revs.cherry_mark = 1;
3435        revs.limited = 1;
3436        revs.reverse = 1;
3437        revs.right_only = 1;
3438        revs.sort_order = REV_SORT_IN_GRAPH_ORDER;
3439        revs.topo_order = 1;
3440
3441        revs.pretty_given = 1;
3442        git_config_get_string("rebase.instructionFormat", &format);
3443        if (!format || !*format) {
3444                free(format);
3445                format = xstrdup("%s");
3446        }
3447        get_commit_format(format, &revs);
3448        free(format);
3449        pp.fmt = revs.commit_format;
3450        pp.output_encoding = get_log_output_encoding();
3451
3452        if (setup_revisions(argc, argv, &revs, NULL) > 1)
3453                return error(_("make_script: unhandled options"));
3454
3455        if (prepare_revision_walk(&revs) < 0)
3456                return error(_("make_script: error preparing revisions"));
3457
3458        while ((commit = get_revision(&revs))) {
3459                int is_empty  = is_original_commit_empty(commit);
3460
3461                if (!is_empty && (commit->object.flags & PATCHSAME))
3462                        continue;
3463                strbuf_reset(&buf);
3464                if (!keep_empty && is_empty)
3465                        strbuf_addf(&buf, "%c ", comment_line_char);
3466                strbuf_addf(&buf, "%s %s ", insn,
3467                            oid_to_hex(&commit->object.oid));
3468                pretty_print_commit(&pp, commit, &buf);
3469                strbuf_addch(&buf, '\n');
3470                fputs(buf.buf, out);
3471        }
3472        strbuf_release(&buf);
3473        return 0;
3474}
3475
3476/*
3477 * Add commands after pick and (series of) squash/fixup commands
3478 * in the todo list.
3479 */
3480int sequencer_add_exec_commands(const char *commands)
3481{
3482        const char *todo_file = rebase_path_todo();
3483        struct todo_list todo_list = TODO_LIST_INIT;
3484        struct todo_item *item;
3485        struct strbuf *buf = &todo_list.buf;
3486        size_t offset = 0, commands_len = strlen(commands);
3487        int i, first;
3488
3489        if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0)
3490                return error(_("could not read '%s'."), todo_file);
3491
3492        if (parse_insn_buffer(todo_list.buf.buf, &todo_list)) {
3493                todo_list_release(&todo_list);
3494                return error(_("unusable todo list: '%s'"), todo_file);
3495        }
3496
3497        first = 1;
3498        /* insert <commands> before every pick except the first one */
3499        for (item = todo_list.items, i = 0; i < todo_list.nr; i++, item++) {
3500                if (item->command == TODO_PICK && !first) {
3501                        strbuf_insert(buf, item->offset_in_buf + offset,
3502                                      commands, commands_len);
3503                        offset += commands_len;
3504                }
3505                first = 0;
3506        }
3507
3508        /* append final <commands> */
3509        strbuf_add(buf, commands, commands_len);
3510
3511        i = write_message(buf->buf, buf->len, todo_file, 0);
3512        todo_list_release(&todo_list);
3513        return i;
3514}
3515
3516int transform_todos(unsigned flags)
3517{
3518        const char *todo_file = rebase_path_todo();
3519        struct todo_list todo_list = TODO_LIST_INIT;
3520        struct strbuf buf = STRBUF_INIT;
3521        struct todo_item *item;
3522        int i;
3523
3524        if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0)
3525                return error(_("could not read '%s'."), todo_file);
3526
3527        if (parse_insn_buffer(todo_list.buf.buf, &todo_list)) {
3528                todo_list_release(&todo_list);
3529                return error(_("unusable todo list: '%s'"), todo_file);
3530        }
3531
3532        for (item = todo_list.items, i = 0; i < todo_list.nr; i++, item++) {
3533                /* if the item is not a command write it and continue */
3534                if (item->command >= TODO_COMMENT) {
3535                        strbuf_addf(&buf, "%.*s\n", item->arg_len, item->arg);
3536                        continue;
3537                }
3538
3539                /* add command to the buffer */
3540                if (flags & TODO_LIST_ABBREVIATE_CMDS)
3541                        strbuf_addch(&buf, command_to_char(item->command));
3542                else
3543                        strbuf_addstr(&buf, command_to_string(item->command));
3544
3545                /* add commit id */
3546                if (item->commit) {
3547                        const char *oid = flags & TODO_LIST_SHORTEN_IDS ?
3548                                          short_commit_name(item->commit) :
3549                                          oid_to_hex(&item->commit->object.oid);
3550
3551                        if (item->command == TODO_MERGE) {
3552                                if (item->flags & TODO_EDIT_MERGE_MSG)
3553                                        strbuf_addstr(&buf, " -c");
3554                                else
3555                                        strbuf_addstr(&buf, " -C");
3556                        }
3557
3558                        strbuf_addf(&buf, " %s", oid);
3559                }
3560
3561                /* add all the rest */
3562                if (!item->arg_len)
3563                        strbuf_addch(&buf, '\n');
3564                else
3565                        strbuf_addf(&buf, " %.*s\n", item->arg_len, item->arg);
3566        }
3567
3568        i = write_message(buf.buf, buf.len, todo_file, 0);
3569        todo_list_release(&todo_list);
3570        return i;
3571}
3572
3573enum check_level {
3574        CHECK_IGNORE = 0, CHECK_WARN, CHECK_ERROR
3575};
3576
3577static enum check_level get_missing_commit_check_level(void)
3578{
3579        const char *value;
3580
3581        if (git_config_get_value("rebase.missingcommitscheck", &value) ||
3582                        !strcasecmp("ignore", value))
3583                return CHECK_IGNORE;
3584        if (!strcasecmp("warn", value))
3585                return CHECK_WARN;
3586        if (!strcasecmp("error", value))
3587                return CHECK_ERROR;
3588        warning(_("unrecognized setting %s for option "
3589                  "rebase.missingCommitsCheck. Ignoring."), value);
3590        return CHECK_IGNORE;
3591}
3592
3593/*
3594 * Check if the user dropped some commits by mistake
3595 * Behaviour determined by rebase.missingCommitsCheck.
3596 * Check if there is an unrecognized command or a
3597 * bad SHA-1 in a command.
3598 */
3599int check_todo_list(void)
3600{
3601        enum check_level check_level = get_missing_commit_check_level();
3602        struct strbuf todo_file = STRBUF_INIT;
3603        struct todo_list todo_list = TODO_LIST_INIT;
3604        struct strbuf missing = STRBUF_INIT;
3605        int advise_to_edit_todo = 0, res = 0, i;
3606
3607        strbuf_addstr(&todo_file, rebase_path_todo());
3608        if (strbuf_read_file_or_whine(&todo_list.buf, todo_file.buf) < 0) {
3609                res = -1;
3610                goto leave_check;
3611        }
3612        advise_to_edit_todo = res =
3613                parse_insn_buffer(todo_list.buf.buf, &todo_list);
3614
3615        if (res || check_level == CHECK_IGNORE)
3616                goto leave_check;
3617
3618        /* Mark the commits in git-rebase-todo as seen */
3619        for (i = 0; i < todo_list.nr; i++) {
3620                struct commit *commit = todo_list.items[i].commit;
3621                if (commit)
3622                        commit->util = (void *)1;
3623        }
3624
3625        todo_list_release(&todo_list);
3626        strbuf_addstr(&todo_file, ".backup");
3627        if (strbuf_read_file_or_whine(&todo_list.buf, todo_file.buf) < 0) {
3628                res = -1;
3629                goto leave_check;
3630        }
3631        strbuf_release(&todo_file);
3632        res = !!parse_insn_buffer(todo_list.buf.buf, &todo_list);
3633
3634        /* Find commits in git-rebase-todo.backup yet unseen */
3635        for (i = todo_list.nr - 1; i >= 0; i--) {
3636                struct todo_item *item = todo_list.items + i;
3637                struct commit *commit = item->commit;
3638                if (commit && !commit->util) {
3639                        strbuf_addf(&missing, " - %s %.*s\n",
3640                                    short_commit_name(commit),
3641                                    item->arg_len, item->arg);
3642                        commit->util = (void *)1;
3643                }
3644        }
3645
3646        /* Warn about missing commits */
3647        if (!missing.len)
3648                goto leave_check;
3649
3650        if (check_level == CHECK_ERROR)
3651                advise_to_edit_todo = res = 1;
3652
3653        fprintf(stderr,
3654                _("Warning: some commits may have been dropped accidentally.\n"
3655                "Dropped commits (newer to older):\n"));
3656
3657        /* Make the list user-friendly and display */
3658        fputs(missing.buf, stderr);
3659        strbuf_release(&missing);
3660
3661        fprintf(stderr, _("To avoid this message, use \"drop\" to "
3662                "explicitly remove a commit.\n\n"
3663                "Use 'git config rebase.missingCommitsCheck' to change "
3664                "the level of warnings.\n"
3665                "The possible behaviours are: ignore, warn, error.\n\n"));
3666
3667leave_check:
3668        strbuf_release(&todo_file);
3669        todo_list_release(&todo_list);
3670
3671        if (advise_to_edit_todo)
3672                fprintf(stderr,
3673                        _("You can fix this with 'git rebase --edit-todo' "
3674                          "and then run 'git rebase --continue'.\n"
3675                          "Or you can abort the rebase with 'git rebase"
3676                          " --abort'.\n"));
3677
3678        return res;
3679}
3680
3681static int rewrite_file(const char *path, const char *buf, size_t len)
3682{
3683        int rc = 0;
3684        int fd = open(path, O_WRONLY | O_TRUNC);
3685        if (fd < 0)
3686                return error_errno(_("could not open '%s' for writing"), path);
3687        if (write_in_full(fd, buf, len) < 0)
3688                rc = error_errno(_("could not write to '%s'"), path);
3689        if (close(fd) && !rc)
3690                rc = error_errno(_("could not close '%s'"), path);
3691        return rc;
3692}
3693
3694/* skip picking commits whose parents are unchanged */
3695int skip_unnecessary_picks(void)
3696{
3697        const char *todo_file = rebase_path_todo();
3698        struct strbuf buf = STRBUF_INIT;
3699        struct todo_list todo_list = TODO_LIST_INIT;
3700        struct object_id onto_oid, *oid = &onto_oid, *parent_oid;
3701        int fd, i;
3702
3703        if (!read_oneliner(&buf, rebase_path_onto(), 0))
3704                return error(_("could not read 'onto'"));
3705        if (get_oid(buf.buf, &onto_oid)) {
3706                strbuf_release(&buf);
3707                return error(_("need a HEAD to fixup"));
3708        }
3709        strbuf_release(&buf);
3710
3711        if (strbuf_read_file_or_whine(&todo_list.buf, todo_file) < 0)
3712                return -1;
3713        if (parse_insn_buffer(todo_list.buf.buf, &todo_list) < 0) {
3714                todo_list_release(&todo_list);
3715                return -1;
3716        }
3717
3718        for (i = 0; i < todo_list.nr; i++) {
3719                struct todo_item *item = todo_list.items + i;
3720
3721                if (item->command >= TODO_NOOP)
3722                        continue;
3723                if (item->command != TODO_PICK)
3724                        break;
3725                if (parse_commit(item->commit)) {
3726                        todo_list_release(&todo_list);
3727                        return error(_("could not parse commit '%s'"),
3728                                oid_to_hex(&item->commit->object.oid));
3729                }
3730                if (!item->commit->parents)
3731                        break; /* root commit */
3732                if (item->commit->parents->next)
3733                        break; /* merge commit */
3734                parent_oid = &item->commit->parents->item->object.oid;
3735                if (hashcmp(parent_oid->hash, oid->hash))
3736                        break;
3737                oid = &item->commit->object.oid;
3738        }
3739        if (i > 0) {
3740                int offset = get_item_line_offset(&todo_list, i);
3741                const char *done_path = rebase_path_done();
3742
3743                fd = open(done_path, O_CREAT | O_WRONLY | O_APPEND, 0666);
3744                if (fd < 0) {
3745                        error_errno(_("could not open '%s' for writing"),
3746                                    done_path);
3747                        todo_list_release(&todo_list);
3748                        return -1;
3749                }
3750                if (write_in_full(fd, todo_list.buf.buf, offset) < 0) {
3751                        error_errno(_("could not write to '%s'"), done_path);
3752                        todo_list_release(&todo_list);
3753                        close(fd);
3754                        return -1;
3755                }
3756                close(fd);
3757
3758                if (rewrite_file(rebase_path_todo(), todo_list.buf.buf + offset,
3759                                 todo_list.buf.len - offset) < 0) {
3760                        todo_list_release(&todo_list);
3761                        return -1;
3762                }
3763
3764                todo_list.current = i;
3765                if (is_fixup(peek_command(&todo_list, 0)))
3766                        record_in_rewritten(oid, peek_command(&todo_list, 0));
3767        }
3768
3769        todo_list_release(&todo_list);
3770        printf("%s\n", oid_to_hex(oid));
3771
3772        return 0;
3773}
3774
3775struct subject2item_entry {
3776        struct hashmap_entry entry;
3777        int i;
3778        char subject[FLEX_ARRAY];
3779};
3780
3781static int subject2item_cmp(const void *fndata,
3782                            const struct subject2item_entry *a,
3783                            const struct subject2item_entry *b, const void *key)
3784{
3785        return key ? strcmp(a->subject, key) : strcmp(a->subject, b->subject);
3786}
3787
3788/*
3789 * Rearrange the todo list that has both "pick commit-id msg" and "pick
3790 * commit-id fixup!/squash! msg" in it so that the latter is put immediately
3791 * after the former, and change "pick" to "fixup"/"squash".
3792 *
3793 * Note that if the config has specified a custom instruction format, each log
3794 * message will have to be retrieved from the commit (as the oneline in the
3795 * script cannot be trusted) in order to normalize the autosquash arrangement.
3796 */
3797int rearrange_squash(void)
3798{
3799        const char *todo_file = rebase_path_todo();
3800        struct todo_list todo_list = TODO_LIST_INIT;
3801        struct hashmap subject2item;
3802        int res = 0, rearranged = 0, *next, *tail, i;
3803        char **subjects;
3804
3805        if (strbuf_read_file_or_whine(&todo_list.buf, todo_file) < 0)
3806                return -1;
3807        if (parse_insn_buffer(todo_list.buf.buf, &todo_list) < 0) {
3808                todo_list_release(&todo_list);
3809                return -1;
3810        }
3811
3812        /*
3813         * The hashmap maps onelines to the respective todo list index.
3814         *
3815         * If any items need to be rearranged, the next[i] value will indicate
3816         * which item was moved directly after the i'th.
3817         *
3818         * In that case, last[i] will indicate the index of the latest item to
3819         * be moved to appear after the i'th.
3820         */
3821        hashmap_init(&subject2item, (hashmap_cmp_fn) subject2item_cmp,
3822                     NULL, todo_list.nr);
3823        ALLOC_ARRAY(next, todo_list.nr);
3824        ALLOC_ARRAY(tail, todo_list.nr);
3825        ALLOC_ARRAY(subjects, todo_list.nr);
3826        for (i = 0; i < todo_list.nr; i++) {
3827                struct strbuf buf = STRBUF_INIT;
3828                struct todo_item *item = todo_list.items + i;
3829                const char *commit_buffer, *subject, *p;
3830                size_t subject_len;
3831                int i2 = -1;
3832                struct subject2item_entry *entry;
3833
3834                next[i] = tail[i] = -1;
3835                if (!item->commit || item->command == TODO_DROP) {
3836                        subjects[i] = NULL;
3837                        continue;
3838                }
3839
3840                if (is_fixup(item->command)) {
3841                        todo_list_release(&todo_list);
3842                        return error(_("the script was already rearranged."));
3843                }
3844
3845                item->commit->util = item;
3846
3847                parse_commit(item->commit);
3848                commit_buffer = get_commit_buffer(item->commit, NULL);
3849                find_commit_subject(commit_buffer, &subject);
3850                format_subject(&buf, subject, " ");
3851                subject = subjects[i] = strbuf_detach(&buf, &subject_len);
3852                unuse_commit_buffer(item->commit, commit_buffer);
3853                if ((skip_prefix(subject, "fixup! ", &p) ||
3854                     skip_prefix(subject, "squash! ", &p))) {
3855                        struct commit *commit2;
3856
3857                        for (;;) {
3858                                while (isspace(*p))
3859                                        p++;
3860                                if (!skip_prefix(p, "fixup! ", &p) &&
3861                                    !skip_prefix(p, "squash! ", &p))
3862                                        break;
3863                        }
3864
3865                        if ((entry = hashmap_get_from_hash(&subject2item,
3866                                                           strhash(p), p)))
3867                                /* found by title */
3868                                i2 = entry->i;
3869                        else if (!strchr(p, ' ') &&
3870                                 (commit2 =
3871                                  lookup_commit_reference_by_name(p)) &&
3872                                 commit2->util)
3873                                /* found by commit name */
3874                                i2 = (struct todo_item *)commit2->util
3875                                        - todo_list.items;
3876                        else {
3877                                /* copy can be a prefix of the commit subject */
3878                                for (i2 = 0; i2 < i; i2++)
3879                                        if (subjects[i2] &&
3880                                            starts_with(subjects[i2], p))
3881                                                break;
3882                                if (i2 == i)
3883                                        i2 = -1;
3884                        }
3885                }
3886                if (i2 >= 0) {
3887                        rearranged = 1;
3888                        todo_list.items[i].command =
3889                                starts_with(subject, "fixup!") ?
3890                                TODO_FIXUP : TODO_SQUASH;
3891                        if (next[i2] < 0)
3892                                next[i2] = i;
3893                        else
3894                                next[tail[i2]] = i;
3895                        tail[i2] = i;
3896                } else if (!hashmap_get_from_hash(&subject2item,
3897                                                strhash(subject), subject)) {
3898                        FLEX_ALLOC_MEM(entry, subject, subject, subject_len);
3899                        entry->i = i;
3900                        hashmap_entry_init(entry, strhash(entry->subject));
3901                        hashmap_put(&subject2item, entry);
3902                }
3903        }
3904
3905        if (rearranged) {
3906                struct strbuf buf = STRBUF_INIT;
3907
3908                for (i = 0; i < todo_list.nr; i++) {
3909                        enum todo_command command = todo_list.items[i].command;
3910                        int cur = i;
3911
3912                        /*
3913                         * Initially, all commands are 'pick's. If it is a
3914                         * fixup or a squash now, we have rearranged it.
3915                         */
3916                        if (is_fixup(command))
3917                                continue;
3918
3919                        while (cur >= 0) {
3920                                const char *bol =
3921                                        get_item_line(&todo_list, cur);
3922                                const char *eol =
3923                                        get_item_line(&todo_list, cur + 1);
3924
3925                                /* replace 'pick', by 'fixup' or 'squash' */
3926                                command = todo_list.items[cur].command;
3927                                if (is_fixup(command)) {
3928                                        strbuf_addstr(&buf,
3929                                                todo_command_info[command].str);
3930                                        bol += strcspn(bol, " \t");
3931                                }
3932
3933                                strbuf_add(&buf, bol, eol - bol);
3934
3935                                cur = next[cur];
3936                        }
3937                }
3938
3939                res = rewrite_file(todo_file, buf.buf, buf.len);
3940                strbuf_release(&buf);
3941        }
3942
3943        free(next);
3944        free(tail);
3945        for (i = 0; i < todo_list.nr; i++)
3946                free(subjects[i]);
3947        free(subjects);
3948        hashmap_free(&subject2item, 1);
3949        todo_list_release(&todo_list);
3950
3951        return res;
3952}