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