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