sequencer.con commit Merge branch 'ag/rev-parse-all-exclude-fix' (20d04b4)
   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;
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                int i;
2914
2915                /* Determine the length of the label */
2916                for (i = 0; i < len; i++)
2917                        if (isspace(name[i]))
2918                                break;
2919                len = i;
2920
2921                strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
2922                if (get_oid(ref_name.buf, &oid) &&
2923                    get_oid(ref_name.buf + strlen("refs/rewritten/"), &oid)) {
2924                        error(_("could not read '%s'"), ref_name.buf);
2925                        rollback_lock_file(&lock);
2926                        strbuf_release(&ref_name);
2927                        return -1;
2928                }
2929        }
2930
2931        memset(&unpack_tree_opts, 0, sizeof(unpack_tree_opts));
2932        setup_unpack_trees_porcelain(&unpack_tree_opts, "reset");
2933        unpack_tree_opts.head_idx = 1;
2934        unpack_tree_opts.src_index = &the_index;
2935        unpack_tree_opts.dst_index = &the_index;
2936        unpack_tree_opts.fn = oneway_merge;
2937        unpack_tree_opts.merge = 1;
2938        unpack_tree_opts.update = 1;
2939
2940        if (read_cache_unmerged()) {
2941                rollback_lock_file(&lock);
2942                strbuf_release(&ref_name);
2943                return error_resolve_conflict(_(action_name(opts)));
2944        }
2945
2946        if (!fill_tree_descriptor(&desc, &oid)) {
2947                error(_("failed to find tree of %s"), oid_to_hex(&oid));
2948                rollback_lock_file(&lock);
2949                free((void *)desc.buffer);
2950                strbuf_release(&ref_name);
2951                return -1;
2952        }
2953
2954        if (unpack_trees(1, &desc, &unpack_tree_opts)) {
2955                rollback_lock_file(&lock);
2956                free((void *)desc.buffer);
2957                strbuf_release(&ref_name);
2958                return -1;
2959        }
2960
2961        tree = parse_tree_indirect(&oid);
2962        prime_cache_tree(&the_index, tree);
2963
2964        if (write_locked_index(&the_index, &lock, COMMIT_LOCK) < 0)
2965                ret = error(_("could not write index"));
2966        free((void *)desc.buffer);
2967
2968        if (!ret)
2969                ret = update_ref(reflog_message(opts, "reset", "'%.*s'",
2970                                                len, name), "HEAD", &oid,
2971                                 NULL, 0, UPDATE_REFS_MSG_ON_ERR);
2972
2973        strbuf_release(&ref_name);
2974        return ret;
2975}
2976
2977static struct commit *lookup_label(const char *label, int len,
2978                                   struct strbuf *buf)
2979{
2980        struct commit *commit;
2981
2982        strbuf_reset(buf);
2983        strbuf_addf(buf, "refs/rewritten/%.*s", len, label);
2984        commit = lookup_commit_reference_by_name(buf->buf);
2985        if (!commit) {
2986                /* fall back to non-rewritten ref or commit */
2987                strbuf_splice(buf, 0, strlen("refs/rewritten/"), "", 0);
2988                commit = lookup_commit_reference_by_name(buf->buf);
2989        }
2990
2991        if (!commit)
2992                error(_("could not resolve '%s'"), buf->buf);
2993
2994        return commit;
2995}
2996
2997static int do_merge(struct commit *commit, const char *arg, int arg_len,
2998                    int flags, struct replay_opts *opts)
2999{
3000        int run_commit_flags = (flags & TODO_EDIT_MERGE_MSG) ?
3001                EDIT_MSG | VERIFY_MSG : 0;
3002        struct strbuf ref_name = STRBUF_INIT;
3003        struct commit *head_commit, *merge_commit, *i;
3004        struct commit_list *bases, *j, *reversed = NULL;
3005        struct commit_list *to_merge = NULL, **tail = &to_merge;
3006        struct merge_options o;
3007        int merge_arg_len, oneline_offset, can_fast_forward, ret, k;
3008        static struct lock_file lock;
3009        const char *p;
3010
3011        if (hold_locked_index(&lock, LOCK_REPORT_ON_ERROR) < 0) {
3012                ret = -1;
3013                goto leave_merge;
3014        }
3015
3016        head_commit = lookup_commit_reference_by_name("HEAD");
3017        if (!head_commit) {
3018                ret = error(_("cannot merge without a current revision"));
3019                goto leave_merge;
3020        }
3021
3022        /*
3023         * For octopus merges, the arg starts with the list of revisions to be
3024         * merged. The list is optionally followed by '#' and the oneline.
3025         */
3026        merge_arg_len = oneline_offset = arg_len;
3027        for (p = arg; p - arg < arg_len; p += strspn(p, " \t\n")) {
3028                if (!*p)
3029                        break;
3030                if (*p == '#' && (!p[1] || isspace(p[1]))) {
3031                        p += 1 + strspn(p + 1, " \t\n");
3032                        oneline_offset = p - arg;
3033                        break;
3034                }
3035                k = strcspn(p, " \t\n");
3036                if (!k)
3037                        continue;
3038                merge_commit = lookup_label(p, k, &ref_name);
3039                if (!merge_commit) {
3040                        ret = error(_("unable to parse '%.*s'"), k, p);
3041                        goto leave_merge;
3042                }
3043                tail = &commit_list_insert(merge_commit, tail)->next;
3044                p += k;
3045                merge_arg_len = p - arg;
3046        }
3047
3048        if (!to_merge) {
3049                ret = error(_("nothing to merge: '%.*s'"), arg_len, arg);
3050                goto leave_merge;
3051        }
3052
3053        if (opts->have_squash_onto &&
3054            oideq(&head_commit->object.oid, &opts->squash_onto)) {
3055                /*
3056                 * When the user tells us to "merge" something into a
3057                 * "[new root]", let's simply fast-forward to the merge head.
3058                 */
3059                rollback_lock_file(&lock);
3060                if (to_merge->next)
3061                        ret = error(_("octopus merge cannot be executed on "
3062                                      "top of a [new root]"));
3063                else
3064                        ret = fast_forward_to(&to_merge->item->object.oid,
3065                                              &head_commit->object.oid, 0,
3066                                              opts);
3067                goto leave_merge;
3068        }
3069
3070        if (commit) {
3071                const char *message = get_commit_buffer(commit, NULL);
3072                const char *body;
3073                int len;
3074
3075                if (!message) {
3076                        ret = error(_("could not get commit message of '%s'"),
3077                                    oid_to_hex(&commit->object.oid));
3078                        goto leave_merge;
3079                }
3080                write_author_script(message);
3081                find_commit_subject(message, &body);
3082                len = strlen(body);
3083                ret = write_message(body, len, git_path_merge_msg(the_repository), 0);
3084                unuse_commit_buffer(commit, message);
3085                if (ret) {
3086                        error_errno(_("could not write '%s'"),
3087                                    git_path_merge_msg(the_repository));
3088                        goto leave_merge;
3089                }
3090        } else {
3091                struct strbuf buf = STRBUF_INIT;
3092                int len;
3093
3094                strbuf_addf(&buf, "author %s", git_author_info(0));
3095                write_author_script(buf.buf);
3096                strbuf_reset(&buf);
3097
3098                if (oneline_offset < arg_len) {
3099                        p = arg + oneline_offset;
3100                        len = arg_len - oneline_offset;
3101                } else {
3102                        strbuf_addf(&buf, "Merge %s '%.*s'",
3103                                    to_merge->next ? "branches" : "branch",
3104                                    merge_arg_len, arg);
3105                        p = buf.buf;
3106                        len = buf.len;
3107                }
3108
3109                ret = write_message(p, len, git_path_merge_msg(the_repository), 0);
3110                strbuf_release(&buf);
3111                if (ret) {
3112                        error_errno(_("could not write '%s'"),
3113                                    git_path_merge_msg(the_repository));
3114                        goto leave_merge;
3115                }
3116        }
3117
3118        /*
3119         * If HEAD is not identical to the first parent of the original merge
3120         * commit, we cannot fast-forward.
3121         */
3122        can_fast_forward = opts->allow_ff && commit && commit->parents &&
3123                oideq(&commit->parents->item->object.oid,
3124                      &head_commit->object.oid);
3125
3126        /*
3127         * If any merge head is different from the original one, we cannot
3128         * fast-forward.
3129         */
3130        if (can_fast_forward) {
3131                struct commit_list *p = commit->parents->next;
3132
3133                for (j = to_merge; j && p; j = j->next, p = p->next)
3134                        if (!oideq(&j->item->object.oid,
3135                                   &p->item->object.oid)) {
3136                                can_fast_forward = 0;
3137                                break;
3138                        }
3139                /*
3140                 * If the number of merge heads differs from the original merge
3141                 * commit, we cannot fast-forward.
3142                 */
3143                if (j || p)
3144                        can_fast_forward = 0;
3145        }
3146
3147        if (can_fast_forward) {
3148                rollback_lock_file(&lock);
3149                ret = fast_forward_to(&commit->object.oid,
3150                                      &head_commit->object.oid, 0, opts);
3151                goto leave_merge;
3152        }
3153
3154        if (to_merge->next) {
3155                /* Octopus merge */
3156                struct child_process cmd = CHILD_PROCESS_INIT;
3157
3158                if (read_env_script(&cmd.env_array)) {
3159                        const char *gpg_opt = gpg_sign_opt_quoted(opts);
3160
3161                        ret = error(_(staged_changes_advice), gpg_opt, gpg_opt);
3162                        goto leave_merge;
3163                }
3164
3165                cmd.git_cmd = 1;
3166                argv_array_push(&cmd.args, "merge");
3167                argv_array_push(&cmd.args, "-s");
3168                argv_array_push(&cmd.args, "octopus");
3169                argv_array_push(&cmd.args, "--no-edit");
3170                argv_array_push(&cmd.args, "--no-ff");
3171                argv_array_push(&cmd.args, "--no-log");
3172                argv_array_push(&cmd.args, "--no-stat");
3173                argv_array_push(&cmd.args, "-F");
3174                argv_array_push(&cmd.args, git_path_merge_msg(the_repository));
3175                if (opts->gpg_sign)
3176                        argv_array_push(&cmd.args, opts->gpg_sign);
3177
3178                /* Add the tips to be merged */
3179                for (j = to_merge; j; j = j->next)
3180                        argv_array_push(&cmd.args,
3181                                        oid_to_hex(&j->item->object.oid));
3182
3183                strbuf_release(&ref_name);
3184                unlink(git_path_cherry_pick_head(the_repository));
3185                rollback_lock_file(&lock);
3186
3187                rollback_lock_file(&lock);
3188                ret = run_command(&cmd);
3189
3190                /* force re-reading of the cache */
3191                if (!ret && (discard_cache() < 0 || read_cache() < 0))
3192                        ret = error(_("could not read index"));
3193                goto leave_merge;
3194        }
3195
3196        merge_commit = to_merge->item;
3197        write_message(oid_to_hex(&merge_commit->object.oid), GIT_SHA1_HEXSZ,
3198                      git_path_merge_head(the_repository), 0);
3199        write_message("no-ff", 5, git_path_merge_mode(the_repository), 0);
3200
3201        bases = get_merge_bases(head_commit, merge_commit);
3202        if (bases && oideq(&merge_commit->object.oid,
3203                           &bases->item->object.oid)) {
3204                ret = 0;
3205                /* skip merging an ancestor of HEAD */
3206                goto leave_merge;
3207        }
3208
3209        for (j = bases; j; j = j->next)
3210                commit_list_insert(j->item, &reversed);
3211        free_commit_list(bases);
3212
3213        read_cache();
3214        init_merge_options(&o);
3215        o.branch1 = "HEAD";
3216        o.branch2 = ref_name.buf;
3217        o.buffer_output = 2;
3218
3219        ret = merge_recursive(&o, head_commit, merge_commit, reversed, &i);
3220        if (ret <= 0)
3221                fputs(o.obuf.buf, stdout);
3222        strbuf_release(&o.obuf);
3223        if (ret < 0) {
3224                error(_("could not even attempt to merge '%.*s'"),
3225                      merge_arg_len, arg);
3226                goto leave_merge;
3227        }
3228        /*
3229         * The return value of merge_recursive() is 1 on clean, and 0 on
3230         * unclean merge.
3231         *
3232         * Let's reverse that, so that do_merge() returns 0 upon success and
3233         * 1 upon failed merge (keeping the return value -1 for the cases where
3234         * we will want to reschedule the `merge` command).
3235         */
3236        ret = !ret;
3237
3238        if (active_cache_changed &&
3239            write_locked_index(&the_index, &lock, COMMIT_LOCK)) {
3240                ret = error(_("merge: Unable to write new index file"));
3241                goto leave_merge;
3242        }
3243
3244        rollback_lock_file(&lock);
3245        if (ret)
3246                repo_rerere(the_repository, opts->allow_rerere_auto);
3247        else
3248                /*
3249                 * In case of problems, we now want to return a positive
3250                 * value (a negative one would indicate that the `merge`
3251                 * command needs to be rescheduled).
3252                 */
3253                ret = !!run_git_commit(git_path_merge_msg(the_repository), opts,
3254                                     run_commit_flags);
3255
3256leave_merge:
3257        strbuf_release(&ref_name);
3258        rollback_lock_file(&lock);
3259        free_commit_list(to_merge);
3260        return ret;
3261}
3262
3263static int is_final_fixup(struct todo_list *todo_list)
3264{
3265        int i = todo_list->current;
3266
3267        if (!is_fixup(todo_list->items[i].command))
3268                return 0;
3269
3270        while (++i < todo_list->nr)
3271                if (is_fixup(todo_list->items[i].command))
3272                        return 0;
3273                else if (!is_noop(todo_list->items[i].command))
3274                        break;
3275        return 1;
3276}
3277
3278static enum todo_command peek_command(struct todo_list *todo_list, int offset)
3279{
3280        int i;
3281
3282        for (i = todo_list->current + offset; i < todo_list->nr; i++)
3283                if (!is_noop(todo_list->items[i].command))
3284                        return todo_list->items[i].command;
3285
3286        return -1;
3287}
3288
3289static int apply_autostash(struct replay_opts *opts)
3290{
3291        struct strbuf stash_sha1 = STRBUF_INIT;
3292        struct child_process child = CHILD_PROCESS_INIT;
3293        int ret = 0;
3294
3295        if (!read_oneliner(&stash_sha1, rebase_path_autostash(), 1)) {
3296                strbuf_release(&stash_sha1);
3297                return 0;
3298        }
3299        strbuf_trim(&stash_sha1);
3300
3301        child.git_cmd = 1;
3302        child.no_stdout = 1;
3303        child.no_stderr = 1;
3304        argv_array_push(&child.args, "stash");
3305        argv_array_push(&child.args, "apply");
3306        argv_array_push(&child.args, stash_sha1.buf);
3307        if (!run_command(&child))
3308                fprintf(stderr, _("Applied autostash.\n"));
3309        else {
3310                struct child_process store = CHILD_PROCESS_INIT;
3311
3312                store.git_cmd = 1;
3313                argv_array_push(&store.args, "stash");
3314                argv_array_push(&store.args, "store");
3315                argv_array_push(&store.args, "-m");
3316                argv_array_push(&store.args, "autostash");
3317                argv_array_push(&store.args, "-q");
3318                argv_array_push(&store.args, stash_sha1.buf);
3319                if (run_command(&store))
3320                        ret = error(_("cannot store %s"), stash_sha1.buf);
3321                else
3322                        fprintf(stderr,
3323                                _("Applying autostash resulted in conflicts.\n"
3324                                  "Your changes are safe in the stash.\n"
3325                                  "You can run \"git stash pop\" or"
3326                                  " \"git stash drop\" at any time.\n"));
3327        }
3328
3329        strbuf_release(&stash_sha1);
3330        return ret;
3331}
3332
3333static const char *reflog_message(struct replay_opts *opts,
3334        const char *sub_action, const char *fmt, ...)
3335{
3336        va_list ap;
3337        static struct strbuf buf = STRBUF_INIT;
3338
3339        va_start(ap, fmt);
3340        strbuf_reset(&buf);
3341        strbuf_addstr(&buf, action_name(opts));
3342        if (sub_action)
3343                strbuf_addf(&buf, " (%s)", sub_action);
3344        if (fmt) {
3345                strbuf_addstr(&buf, ": ");
3346                strbuf_vaddf(&buf, fmt, ap);
3347        }
3348        va_end(ap);
3349
3350        return buf.buf;
3351}
3352
3353static int run_git_checkout(struct replay_opts *opts, const char *commit,
3354                            const char *action)
3355{
3356        struct child_process cmd = CHILD_PROCESS_INIT;
3357
3358        cmd.git_cmd = 1;
3359
3360        argv_array_push(&cmd.args, "checkout");
3361        argv_array_push(&cmd.args, commit);
3362        argv_array_pushf(&cmd.env_array, GIT_REFLOG_ACTION "=%s", action);
3363
3364        if (opts->verbose)
3365                return run_command(&cmd);
3366        else
3367                return run_command_silent_on_success(&cmd);
3368}
3369
3370int prepare_branch_to_be_rebased(struct replay_opts *opts, const char *commit)
3371{
3372        const char *action;
3373
3374        if (commit && *commit) {
3375                action = reflog_message(opts, "start", "checkout %s", commit);
3376                if (run_git_checkout(opts, commit, action))
3377                        return error(_("could not checkout %s"), commit);
3378        }
3379
3380        return 0;
3381}
3382
3383static int checkout_onto(struct replay_opts *opts,
3384                         const char *onto_name, const char *onto,
3385                         const char *orig_head)
3386{
3387        struct object_id oid;
3388        const char *action = reflog_message(opts, "start", "checkout %s", onto_name);
3389
3390        if (get_oid(orig_head, &oid))
3391                return error(_("%s: not a valid OID"), orig_head);
3392
3393        if (run_git_checkout(opts, onto, action)) {
3394                apply_autostash(opts);
3395                sequencer_remove_state(opts);
3396                return error(_("could not detach HEAD"));
3397        }
3398
3399        return update_ref(NULL, "ORIG_HEAD", &oid, NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3400}
3401
3402static int stopped_at_head(void)
3403{
3404        struct object_id head;
3405        struct commit *commit;
3406        struct commit_message message;
3407
3408        if (get_oid("HEAD", &head) ||
3409            !(commit = lookup_commit(the_repository, &head)) ||
3410            parse_commit(commit) || get_message(commit, &message))
3411                fprintf(stderr, _("Stopped at HEAD\n"));
3412        else {
3413                fprintf(stderr, _("Stopped at %s\n"), message.label);
3414                free_message(commit, &message);
3415        }
3416        return 0;
3417
3418}
3419
3420static const char rescheduled_advice[] =
3421N_("Could not execute the todo command\n"
3422"\n"
3423"    %.*s"
3424"\n"
3425"It has been rescheduled; To edit the command before continuing, please\n"
3426"edit the todo list first:\n"
3427"\n"
3428"    git rebase --edit-todo\n"
3429"    git rebase --continue\n");
3430
3431static int pick_commits(struct todo_list *todo_list, struct replay_opts *opts)
3432{
3433        int res = 0, reschedule = 0;
3434
3435        setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
3436        if (opts->allow_ff)
3437                assert(!(opts->signoff || opts->no_commit ||
3438                                opts->record_origin || opts->edit));
3439        if (read_and_refresh_cache(opts))
3440                return -1;
3441
3442        while (todo_list->current < todo_list->nr) {
3443                struct todo_item *item = todo_list->items + todo_list->current;
3444                if (save_todo(todo_list, opts))
3445                        return -1;
3446                if (is_rebase_i(opts)) {
3447                        if (item->command != TODO_COMMENT) {
3448                                FILE *f = fopen(rebase_path_msgnum(), "w");
3449
3450                                todo_list->done_nr++;
3451
3452                                if (f) {
3453                                        fprintf(f, "%d\n", todo_list->done_nr);
3454                                        fclose(f);
3455                                }
3456                                fprintf(stderr, "Rebasing (%d/%d)%s",
3457                                        todo_list->done_nr,
3458                                        todo_list->total_nr,
3459                                        opts->verbose ? "\n" : "\r");
3460                        }
3461                        unlink(rebase_path_message());
3462                        unlink(rebase_path_author_script());
3463                        unlink(rebase_path_stopped_sha());
3464                        unlink(rebase_path_amend());
3465                        delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
3466
3467                        if (item->command == TODO_BREAK)
3468                                return stopped_at_head();
3469                }
3470                if (item->command <= TODO_SQUASH) {
3471                        if (is_rebase_i(opts))
3472                                setenv("GIT_REFLOG_ACTION", reflog_message(opts,
3473                                        command_to_string(item->command), NULL),
3474                                        1);
3475                        res = do_pick_commit(item->command, item->commit,
3476                                        opts, is_final_fixup(todo_list));
3477                        if (is_rebase_i(opts) && res < 0) {
3478                                /* Reschedule */
3479                                advise(_(rescheduled_advice),
3480                                       get_item_line_length(todo_list,
3481                                                            todo_list->current),
3482                                       get_item_line(todo_list,
3483                                                     todo_list->current));
3484                                todo_list->current--;
3485                                if (save_todo(todo_list, opts))
3486                                        return -1;
3487                        }
3488                        if (item->command == TODO_EDIT) {
3489                                struct commit *commit = item->commit;
3490                                if (!res)
3491                                        fprintf(stderr,
3492                                                _("Stopped at %s...  %.*s\n"),
3493                                                short_commit_name(commit),
3494                                                item->arg_len, item->arg);
3495                                return error_with_patch(commit,
3496                                        item->arg, item->arg_len, opts, res,
3497                                        !res);
3498                        }
3499                        if (is_rebase_i(opts) && !res)
3500                                record_in_rewritten(&item->commit->object.oid,
3501                                        peek_command(todo_list, 1));
3502                        if (res && is_fixup(item->command)) {
3503                                if (res == 1)
3504                                        intend_to_amend();
3505                                return error_failed_squash(item->commit, opts,
3506                                        item->arg_len, item->arg);
3507                        } else if (res && is_rebase_i(opts) && item->commit) {
3508                                int to_amend = 0;
3509                                struct object_id oid;
3510
3511                                /*
3512                                 * If we are rewording and have either
3513                                 * fast-forwarded already, or are about to
3514                                 * create a new root commit, we want to amend,
3515                                 * otherwise we do not.
3516                                 */
3517                                if (item->command == TODO_REWORD &&
3518                                    !get_oid("HEAD", &oid) &&
3519                                    (oideq(&item->commit->object.oid, &oid) ||
3520                                     (opts->have_squash_onto &&
3521                                      oideq(&opts->squash_onto, &oid))))
3522                                        to_amend = 1;
3523
3524                                return res | error_with_patch(item->commit,
3525                                                item->arg, item->arg_len, opts,
3526                                                res, to_amend);
3527                        }
3528                } else if (item->command == TODO_EXEC) {
3529                        char *end_of_arg = (char *)(item->arg + item->arg_len);
3530                        int saved = *end_of_arg;
3531                        struct stat st;
3532
3533                        *end_of_arg = '\0';
3534                        res = do_exec(item->arg);
3535                        *end_of_arg = saved;
3536
3537                        /* Reread the todo file if it has changed. */
3538                        if (res)
3539                                ; /* fall through */
3540                        else if (stat(get_todo_path(opts), &st))
3541                                res = error_errno(_("could not stat '%s'"),
3542                                                  get_todo_path(opts));
3543                        else if (match_stat_data(&todo_list->stat, &st)) {
3544                                todo_list_release(todo_list);
3545                                if (read_populate_todo(todo_list, opts))
3546                                        res = -1; /* message was printed */
3547                                /* `current` will be incremented below */
3548                                todo_list->current = -1;
3549                        }
3550                } else if (item->command == TODO_LABEL) {
3551                        if ((res = do_label(item->arg, item->arg_len)))
3552                                reschedule = 1;
3553                } else if (item->command == TODO_RESET) {
3554                        if ((res = do_reset(item->arg, item->arg_len, opts)))
3555                                reschedule = 1;
3556                } else if (item->command == TODO_MERGE) {
3557                        if ((res = do_merge(item->commit,
3558                                            item->arg, item->arg_len,
3559                                            item->flags, opts)) < 0)
3560                                reschedule = 1;
3561                        else if (item->commit)
3562                                record_in_rewritten(&item->commit->object.oid,
3563                                                    peek_command(todo_list, 1));
3564                        if (res > 0)
3565                                /* failed with merge conflicts */
3566                                return error_with_patch(item->commit,
3567                                                        item->arg,
3568                                                        item->arg_len, opts,
3569                                                        res, 0);
3570                } else if (!is_noop(item->command))
3571                        return error(_("unknown command %d"), item->command);
3572
3573                if (reschedule) {
3574                        advise(_(rescheduled_advice),
3575                               get_item_line_length(todo_list,
3576                                                    todo_list->current),
3577                               get_item_line(todo_list, todo_list->current));
3578                        todo_list->current--;
3579                        if (save_todo(todo_list, opts))
3580                                return -1;
3581                        if (item->commit)
3582                                return error_with_patch(item->commit,
3583                                                        item->arg,
3584                                                        item->arg_len, opts,
3585                                                        res, 0);
3586                }
3587
3588                todo_list->current++;
3589                if (res)
3590                        return res;
3591        }
3592
3593        if (is_rebase_i(opts)) {
3594                struct strbuf head_ref = STRBUF_INIT, buf = STRBUF_INIT;
3595                struct stat st;
3596
3597                /* Stopped in the middle, as planned? */
3598                if (todo_list->current < todo_list->nr)
3599                        return 0;
3600
3601                if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
3602                                starts_with(head_ref.buf, "refs/")) {
3603                        const char *msg;
3604                        struct object_id head, orig;
3605                        int res;
3606
3607                        if (get_oid("HEAD", &head)) {
3608                                res = error(_("cannot read HEAD"));
3609cleanup_head_ref:
3610                                strbuf_release(&head_ref);
3611                                strbuf_release(&buf);
3612                                return res;
3613                        }
3614                        if (!read_oneliner(&buf, rebase_path_orig_head(), 0) ||
3615                                        get_oid_hex(buf.buf, &orig)) {
3616                                res = error(_("could not read orig-head"));
3617                                goto cleanup_head_ref;
3618                        }
3619                        strbuf_reset(&buf);
3620                        if (!read_oneliner(&buf, rebase_path_onto(), 0)) {
3621                                res = error(_("could not read 'onto'"));
3622                                goto cleanup_head_ref;
3623                        }
3624                        msg = reflog_message(opts, "finish", "%s onto %s",
3625                                head_ref.buf, buf.buf);
3626                        if (update_ref(msg, head_ref.buf, &head, &orig,
3627                                       REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR)) {
3628                                res = error(_("could not update %s"),
3629                                        head_ref.buf);
3630                                goto cleanup_head_ref;
3631                        }
3632                        msg = reflog_message(opts, "finish", "returning to %s",
3633                                head_ref.buf);
3634                        if (create_symref("HEAD", head_ref.buf, msg)) {
3635                                res = error(_("could not update HEAD to %s"),
3636                                        head_ref.buf);
3637                                goto cleanup_head_ref;
3638                        }
3639                        strbuf_reset(&buf);
3640                }
3641
3642                if (opts->verbose) {
3643                        struct rev_info log_tree_opt;
3644                        struct object_id orig, head;
3645
3646                        memset(&log_tree_opt, 0, sizeof(log_tree_opt));
3647                        repo_init_revisions(the_repository, &log_tree_opt, NULL);
3648                        log_tree_opt.diff = 1;
3649                        log_tree_opt.diffopt.output_format =
3650                                DIFF_FORMAT_DIFFSTAT;
3651                        log_tree_opt.disable_stdin = 1;
3652
3653                        if (read_oneliner(&buf, rebase_path_orig_head(), 0) &&
3654                            !get_oid(buf.buf, &orig) &&
3655                            !get_oid("HEAD", &head)) {
3656                                diff_tree_oid(&orig, &head, "",
3657                                              &log_tree_opt.diffopt);
3658                                log_tree_diff_flush(&log_tree_opt);
3659                        }
3660                }
3661                flush_rewritten_pending();
3662                if (!stat(rebase_path_rewritten_list(), &st) &&
3663                                st.st_size > 0) {
3664                        struct child_process child = CHILD_PROCESS_INIT;
3665                        const char *post_rewrite_hook =
3666                                find_hook("post-rewrite");
3667
3668                        child.in = open(rebase_path_rewritten_list(), O_RDONLY);
3669                        child.git_cmd = 1;
3670                        argv_array_push(&child.args, "notes");
3671                        argv_array_push(&child.args, "copy");
3672                        argv_array_push(&child.args, "--for-rewrite=rebase");
3673                        /* we don't care if this copying failed */
3674                        run_command(&child);
3675
3676                        if (post_rewrite_hook) {
3677                                struct child_process hook = CHILD_PROCESS_INIT;
3678
3679                                hook.in = open(rebase_path_rewritten_list(),
3680                                        O_RDONLY);
3681                                hook.stdout_to_stderr = 1;
3682                                argv_array_push(&hook.args, post_rewrite_hook);
3683                                argv_array_push(&hook.args, "rebase");
3684                                /* we don't care if this hook failed */
3685                                run_command(&hook);
3686                        }
3687                }
3688                apply_autostash(opts);
3689
3690                fprintf(stderr, "Successfully rebased and updated %s.\n",
3691                        head_ref.buf);
3692
3693                strbuf_release(&buf);
3694                strbuf_release(&head_ref);
3695        }
3696
3697        /*
3698         * Sequence of picks finished successfully; cleanup by
3699         * removing the .git/sequencer directory
3700         */
3701        return sequencer_remove_state(opts);
3702}
3703
3704static int continue_single_pick(void)
3705{
3706        const char *argv[] = { "commit", NULL };
3707
3708        if (!file_exists(git_path_cherry_pick_head(the_repository)) &&
3709            !file_exists(git_path_revert_head(the_repository)))
3710                return error(_("no cherry-pick or revert in progress"));
3711        return run_command_v_opt(argv, RUN_GIT_CMD);
3712}
3713
3714static int commit_staged_changes(struct replay_opts *opts,
3715                                 struct todo_list *todo_list)
3716{
3717        unsigned int flags = ALLOW_EMPTY | EDIT_MSG;
3718        unsigned int final_fixup = 0, is_clean;
3719
3720        if (has_unstaged_changes(1))
3721                return error(_("cannot rebase: You have unstaged changes."));
3722
3723        is_clean = !has_uncommitted_changes(0);
3724
3725        if (file_exists(rebase_path_amend())) {
3726                struct strbuf rev = STRBUF_INIT;
3727                struct object_id head, to_amend;
3728
3729                if (get_oid("HEAD", &head))
3730                        return error(_("cannot amend non-existing commit"));
3731                if (!read_oneliner(&rev, rebase_path_amend(), 0))
3732                        return error(_("invalid file: '%s'"), rebase_path_amend());
3733                if (get_oid_hex(rev.buf, &to_amend))
3734                        return error(_("invalid contents: '%s'"),
3735                                rebase_path_amend());
3736                if (!is_clean && !oideq(&head, &to_amend))
3737                        return error(_("\nYou have uncommitted changes in your "
3738                                       "working tree. Please, commit them\n"
3739                                       "first and then run 'git rebase "
3740                                       "--continue' again."));
3741                /*
3742                 * When skipping a failed fixup/squash, we need to edit the
3743                 * commit message, the current fixup list and count, and if it
3744                 * was the last fixup/squash in the chain, we need to clean up
3745                 * the commit message and if there was a squash, let the user
3746                 * edit it.
3747                 */
3748                if (!is_clean || !opts->current_fixup_count)
3749                        ; /* this is not the final fixup */
3750                else if (!oideq(&head, &to_amend) ||
3751                         !file_exists(rebase_path_stopped_sha())) {
3752                        /* was a final fixup or squash done manually? */
3753                        if (!is_fixup(peek_command(todo_list, 0))) {
3754                                unlink(rebase_path_fixup_msg());
3755                                unlink(rebase_path_squash_msg());
3756                                unlink(rebase_path_current_fixups());
3757                                strbuf_reset(&opts->current_fixups);
3758                                opts->current_fixup_count = 0;
3759                        }
3760                } else {
3761                        /* we are in a fixup/squash chain */
3762                        const char *p = opts->current_fixups.buf;
3763                        int len = opts->current_fixups.len;
3764
3765                        opts->current_fixup_count--;
3766                        if (!len)
3767                                BUG("Incorrect current_fixups:\n%s", p);
3768                        while (len && p[len - 1] != '\n')
3769                                len--;
3770                        strbuf_setlen(&opts->current_fixups, len);
3771                        if (write_message(p, len, rebase_path_current_fixups(),
3772                                          0) < 0)
3773                                return error(_("could not write file: '%s'"),
3774                                             rebase_path_current_fixups());
3775
3776                        /*
3777                         * If a fixup/squash in a fixup/squash chain failed, the
3778                         * commit message is already correct, no need to commit
3779                         * it again.
3780                         *
3781                         * Only if it is the final command in the fixup/squash
3782                         * chain, and only if the chain is longer than a single
3783                         * fixup/squash command (which was just skipped), do we
3784                         * actually need to re-commit with a cleaned up commit
3785                         * message.
3786                         */
3787                        if (opts->current_fixup_count > 0 &&
3788                            !is_fixup(peek_command(todo_list, 0))) {
3789                                final_fixup = 1;
3790                                /*
3791                                 * If there was not a single "squash" in the
3792                                 * chain, we only need to clean up the commit
3793                                 * message, no need to bother the user with
3794                                 * opening the commit message in the editor.
3795                                 */
3796                                if (!starts_with(p, "squash ") &&
3797                                    !strstr(p, "\nsquash "))
3798                                        flags = (flags & ~EDIT_MSG) | CLEANUP_MSG;
3799                        } else if (is_fixup(peek_command(todo_list, 0))) {
3800                                /*
3801                                 * We need to update the squash message to skip
3802                                 * the latest commit message.
3803                                 */
3804                                struct commit *commit;
3805                                const char *path = rebase_path_squash_msg();
3806
3807                                if (parse_head(&commit) ||
3808                                    !(p = get_commit_buffer(commit, NULL)) ||
3809                                    write_message(p, strlen(p), path, 0)) {
3810                                        unuse_commit_buffer(commit, p);
3811                                        return error(_("could not write file: "
3812                                                       "'%s'"), path);
3813                                }
3814                                unuse_commit_buffer(commit, p);
3815                        }
3816                }
3817
3818                strbuf_release(&rev);
3819                flags |= AMEND_MSG;
3820        }
3821
3822        if (is_clean) {
3823                const char *cherry_pick_head = git_path_cherry_pick_head(the_repository);
3824
3825                if (file_exists(cherry_pick_head) && unlink(cherry_pick_head))
3826                        return error(_("could not remove CHERRY_PICK_HEAD"));
3827                if (!final_fixup)
3828                        return 0;
3829        }
3830
3831        if (run_git_commit(final_fixup ? NULL : rebase_path_message(),
3832                           opts, flags))
3833                return error(_("could not commit staged changes."));
3834        unlink(rebase_path_amend());
3835        if (final_fixup) {
3836                unlink(rebase_path_fixup_msg());
3837                unlink(rebase_path_squash_msg());
3838        }
3839        if (opts->current_fixup_count > 0) {
3840                /*
3841                 * Whether final fixup or not, we just cleaned up the commit
3842                 * message...
3843                 */
3844                unlink(rebase_path_current_fixups());
3845                strbuf_reset(&opts->current_fixups);
3846                opts->current_fixup_count = 0;
3847        }
3848        return 0;
3849}
3850
3851int sequencer_continue(struct replay_opts *opts)
3852{
3853        struct todo_list todo_list = TODO_LIST_INIT;
3854        int res;
3855
3856        if (read_and_refresh_cache(opts))
3857                return -1;
3858
3859        if (read_populate_opts(opts))
3860                return -1;
3861        if (is_rebase_i(opts)) {
3862                if ((res = read_populate_todo(&todo_list, opts)))
3863                        goto release_todo_list;
3864                if (commit_staged_changes(opts, &todo_list))
3865                        return -1;
3866        } else if (!file_exists(get_todo_path(opts)))
3867                return continue_single_pick();
3868        else if ((res = read_populate_todo(&todo_list, opts)))
3869                goto release_todo_list;
3870
3871        if (!is_rebase_i(opts)) {
3872                /* Verify that the conflict has been resolved */
3873                if (file_exists(git_path_cherry_pick_head(the_repository)) ||
3874                    file_exists(git_path_revert_head(the_repository))) {
3875                        res = continue_single_pick();
3876                        if (res)
3877                                goto release_todo_list;
3878                }
3879                if (index_differs_from("HEAD", NULL, 0)) {
3880                        res = error_dirty_index(opts);
3881                        goto release_todo_list;
3882                }
3883                todo_list.current++;
3884        } else if (file_exists(rebase_path_stopped_sha())) {
3885                struct strbuf buf = STRBUF_INIT;
3886                struct object_id oid;
3887
3888                if (read_oneliner(&buf, rebase_path_stopped_sha(), 1) &&
3889                    !get_oid_committish(buf.buf, &oid))
3890                        record_in_rewritten(&oid, peek_command(&todo_list, 0));
3891                strbuf_release(&buf);
3892        }
3893
3894        res = pick_commits(&todo_list, opts);
3895release_todo_list:
3896        todo_list_release(&todo_list);
3897        return res;
3898}
3899
3900static int single_pick(struct commit *cmit, struct replay_opts *opts)
3901{
3902        setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
3903        return do_pick_commit(opts->action == REPLAY_PICK ?
3904                TODO_PICK : TODO_REVERT, cmit, opts, 0);
3905}
3906
3907int sequencer_pick_revisions(struct replay_opts *opts)
3908{
3909        struct todo_list todo_list = TODO_LIST_INIT;
3910        struct object_id oid;
3911        int i, res;
3912
3913        assert(opts->revs);
3914        if (read_and_refresh_cache(opts))
3915                return -1;
3916
3917        for (i = 0; i < opts->revs->pending.nr; i++) {
3918                struct object_id oid;
3919                const char *name = opts->revs->pending.objects[i].name;
3920
3921                /* This happens when using --stdin. */
3922                if (!strlen(name))
3923                        continue;
3924
3925                if (!get_oid(name, &oid)) {
3926                        if (!lookup_commit_reference_gently(the_repository, &oid, 1)) {
3927                                enum object_type type = oid_object_info(the_repository,
3928                                                                        &oid,
3929                                                                        NULL);
3930                                return error(_("%s: can't cherry-pick a %s"),
3931                                        name, type_name(type));
3932                        }
3933                } else
3934                        return error(_("%s: bad revision"), name);
3935        }
3936
3937        /*
3938         * If we were called as "git cherry-pick <commit>", just
3939         * cherry-pick/revert it, set CHERRY_PICK_HEAD /
3940         * REVERT_HEAD, and don't touch the sequencer state.
3941         * This means it is possible to cherry-pick in the middle
3942         * of a cherry-pick sequence.
3943         */
3944        if (opts->revs->cmdline.nr == 1 &&
3945            opts->revs->cmdline.rev->whence == REV_CMD_REV &&
3946            opts->revs->no_walk &&
3947            !opts->revs->cmdline.rev->flags) {
3948                struct commit *cmit;
3949                if (prepare_revision_walk(opts->revs))
3950                        return error(_("revision walk setup failed"));
3951                cmit = get_revision(opts->revs);
3952                if (!cmit)
3953                        return error(_("empty commit set passed"));
3954                if (get_revision(opts->revs))
3955                        BUG("unexpected extra commit from walk");
3956                return single_pick(cmit, opts);
3957        }
3958
3959        /*
3960         * Start a new cherry-pick/ revert sequence; but
3961         * first, make sure that an existing one isn't in
3962         * progress
3963         */
3964
3965        if (walk_revs_populate_todo(&todo_list, opts) ||
3966                        create_seq_dir() < 0)
3967                return -1;
3968        if (get_oid("HEAD", &oid) && (opts->action == REPLAY_REVERT))
3969                return error(_("can't revert as initial commit"));
3970        if (save_head(oid_to_hex(&oid)))
3971                return -1;
3972        if (save_opts(opts))
3973                return -1;
3974        update_abort_safety_file();
3975        res = pick_commits(&todo_list, opts);
3976        todo_list_release(&todo_list);
3977        return res;
3978}
3979
3980void append_signoff(struct strbuf *msgbuf, size_t ignore_footer, unsigned flag)
3981{
3982        unsigned no_dup_sob = flag & APPEND_SIGNOFF_DEDUP;
3983        struct strbuf sob = STRBUF_INIT;
3984        int has_footer;
3985
3986        strbuf_addstr(&sob, sign_off_header);
3987        strbuf_addstr(&sob, fmt_name(getenv("GIT_COMMITTER_NAME"),
3988                                getenv("GIT_COMMITTER_EMAIL")));
3989        strbuf_addch(&sob, '\n');
3990
3991        if (!ignore_footer)
3992                strbuf_complete_line(msgbuf);
3993
3994        /*
3995         * If the whole message buffer is equal to the sob, pretend that we
3996         * found a conforming footer with a matching sob
3997         */
3998        if (msgbuf->len - ignore_footer == sob.len &&
3999            !strncmp(msgbuf->buf, sob.buf, sob.len))
4000                has_footer = 3;
4001        else
4002                has_footer = has_conforming_footer(msgbuf, &sob, ignore_footer);
4003
4004        if (!has_footer) {
4005                const char *append_newlines = NULL;
4006                size_t len = msgbuf->len - ignore_footer;
4007
4008                if (!len) {
4009                        /*
4010                         * The buffer is completely empty.  Leave foom for
4011                         * the title and body to be filled in by the user.
4012                         */
4013                        append_newlines = "\n\n";
4014                } else if (len == 1) {
4015                        /*
4016                         * Buffer contains a single newline.  Add another
4017                         * so that we leave room for the title and body.
4018                         */
4019                        append_newlines = "\n";
4020                } else if (msgbuf->buf[len - 2] != '\n') {
4021                        /*
4022                         * Buffer ends with a single newline.  Add another
4023                         * so that there is an empty line between the message
4024                         * body and the sob.
4025                         */
4026                        append_newlines = "\n";
4027                } /* else, the buffer already ends with two newlines. */
4028
4029                if (append_newlines)
4030                        strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4031                                append_newlines, strlen(append_newlines));
4032        }
4033
4034        if (has_footer != 3 && (!no_dup_sob || has_footer != 2))
4035                strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4036                                sob.buf, sob.len);
4037
4038        strbuf_release(&sob);
4039}
4040
4041struct labels_entry {
4042        struct hashmap_entry entry;
4043        char label[FLEX_ARRAY];
4044};
4045
4046static int labels_cmp(const void *fndata, const struct labels_entry *a,
4047                      const struct labels_entry *b, const void *key)
4048{
4049        return key ? strcmp(a->label, key) : strcmp(a->label, b->label);
4050}
4051
4052struct string_entry {
4053        struct oidmap_entry entry;
4054        char string[FLEX_ARRAY];
4055};
4056
4057struct label_state {
4058        struct oidmap commit2label;
4059        struct hashmap labels;
4060        struct strbuf buf;
4061};
4062
4063static const char *label_oid(struct object_id *oid, const char *label,
4064                             struct label_state *state)
4065{
4066        struct labels_entry *labels_entry;
4067        struct string_entry *string_entry;
4068        struct object_id dummy;
4069        size_t len;
4070        int i;
4071
4072        string_entry = oidmap_get(&state->commit2label, oid);
4073        if (string_entry)
4074                return string_entry->string;
4075
4076        /*
4077         * For "uninteresting" commits, i.e. commits that are not to be
4078         * rebased, and which can therefore not be labeled, we use a unique
4079         * abbreviation of the commit name. This is slightly more complicated
4080         * than calling find_unique_abbrev() because we also need to make
4081         * sure that the abbreviation does not conflict with any other
4082         * label.
4083         *
4084         * We disallow "interesting" commits to be labeled by a string that
4085         * is a valid full-length hash, to ensure that we always can find an
4086         * abbreviation for any uninteresting commit's names that does not
4087         * clash with any other label.
4088         */
4089        if (!label) {
4090                char *p;
4091
4092                strbuf_reset(&state->buf);
4093                strbuf_grow(&state->buf, GIT_SHA1_HEXSZ);
4094                label = p = state->buf.buf;
4095
4096                find_unique_abbrev_r(p, oid, default_abbrev);
4097
4098                /*
4099                 * We may need to extend the abbreviated hash so that there is
4100                 * no conflicting label.
4101                 */
4102                if (hashmap_get_from_hash(&state->labels, strihash(p), p)) {
4103                        size_t i = strlen(p) + 1;
4104
4105                        oid_to_hex_r(p, oid);
4106                        for (; i < GIT_SHA1_HEXSZ; i++) {
4107                                char save = p[i];
4108                                p[i] = '\0';
4109                                if (!hashmap_get_from_hash(&state->labels,
4110                                                           strihash(p), p))
4111                                        break;
4112                                p[i] = save;
4113                        }
4114                }
4115        } else if (((len = strlen(label)) == the_hash_algo->hexsz &&
4116                    !get_oid_hex(label, &dummy)) ||
4117                   (len == 1 && *label == '#') ||
4118                   hashmap_get_from_hash(&state->labels,
4119                                         strihash(label), label)) {
4120                /*
4121                 * If the label already exists, or if the label is a valid full
4122                 * OID, or the label is a '#' (which we use as a separator
4123                 * between merge heads and oneline), we append a dash and a
4124                 * number to make it unique.
4125                 */
4126                struct strbuf *buf = &state->buf;
4127
4128                strbuf_reset(buf);
4129                strbuf_add(buf, label, len);
4130
4131                for (i = 2; ; i++) {
4132                        strbuf_setlen(buf, len);
4133                        strbuf_addf(buf, "-%d", i);
4134                        if (!hashmap_get_from_hash(&state->labels,
4135                                                   strihash(buf->buf),
4136                                                   buf->buf))
4137                                break;
4138                }
4139
4140                label = buf->buf;
4141        }
4142
4143        FLEX_ALLOC_STR(labels_entry, label, label);
4144        hashmap_entry_init(labels_entry, strihash(label));
4145        hashmap_add(&state->labels, labels_entry);
4146
4147        FLEX_ALLOC_STR(string_entry, string, label);
4148        oidcpy(&string_entry->entry.oid, oid);
4149        oidmap_put(&state->commit2label, string_entry);
4150
4151        return string_entry->string;
4152}
4153
4154static int make_script_with_merges(struct pretty_print_context *pp,
4155                                   struct rev_info *revs, FILE *out,
4156                                   unsigned flags)
4157{
4158        int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4159        int rebase_cousins = flags & TODO_LIST_REBASE_COUSINS;
4160        struct strbuf buf = STRBUF_INIT, oneline = STRBUF_INIT;
4161        struct strbuf label = STRBUF_INIT;
4162        struct commit_list *commits = NULL, **tail = &commits, *iter;
4163        struct commit_list *tips = NULL, **tips_tail = &tips;
4164        struct commit *commit;
4165        struct oidmap commit2todo = OIDMAP_INIT;
4166        struct string_entry *entry;
4167        struct oidset interesting = OIDSET_INIT, child_seen = OIDSET_INIT,
4168                shown = OIDSET_INIT;
4169        struct label_state state = { OIDMAP_INIT, { NULL }, STRBUF_INIT };
4170
4171        int abbr = flags & TODO_LIST_ABBREVIATE_CMDS;
4172        const char *cmd_pick = abbr ? "p" : "pick",
4173                *cmd_label = abbr ? "l" : "label",
4174                *cmd_reset = abbr ? "t" : "reset",
4175                *cmd_merge = abbr ? "m" : "merge";
4176
4177        oidmap_init(&commit2todo, 0);
4178        oidmap_init(&state.commit2label, 0);
4179        hashmap_init(&state.labels, (hashmap_cmp_fn) labels_cmp, NULL, 0);
4180        strbuf_init(&state.buf, 32);
4181
4182        if (revs->cmdline.nr && (revs->cmdline.rev[0].flags & BOTTOM)) {
4183                struct object_id *oid = &revs->cmdline.rev[0].item->oid;
4184                FLEX_ALLOC_STR(entry, string, "onto");
4185                oidcpy(&entry->entry.oid, oid);
4186                oidmap_put(&state.commit2label, entry);
4187        }
4188
4189        /*
4190         * First phase:
4191         * - get onelines for all commits
4192         * - gather all branch tips (i.e. 2nd or later parents of merges)
4193         * - label all branch tips
4194         */
4195        while ((commit = get_revision(revs))) {
4196                struct commit_list *to_merge;
4197                const char *p1, *p2;
4198                struct object_id *oid;
4199                int is_empty;
4200
4201                tail = &commit_list_insert(commit, tail)->next;
4202                oidset_insert(&interesting, &commit->object.oid);
4203
4204                is_empty = is_original_commit_empty(commit);
4205                if (!is_empty && (commit->object.flags & PATCHSAME))
4206                        continue;
4207
4208                strbuf_reset(&oneline);
4209                pretty_print_commit(pp, commit, &oneline);
4210
4211                to_merge = commit->parents ? commit->parents->next : NULL;
4212                if (!to_merge) {
4213                        /* non-merge commit: easy case */
4214                        strbuf_reset(&buf);
4215                        if (!keep_empty && is_empty)
4216                                strbuf_addf(&buf, "%c ", comment_line_char);
4217                        strbuf_addf(&buf, "%s %s %s", cmd_pick,
4218                                    oid_to_hex(&commit->object.oid),
4219                                    oneline.buf);
4220
4221                        FLEX_ALLOC_STR(entry, string, buf.buf);
4222                        oidcpy(&entry->entry.oid, &commit->object.oid);
4223                        oidmap_put(&commit2todo, entry);
4224
4225                        continue;
4226                }
4227
4228                /* Create a label */
4229                strbuf_reset(&label);
4230                if (skip_prefix(oneline.buf, "Merge ", &p1) &&
4231                    (p1 = strchr(p1, '\'')) &&
4232                    (p2 = strchr(++p1, '\'')))
4233                        strbuf_add(&label, p1, p2 - p1);
4234                else if (skip_prefix(oneline.buf, "Merge pull request ",
4235                                     &p1) &&
4236                         (p1 = strstr(p1, " from ")))
4237                        strbuf_addstr(&label, p1 + strlen(" from "));
4238                else
4239                        strbuf_addbuf(&label, &oneline);
4240
4241                for (p1 = label.buf; *p1; p1++)
4242                        if (isspace(*p1))
4243                                *(char *)p1 = '-';
4244
4245                strbuf_reset(&buf);
4246                strbuf_addf(&buf, "%s -C %s",
4247                            cmd_merge, oid_to_hex(&commit->object.oid));
4248
4249                /* label the tips of merged branches */
4250                for (; to_merge; to_merge = to_merge->next) {
4251                        oid = &to_merge->item->object.oid;
4252                        strbuf_addch(&buf, ' ');
4253
4254                        if (!oidset_contains(&interesting, oid)) {
4255                                strbuf_addstr(&buf, label_oid(oid, NULL,
4256                                                              &state));
4257                                continue;
4258                        }
4259
4260                        tips_tail = &commit_list_insert(to_merge->item,
4261                                                        tips_tail)->next;
4262
4263                        strbuf_addstr(&buf, label_oid(oid, label.buf, &state));
4264                }
4265                strbuf_addf(&buf, " # %s", oneline.buf);
4266
4267                FLEX_ALLOC_STR(entry, string, buf.buf);
4268                oidcpy(&entry->entry.oid, &commit->object.oid);
4269                oidmap_put(&commit2todo, entry);
4270        }
4271
4272        /*
4273         * Second phase:
4274         * - label branch points
4275         * - add HEAD to the branch tips
4276         */
4277        for (iter = commits; iter; iter = iter->next) {
4278                struct commit_list *parent = iter->item->parents;
4279                for (; parent; parent = parent->next) {
4280                        struct object_id *oid = &parent->item->object.oid;
4281                        if (!oidset_contains(&interesting, oid))
4282                                continue;
4283                        if (oidset_insert(&child_seen, oid))
4284                                label_oid(oid, "branch-point", &state);
4285                }
4286
4287                /* Add HEAD as implict "tip of branch" */
4288                if (!iter->next)
4289                        tips_tail = &commit_list_insert(iter->item,
4290                                                        tips_tail)->next;
4291        }
4292
4293        /*
4294         * Third phase: output the todo list. This is a bit tricky, as we
4295         * want to avoid jumping back and forth between revisions. To
4296         * accomplish that goal, we walk backwards from the branch tips,
4297         * gathering commits not yet shown, reversing the list on the fly,
4298         * then outputting that list (labeling revisions as needed).
4299         */
4300        fprintf(out, "%s onto\n", cmd_label);
4301        for (iter = tips; iter; iter = iter->next) {
4302                struct commit_list *list = NULL, *iter2;
4303
4304                commit = iter->item;
4305                if (oidset_contains(&shown, &commit->object.oid))
4306                        continue;
4307                entry = oidmap_get(&state.commit2label, &commit->object.oid);
4308
4309                if (entry)
4310                        fprintf(out, "\n%c Branch %s\n", comment_line_char, entry->string);
4311                else
4312                        fprintf(out, "\n");
4313
4314                while (oidset_contains(&interesting, &commit->object.oid) &&
4315                       !oidset_contains(&shown, &commit->object.oid)) {
4316                        commit_list_insert(commit, &list);
4317                        if (!commit->parents) {
4318                                commit = NULL;
4319                                break;
4320                        }
4321                        commit = commit->parents->item;
4322                }
4323
4324                if (!commit)
4325                        fprintf(out, "%s %s\n", cmd_reset,
4326                                rebase_cousins ? "onto" : "[new root]");
4327                else {
4328                        const char *to = NULL;
4329
4330                        entry = oidmap_get(&state.commit2label,
4331                                           &commit->object.oid);
4332                        if (entry)
4333                                to = entry->string;
4334                        else if (!rebase_cousins)
4335                                to = label_oid(&commit->object.oid, NULL,
4336                                               &state);
4337
4338                        if (!to || !strcmp(to, "onto"))
4339                                fprintf(out, "%s onto\n", cmd_reset);
4340                        else {
4341                                strbuf_reset(&oneline);
4342                                pretty_print_commit(pp, commit, &oneline);
4343                                fprintf(out, "%s %s # %s\n",
4344                                        cmd_reset, to, oneline.buf);
4345                        }
4346                }
4347
4348                for (iter2 = list; iter2; iter2 = iter2->next) {
4349                        struct object_id *oid = &iter2->item->object.oid;
4350                        entry = oidmap_get(&commit2todo, oid);
4351                        /* only show if not already upstream */
4352                        if (entry)
4353                                fprintf(out, "%s\n", entry->string);
4354                        entry = oidmap_get(&state.commit2label, oid);
4355                        if (entry)
4356                                fprintf(out, "%s %s\n",
4357                                        cmd_label, entry->string);
4358                        oidset_insert(&shown, oid);
4359                }
4360
4361                free_commit_list(list);
4362        }
4363
4364        free_commit_list(commits);
4365        free_commit_list(tips);
4366
4367        strbuf_release(&label);
4368        strbuf_release(&oneline);
4369        strbuf_release(&buf);
4370
4371        oidmap_free(&commit2todo, 1);
4372        oidmap_free(&state.commit2label, 1);
4373        hashmap_free(&state.labels, 1);
4374        strbuf_release(&state.buf);
4375
4376        return 0;
4377}
4378
4379int sequencer_make_script(FILE *out, int argc, const char **argv,
4380                          unsigned flags)
4381{
4382        char *format = NULL;
4383        struct pretty_print_context pp = {0};
4384        struct strbuf buf = STRBUF_INIT;
4385        struct rev_info revs;
4386        struct commit *commit;
4387        int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4388        const char *insn = flags & TODO_LIST_ABBREVIATE_CMDS ? "p" : "pick";
4389        int rebase_merges = flags & TODO_LIST_REBASE_MERGES;
4390
4391        repo_init_revisions(the_repository, &revs, NULL);
4392        revs.verbose_header = 1;
4393        if (!rebase_merges)
4394                revs.max_parents = 1;
4395        revs.cherry_mark = 1;
4396        revs.limited = 1;
4397        revs.reverse = 1;
4398        revs.right_only = 1;
4399        revs.sort_order = REV_SORT_IN_GRAPH_ORDER;
4400        revs.topo_order = 1;
4401
4402        revs.pretty_given = 1;
4403        git_config_get_string("rebase.instructionFormat", &format);
4404        if (!format || !*format) {
4405                free(format);
4406                format = xstrdup("%s");
4407        }
4408        get_commit_format(format, &revs);
4409        free(format);
4410        pp.fmt = revs.commit_format;
4411        pp.output_encoding = get_log_output_encoding();
4412
4413        if (setup_revisions(argc, argv, &revs, NULL) > 1)
4414                return error(_("make_script: unhandled options"));
4415
4416        if (prepare_revision_walk(&revs) < 0)
4417                return error(_("make_script: error preparing revisions"));
4418
4419        if (rebase_merges)
4420                return make_script_with_merges(&pp, &revs, out, flags);
4421
4422        while ((commit = get_revision(&revs))) {
4423                int is_empty  = is_original_commit_empty(commit);
4424
4425                if (!is_empty && (commit->object.flags & PATCHSAME))
4426                        continue;
4427                strbuf_reset(&buf);
4428                if (!keep_empty && is_empty)
4429                        strbuf_addf(&buf, "%c ", comment_line_char);
4430                strbuf_addf(&buf, "%s %s ", insn,
4431                            oid_to_hex(&commit->object.oid));
4432                pretty_print_commit(&pp, commit, &buf);
4433                strbuf_addch(&buf, '\n');
4434                fputs(buf.buf, out);
4435        }
4436        strbuf_release(&buf);
4437        return 0;
4438}
4439
4440/*
4441 * Add commands after pick and (series of) squash/fixup commands
4442 * in the todo list.
4443 */
4444int sequencer_add_exec_commands(const char *commands)
4445{
4446        const char *todo_file = rebase_path_todo();
4447        struct todo_list todo_list = TODO_LIST_INIT;
4448        struct strbuf *buf = &todo_list.buf;
4449        size_t offset = 0, commands_len = strlen(commands);
4450        int i, insert;
4451
4452        if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0)
4453                return error(_("could not read '%s'."), todo_file);
4454
4455        if (parse_insn_buffer(todo_list.buf.buf, &todo_list)) {
4456                todo_list_release(&todo_list);
4457                return error(_("unusable todo list: '%s'"), todo_file);
4458        }
4459
4460        /*
4461         * Insert <commands> after every pick. Here, fixup/squash chains
4462         * are considered part of the pick, so we insert the commands *after*
4463         * those chains if there are any.
4464         */
4465        insert = -1;
4466        for (i = 0; i < todo_list.nr; i++) {
4467                enum todo_command command = todo_list.items[i].command;
4468
4469                if (insert >= 0) {
4470                        /* skip fixup/squash chains */
4471                        if (command == TODO_COMMENT)
4472                                continue;
4473                        else if (is_fixup(command)) {
4474                                insert = i + 1;
4475                                continue;
4476                        }
4477                        strbuf_insert(buf,
4478                                      todo_list.items[insert].offset_in_buf +
4479                                      offset, commands, commands_len);
4480                        offset += commands_len;
4481                        insert = -1;
4482                }
4483
4484                if (command == TODO_PICK || command == TODO_MERGE)
4485                        insert = i + 1;
4486        }
4487
4488        /* insert or append final <commands> */
4489        if (insert >= 0 && insert < todo_list.nr)
4490                strbuf_insert(buf, todo_list.items[insert].offset_in_buf +
4491                              offset, commands, commands_len);
4492        else if (insert >= 0 || !offset)
4493                strbuf_add(buf, commands, commands_len);
4494
4495        i = write_message(buf->buf, buf->len, todo_file, 0);
4496        todo_list_release(&todo_list);
4497        return i;
4498}
4499
4500int transform_todos(unsigned flags)
4501{
4502        const char *todo_file = rebase_path_todo();
4503        struct todo_list todo_list = TODO_LIST_INIT;
4504        struct strbuf buf = STRBUF_INIT;
4505        struct todo_item *item;
4506        int i;
4507
4508        if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0)
4509                return error(_("could not read '%s'."), todo_file);
4510
4511        if (parse_insn_buffer(todo_list.buf.buf, &todo_list)) {
4512                todo_list_release(&todo_list);
4513                return error(_("unusable todo list: '%s'"), todo_file);
4514        }
4515
4516        for (item = todo_list.items, i = 0; i < todo_list.nr; i++, item++) {
4517                /* if the item is not a command write it and continue */
4518                if (item->command >= TODO_COMMENT) {
4519                        strbuf_addf(&buf, "%.*s\n", item->arg_len, item->arg);
4520                        continue;
4521                }
4522
4523                /* add command to the buffer */
4524                if (flags & TODO_LIST_ABBREVIATE_CMDS)
4525                        strbuf_addch(&buf, command_to_char(item->command));
4526                else
4527                        strbuf_addstr(&buf, command_to_string(item->command));
4528
4529                /* add commit id */
4530                if (item->commit) {
4531                        const char *oid = flags & TODO_LIST_SHORTEN_IDS ?
4532                                          short_commit_name(item->commit) :
4533                                          oid_to_hex(&item->commit->object.oid);
4534
4535                        if (item->command == TODO_MERGE) {
4536                                if (item->flags & TODO_EDIT_MERGE_MSG)
4537                                        strbuf_addstr(&buf, " -c");
4538                                else
4539                                        strbuf_addstr(&buf, " -C");
4540                        }
4541
4542                        strbuf_addf(&buf, " %s", oid);
4543                }
4544
4545                /* add all the rest */
4546                if (!item->arg_len)
4547                        strbuf_addch(&buf, '\n');
4548                else
4549                        strbuf_addf(&buf, " %.*s\n", item->arg_len, item->arg);
4550        }
4551
4552        i = write_message(buf.buf, buf.len, todo_file, 0);
4553        todo_list_release(&todo_list);
4554        return i;
4555}
4556
4557enum missing_commit_check_level get_missing_commit_check_level(void)
4558{
4559        const char *value;
4560
4561        if (git_config_get_value("rebase.missingcommitscheck", &value) ||
4562                        !strcasecmp("ignore", value))
4563                return MISSING_COMMIT_CHECK_IGNORE;
4564        if (!strcasecmp("warn", value))
4565                return MISSING_COMMIT_CHECK_WARN;
4566        if (!strcasecmp("error", value))
4567                return MISSING_COMMIT_CHECK_ERROR;
4568        warning(_("unrecognized setting %s for option "
4569                  "rebase.missingCommitsCheck. Ignoring."), value);
4570        return MISSING_COMMIT_CHECK_IGNORE;
4571}
4572
4573define_commit_slab(commit_seen, unsigned char);
4574/*
4575 * Check if the user dropped some commits by mistake
4576 * Behaviour determined by rebase.missingCommitsCheck.
4577 * Check if there is an unrecognized command or a
4578 * bad SHA-1 in a command.
4579 */
4580int check_todo_list(void)
4581{
4582        enum missing_commit_check_level check_level = get_missing_commit_check_level();
4583        struct strbuf todo_file = STRBUF_INIT;
4584        struct todo_list todo_list = TODO_LIST_INIT;
4585        struct strbuf missing = STRBUF_INIT;
4586        int advise_to_edit_todo = 0, res = 0, i;
4587        struct commit_seen commit_seen;
4588
4589        init_commit_seen(&commit_seen);
4590
4591        strbuf_addstr(&todo_file, rebase_path_todo());
4592        if (strbuf_read_file_or_whine(&todo_list.buf, todo_file.buf) < 0) {
4593                res = -1;
4594                goto leave_check;
4595        }
4596        advise_to_edit_todo = res =
4597                parse_insn_buffer(todo_list.buf.buf, &todo_list);
4598
4599        if (res || check_level == MISSING_COMMIT_CHECK_IGNORE)
4600                goto leave_check;
4601
4602        /* Mark the commits in git-rebase-todo as seen */
4603        for (i = 0; i < todo_list.nr; i++) {
4604                struct commit *commit = todo_list.items[i].commit;
4605                if (commit)
4606                        *commit_seen_at(&commit_seen, commit) = 1;
4607        }
4608
4609        todo_list_release(&todo_list);
4610        strbuf_addstr(&todo_file, ".backup");
4611        if (strbuf_read_file_or_whine(&todo_list.buf, todo_file.buf) < 0) {
4612                res = -1;
4613                goto leave_check;
4614        }
4615        strbuf_release(&todo_file);
4616        res = !!parse_insn_buffer(todo_list.buf.buf, &todo_list);
4617
4618        /* Find commits in git-rebase-todo.backup yet unseen */
4619        for (i = todo_list.nr - 1; i >= 0; i--) {
4620                struct todo_item *item = todo_list.items + i;
4621                struct commit *commit = item->commit;
4622                if (commit && !*commit_seen_at(&commit_seen, commit)) {
4623                        strbuf_addf(&missing, " - %s %.*s\n",
4624                                    short_commit_name(commit),
4625                                    item->arg_len, item->arg);
4626                        *commit_seen_at(&commit_seen, commit) = 1;
4627                }
4628        }
4629
4630        /* Warn about missing commits */
4631        if (!missing.len)
4632                goto leave_check;
4633
4634        if (check_level == MISSING_COMMIT_CHECK_ERROR)
4635                advise_to_edit_todo = res = 1;
4636
4637        fprintf(stderr,
4638                _("Warning: some commits may have been dropped accidentally.\n"
4639                "Dropped commits (newer to older):\n"));
4640
4641        /* Make the list user-friendly and display */
4642        fputs(missing.buf, stderr);
4643        strbuf_release(&missing);
4644
4645        fprintf(stderr, _("To avoid this message, use \"drop\" to "
4646                "explicitly remove a commit.\n\n"
4647                "Use 'git config rebase.missingCommitsCheck' to change "
4648                "the level of warnings.\n"
4649                "The possible behaviours are: ignore, warn, error.\n\n"));
4650
4651leave_check:
4652        clear_commit_seen(&commit_seen);
4653        strbuf_release(&todo_file);
4654        todo_list_release(&todo_list);
4655
4656        if (advise_to_edit_todo)
4657                fprintf(stderr,
4658                        _("You can fix this with 'git rebase --edit-todo' "
4659                          "and then run 'git rebase --continue'.\n"
4660                          "Or you can abort the rebase with 'git rebase"
4661                          " --abort'.\n"));
4662
4663        return res;
4664}
4665
4666static int rewrite_file(const char *path, const char *buf, size_t len)
4667{
4668        int rc = 0;
4669        int fd = open(path, O_WRONLY | O_TRUNC);
4670        if (fd < 0)
4671                return error_errno(_("could not open '%s' for writing"), path);
4672        if (write_in_full(fd, buf, len) < 0)
4673                rc = error_errno(_("could not write to '%s'"), path);
4674        if (close(fd) && !rc)
4675                rc = error_errno(_("could not close '%s'"), path);
4676        return rc;
4677}
4678
4679/* skip picking commits whose parents are unchanged */
4680static int skip_unnecessary_picks(struct object_id *output_oid)
4681{
4682        const char *todo_file = rebase_path_todo();
4683        struct strbuf buf = STRBUF_INIT;
4684        struct todo_list todo_list = TODO_LIST_INIT;
4685        struct object_id *parent_oid;
4686        int fd, i;
4687
4688        if (!read_oneliner(&buf, rebase_path_onto(), 0))
4689                return error(_("could not read 'onto'"));
4690        if (get_oid(buf.buf, output_oid)) {
4691                strbuf_release(&buf);
4692                return error(_("need a HEAD to fixup"));
4693        }
4694        strbuf_release(&buf);
4695
4696        if (strbuf_read_file_or_whine(&todo_list.buf, todo_file) < 0)
4697                return -1;
4698        if (parse_insn_buffer(todo_list.buf.buf, &todo_list) < 0) {
4699                todo_list_release(&todo_list);
4700                return -1;
4701        }
4702
4703        for (i = 0; i < todo_list.nr; i++) {
4704                struct todo_item *item = todo_list.items + i;
4705
4706                if (item->command >= TODO_NOOP)
4707                        continue;
4708                if (item->command != TODO_PICK)
4709                        break;
4710                if (parse_commit(item->commit)) {
4711                        todo_list_release(&todo_list);
4712                        return error(_("could not parse commit '%s'"),
4713                                oid_to_hex(&item->commit->object.oid));
4714                }
4715                if (!item->commit->parents)
4716                        break; /* root commit */
4717                if (item->commit->parents->next)
4718                        break; /* merge commit */
4719                parent_oid = &item->commit->parents->item->object.oid;
4720                if (!oideq(parent_oid, output_oid))
4721                        break;
4722                oidcpy(output_oid, &item->commit->object.oid);
4723        }
4724        if (i > 0) {
4725                int offset = get_item_line_offset(&todo_list, i);
4726                const char *done_path = rebase_path_done();
4727
4728                fd = open(done_path, O_CREAT | O_WRONLY | O_APPEND, 0666);
4729                if (fd < 0) {
4730                        error_errno(_("could not open '%s' for writing"),
4731                                    done_path);
4732                        todo_list_release(&todo_list);
4733                        return -1;
4734                }
4735                if (write_in_full(fd, todo_list.buf.buf, offset) < 0) {
4736                        error_errno(_("could not write to '%s'"), done_path);
4737                        todo_list_release(&todo_list);
4738                        close(fd);
4739                        return -1;
4740                }
4741                close(fd);
4742
4743                if (rewrite_file(rebase_path_todo(), todo_list.buf.buf + offset,
4744                                 todo_list.buf.len - offset) < 0) {
4745                        todo_list_release(&todo_list);
4746                        return -1;
4747                }
4748
4749                todo_list.current = i;
4750                if (is_fixup(peek_command(&todo_list, 0)))
4751                        record_in_rewritten(output_oid, peek_command(&todo_list, 0));
4752        }
4753
4754        todo_list_release(&todo_list);
4755
4756        return 0;
4757}
4758
4759int complete_action(struct replay_opts *opts, unsigned flags,
4760                    const char *shortrevisions, const char *onto_name,
4761                    const char *onto, const char *orig_head, const char *cmd,
4762                    unsigned autosquash)
4763{
4764        const char *shortonto, *todo_file = rebase_path_todo();
4765        struct todo_list todo_list = TODO_LIST_INIT;
4766        struct strbuf *buf = &(todo_list.buf);
4767        struct object_id oid;
4768        struct stat st;
4769
4770        get_oid(onto, &oid);
4771        shortonto = find_unique_abbrev(&oid, DEFAULT_ABBREV);
4772
4773        if (!lstat(todo_file, &st) && st.st_size == 0 &&
4774            write_message("noop\n", 5, todo_file, 0))
4775                return -1;
4776
4777        if (autosquash && rearrange_squash())
4778                return -1;
4779
4780        if (cmd && *cmd)
4781                sequencer_add_exec_commands(cmd);
4782
4783        if (strbuf_read_file(buf, todo_file, 0) < 0)
4784                return error_errno(_("could not read '%s'."), todo_file);
4785
4786        if (parse_insn_buffer(buf->buf, &todo_list)) {
4787                todo_list_release(&todo_list);
4788                return error(_("unusable todo list: '%s'"), todo_file);
4789        }
4790
4791        if (count_commands(&todo_list) == 0) {
4792                apply_autostash(opts);
4793                sequencer_remove_state(opts);
4794                todo_list_release(&todo_list);
4795
4796                return error(_("nothing to do"));
4797        }
4798
4799        strbuf_addch(buf, '\n');
4800        strbuf_commented_addf(buf, Q_("Rebase %s onto %s (%d command)",
4801                                      "Rebase %s onto %s (%d commands)",
4802                                      count_commands(&todo_list)),
4803                              shortrevisions, shortonto, count_commands(&todo_list));
4804        append_todo_help(0, flags & TODO_LIST_KEEP_EMPTY, buf);
4805
4806        if (write_message(buf->buf, buf->len, todo_file, 0)) {
4807                todo_list_release(&todo_list);
4808                return -1;
4809        }
4810
4811        if (copy_file(rebase_path_todo_backup(), todo_file, 0666))
4812                return error(_("could not copy '%s' to '%s'."), todo_file,
4813                             rebase_path_todo_backup());
4814
4815        if (transform_todos(flags | TODO_LIST_SHORTEN_IDS))
4816                return error(_("could not transform the todo list"));
4817
4818        strbuf_reset(buf);
4819
4820        if (launch_sequence_editor(todo_file, buf, NULL)) {
4821                apply_autostash(opts);
4822                sequencer_remove_state(opts);
4823                todo_list_release(&todo_list);
4824
4825                return -1;
4826        }
4827
4828        strbuf_stripspace(buf, 1);
4829        if (buf->len == 0) {
4830                apply_autostash(opts);
4831                sequencer_remove_state(opts);
4832                todo_list_release(&todo_list);
4833
4834                return error(_("nothing to do"));
4835        }
4836
4837        todo_list_release(&todo_list);
4838
4839        if (check_todo_list()) {
4840                checkout_onto(opts, onto_name, onto, orig_head);
4841                return -1;
4842        }
4843
4844        if (transform_todos(flags & ~(TODO_LIST_SHORTEN_IDS)))
4845                return error(_("could not transform the todo list"));
4846
4847        if (opts->allow_ff && skip_unnecessary_picks(&oid))
4848                return error(_("could not skip unnecessary pick commands"));
4849
4850        if (checkout_onto(opts, onto_name, oid_to_hex(&oid), orig_head))
4851                return -1;
4852;
4853        if (require_clean_work_tree("rebase", "", 1, 1))
4854                return -1;
4855
4856        return sequencer_continue(opts);
4857}
4858
4859struct subject2item_entry {
4860        struct hashmap_entry entry;
4861        int i;
4862        char subject[FLEX_ARRAY];
4863};
4864
4865static int subject2item_cmp(const void *fndata,
4866                            const struct subject2item_entry *a,
4867                            const struct subject2item_entry *b, const void *key)
4868{
4869        return key ? strcmp(a->subject, key) : strcmp(a->subject, b->subject);
4870}
4871
4872define_commit_slab(commit_todo_item, struct todo_item *);
4873
4874/*
4875 * Rearrange the todo list that has both "pick commit-id msg" and "pick
4876 * commit-id fixup!/squash! msg" in it so that the latter is put immediately
4877 * after the former, and change "pick" to "fixup"/"squash".
4878 *
4879 * Note that if the config has specified a custom instruction format, each log
4880 * message will have to be retrieved from the commit (as the oneline in the
4881 * script cannot be trusted) in order to normalize the autosquash arrangement.
4882 */
4883int rearrange_squash(void)
4884{
4885        const char *todo_file = rebase_path_todo();
4886        struct todo_list todo_list = TODO_LIST_INIT;
4887        struct hashmap subject2item;
4888        int res = 0, rearranged = 0, *next, *tail, i;
4889        char **subjects;
4890        struct commit_todo_item commit_todo;
4891
4892        if (strbuf_read_file_or_whine(&todo_list.buf, todo_file) < 0)
4893                return -1;
4894        if (parse_insn_buffer(todo_list.buf.buf, &todo_list) < 0) {
4895                todo_list_release(&todo_list);
4896                return -1;
4897        }
4898
4899        init_commit_todo_item(&commit_todo);
4900        /*
4901         * The hashmap maps onelines to the respective todo list index.
4902         *
4903         * If any items need to be rearranged, the next[i] value will indicate
4904         * which item was moved directly after the i'th.
4905         *
4906         * In that case, last[i] will indicate the index of the latest item to
4907         * be moved to appear after the i'th.
4908         */
4909        hashmap_init(&subject2item, (hashmap_cmp_fn) subject2item_cmp,
4910                     NULL, todo_list.nr);
4911        ALLOC_ARRAY(next, todo_list.nr);
4912        ALLOC_ARRAY(tail, todo_list.nr);
4913        ALLOC_ARRAY(subjects, todo_list.nr);
4914        for (i = 0; i < todo_list.nr; i++) {
4915                struct strbuf buf = STRBUF_INIT;
4916                struct todo_item *item = todo_list.items + i;
4917                const char *commit_buffer, *subject, *p;
4918                size_t subject_len;
4919                int i2 = -1;
4920                struct subject2item_entry *entry;
4921
4922                next[i] = tail[i] = -1;
4923                if (!item->commit || item->command == TODO_DROP) {
4924                        subjects[i] = NULL;
4925                        continue;
4926                }
4927
4928                if (is_fixup(item->command)) {
4929                        todo_list_release(&todo_list);
4930                        clear_commit_todo_item(&commit_todo);
4931                        return error(_("the script was already rearranged."));
4932                }
4933
4934                *commit_todo_item_at(&commit_todo, item->commit) = item;
4935
4936                parse_commit(item->commit);
4937                commit_buffer = get_commit_buffer(item->commit, NULL);
4938                find_commit_subject(commit_buffer, &subject);
4939                format_subject(&buf, subject, " ");
4940                subject = subjects[i] = strbuf_detach(&buf, &subject_len);
4941                unuse_commit_buffer(item->commit, commit_buffer);
4942                if ((skip_prefix(subject, "fixup! ", &p) ||
4943                     skip_prefix(subject, "squash! ", &p))) {
4944                        struct commit *commit2;
4945
4946                        for (;;) {
4947                                while (isspace(*p))
4948                                        p++;
4949                                if (!skip_prefix(p, "fixup! ", &p) &&
4950                                    !skip_prefix(p, "squash! ", &p))
4951                                        break;
4952                        }
4953
4954                        if ((entry = hashmap_get_from_hash(&subject2item,
4955                                                           strhash(p), p)))
4956                                /* found by title */
4957                                i2 = entry->i;
4958                        else if (!strchr(p, ' ') &&
4959                                 (commit2 =
4960                                  lookup_commit_reference_by_name(p)) &&
4961                                 *commit_todo_item_at(&commit_todo, commit2))
4962                                /* found by commit name */
4963                                i2 = *commit_todo_item_at(&commit_todo, commit2)
4964                                        - todo_list.items;
4965                        else {
4966                                /* copy can be a prefix of the commit subject */
4967                                for (i2 = 0; i2 < i; i2++)
4968                                        if (subjects[i2] &&
4969                                            starts_with(subjects[i2], p))
4970                                                break;
4971                                if (i2 == i)
4972                                        i2 = -1;
4973                        }
4974                }
4975                if (i2 >= 0) {
4976                        rearranged = 1;
4977                        todo_list.items[i].command =
4978                                starts_with(subject, "fixup!") ?
4979                                TODO_FIXUP : TODO_SQUASH;
4980                        if (next[i2] < 0)
4981                                next[i2] = i;
4982                        else
4983                                next[tail[i2]] = i;
4984                        tail[i2] = i;
4985                } else if (!hashmap_get_from_hash(&subject2item,
4986                                                strhash(subject), subject)) {
4987                        FLEX_ALLOC_MEM(entry, subject, subject, subject_len);
4988                        entry->i = i;
4989                        hashmap_entry_init(entry, strhash(entry->subject));
4990                        hashmap_put(&subject2item, entry);
4991                }
4992        }
4993
4994        if (rearranged) {
4995                struct strbuf buf = STRBUF_INIT;
4996
4997                for (i = 0; i < todo_list.nr; i++) {
4998                        enum todo_command command = todo_list.items[i].command;
4999                        int cur = i;
5000
5001                        /*
5002                         * Initially, all commands are 'pick's. If it is a
5003                         * fixup or a squash now, we have rearranged it.
5004                         */
5005                        if (is_fixup(command))
5006                                continue;
5007
5008                        while (cur >= 0) {
5009                                const char *bol =
5010                                        get_item_line(&todo_list, cur);
5011                                const char *eol =
5012                                        get_item_line(&todo_list, cur + 1);
5013
5014                                /* replace 'pick', by 'fixup' or 'squash' */
5015                                command = todo_list.items[cur].command;
5016                                if (is_fixup(command)) {
5017                                        strbuf_addstr(&buf,
5018                                                todo_command_info[command].str);
5019                                        bol += strcspn(bol, " \t");
5020                                }
5021
5022                                strbuf_add(&buf, bol, eol - bol);
5023
5024                                cur = next[cur];
5025                        }
5026                }
5027
5028                res = rewrite_file(todo_file, buf.buf, buf.len);
5029                strbuf_release(&buf);
5030        }
5031
5032        free(next);
5033        free(tail);
5034        for (i = 0; i < todo_list.nr; i++)
5035                free(subjects[i]);
5036        free(subjects);
5037        hashmap_free(&subject2item, 1);
5038        todo_list_release(&todo_list);
5039
5040        clear_commit_todo_item(&commit_todo);
5041        return res;
5042}