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