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