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