sequencer.con commit RelNotes/2.21.1: typofix (4d8ec15)
   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 old
 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                goto leave_merge;
3408        }
3409
3410        if (to_merge->next) {
3411                /* Octopus merge */
3412                struct child_process cmd = CHILD_PROCESS_INIT;
3413
3414                if (read_env_script(&cmd.env_array)) {
3415                        const char *gpg_opt = gpg_sign_opt_quoted(opts);
3416
3417                        ret = error(_(staged_changes_advice), gpg_opt, gpg_opt);
3418                        goto leave_merge;
3419                }
3420
3421                cmd.git_cmd = 1;
3422                argv_array_push(&cmd.args, "merge");
3423                argv_array_push(&cmd.args, "-s");
3424                argv_array_push(&cmd.args, "octopus");
3425                argv_array_push(&cmd.args, "--no-edit");
3426                argv_array_push(&cmd.args, "--no-ff");
3427                argv_array_push(&cmd.args, "--no-log");
3428                argv_array_push(&cmd.args, "--no-stat");
3429                argv_array_push(&cmd.args, "-F");
3430                argv_array_push(&cmd.args, git_path_merge_msg(r));
3431                if (opts->gpg_sign)
3432                        argv_array_push(&cmd.args, opts->gpg_sign);
3433
3434                /* Add the tips to be merged */
3435                for (j = to_merge; j; j = j->next)
3436                        argv_array_push(&cmd.args,
3437                                        oid_to_hex(&j->item->object.oid));
3438
3439                strbuf_release(&ref_name);
3440                unlink(git_path_cherry_pick_head(r));
3441                rollback_lock_file(&lock);
3442
3443                rollback_lock_file(&lock);
3444                ret = run_command(&cmd);
3445
3446                /* force re-reading of the cache */
3447                if (!ret && (discard_index(r->index) < 0 ||
3448                             repo_read_index(r) < 0))
3449                        ret = error(_("could not read index"));
3450                goto leave_merge;
3451        }
3452
3453        merge_commit = to_merge->item;
3454        bases = get_merge_bases(head_commit, merge_commit);
3455        if (bases && oideq(&merge_commit->object.oid,
3456                           &bases->item->object.oid)) {
3457                ret = 0;
3458                /* skip merging an ancestor of HEAD */
3459                goto leave_merge;
3460        }
3461
3462        write_message(oid_to_hex(&merge_commit->object.oid), GIT_SHA1_HEXSZ,
3463                      git_path_merge_head(r), 0);
3464        write_message("no-ff", 5, git_path_merge_mode(r), 0);
3465
3466        for (j = bases; j; j = j->next)
3467                commit_list_insert(j->item, &reversed);
3468        free_commit_list(bases);
3469
3470        repo_read_index(r);
3471        init_merge_options(&o, r);
3472        o.branch1 = "HEAD";
3473        o.branch2 = ref_name.buf;
3474        o.buffer_output = 2;
3475
3476        ret = merge_recursive(&o, head_commit, merge_commit, reversed, &i);
3477        if (ret <= 0)
3478                fputs(o.obuf.buf, stdout);
3479        strbuf_release(&o.obuf);
3480        if (ret < 0) {
3481                error(_("could not even attempt to merge '%.*s'"),
3482                      merge_arg_len, arg);
3483                goto leave_merge;
3484        }
3485        /*
3486         * The return value of merge_recursive() is 1 on clean, and 0 on
3487         * unclean merge.
3488         *
3489         * Let's reverse that, so that do_merge() returns 0 upon success and
3490         * 1 upon failed merge (keeping the return value -1 for the cases where
3491         * we will want to reschedule the `merge` command).
3492         */
3493        ret = !ret;
3494
3495        if (r->index->cache_changed &&
3496            write_locked_index(r->index, &lock, COMMIT_LOCK)) {
3497                ret = error(_("merge: Unable to write new index file"));
3498                goto leave_merge;
3499        }
3500
3501        rollback_lock_file(&lock);
3502        if (ret)
3503                repo_rerere(r, opts->allow_rerere_auto);
3504        else
3505                /*
3506                 * In case of problems, we now want to return a positive
3507                 * value (a negative one would indicate that the `merge`
3508                 * command needs to be rescheduled).
3509                 */
3510                ret = !!run_git_commit(r, git_path_merge_msg(r), opts,
3511                                       run_commit_flags);
3512
3513leave_merge:
3514        strbuf_release(&ref_name);
3515        rollback_lock_file(&lock);
3516        free_commit_list(to_merge);
3517        return ret;
3518}
3519
3520static int is_final_fixup(struct todo_list *todo_list)
3521{
3522        int i = todo_list->current;
3523
3524        if (!is_fixup(todo_list->items[i].command))
3525                return 0;
3526
3527        while (++i < todo_list->nr)
3528                if (is_fixup(todo_list->items[i].command))
3529                        return 0;
3530                else if (!is_noop(todo_list->items[i].command))
3531                        break;
3532        return 1;
3533}
3534
3535static enum todo_command peek_command(struct todo_list *todo_list, int offset)
3536{
3537        int i;
3538
3539        for (i = todo_list->current + offset; i < todo_list->nr; i++)
3540                if (!is_noop(todo_list->items[i].command))
3541                        return todo_list->items[i].command;
3542
3543        return -1;
3544}
3545
3546static int apply_autostash(struct replay_opts *opts)
3547{
3548        struct strbuf stash_sha1 = STRBUF_INIT;
3549        struct child_process child = CHILD_PROCESS_INIT;
3550        int ret = 0;
3551
3552        if (!read_oneliner(&stash_sha1, rebase_path_autostash(), 1)) {
3553                strbuf_release(&stash_sha1);
3554                return 0;
3555        }
3556        strbuf_trim(&stash_sha1);
3557
3558        child.git_cmd = 1;
3559        child.no_stdout = 1;
3560        child.no_stderr = 1;
3561        argv_array_push(&child.args, "stash");
3562        argv_array_push(&child.args, "apply");
3563        argv_array_push(&child.args, stash_sha1.buf);
3564        if (!run_command(&child))
3565                fprintf(stderr, _("Applied autostash.\n"));
3566        else {
3567                struct child_process store = CHILD_PROCESS_INIT;
3568
3569                store.git_cmd = 1;
3570                argv_array_push(&store.args, "stash");
3571                argv_array_push(&store.args, "store");
3572                argv_array_push(&store.args, "-m");
3573                argv_array_push(&store.args, "autostash");
3574                argv_array_push(&store.args, "-q");
3575                argv_array_push(&store.args, stash_sha1.buf);
3576                if (run_command(&store))
3577                        ret = error(_("cannot store %s"), stash_sha1.buf);
3578                else
3579                        fprintf(stderr,
3580                                _("Applying autostash resulted in conflicts.\n"
3581                                  "Your changes are safe in the stash.\n"
3582                                  "You can run \"git stash pop\" or"
3583                                  " \"git stash drop\" at any time.\n"));
3584        }
3585
3586        strbuf_release(&stash_sha1);
3587        return ret;
3588}
3589
3590static const char *reflog_message(struct replay_opts *opts,
3591        const char *sub_action, const char *fmt, ...)
3592{
3593        va_list ap;
3594        static struct strbuf buf = STRBUF_INIT;
3595
3596        va_start(ap, fmt);
3597        strbuf_reset(&buf);
3598        strbuf_addstr(&buf, action_name(opts));
3599        if (sub_action)
3600                strbuf_addf(&buf, " (%s)", sub_action);
3601        if (fmt) {
3602                strbuf_addstr(&buf, ": ");
3603                strbuf_vaddf(&buf, fmt, ap);
3604        }
3605        va_end(ap);
3606
3607        return buf.buf;
3608}
3609
3610static int run_git_checkout(struct repository *r, struct replay_opts *opts,
3611                            const char *commit, const char *action)
3612{
3613        struct child_process cmd = CHILD_PROCESS_INIT;
3614        int ret;
3615
3616        cmd.git_cmd = 1;
3617
3618        argv_array_push(&cmd.args, "checkout");
3619        argv_array_push(&cmd.args, commit);
3620        argv_array_pushf(&cmd.env_array, GIT_REFLOG_ACTION "=%s", action);
3621
3622        if (opts->verbose)
3623                ret = run_command(&cmd);
3624        else
3625                ret = run_command_silent_on_success(&cmd);
3626
3627        if (!ret)
3628                discard_index(r->index);
3629
3630        return ret;
3631}
3632
3633int prepare_branch_to_be_rebased(struct repository *r, struct replay_opts *opts,
3634                                 const char *commit)
3635{
3636        const char *action;
3637
3638        if (commit && *commit) {
3639                action = reflog_message(opts, "start", "checkout %s", commit);
3640                if (run_git_checkout(r, opts, commit, action))
3641                        return error(_("could not checkout %s"), commit);
3642        }
3643
3644        return 0;
3645}
3646
3647static int checkout_onto(struct repository *r, struct replay_opts *opts,
3648                         const char *onto_name, const struct object_id *onto,
3649                         const char *orig_head)
3650{
3651        struct object_id oid;
3652        const char *action = reflog_message(opts, "start", "checkout %s", onto_name);
3653
3654        if (get_oid(orig_head, &oid))
3655                return error(_("%s: not a valid OID"), orig_head);
3656
3657        if (run_git_checkout(r, opts, oid_to_hex(onto), action)) {
3658                apply_autostash(opts);
3659                sequencer_remove_state(opts);
3660                return error(_("could not detach HEAD"));
3661        }
3662
3663        return update_ref(NULL, "ORIG_HEAD", &oid, NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3664}
3665
3666static int stopped_at_head(struct repository *r)
3667{
3668        struct object_id head;
3669        struct commit *commit;
3670        struct commit_message message;
3671
3672        if (get_oid("HEAD", &head) ||
3673            !(commit = lookup_commit(r, &head)) ||
3674            parse_commit(commit) || get_message(commit, &message))
3675                fprintf(stderr, _("Stopped at HEAD\n"));
3676        else {
3677                fprintf(stderr, _("Stopped at %s\n"), message.label);
3678                free_message(commit, &message);
3679        }
3680        return 0;
3681
3682}
3683
3684static const char rescheduled_advice[] =
3685N_("Could not execute the todo command\n"
3686"\n"
3687"    %.*s"
3688"\n"
3689"It has been rescheduled; To edit the command before continuing, please\n"
3690"edit the todo list first:\n"
3691"\n"
3692"    git rebase --edit-todo\n"
3693"    git rebase --continue\n");
3694
3695static int pick_commits(struct repository *r,
3696                        struct todo_list *todo_list,
3697                        struct replay_opts *opts)
3698{
3699        int res = 0, reschedule = 0;
3700
3701        setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
3702        if (opts->allow_ff)
3703                assert(!(opts->signoff || opts->no_commit ||
3704                                opts->record_origin || opts->edit));
3705        if (read_and_refresh_cache(r, opts))
3706                return -1;
3707
3708        while (todo_list->current < todo_list->nr) {
3709                struct todo_item *item = todo_list->items + todo_list->current;
3710                const char *arg = todo_item_get_arg(todo_list, item);
3711
3712                if (save_todo(todo_list, opts))
3713                        return -1;
3714                if (is_rebase_i(opts)) {
3715                        if (item->command != TODO_COMMENT) {
3716                                FILE *f = fopen(rebase_path_msgnum(), "w");
3717
3718                                todo_list->done_nr++;
3719
3720                                if (f) {
3721                                        fprintf(f, "%d\n", todo_list->done_nr);
3722                                        fclose(f);
3723                                }
3724                                if (!opts->quiet)
3725                                        fprintf(stderr, "Rebasing (%d/%d)%s",
3726                                                todo_list->done_nr,
3727                                                todo_list->total_nr,
3728                                                opts->verbose ? "\n" : "\r");
3729                        }
3730                        unlink(rebase_path_message());
3731                        unlink(rebase_path_author_script());
3732                        unlink(rebase_path_stopped_sha());
3733                        unlink(rebase_path_amend());
3734                        unlink(git_path_merge_head(the_repository));
3735                        delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
3736
3737                        if (item->command == TODO_BREAK) {
3738                                if (!opts->verbose)
3739                                        term_clear_line();
3740                                return stopped_at_head(r);
3741                        }
3742                }
3743                if (item->command <= TODO_SQUASH) {
3744                        if (is_rebase_i(opts))
3745                                setenv("GIT_REFLOG_ACTION", reflog_message(opts,
3746                                        command_to_string(item->command), NULL),
3747                                        1);
3748                        res = do_pick_commit(r, item->command, item->commit,
3749                                        opts, is_final_fixup(todo_list));
3750                        if (is_rebase_i(opts) && res < 0) {
3751                                /* Reschedule */
3752                                advise(_(rescheduled_advice),
3753                                       get_item_line_length(todo_list,
3754                                                            todo_list->current),
3755                                       get_item_line(todo_list,
3756                                                     todo_list->current));
3757                                todo_list->current--;
3758                                if (save_todo(todo_list, opts))
3759                                        return -1;
3760                        }
3761                        if (item->command == TODO_EDIT) {
3762                                struct commit *commit = item->commit;
3763                                if (!res) {
3764                                        if (!opts->verbose)
3765                                                term_clear_line();
3766                                        fprintf(stderr,
3767                                                _("Stopped at %s...  %.*s\n"),
3768                                                short_commit_name(commit),
3769                                                item->arg_len, arg);
3770                                }
3771                                return error_with_patch(r, commit,
3772                                        arg, item->arg_len, opts, res, !res);
3773                        }
3774                        if (is_rebase_i(opts) && !res)
3775                                record_in_rewritten(&item->commit->object.oid,
3776                                        peek_command(todo_list, 1));
3777                        if (res && is_fixup(item->command)) {
3778                                if (res == 1)
3779                                        intend_to_amend();
3780                                return error_failed_squash(r, item->commit, opts,
3781                                        item->arg_len, arg);
3782                        } else if (res && is_rebase_i(opts) && item->commit) {
3783                                int to_amend = 0;
3784                                struct object_id oid;
3785
3786                                /*
3787                                 * If we are rewording and have either
3788                                 * fast-forwarded already, or are about to
3789                                 * create a new root commit, we want to amend,
3790                                 * otherwise we do not.
3791                                 */
3792                                if (item->command == TODO_REWORD &&
3793                                    !get_oid("HEAD", &oid) &&
3794                                    (oideq(&item->commit->object.oid, &oid) ||
3795                                     (opts->have_squash_onto &&
3796                                      oideq(&opts->squash_onto, &oid))))
3797                                        to_amend = 1;
3798
3799                                return res | error_with_patch(r, item->commit,
3800                                                arg, item->arg_len, opts,
3801                                                res, to_amend);
3802                        }
3803                } else if (item->command == TODO_EXEC) {
3804                        char *end_of_arg = (char *)(arg + item->arg_len);
3805                        int saved = *end_of_arg;
3806                        struct stat st;
3807
3808                        if (!opts->verbose)
3809                                term_clear_line();
3810                        *end_of_arg = '\0';
3811                        res = do_exec(r, arg);
3812                        *end_of_arg = saved;
3813
3814                        if (res) {
3815                                if (opts->reschedule_failed_exec)
3816                                        reschedule = 1;
3817                        } else if (stat(get_todo_path(opts), &st))
3818                                res = error_errno(_("could not stat '%s'"),
3819                                                  get_todo_path(opts));
3820                        else if (match_stat_data(&todo_list->stat, &st)) {
3821                                /* Reread the todo file if it has changed. */
3822                                todo_list_release(todo_list);
3823                                if (read_populate_todo(r, todo_list, opts))
3824                                        res = -1; /* message was printed */
3825                                /* `current` will be incremented below */
3826                                todo_list->current = -1;
3827                        }
3828                } else if (item->command == TODO_LABEL) {
3829                        if ((res = do_label(r, arg, item->arg_len)))
3830                                reschedule = 1;
3831                } else if (item->command == TODO_RESET) {
3832                        if ((res = do_reset(r, arg, item->arg_len, opts)))
3833                                reschedule = 1;
3834                } else if (item->command == TODO_MERGE) {
3835                        if ((res = do_merge(r, item->commit,
3836                                            arg, item->arg_len,
3837                                            item->flags, opts)) < 0)
3838                                reschedule = 1;
3839                        else if (item->commit)
3840                                record_in_rewritten(&item->commit->object.oid,
3841                                                    peek_command(todo_list, 1));
3842                        if (res > 0)
3843                                /* failed with merge conflicts */
3844                                return error_with_patch(r, item->commit,
3845                                                        arg, item->arg_len,
3846                                                        opts, res, 0);
3847                } else if (!is_noop(item->command))
3848                        return error(_("unknown command %d"), item->command);
3849
3850                if (reschedule) {
3851                        advise(_(rescheduled_advice),
3852                               get_item_line_length(todo_list,
3853                                                    todo_list->current),
3854                               get_item_line(todo_list, todo_list->current));
3855                        todo_list->current--;
3856                        if (save_todo(todo_list, opts))
3857                                return -1;
3858                        if (item->commit)
3859                                return error_with_patch(r,
3860                                                        item->commit,
3861                                                        arg, item->arg_len,
3862                                                        opts, res, 0);
3863                }
3864
3865                todo_list->current++;
3866                if (res)
3867                        return res;
3868        }
3869
3870        if (is_rebase_i(opts)) {
3871                struct strbuf head_ref = STRBUF_INIT, buf = STRBUF_INIT;
3872                struct stat st;
3873
3874                /* Stopped in the middle, as planned? */
3875                if (todo_list->current < todo_list->nr)
3876                        return 0;
3877
3878                if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
3879                                starts_with(head_ref.buf, "refs/")) {
3880                        const char *msg;
3881                        struct object_id head, orig;
3882                        int res;
3883
3884                        if (get_oid("HEAD", &head)) {
3885                                res = error(_("cannot read HEAD"));
3886cleanup_head_ref:
3887                                strbuf_release(&head_ref);
3888                                strbuf_release(&buf);
3889                                return res;
3890                        }
3891                        if (!read_oneliner(&buf, rebase_path_orig_head(), 0) ||
3892                                        get_oid_hex(buf.buf, &orig)) {
3893                                res = error(_("could not read orig-head"));
3894                                goto cleanup_head_ref;
3895                        }
3896                        strbuf_reset(&buf);
3897                        if (!read_oneliner(&buf, rebase_path_onto(), 0)) {
3898                                res = error(_("could not read 'onto'"));
3899                                goto cleanup_head_ref;
3900                        }
3901                        msg = reflog_message(opts, "finish", "%s onto %s",
3902                                head_ref.buf, buf.buf);
3903                        if (update_ref(msg, head_ref.buf, &head, &orig,
3904                                       REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR)) {
3905                                res = error(_("could not update %s"),
3906                                        head_ref.buf);
3907                                goto cleanup_head_ref;
3908                        }
3909                        msg = reflog_message(opts, "finish", "returning to %s",
3910                                head_ref.buf);
3911                        if (create_symref("HEAD", head_ref.buf, msg)) {
3912                                res = error(_("could not update HEAD to %s"),
3913                                        head_ref.buf);
3914                                goto cleanup_head_ref;
3915                        }
3916                        strbuf_reset(&buf);
3917                }
3918
3919                if (opts->verbose) {
3920                        struct rev_info log_tree_opt;
3921                        struct object_id orig, head;
3922
3923                        memset(&log_tree_opt, 0, sizeof(log_tree_opt));
3924                        repo_init_revisions(r, &log_tree_opt, NULL);
3925                        log_tree_opt.diff = 1;
3926                        log_tree_opt.diffopt.output_format =
3927                                DIFF_FORMAT_DIFFSTAT;
3928                        log_tree_opt.disable_stdin = 1;
3929
3930                        if (read_oneliner(&buf, rebase_path_orig_head(), 0) &&
3931                            !get_oid(buf.buf, &orig) &&
3932                            !get_oid("HEAD", &head)) {
3933                                diff_tree_oid(&orig, &head, "",
3934                                              &log_tree_opt.diffopt);
3935                                log_tree_diff_flush(&log_tree_opt);
3936                        }
3937                }
3938                flush_rewritten_pending();
3939                if (!stat(rebase_path_rewritten_list(), &st) &&
3940                                st.st_size > 0) {
3941                        struct child_process child = CHILD_PROCESS_INIT;
3942                        const char *post_rewrite_hook =
3943                                find_hook("post-rewrite");
3944
3945                        child.in = open(rebase_path_rewritten_list(), O_RDONLY);
3946                        child.git_cmd = 1;
3947                        argv_array_push(&child.args, "notes");
3948                        argv_array_push(&child.args, "copy");
3949                        argv_array_push(&child.args, "--for-rewrite=rebase");
3950                        /* we don't care if this copying failed */
3951                        run_command(&child);
3952
3953                        if (post_rewrite_hook) {
3954                                struct child_process hook = CHILD_PROCESS_INIT;
3955
3956                                hook.in = open(rebase_path_rewritten_list(),
3957                                        O_RDONLY);
3958                                hook.stdout_to_stderr = 1;
3959                                hook.trace2_hook_name = "post-rewrite";
3960                                argv_array_push(&hook.args, post_rewrite_hook);
3961                                argv_array_push(&hook.args, "rebase");
3962                                /* we don't care if this hook failed */
3963                                run_command(&hook);
3964                        }
3965                }
3966                apply_autostash(opts);
3967
3968                if (!opts->quiet) {
3969                        if (!opts->verbose)
3970                                term_clear_line();
3971                        fprintf(stderr,
3972                                "Successfully rebased and updated %s.\n",
3973                                head_ref.buf);
3974                }
3975
3976                strbuf_release(&buf);
3977                strbuf_release(&head_ref);
3978        }
3979
3980        /*
3981         * Sequence of picks finished successfully; cleanup by
3982         * removing the .git/sequencer directory
3983         */
3984        return sequencer_remove_state(opts);
3985}
3986
3987static int continue_single_pick(struct repository *r)
3988{
3989        const char *argv[] = { "commit", NULL };
3990
3991        if (!file_exists(git_path_cherry_pick_head(r)) &&
3992            !file_exists(git_path_revert_head(r)))
3993                return error(_("no cherry-pick or revert in progress"));
3994        return run_command_v_opt(argv, RUN_GIT_CMD);
3995}
3996
3997static int commit_staged_changes(struct repository *r,
3998                                 struct replay_opts *opts,
3999                                 struct todo_list *todo_list)
4000{
4001        unsigned int flags = ALLOW_EMPTY | EDIT_MSG;
4002        unsigned int final_fixup = 0, is_clean;
4003
4004        if (has_unstaged_changes(r, 1))
4005                return error(_("cannot rebase: You have unstaged changes."));
4006
4007        is_clean = !has_uncommitted_changes(r, 0);
4008
4009        if (file_exists(rebase_path_amend())) {
4010                struct strbuf rev = STRBUF_INIT;
4011                struct object_id head, to_amend;
4012
4013                if (get_oid("HEAD", &head))
4014                        return error(_("cannot amend non-existing commit"));
4015                if (!read_oneliner(&rev, rebase_path_amend(), 0))
4016                        return error(_("invalid file: '%s'"), rebase_path_amend());
4017                if (get_oid_hex(rev.buf, &to_amend))
4018                        return error(_("invalid contents: '%s'"),
4019                                rebase_path_amend());
4020                if (!is_clean && !oideq(&head, &to_amend))
4021                        return error(_("\nYou have uncommitted changes in your "
4022                                       "working tree. Please, commit them\n"
4023                                       "first and then run 'git rebase "
4024                                       "--continue' again."));
4025                /*
4026                 * When skipping a failed fixup/squash, we need to edit the
4027                 * commit message, the current fixup list and count, and if it
4028                 * was the last fixup/squash in the chain, we need to clean up
4029                 * the commit message and if there was a squash, let the user
4030                 * edit it.
4031                 */
4032                if (!is_clean || !opts->current_fixup_count)
4033                        ; /* this is not the final fixup */
4034                else if (!oideq(&head, &to_amend) ||
4035                         !file_exists(rebase_path_stopped_sha())) {
4036                        /* was a final fixup or squash done manually? */
4037                        if (!is_fixup(peek_command(todo_list, 0))) {
4038                                unlink(rebase_path_fixup_msg());
4039                                unlink(rebase_path_squash_msg());
4040                                unlink(rebase_path_current_fixups());
4041                                strbuf_reset(&opts->current_fixups);
4042                                opts->current_fixup_count = 0;
4043                        }
4044                } else {
4045                        /* we are in a fixup/squash chain */
4046                        const char *p = opts->current_fixups.buf;
4047                        int len = opts->current_fixups.len;
4048
4049                        opts->current_fixup_count--;
4050                        if (!len)
4051                                BUG("Incorrect current_fixups:\n%s", p);
4052                        while (len && p[len - 1] != '\n')
4053                                len--;
4054                        strbuf_setlen(&opts->current_fixups, len);
4055                        if (write_message(p, len, rebase_path_current_fixups(),
4056                                          0) < 0)
4057                                return error(_("could not write file: '%s'"),
4058                                             rebase_path_current_fixups());
4059
4060                        /*
4061                         * If a fixup/squash in a fixup/squash chain failed, the
4062                         * commit message is already correct, no need to commit
4063                         * it again.
4064                         *
4065                         * Only if it is the final command in the fixup/squash
4066                         * chain, and only if the chain is longer than a single
4067                         * fixup/squash command (which was just skipped), do we
4068                         * actually need to re-commit with a cleaned up commit
4069                         * message.
4070                         */
4071                        if (opts->current_fixup_count > 0 &&
4072                            !is_fixup(peek_command(todo_list, 0))) {
4073                                final_fixup = 1;
4074                                /*
4075                                 * If there was not a single "squash" in the
4076                                 * chain, we only need to clean up the commit
4077                                 * message, no need to bother the user with
4078                                 * opening the commit message in the editor.
4079                                 */
4080                                if (!starts_with(p, "squash ") &&
4081                                    !strstr(p, "\nsquash "))
4082                                        flags = (flags & ~EDIT_MSG) | CLEANUP_MSG;
4083                        } else if (is_fixup(peek_command(todo_list, 0))) {
4084                                /*
4085                                 * We need to update the squash message to skip
4086                                 * the latest commit message.
4087                                 */
4088                                struct commit *commit;
4089                                const char *path = rebase_path_squash_msg();
4090
4091                                if (parse_head(r, &commit) ||
4092                                    !(p = get_commit_buffer(commit, NULL)) ||
4093                                    write_message(p, strlen(p), path, 0)) {
4094                                        unuse_commit_buffer(commit, p);
4095                                        return error(_("could not write file: "
4096                                                       "'%s'"), path);
4097                                }
4098                                unuse_commit_buffer(commit, p);
4099                        }
4100                }
4101
4102                strbuf_release(&rev);
4103                flags |= AMEND_MSG;
4104        }
4105
4106        if (is_clean) {
4107                const char *cherry_pick_head = git_path_cherry_pick_head(r);
4108
4109                if (file_exists(cherry_pick_head) && unlink(cherry_pick_head))
4110                        return error(_("could not remove CHERRY_PICK_HEAD"));
4111                if (!final_fixup)
4112                        return 0;
4113        }
4114
4115        if (run_git_commit(r, final_fixup ? NULL : rebase_path_message(),
4116                           opts, flags))
4117                return error(_("could not commit staged changes."));
4118        unlink(rebase_path_amend());
4119        unlink(git_path_merge_head(the_repository));
4120        if (final_fixup) {
4121                unlink(rebase_path_fixup_msg());
4122                unlink(rebase_path_squash_msg());
4123        }
4124        if (opts->current_fixup_count > 0) {
4125                /*
4126                 * Whether final fixup or not, we just cleaned up the commit
4127                 * message...
4128                 */
4129                unlink(rebase_path_current_fixups());
4130                strbuf_reset(&opts->current_fixups);
4131                opts->current_fixup_count = 0;
4132        }
4133        return 0;
4134}
4135
4136int sequencer_continue(struct repository *r, struct replay_opts *opts)
4137{
4138        struct todo_list todo_list = TODO_LIST_INIT;
4139        int res;
4140
4141        if (read_and_refresh_cache(r, opts))
4142                return -1;
4143
4144        if (read_populate_opts(opts))
4145                return -1;
4146        if (is_rebase_i(opts)) {
4147                if ((res = read_populate_todo(r, &todo_list, opts)))
4148                        goto release_todo_list;
4149                if (commit_staged_changes(r, opts, &todo_list))
4150                        return -1;
4151        } else if (!file_exists(get_todo_path(opts)))
4152                return continue_single_pick(r);
4153        else if ((res = read_populate_todo(r, &todo_list, opts)))
4154                goto release_todo_list;
4155
4156        if (!is_rebase_i(opts)) {
4157                /* Verify that the conflict has been resolved */
4158                if (file_exists(git_path_cherry_pick_head(r)) ||
4159                    file_exists(git_path_revert_head(r))) {
4160                        res = continue_single_pick(r);
4161                        if (res)
4162                                goto release_todo_list;
4163                }
4164                if (index_differs_from(r, "HEAD", NULL, 0)) {
4165                        res = error_dirty_index(r, opts);
4166                        goto release_todo_list;
4167                }
4168                todo_list.current++;
4169        } else if (file_exists(rebase_path_stopped_sha())) {
4170                struct strbuf buf = STRBUF_INIT;
4171                struct object_id oid;
4172
4173                if (read_oneliner(&buf, rebase_path_stopped_sha(), 1) &&
4174                    !get_oid_committish(buf.buf, &oid))
4175                        record_in_rewritten(&oid, peek_command(&todo_list, 0));
4176                strbuf_release(&buf);
4177        }
4178
4179        res = pick_commits(r, &todo_list, opts);
4180release_todo_list:
4181        todo_list_release(&todo_list);
4182        return res;
4183}
4184
4185static int single_pick(struct repository *r,
4186                       struct commit *cmit,
4187                       struct replay_opts *opts)
4188{
4189        setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
4190        return do_pick_commit(r, opts->action == REPLAY_PICK ?
4191                TODO_PICK : TODO_REVERT, cmit, opts, 0);
4192}
4193
4194int sequencer_pick_revisions(struct repository *r,
4195                             struct replay_opts *opts)
4196{
4197        struct todo_list todo_list = TODO_LIST_INIT;
4198        struct object_id oid;
4199        int i, res;
4200
4201        assert(opts->revs);
4202        if (read_and_refresh_cache(r, opts))
4203                return -1;
4204
4205        for (i = 0; i < opts->revs->pending.nr; i++) {
4206                struct object_id oid;
4207                const char *name = opts->revs->pending.objects[i].name;
4208
4209                /* This happens when using --stdin. */
4210                if (!strlen(name))
4211                        continue;
4212
4213                if (!get_oid(name, &oid)) {
4214                        if (!lookup_commit_reference_gently(r, &oid, 1)) {
4215                                enum object_type type = oid_object_info(r,
4216                                                                        &oid,
4217                                                                        NULL);
4218                                return error(_("%s: can't cherry-pick a %s"),
4219                                        name, type_name(type));
4220                        }
4221                } else
4222                        return error(_("%s: bad revision"), name);
4223        }
4224
4225        /*
4226         * If we were called as "git cherry-pick <commit>", just
4227         * cherry-pick/revert it, set CHERRY_PICK_HEAD /
4228         * REVERT_HEAD, and don't touch the sequencer state.
4229         * This means it is possible to cherry-pick in the middle
4230         * of a cherry-pick sequence.
4231         */
4232        if (opts->revs->cmdline.nr == 1 &&
4233            opts->revs->cmdline.rev->whence == REV_CMD_REV &&
4234            opts->revs->no_walk &&
4235            !opts->revs->cmdline.rev->flags) {
4236                struct commit *cmit;
4237                if (prepare_revision_walk(opts->revs))
4238                        return error(_("revision walk setup failed"));
4239                cmit = get_revision(opts->revs);
4240                if (!cmit)
4241                        return error(_("empty commit set passed"));
4242                if (get_revision(opts->revs))
4243                        BUG("unexpected extra commit from walk");
4244                return single_pick(r, cmit, opts);
4245        }
4246
4247        /*
4248         * Start a new cherry-pick/ revert sequence; but
4249         * first, make sure that an existing one isn't in
4250         * progress
4251         */
4252
4253        if (walk_revs_populate_todo(&todo_list, opts) ||
4254                        create_seq_dir() < 0)
4255                return -1;
4256        if (get_oid("HEAD", &oid) && (opts->action == REPLAY_REVERT))
4257                return error(_("can't revert as initial commit"));
4258        if (save_head(oid_to_hex(&oid)))
4259                return -1;
4260        if (save_opts(opts))
4261                return -1;
4262        update_abort_safety_file();
4263        res = pick_commits(r, &todo_list, opts);
4264        todo_list_release(&todo_list);
4265        return res;
4266}
4267
4268void append_signoff(struct strbuf *msgbuf, size_t ignore_footer, unsigned flag)
4269{
4270        unsigned no_dup_sob = flag & APPEND_SIGNOFF_DEDUP;
4271        struct strbuf sob = STRBUF_INIT;
4272        int has_footer;
4273
4274        strbuf_addstr(&sob, sign_off_header);
4275        strbuf_addstr(&sob, fmt_name(WANT_COMMITTER_IDENT));
4276        strbuf_addch(&sob, '\n');
4277
4278        if (!ignore_footer)
4279                strbuf_complete_line(msgbuf);
4280
4281        /*
4282         * If the whole message buffer is equal to the sob, pretend that we
4283         * found a conforming footer with a matching sob
4284         */
4285        if (msgbuf->len - ignore_footer == sob.len &&
4286            !strncmp(msgbuf->buf, sob.buf, sob.len))
4287                has_footer = 3;
4288        else
4289                has_footer = has_conforming_footer(msgbuf, &sob, ignore_footer);
4290
4291        if (!has_footer) {
4292                const char *append_newlines = NULL;
4293                size_t len = msgbuf->len - ignore_footer;
4294
4295                if (!len) {
4296                        /*
4297                         * The buffer is completely empty.  Leave foom for
4298                         * the title and body to be filled in by the user.
4299                         */
4300                        append_newlines = "\n\n";
4301                } else if (len == 1) {
4302                        /*
4303                         * Buffer contains a single newline.  Add another
4304                         * so that we leave room for the title and body.
4305                         */
4306                        append_newlines = "\n";
4307                } else if (msgbuf->buf[len - 2] != '\n') {
4308                        /*
4309                         * Buffer ends with a single newline.  Add another
4310                         * so that there is an empty line between the message
4311                         * body and the sob.
4312                         */
4313                        append_newlines = "\n";
4314                } /* else, the buffer already ends with two newlines. */
4315
4316                if (append_newlines)
4317                        strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4318                                append_newlines, strlen(append_newlines));
4319        }
4320
4321        if (has_footer != 3 && (!no_dup_sob || has_footer != 2))
4322                strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4323                                sob.buf, sob.len);
4324
4325        strbuf_release(&sob);
4326}
4327
4328struct labels_entry {
4329        struct hashmap_entry entry;
4330        char label[FLEX_ARRAY];
4331};
4332
4333static int labels_cmp(const void *fndata, const struct labels_entry *a,
4334                      const struct labels_entry *b, const void *key)
4335{
4336        return key ? strcmp(a->label, key) : strcmp(a->label, b->label);
4337}
4338
4339struct string_entry {
4340        struct oidmap_entry entry;
4341        char string[FLEX_ARRAY];
4342};
4343
4344struct label_state {
4345        struct oidmap commit2label;
4346        struct hashmap labels;
4347        struct strbuf buf;
4348};
4349
4350static const char *label_oid(struct object_id *oid, const char *label,
4351                             struct label_state *state)
4352{
4353        struct labels_entry *labels_entry;
4354        struct string_entry *string_entry;
4355        struct object_id dummy;
4356        size_t len;
4357        int i;
4358
4359        string_entry = oidmap_get(&state->commit2label, oid);
4360        if (string_entry)
4361                return string_entry->string;
4362
4363        /*
4364         * For "uninteresting" commits, i.e. commits that are not to be
4365         * rebased, and which can therefore not be labeled, we use a unique
4366         * abbreviation of the commit name. This is slightly more complicated
4367         * than calling find_unique_abbrev() because we also need to make
4368         * sure that the abbreviation does not conflict with any other
4369         * label.
4370         *
4371         * We disallow "interesting" commits to be labeled by a string that
4372         * is a valid full-length hash, to ensure that we always can find an
4373         * abbreviation for any uninteresting commit's names that does not
4374         * clash with any other label.
4375         */
4376        if (!label) {
4377                char *p;
4378
4379                strbuf_reset(&state->buf);
4380                strbuf_grow(&state->buf, GIT_SHA1_HEXSZ);
4381                label = p = state->buf.buf;
4382
4383                find_unique_abbrev_r(p, oid, default_abbrev);
4384
4385                /*
4386                 * We may need to extend the abbreviated hash so that there is
4387                 * no conflicting label.
4388                 */
4389                if (hashmap_get_from_hash(&state->labels, strihash(p), p)) {
4390                        size_t i = strlen(p) + 1;
4391
4392                        oid_to_hex_r(p, oid);
4393                        for (; i < GIT_SHA1_HEXSZ; i++) {
4394                                char save = p[i];
4395                                p[i] = '\0';
4396                                if (!hashmap_get_from_hash(&state->labels,
4397                                                           strihash(p), p))
4398                                        break;
4399                                p[i] = save;
4400                        }
4401                }
4402        } else if (((len = strlen(label)) == the_hash_algo->hexsz &&
4403                    !get_oid_hex(label, &dummy)) ||
4404                   (len == 1 && *label == '#') ||
4405                   hashmap_get_from_hash(&state->labels,
4406                                         strihash(label), label)) {
4407                /*
4408                 * If the label already exists, or if the label is a valid full
4409                 * OID, or the label is a '#' (which we use as a separator
4410                 * between merge heads and oneline), we append a dash and a
4411                 * number to make it unique.
4412                 */
4413                struct strbuf *buf = &state->buf;
4414
4415                strbuf_reset(buf);
4416                strbuf_add(buf, label, len);
4417
4418                for (i = 2; ; i++) {
4419                        strbuf_setlen(buf, len);
4420                        strbuf_addf(buf, "-%d", i);
4421                        if (!hashmap_get_from_hash(&state->labels,
4422                                                   strihash(buf->buf),
4423                                                   buf->buf))
4424                                break;
4425                }
4426
4427                label = buf->buf;
4428        }
4429
4430        FLEX_ALLOC_STR(labels_entry, label, label);
4431        hashmap_entry_init(labels_entry, strihash(label));
4432        hashmap_add(&state->labels, labels_entry);
4433
4434        FLEX_ALLOC_STR(string_entry, string, label);
4435        oidcpy(&string_entry->entry.oid, oid);
4436        oidmap_put(&state->commit2label, string_entry);
4437
4438        return string_entry->string;
4439}
4440
4441static int make_script_with_merges(struct pretty_print_context *pp,
4442                                   struct rev_info *revs, struct strbuf *out,
4443                                   unsigned flags)
4444{
4445        int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4446        int rebase_cousins = flags & TODO_LIST_REBASE_COUSINS;
4447        struct strbuf buf = STRBUF_INIT, oneline = STRBUF_INIT;
4448        struct strbuf label = STRBUF_INIT;
4449        struct commit_list *commits = NULL, **tail = &commits, *iter;
4450        struct commit_list *tips = NULL, **tips_tail = &tips;
4451        struct commit *commit;
4452        struct oidmap commit2todo = OIDMAP_INIT;
4453        struct string_entry *entry;
4454        struct oidset interesting = OIDSET_INIT, child_seen = OIDSET_INIT,
4455                shown = OIDSET_INIT;
4456        struct label_state state = { OIDMAP_INIT, { NULL }, STRBUF_INIT };
4457
4458        int abbr = flags & TODO_LIST_ABBREVIATE_CMDS;
4459        const char *cmd_pick = abbr ? "p" : "pick",
4460                *cmd_label = abbr ? "l" : "label",
4461                *cmd_reset = abbr ? "t" : "reset",
4462                *cmd_merge = abbr ? "m" : "merge";
4463
4464        oidmap_init(&commit2todo, 0);
4465        oidmap_init(&state.commit2label, 0);
4466        hashmap_init(&state.labels, (hashmap_cmp_fn) labels_cmp, NULL, 0);
4467        strbuf_init(&state.buf, 32);
4468
4469        if (revs->cmdline.nr && (revs->cmdline.rev[0].flags & BOTTOM)) {
4470                struct object_id *oid = &revs->cmdline.rev[0].item->oid;
4471                FLEX_ALLOC_STR(entry, string, "onto");
4472                oidcpy(&entry->entry.oid, oid);
4473                oidmap_put(&state.commit2label, entry);
4474        }
4475
4476        /*
4477         * First phase:
4478         * - get onelines for all commits
4479         * - gather all branch tips (i.e. 2nd or later parents of merges)
4480         * - label all branch tips
4481         */
4482        while ((commit = get_revision(revs))) {
4483                struct commit_list *to_merge;
4484                const char *p1, *p2;
4485                struct object_id *oid;
4486                int is_empty;
4487
4488                tail = &commit_list_insert(commit, tail)->next;
4489                oidset_insert(&interesting, &commit->object.oid);
4490
4491                is_empty = is_original_commit_empty(commit);
4492                if (!is_empty && (commit->object.flags & PATCHSAME))
4493                        continue;
4494
4495                strbuf_reset(&oneline);
4496                pretty_print_commit(pp, commit, &oneline);
4497
4498                to_merge = commit->parents ? commit->parents->next : NULL;
4499                if (!to_merge) {
4500                        /* non-merge commit: easy case */
4501                        strbuf_reset(&buf);
4502                        if (!keep_empty && is_empty)
4503                                strbuf_addf(&buf, "%c ", comment_line_char);
4504                        strbuf_addf(&buf, "%s %s %s", cmd_pick,
4505                                    oid_to_hex(&commit->object.oid),
4506                                    oneline.buf);
4507
4508                        FLEX_ALLOC_STR(entry, string, buf.buf);
4509                        oidcpy(&entry->entry.oid, &commit->object.oid);
4510                        oidmap_put(&commit2todo, entry);
4511
4512                        continue;
4513                }
4514
4515                /* Create a label */
4516                strbuf_reset(&label);
4517                if (skip_prefix(oneline.buf, "Merge ", &p1) &&
4518                    (p1 = strchr(p1, '\'')) &&
4519                    (p2 = strchr(++p1, '\'')))
4520                        strbuf_add(&label, p1, p2 - p1);
4521                else if (skip_prefix(oneline.buf, "Merge pull request ",
4522                                     &p1) &&
4523                         (p1 = strstr(p1, " from ")))
4524                        strbuf_addstr(&label, p1 + strlen(" from "));
4525                else
4526                        strbuf_addbuf(&label, &oneline);
4527
4528                for (p1 = label.buf; *p1; p1++)
4529                        if (isspace(*p1))
4530                                *(char *)p1 = '-';
4531
4532                strbuf_reset(&buf);
4533                strbuf_addf(&buf, "%s -C %s",
4534                            cmd_merge, oid_to_hex(&commit->object.oid));
4535
4536                /* label the tips of merged branches */
4537                for (; to_merge; to_merge = to_merge->next) {
4538                        oid = &to_merge->item->object.oid;
4539                        strbuf_addch(&buf, ' ');
4540
4541                        if (!oidset_contains(&interesting, oid)) {
4542                                strbuf_addstr(&buf, label_oid(oid, NULL,
4543                                                              &state));
4544                                continue;
4545                        }
4546
4547                        tips_tail = &commit_list_insert(to_merge->item,
4548                                                        tips_tail)->next;
4549
4550                        strbuf_addstr(&buf, label_oid(oid, label.buf, &state));
4551                }
4552                strbuf_addf(&buf, " # %s", oneline.buf);
4553
4554                FLEX_ALLOC_STR(entry, string, buf.buf);
4555                oidcpy(&entry->entry.oid, &commit->object.oid);
4556                oidmap_put(&commit2todo, entry);
4557        }
4558
4559        /*
4560         * Second phase:
4561         * - label branch points
4562         * - add HEAD to the branch tips
4563         */
4564        for (iter = commits; iter; iter = iter->next) {
4565                struct commit_list *parent = iter->item->parents;
4566                for (; parent; parent = parent->next) {
4567                        struct object_id *oid = &parent->item->object.oid;
4568                        if (!oidset_contains(&interesting, oid))
4569                                continue;
4570                        if (oidset_insert(&child_seen, oid))
4571                                label_oid(oid, "branch-point", &state);
4572                }
4573
4574                /* Add HEAD as implict "tip of branch" */
4575                if (!iter->next)
4576                        tips_tail = &commit_list_insert(iter->item,
4577                                                        tips_tail)->next;
4578        }
4579
4580        /*
4581         * Third phase: output the todo list. This is a bit tricky, as we
4582         * want to avoid jumping back and forth between revisions. To
4583         * accomplish that goal, we walk backwards from the branch tips,
4584         * gathering commits not yet shown, reversing the list on the fly,
4585         * then outputting that list (labeling revisions as needed).
4586         */
4587        strbuf_addf(out, "%s onto\n", cmd_label);
4588        for (iter = tips; iter; iter = iter->next) {
4589                struct commit_list *list = NULL, *iter2;
4590
4591                commit = iter->item;
4592                if (oidset_contains(&shown, &commit->object.oid))
4593                        continue;
4594                entry = oidmap_get(&state.commit2label, &commit->object.oid);
4595
4596                if (entry)
4597                        strbuf_addf(out, "\n%c Branch %s\n", comment_line_char, entry->string);
4598                else
4599                        strbuf_addch(out, '\n');
4600
4601                while (oidset_contains(&interesting, &commit->object.oid) &&
4602                       !oidset_contains(&shown, &commit->object.oid)) {
4603                        commit_list_insert(commit, &list);
4604                        if (!commit->parents) {
4605                                commit = NULL;
4606                                break;
4607                        }
4608                        commit = commit->parents->item;
4609                }
4610
4611                if (!commit)
4612                        strbuf_addf(out, "%s %s\n", cmd_reset,
4613                                    rebase_cousins ? "onto" : "[new root]");
4614                else {
4615                        const char *to = NULL;
4616
4617                        entry = oidmap_get(&state.commit2label,
4618                                           &commit->object.oid);
4619                        if (entry)
4620                                to = entry->string;
4621                        else if (!rebase_cousins)
4622                                to = label_oid(&commit->object.oid, NULL,
4623                                               &state);
4624
4625                        if (!to || !strcmp(to, "onto"))
4626                                strbuf_addf(out, "%s onto\n", cmd_reset);
4627                        else {
4628                                strbuf_reset(&oneline);
4629                                pretty_print_commit(pp, commit, &oneline);
4630                                strbuf_addf(out, "%s %s # %s\n",
4631                                            cmd_reset, to, oneline.buf);
4632                        }
4633                }
4634
4635                for (iter2 = list; iter2; iter2 = iter2->next) {
4636                        struct object_id *oid = &iter2->item->object.oid;
4637                        entry = oidmap_get(&commit2todo, oid);
4638                        /* only show if not already upstream */
4639                        if (entry)
4640                                strbuf_addf(out, "%s\n", entry->string);
4641                        entry = oidmap_get(&state.commit2label, oid);
4642                        if (entry)
4643                                strbuf_addf(out, "%s %s\n",
4644                                            cmd_label, entry->string);
4645                        oidset_insert(&shown, oid);
4646                }
4647
4648                free_commit_list(list);
4649        }
4650
4651        free_commit_list(commits);
4652        free_commit_list(tips);
4653
4654        strbuf_release(&label);
4655        strbuf_release(&oneline);
4656        strbuf_release(&buf);
4657
4658        oidmap_free(&commit2todo, 1);
4659        oidmap_free(&state.commit2label, 1);
4660        hashmap_free(&state.labels, 1);
4661        strbuf_release(&state.buf);
4662
4663        return 0;
4664}
4665
4666int sequencer_make_script(struct repository *r, struct strbuf *out, int argc,
4667                          const char **argv, unsigned flags)
4668{
4669        char *format = NULL;
4670        struct pretty_print_context pp = {0};
4671        struct rev_info revs;
4672        struct commit *commit;
4673        int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4674        const char *insn = flags & TODO_LIST_ABBREVIATE_CMDS ? "p" : "pick";
4675        int rebase_merges = flags & TODO_LIST_REBASE_MERGES;
4676
4677        repo_init_revisions(r, &revs, NULL);
4678        revs.verbose_header = 1;
4679        if (!rebase_merges)
4680                revs.max_parents = 1;
4681        revs.cherry_mark = 1;
4682        revs.limited = 1;
4683        revs.reverse = 1;
4684        revs.right_only = 1;
4685        revs.sort_order = REV_SORT_IN_GRAPH_ORDER;
4686        revs.topo_order = 1;
4687
4688        revs.pretty_given = 1;
4689        git_config_get_string("rebase.instructionFormat", &format);
4690        if (!format || !*format) {
4691                free(format);
4692                format = xstrdup("%s");
4693        }
4694        get_commit_format(format, &revs);
4695        free(format);
4696        pp.fmt = revs.commit_format;
4697        pp.output_encoding = get_log_output_encoding();
4698
4699        if (setup_revisions(argc, argv, &revs, NULL) > 1)
4700                return error(_("make_script: unhandled options"));
4701
4702        if (prepare_revision_walk(&revs) < 0)
4703                return error(_("make_script: error preparing revisions"));
4704
4705        if (rebase_merges)
4706                return make_script_with_merges(&pp, &revs, out, flags);
4707
4708        while ((commit = get_revision(&revs))) {
4709                int is_empty  = is_original_commit_empty(commit);
4710
4711                if (!is_empty && (commit->object.flags & PATCHSAME))
4712                        continue;
4713                if (!keep_empty && is_empty)
4714                        strbuf_addf(out, "%c ", comment_line_char);
4715                strbuf_addf(out, "%s %s ", insn,
4716                            oid_to_hex(&commit->object.oid));
4717                pretty_print_commit(&pp, commit, out);
4718                strbuf_addch(out, '\n');
4719        }
4720        return 0;
4721}
4722
4723/*
4724 * Add commands after pick and (series of) squash/fixup commands
4725 * in the todo list.
4726 */
4727void todo_list_add_exec_commands(struct todo_list *todo_list,
4728                                 struct string_list *commands)
4729{
4730        struct strbuf *buf = &todo_list->buf;
4731        size_t base_offset = buf->len;
4732        int i, insert, nr = 0, alloc = 0;
4733        struct todo_item *items = NULL, *base_items = NULL;
4734
4735        base_items = xcalloc(commands->nr, sizeof(struct todo_item));
4736        for (i = 0; i < commands->nr; i++) {
4737                size_t command_len = strlen(commands->items[i].string);
4738
4739                strbuf_addstr(buf, commands->items[i].string);
4740                strbuf_addch(buf, '\n');
4741
4742                base_items[i].command = TODO_EXEC;
4743                base_items[i].offset_in_buf = base_offset;
4744                base_items[i].arg_offset = base_offset + strlen("exec ");
4745                base_items[i].arg_len = command_len - strlen("exec ");
4746
4747                base_offset += command_len + 1;
4748        }
4749
4750        /*
4751         * Insert <commands> after every pick. Here, fixup/squash chains
4752         * are considered part of the pick, so we insert the commands *after*
4753         * those chains if there are any.
4754         *
4755         * As we insert the exec commands immediatly after rearranging
4756         * any fixups and before the user edits the list, a fixup chain
4757         * can never contain comments (any comments are empty picks that
4758         * have been commented out because the user did not specify
4759         * --keep-empty).  So, it is safe to insert an exec command
4760         * without looking at the command following a comment.
4761         */
4762        insert = 0;
4763        for (i = 0; i < todo_list->nr; i++) {
4764                enum todo_command command = todo_list->items[i].command;
4765                if (insert && !is_fixup(command)) {
4766                        ALLOC_GROW(items, nr + commands->nr, alloc);
4767                        COPY_ARRAY(items + nr, base_items, commands->nr);
4768                        nr += commands->nr;
4769
4770                        insert = 0;
4771                }
4772
4773                ALLOC_GROW(items, nr + 1, alloc);
4774                items[nr++] = todo_list->items[i];
4775
4776                if (command == TODO_PICK || command == TODO_MERGE)
4777                        insert = 1;
4778        }
4779
4780        /* insert or append final <commands> */
4781        if (insert || nr == todo_list->nr) {
4782                ALLOC_GROW(items, nr + commands->nr, alloc);
4783                COPY_ARRAY(items + nr, base_items, commands->nr);
4784                nr += commands->nr;
4785        }
4786
4787        free(base_items);
4788        FREE_AND_NULL(todo_list->items);
4789        todo_list->items = items;
4790        todo_list->nr = nr;
4791        todo_list->alloc = alloc;
4792}
4793
4794static void todo_list_to_strbuf(struct repository *r, struct todo_list *todo_list,
4795                                struct strbuf *buf, int num, unsigned flags)
4796{
4797        struct todo_item *item;
4798        int i, max = todo_list->nr;
4799
4800        if (num > 0 && num < max)
4801                max = num;
4802
4803        for (item = todo_list->items, i = 0; i < max; i++, item++) {
4804                /* if the item is not a command write it and continue */
4805                if (item->command >= TODO_COMMENT) {
4806                        strbuf_addf(buf, "%.*s\n", item->arg_len,
4807                                    todo_item_get_arg(todo_list, item));
4808                        continue;
4809                }
4810
4811                /* add command to the buffer */
4812                if (flags & TODO_LIST_ABBREVIATE_CMDS)
4813                        strbuf_addch(buf, command_to_char(item->command));
4814                else
4815                        strbuf_addstr(buf, command_to_string(item->command));
4816
4817                /* add commit id */
4818                if (item->commit) {
4819                        const char *oid = flags & TODO_LIST_SHORTEN_IDS ?
4820                                          short_commit_name(item->commit) :
4821                                          oid_to_hex(&item->commit->object.oid);
4822
4823                        if (item->command == TODO_MERGE) {
4824                                if (item->flags & TODO_EDIT_MERGE_MSG)
4825                                        strbuf_addstr(buf, " -c");
4826                                else
4827                                        strbuf_addstr(buf, " -C");
4828                        }
4829
4830                        strbuf_addf(buf, " %s", oid);
4831                }
4832
4833                /* add all the rest */
4834                if (!item->arg_len)
4835                        strbuf_addch(buf, '\n');
4836                else
4837                        strbuf_addf(buf, " %.*s\n", item->arg_len,
4838                                    todo_item_get_arg(todo_list, item));
4839        }
4840}
4841
4842int todo_list_write_to_file(struct repository *r, struct todo_list *todo_list,
4843                            const char *file, const char *shortrevisions,
4844                            const char *shortonto, int num, unsigned flags)
4845{
4846        int res;
4847        struct strbuf buf = STRBUF_INIT;
4848
4849        todo_list_to_strbuf(r, todo_list, &buf, num, flags);
4850        if (flags & TODO_LIST_APPEND_TODO_HELP)
4851                append_todo_help(flags & TODO_LIST_KEEP_EMPTY, count_commands(todo_list),
4852                                 shortrevisions, shortonto, &buf);
4853
4854        res = write_message(buf.buf, buf.len, file, 0);
4855        strbuf_release(&buf);
4856
4857        return res;
4858}
4859
4860static const char edit_todo_list_advice[] =
4861N_("You can fix this with 'git rebase --edit-todo' "
4862"and then run 'git rebase --continue'.\n"
4863"Or you can abort the rebase with 'git rebase"
4864" --abort'.\n");
4865
4866int check_todo_list_from_file(struct repository *r)
4867{
4868        struct todo_list old_todo = TODO_LIST_INIT, new_todo = TODO_LIST_INIT;
4869        int res = 0;
4870
4871        if (strbuf_read_file_or_whine(&new_todo.buf, rebase_path_todo()) < 0) {
4872                res = -1;
4873                goto out;
4874        }
4875
4876        if (strbuf_read_file_or_whine(&old_todo.buf, rebase_path_todo_backup()) < 0) {
4877                res = -1;
4878                goto out;
4879        }
4880
4881        res = todo_list_parse_insn_buffer(r, old_todo.buf.buf, &old_todo);
4882        if (!res)
4883                res = todo_list_parse_insn_buffer(r, new_todo.buf.buf, &new_todo);
4884        if (!res)
4885                res = todo_list_check(&old_todo, &new_todo);
4886        if (res)
4887                fprintf(stderr, _(edit_todo_list_advice));
4888out:
4889        todo_list_release(&old_todo);
4890        todo_list_release(&new_todo);
4891
4892        return res;
4893}
4894
4895/* skip picking commits whose parents are unchanged */
4896static int skip_unnecessary_picks(struct repository *r,
4897                                  struct todo_list *todo_list,
4898                                  struct object_id *base_oid)
4899{
4900        struct object_id *parent_oid;
4901        int i;
4902
4903        for (i = 0; i < todo_list->nr; i++) {
4904                struct todo_item *item = todo_list->items + i;
4905
4906                if (item->command >= TODO_NOOP)
4907                        continue;
4908                if (item->command != TODO_PICK)
4909                        break;
4910                if (parse_commit(item->commit)) {
4911                        return error(_("could not parse commit '%s'"),
4912                                oid_to_hex(&item->commit->object.oid));
4913                }
4914                if (!item->commit->parents)
4915                        break; /* root commit */
4916                if (item->commit->parents->next)
4917                        break; /* merge commit */
4918                parent_oid = &item->commit->parents->item->object.oid;
4919                if (!oideq(parent_oid, base_oid))
4920                        break;
4921                oidcpy(base_oid, &item->commit->object.oid);
4922        }
4923        if (i > 0) {
4924                const char *done_path = rebase_path_done();
4925
4926                if (todo_list_write_to_file(r, todo_list, done_path, NULL, NULL, i, 0)) {
4927                        error_errno(_("could not write to '%s'"), done_path);
4928                        return -1;
4929                }
4930
4931                MOVE_ARRAY(todo_list->items, todo_list->items + i, todo_list->nr - i);
4932                todo_list->nr -= i;
4933                todo_list->current = 0;
4934
4935                if (is_fixup(peek_command(todo_list, 0)))
4936                        record_in_rewritten(base_oid, peek_command(todo_list, 0));
4937        }
4938
4939        return 0;
4940}
4941
4942int complete_action(struct repository *r, struct replay_opts *opts, unsigned flags,
4943                    const char *shortrevisions, const char *onto_name,
4944                    struct commit *onto, const char *orig_head,
4945                    struct string_list *commands, unsigned autosquash,
4946                    struct todo_list *todo_list)
4947{
4948        const char *shortonto, *todo_file = rebase_path_todo();
4949        struct todo_list new_todo = TODO_LIST_INIT;
4950        struct strbuf *buf = &todo_list->buf;
4951        struct object_id oid = onto->object.oid;
4952        int res;
4953
4954        shortonto = find_unique_abbrev(&oid, DEFAULT_ABBREV);
4955
4956        if (buf->len == 0) {
4957                struct todo_item *item = append_new_todo(todo_list);
4958                item->command = TODO_NOOP;
4959                item->commit = NULL;
4960                item->arg_len = item->arg_offset = item->flags = item->offset_in_buf = 0;
4961        }
4962
4963        if (autosquash && todo_list_rearrange_squash(todo_list))
4964                return -1;
4965
4966        if (commands->nr)
4967                todo_list_add_exec_commands(todo_list, commands);
4968
4969        if (count_commands(todo_list) == 0) {
4970                apply_autostash(opts);
4971                sequencer_remove_state(opts);
4972
4973                return error(_("nothing to do"));
4974        }
4975
4976        res = edit_todo_list(r, todo_list, &new_todo, shortrevisions,
4977                             shortonto, flags);
4978        if (res == -1)
4979                return -1;
4980        else if (res == -2) {
4981                apply_autostash(opts);
4982                sequencer_remove_state(opts);
4983
4984                return -1;
4985        } else if (res == -3) {
4986                apply_autostash(opts);
4987                sequencer_remove_state(opts);
4988                todo_list_release(&new_todo);
4989
4990                return error(_("nothing to do"));
4991        }
4992
4993        if (todo_list_parse_insn_buffer(r, new_todo.buf.buf, &new_todo) ||
4994            todo_list_check(todo_list, &new_todo)) {
4995                fprintf(stderr, _(edit_todo_list_advice));
4996                checkout_onto(r, opts, onto_name, &onto->object.oid, orig_head);
4997                todo_list_release(&new_todo);
4998
4999                return -1;
5000        }
5001
5002        if (opts->allow_ff && skip_unnecessary_picks(r, &new_todo, &oid)) {
5003                todo_list_release(&new_todo);
5004                return error(_("could not skip unnecessary pick commands"));
5005        }
5006
5007        if (todo_list_write_to_file(r, &new_todo, todo_file, NULL, NULL, -1,
5008                                    flags & ~(TODO_LIST_SHORTEN_IDS))) {
5009                todo_list_release(&new_todo);
5010                return error_errno(_("could not write '%s'"), todo_file);
5011        }
5012
5013        todo_list_release(&new_todo);
5014
5015        if (checkout_onto(r, opts, onto_name, &oid, orig_head))
5016                return -1;
5017
5018        if (require_clean_work_tree(r, "rebase", "", 1, 1))
5019                return -1;
5020
5021        return sequencer_continue(r, opts);
5022}
5023
5024struct subject2item_entry {
5025        struct hashmap_entry entry;
5026        int i;
5027        char subject[FLEX_ARRAY];
5028};
5029
5030static int subject2item_cmp(const void *fndata,
5031                            const struct subject2item_entry *a,
5032                            const struct subject2item_entry *b, const void *key)
5033{
5034        return key ? strcmp(a->subject, key) : strcmp(a->subject, b->subject);
5035}
5036
5037define_commit_slab(commit_todo_item, struct todo_item *);
5038
5039/*
5040 * Rearrange the todo list that has both "pick commit-id msg" and "pick
5041 * commit-id fixup!/squash! msg" in it so that the latter is put immediately
5042 * after the former, and change "pick" to "fixup"/"squash".
5043 *
5044 * Note that if the config has specified a custom instruction format, each log
5045 * message will have to be retrieved from the commit (as the oneline in the
5046 * script cannot be trusted) in order to normalize the autosquash arrangement.
5047 */
5048int todo_list_rearrange_squash(struct todo_list *todo_list)
5049{
5050        struct hashmap subject2item;
5051        int rearranged = 0, *next, *tail, i, nr = 0, alloc = 0;
5052        char **subjects;
5053        struct commit_todo_item commit_todo;
5054        struct todo_item *items = NULL;
5055
5056        init_commit_todo_item(&commit_todo);
5057        /*
5058         * The hashmap maps onelines to the respective todo list index.
5059         *
5060         * If any items need to be rearranged, the next[i] value will indicate
5061         * which item was moved directly after the i'th.
5062         *
5063         * In that case, last[i] will indicate the index of the latest item to
5064         * be moved to appear after the i'th.
5065         */
5066        hashmap_init(&subject2item, (hashmap_cmp_fn) subject2item_cmp,
5067                     NULL, todo_list->nr);
5068        ALLOC_ARRAY(next, todo_list->nr);
5069        ALLOC_ARRAY(tail, todo_list->nr);
5070        ALLOC_ARRAY(subjects, todo_list->nr);
5071        for (i = 0; i < todo_list->nr; i++) {
5072                struct strbuf buf = STRBUF_INIT;
5073                struct todo_item *item = todo_list->items + i;
5074                const char *commit_buffer, *subject, *p;
5075                size_t subject_len;
5076                int i2 = -1;
5077                struct subject2item_entry *entry;
5078
5079                next[i] = tail[i] = -1;
5080                if (!item->commit || item->command == TODO_DROP) {
5081                        subjects[i] = NULL;
5082                        continue;
5083                }
5084
5085                if (is_fixup(item->command)) {
5086                        clear_commit_todo_item(&commit_todo);
5087                        return error(_("the script was already rearranged."));
5088                }
5089
5090                *commit_todo_item_at(&commit_todo, item->commit) = item;
5091
5092                parse_commit(item->commit);
5093                commit_buffer = get_commit_buffer(item->commit, NULL);
5094                find_commit_subject(commit_buffer, &subject);
5095                format_subject(&buf, subject, " ");
5096                subject = subjects[i] = strbuf_detach(&buf, &subject_len);
5097                unuse_commit_buffer(item->commit, commit_buffer);
5098                if ((skip_prefix(subject, "fixup! ", &p) ||
5099                     skip_prefix(subject, "squash! ", &p))) {
5100                        struct commit *commit2;
5101
5102                        for (;;) {
5103                                while (isspace(*p))
5104                                        p++;
5105                                if (!skip_prefix(p, "fixup! ", &p) &&
5106                                    !skip_prefix(p, "squash! ", &p))
5107                                        break;
5108                        }
5109
5110                        if ((entry = hashmap_get_from_hash(&subject2item,
5111                                                           strhash(p), p)))
5112                                /* found by title */
5113                                i2 = entry->i;
5114                        else if (!strchr(p, ' ') &&
5115                                 (commit2 =
5116                                  lookup_commit_reference_by_name(p)) &&
5117                                 *commit_todo_item_at(&commit_todo, commit2))
5118                                /* found by commit name */
5119                                i2 = *commit_todo_item_at(&commit_todo, commit2)
5120                                        - todo_list->items;
5121                        else {
5122                                /* copy can be a prefix of the commit subject */
5123                                for (i2 = 0; i2 < i; i2++)
5124                                        if (subjects[i2] &&
5125                                            starts_with(subjects[i2], p))
5126                                                break;
5127                                if (i2 == i)
5128                                        i2 = -1;
5129                        }
5130                }
5131                if (i2 >= 0) {
5132                        rearranged = 1;
5133                        todo_list->items[i].command =
5134                                starts_with(subject, "fixup!") ?
5135                                TODO_FIXUP : TODO_SQUASH;
5136                        if (next[i2] < 0)
5137                                next[i2] = i;
5138                        else
5139                                next[tail[i2]] = i;
5140                        tail[i2] = i;
5141                } else if (!hashmap_get_from_hash(&subject2item,
5142                                                strhash(subject), subject)) {
5143                        FLEX_ALLOC_MEM(entry, subject, subject, subject_len);
5144                        entry->i = i;
5145                        hashmap_entry_init(entry, strhash(entry->subject));
5146                        hashmap_put(&subject2item, entry);
5147                }
5148        }
5149
5150        if (rearranged) {
5151                for (i = 0; i < todo_list->nr; i++) {
5152                        enum todo_command command = todo_list->items[i].command;
5153                        int cur = i;
5154
5155                        /*
5156                         * Initially, all commands are 'pick's. If it is a
5157                         * fixup or a squash now, we have rearranged it.
5158                         */
5159                        if (is_fixup(command))
5160                                continue;
5161
5162                        while (cur >= 0) {
5163                                ALLOC_GROW(items, nr + 1, alloc);
5164                                items[nr++] = todo_list->items[cur];
5165                                cur = next[cur];
5166                        }
5167                }
5168
5169                FREE_AND_NULL(todo_list->items);
5170                todo_list->items = items;
5171                todo_list->nr = nr;
5172                todo_list->alloc = alloc;
5173        }
5174
5175        free(next);
5176        free(tail);
5177        for (i = 0; i < todo_list->nr; i++)
5178                free(subjects[i]);
5179        free(subjects);
5180        hashmap_free(&subject2item, 1);
5181
5182        clear_commit_todo_item(&commit_todo);
5183
5184        return 0;
5185}