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