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