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