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