sequencer.con commit sequencer: factor out todo command name parsing (3e81bcc)
   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        struct todo_item item;
2181        char *eol;
2182        const char *todo_file;
2183        struct strbuf buf = STRBUF_INIT;
2184        int ret = -1;
2185
2186        todo_file = git_path_todo_file();
2187        if (strbuf_read_file(&buf, todo_file, 0) < 0) {
2188                if (errno == ENOENT)
2189                        return -1;
2190                else
2191                        return error_errno("unable to open '%s'", todo_file);
2192        }
2193        eol = strchrnul(buf.buf, '\n');
2194        if (buf.buf != eol && eol[-1] == '\r')
2195                eol--; /* strip Carriage Return */
2196        if (parse_insn_line(r, &item, buf.buf, buf.buf, eol))
2197                goto fail;
2198        if (item.command == TODO_PICK)
2199                *action = REPLAY_PICK;
2200        else if (item.command == TODO_REVERT)
2201                *action = REPLAY_REVERT;
2202        else
2203                goto fail;
2204
2205        ret = 0;
2206
2207 fail:
2208        strbuf_release(&buf);
2209
2210        return ret;
2211}
2212
2213int todo_list_parse_insn_buffer(struct repository *r, char *buf,
2214                                struct todo_list *todo_list)
2215{
2216        struct todo_item *item;
2217        char *p = buf, *next_p;
2218        int i, res = 0, fixup_okay = file_exists(rebase_path_done());
2219
2220        todo_list->current = todo_list->nr = 0;
2221
2222        for (i = 1; *p; i++, p = next_p) {
2223                char *eol = strchrnul(p, '\n');
2224
2225                next_p = *eol ? eol + 1 /* skip LF */ : eol;
2226
2227                if (p != eol && eol[-1] == '\r')
2228                        eol--; /* strip Carriage Return */
2229
2230                item = append_new_todo(todo_list);
2231                item->offset_in_buf = p - todo_list->buf.buf;
2232                if (parse_insn_line(r, item, buf, p, eol)) {
2233                        res = error(_("invalid line %d: %.*s"),
2234                                i, (int)(eol - p), p);
2235                        item->command = TODO_COMMENT + 1;
2236                        item->arg_offset = p - buf;
2237                        item->arg_len = (int)(eol - p);
2238                        item->commit = NULL;
2239                }
2240
2241                if (fixup_okay)
2242                        ; /* do nothing */
2243                else if (is_fixup(item->command))
2244                        return error(_("cannot '%s' without a previous commit"),
2245                                command_to_string(item->command));
2246                else if (!is_noop(item->command))
2247                        fixup_okay = 1;
2248        }
2249
2250        return res;
2251}
2252
2253static int count_commands(struct todo_list *todo_list)
2254{
2255        int count = 0, i;
2256
2257        for (i = 0; i < todo_list->nr; i++)
2258                if (todo_list->items[i].command != TODO_COMMENT)
2259                        count++;
2260
2261        return count;
2262}
2263
2264static int get_item_line_offset(struct todo_list *todo_list, int index)
2265{
2266        return index < todo_list->nr ?
2267                todo_list->items[index].offset_in_buf : todo_list->buf.len;
2268}
2269
2270static const char *get_item_line(struct todo_list *todo_list, int index)
2271{
2272        return todo_list->buf.buf + get_item_line_offset(todo_list, index);
2273}
2274
2275static int get_item_line_length(struct todo_list *todo_list, int index)
2276{
2277        return get_item_line_offset(todo_list, index + 1)
2278                -  get_item_line_offset(todo_list, index);
2279}
2280
2281static ssize_t strbuf_read_file_or_whine(struct strbuf *sb, const char *path)
2282{
2283        int fd;
2284        ssize_t len;
2285
2286        fd = open(path, O_RDONLY);
2287        if (fd < 0)
2288                return error_errno(_("could not open '%s'"), path);
2289        len = strbuf_read(sb, fd, 0);
2290        close(fd);
2291        if (len < 0)
2292                return error(_("could not read '%s'."), path);
2293        return len;
2294}
2295
2296static int have_finished_the_last_pick(void)
2297{
2298        struct strbuf buf = STRBUF_INIT;
2299        const char *eol;
2300        const char *todo_path = git_path_todo_file();
2301        int ret = 0;
2302
2303        if (strbuf_read_file(&buf, todo_path, 0) < 0) {
2304                if (errno == ENOENT) {
2305                        return 0;
2306                } else {
2307                        error_errno("unable to open '%s'", todo_path);
2308                        return 0;
2309                }
2310        }
2311        /* If there is only one line then we are done */
2312        eol = strchr(buf.buf, '\n');
2313        if (!eol || !eol[1])
2314                ret = 1;
2315
2316        strbuf_release(&buf);
2317
2318        return ret;
2319}
2320
2321void sequencer_post_commit_cleanup(struct repository *r)
2322{
2323        struct replay_opts opts = REPLAY_OPTS_INIT;
2324        int need_cleanup = 0;
2325
2326        if (file_exists(git_path_cherry_pick_head(r))) {
2327                unlink(git_path_cherry_pick_head(r));
2328                opts.action = REPLAY_PICK;
2329                need_cleanup = 1;
2330        }
2331
2332        if (file_exists(git_path_revert_head(r))) {
2333                unlink(git_path_revert_head(r));
2334                opts.action = REPLAY_REVERT;
2335                need_cleanup = 1;
2336        }
2337
2338        if (!need_cleanup)
2339                return;
2340
2341        if (!have_finished_the_last_pick())
2342                return;
2343
2344        sequencer_remove_state(&opts);
2345}
2346
2347static int read_populate_todo(struct repository *r,
2348                              struct todo_list *todo_list,
2349                              struct replay_opts *opts)
2350{
2351        struct stat st;
2352        const char *todo_file = get_todo_path(opts);
2353        int res;
2354
2355        strbuf_reset(&todo_list->buf);
2356        if (strbuf_read_file_or_whine(&todo_list->buf, todo_file) < 0)
2357                return -1;
2358
2359        res = stat(todo_file, &st);
2360        if (res)
2361                return error(_("could not stat '%s'"), todo_file);
2362        fill_stat_data(&todo_list->stat, &st);
2363
2364        res = todo_list_parse_insn_buffer(r, todo_list->buf.buf, todo_list);
2365        if (res) {
2366                if (is_rebase_i(opts))
2367                        return error(_("please fix this using "
2368                                       "'git rebase --edit-todo'."));
2369                return error(_("unusable instruction sheet: '%s'"), todo_file);
2370        }
2371
2372        if (!todo_list->nr &&
2373            (!is_rebase_i(opts) || !file_exists(rebase_path_done())))
2374                return error(_("no commits parsed."));
2375
2376        if (!is_rebase_i(opts)) {
2377                enum todo_command valid =
2378                        opts->action == REPLAY_PICK ? TODO_PICK : TODO_REVERT;
2379                int i;
2380
2381                for (i = 0; i < todo_list->nr; i++)
2382                        if (valid == todo_list->items[i].command)
2383                                continue;
2384                        else if (valid == TODO_PICK)
2385                                return error(_("cannot cherry-pick during a revert."));
2386                        else
2387                                return error(_("cannot revert during a cherry-pick."));
2388        }
2389
2390        if (is_rebase_i(opts)) {
2391                struct todo_list done = TODO_LIST_INIT;
2392                FILE *f = fopen_or_warn(rebase_path_msgtotal(), "w");
2393
2394                if (strbuf_read_file(&done.buf, rebase_path_done(), 0) > 0 &&
2395                    !todo_list_parse_insn_buffer(r, done.buf.buf, &done))
2396                        todo_list->done_nr = count_commands(&done);
2397                else
2398                        todo_list->done_nr = 0;
2399
2400                todo_list->total_nr = todo_list->done_nr
2401                        + count_commands(todo_list);
2402                todo_list_release(&done);
2403
2404                if (f) {
2405                        fprintf(f, "%d\n", todo_list->total_nr);
2406                        fclose(f);
2407                }
2408        }
2409
2410        return 0;
2411}
2412
2413static int git_config_string_dup(char **dest,
2414                                 const char *var, const char *value)
2415{
2416        if (!value)
2417                return config_error_nonbool(var);
2418        free(*dest);
2419        *dest = xstrdup(value);
2420        return 0;
2421}
2422
2423static int populate_opts_cb(const char *key, const char *value, void *data)
2424{
2425        struct replay_opts *opts = data;
2426        int error_flag = 1;
2427
2428        if (!value)
2429                error_flag = 0;
2430        else if (!strcmp(key, "options.no-commit"))
2431                opts->no_commit = git_config_bool_or_int(key, value, &error_flag);
2432        else if (!strcmp(key, "options.edit"))
2433                opts->edit = git_config_bool_or_int(key, value, &error_flag);
2434        else if (!strcmp(key, "options.allow-empty"))
2435                opts->allow_empty =
2436                        git_config_bool_or_int(key, value, &error_flag);
2437        else if (!strcmp(key, "options.allow-empty-message"))
2438                opts->allow_empty_message =
2439                        git_config_bool_or_int(key, value, &error_flag);
2440        else if (!strcmp(key, "options.keep-redundant-commits"))
2441                opts->keep_redundant_commits =
2442                        git_config_bool_or_int(key, value, &error_flag);
2443        else if (!strcmp(key, "options.signoff"))
2444                opts->signoff = git_config_bool_or_int(key, value, &error_flag);
2445        else if (!strcmp(key, "options.record-origin"))
2446                opts->record_origin = git_config_bool_or_int(key, value, &error_flag);
2447        else if (!strcmp(key, "options.allow-ff"))
2448                opts->allow_ff = git_config_bool_or_int(key, value, &error_flag);
2449        else if (!strcmp(key, "options.mainline"))
2450                opts->mainline = git_config_int(key, value);
2451        else if (!strcmp(key, "options.strategy"))
2452                git_config_string_dup(&opts->strategy, key, value);
2453        else if (!strcmp(key, "options.gpg-sign"))
2454                git_config_string_dup(&opts->gpg_sign, key, value);
2455        else if (!strcmp(key, "options.strategy-option")) {
2456                ALLOC_GROW(opts->xopts, opts->xopts_nr + 1, opts->xopts_alloc);
2457                opts->xopts[opts->xopts_nr++] = xstrdup(value);
2458        } else if (!strcmp(key, "options.allow-rerere-auto"))
2459                opts->allow_rerere_auto =
2460                        git_config_bool_or_int(key, value, &error_flag) ?
2461                                RERERE_AUTOUPDATE : RERERE_NOAUTOUPDATE;
2462        else if (!strcmp(key, "options.default-msg-cleanup")) {
2463                opts->explicit_cleanup = 1;
2464                opts->default_msg_cleanup = get_cleanup_mode(value, 1);
2465        } else
2466                return error(_("invalid key: %s"), key);
2467
2468        if (!error_flag)
2469                return error(_("invalid value for %s: %s"), key, value);
2470
2471        return 0;
2472}
2473
2474void parse_strategy_opts(struct replay_opts *opts, char *raw_opts)
2475{
2476        int i;
2477        char *strategy_opts_string = raw_opts;
2478
2479        if (*strategy_opts_string == ' ')
2480                strategy_opts_string++;
2481
2482        opts->xopts_nr = split_cmdline(strategy_opts_string,
2483                                       (const char ***)&opts->xopts);
2484        for (i = 0; i < opts->xopts_nr; i++) {
2485                const char *arg = opts->xopts[i];
2486
2487                skip_prefix(arg, "--", &arg);
2488                opts->xopts[i] = xstrdup(arg);
2489        }
2490}
2491
2492static void read_strategy_opts(struct replay_opts *opts, struct strbuf *buf)
2493{
2494        strbuf_reset(buf);
2495        if (!read_oneliner(buf, rebase_path_strategy(), 0))
2496                return;
2497        opts->strategy = strbuf_detach(buf, NULL);
2498        if (!read_oneliner(buf, rebase_path_strategy_opts(), 0))
2499                return;
2500
2501        parse_strategy_opts(opts, buf->buf);
2502}
2503
2504static int read_populate_opts(struct replay_opts *opts)
2505{
2506        if (is_rebase_i(opts)) {
2507                struct strbuf buf = STRBUF_INIT;
2508
2509                if (read_oneliner(&buf, rebase_path_gpg_sign_opt(), 1)) {
2510                        if (!starts_with(buf.buf, "-S"))
2511                                strbuf_reset(&buf);
2512                        else {
2513                                free(opts->gpg_sign);
2514                                opts->gpg_sign = xstrdup(buf.buf + 2);
2515                        }
2516                        strbuf_reset(&buf);
2517                }
2518
2519                if (read_oneliner(&buf, rebase_path_allow_rerere_autoupdate(), 1)) {
2520                        if (!strcmp(buf.buf, "--rerere-autoupdate"))
2521                                opts->allow_rerere_auto = RERERE_AUTOUPDATE;
2522                        else if (!strcmp(buf.buf, "--no-rerere-autoupdate"))
2523                                opts->allow_rerere_auto = RERERE_NOAUTOUPDATE;
2524                        strbuf_reset(&buf);
2525                }
2526
2527                if (file_exists(rebase_path_verbose()))
2528                        opts->verbose = 1;
2529
2530                if (file_exists(rebase_path_quiet()))
2531                        opts->quiet = 1;
2532
2533                if (file_exists(rebase_path_signoff())) {
2534                        opts->allow_ff = 0;
2535                        opts->signoff = 1;
2536                }
2537
2538                if (file_exists(rebase_path_reschedule_failed_exec()))
2539                        opts->reschedule_failed_exec = 1;
2540
2541                read_strategy_opts(opts, &buf);
2542                strbuf_release(&buf);
2543
2544                if (read_oneliner(&opts->current_fixups,
2545                                  rebase_path_current_fixups(), 1)) {
2546                        const char *p = opts->current_fixups.buf;
2547                        opts->current_fixup_count = 1;
2548                        while ((p = strchr(p, '\n'))) {
2549                                opts->current_fixup_count++;
2550                                p++;
2551                        }
2552                }
2553
2554                if (read_oneliner(&buf, rebase_path_squash_onto(), 0)) {
2555                        if (get_oid_hex(buf.buf, &opts->squash_onto) < 0)
2556                                return error(_("unusable squash-onto"));
2557                        opts->have_squash_onto = 1;
2558                }
2559
2560                return 0;
2561        }
2562
2563        if (!file_exists(git_path_opts_file()))
2564                return 0;
2565        /*
2566         * The function git_parse_source(), called from git_config_from_file(),
2567         * may die() in case of a syntactically incorrect file. We do not care
2568         * about this case, though, because we wrote that file ourselves, so we
2569         * are pretty certain that it is syntactically correct.
2570         */
2571        if (git_config_from_file(populate_opts_cb, git_path_opts_file(), opts) < 0)
2572                return error(_("malformed options sheet: '%s'"),
2573                        git_path_opts_file());
2574        return 0;
2575}
2576
2577static void write_strategy_opts(struct replay_opts *opts)
2578{
2579        int i;
2580        struct strbuf buf = STRBUF_INIT;
2581
2582        for (i = 0; i < opts->xopts_nr; ++i)
2583                strbuf_addf(&buf, " --%s", opts->xopts[i]);
2584
2585        write_file(rebase_path_strategy_opts(), "%s\n", buf.buf);
2586        strbuf_release(&buf);
2587}
2588
2589int write_basic_state(struct replay_opts *opts, const char *head_name,
2590                      struct commit *onto, const char *orig_head)
2591{
2592        const char *quiet = getenv("GIT_QUIET");
2593
2594        if (head_name)
2595                write_file(rebase_path_head_name(), "%s\n", head_name);
2596        if (onto)
2597                write_file(rebase_path_onto(), "%s\n",
2598                           oid_to_hex(&onto->object.oid));
2599        if (orig_head)
2600                write_file(rebase_path_orig_head(), "%s\n", orig_head);
2601
2602        if (quiet)
2603                write_file(rebase_path_quiet(), "%s\n", quiet);
2604        if (opts->verbose)
2605                write_file(rebase_path_verbose(), "%s", "");
2606        if (opts->strategy)
2607                write_file(rebase_path_strategy(), "%s\n", opts->strategy);
2608        if (opts->xopts_nr > 0)
2609                write_strategy_opts(opts);
2610
2611        if (opts->allow_rerere_auto == RERERE_AUTOUPDATE)
2612                write_file(rebase_path_allow_rerere_autoupdate(), "--rerere-autoupdate\n");
2613        else if (opts->allow_rerere_auto == RERERE_NOAUTOUPDATE)
2614                write_file(rebase_path_allow_rerere_autoupdate(), "--no-rerere-autoupdate\n");
2615
2616        if (opts->gpg_sign)
2617                write_file(rebase_path_gpg_sign_opt(), "-S%s\n", opts->gpg_sign);
2618        if (opts->signoff)
2619                write_file(rebase_path_signoff(), "--signoff\n");
2620        if (opts->reschedule_failed_exec)
2621                write_file(rebase_path_reschedule_failed_exec(), "%s", "");
2622
2623        return 0;
2624}
2625
2626static int walk_revs_populate_todo(struct todo_list *todo_list,
2627                                struct replay_opts *opts)
2628{
2629        enum todo_command command = opts->action == REPLAY_PICK ?
2630                TODO_PICK : TODO_REVERT;
2631        const char *command_string = todo_command_info[command].str;
2632        struct commit *commit;
2633
2634        if (prepare_revs(opts))
2635                return -1;
2636
2637        while ((commit = get_revision(opts->revs))) {
2638                struct todo_item *item = append_new_todo(todo_list);
2639                const char *commit_buffer = get_commit_buffer(commit, NULL);
2640                const char *subject;
2641                int subject_len;
2642
2643                item->command = command;
2644                item->commit = commit;
2645                item->arg_offset = 0;
2646                item->arg_len = 0;
2647                item->offset_in_buf = todo_list->buf.len;
2648                subject_len = find_commit_subject(commit_buffer, &subject);
2649                strbuf_addf(&todo_list->buf, "%s %s %.*s\n", command_string,
2650                        short_commit_name(commit), subject_len, subject);
2651                unuse_commit_buffer(commit, commit_buffer);
2652        }
2653
2654        if (!todo_list->nr)
2655                return error(_("empty commit set passed"));
2656
2657        return 0;
2658}
2659
2660static int create_seq_dir(void)
2661{
2662        if (file_exists(git_path_seq_dir())) {
2663                error(_("a cherry-pick or revert is already in progress"));
2664                advise(_("try \"git cherry-pick (--continue | --quit | --abort)\""));
2665                return -1;
2666        } else if (mkdir(git_path_seq_dir(), 0777) < 0)
2667                return error_errno(_("could not create sequencer directory '%s'"),
2668                                   git_path_seq_dir());
2669        return 0;
2670}
2671
2672static int save_head(const char *head)
2673{
2674        struct lock_file head_lock = LOCK_INIT;
2675        struct strbuf buf = STRBUF_INIT;
2676        int fd;
2677        ssize_t written;
2678
2679        fd = hold_lock_file_for_update(&head_lock, git_path_head_file(), 0);
2680        if (fd < 0)
2681                return error_errno(_("could not lock HEAD"));
2682        strbuf_addf(&buf, "%s\n", head);
2683        written = write_in_full(fd, buf.buf, buf.len);
2684        strbuf_release(&buf);
2685        if (written < 0) {
2686                error_errno(_("could not write to '%s'"), git_path_head_file());
2687                rollback_lock_file(&head_lock);
2688                return -1;
2689        }
2690        if (commit_lock_file(&head_lock) < 0)
2691                return error(_("failed to finalize '%s'"), git_path_head_file());
2692        return 0;
2693}
2694
2695static int rollback_is_safe(void)
2696{
2697        struct strbuf sb = STRBUF_INIT;
2698        struct object_id expected_head, actual_head;
2699
2700        if (strbuf_read_file(&sb, git_path_abort_safety_file(), 0) >= 0) {
2701                strbuf_trim(&sb);
2702                if (get_oid_hex(sb.buf, &expected_head)) {
2703                        strbuf_release(&sb);
2704                        die(_("could not parse %s"), git_path_abort_safety_file());
2705                }
2706                strbuf_release(&sb);
2707        }
2708        else if (errno == ENOENT)
2709                oidclr(&expected_head);
2710        else
2711                die_errno(_("could not read '%s'"), git_path_abort_safety_file());
2712
2713        if (get_oid("HEAD", &actual_head))
2714                oidclr(&actual_head);
2715
2716        return oideq(&actual_head, &expected_head);
2717}
2718
2719static int reset_for_rollback(const struct object_id *oid)
2720{
2721        const char *argv[4];    /* reset --merge <arg> + NULL */
2722
2723        argv[0] = "reset";
2724        argv[1] = "--merge";
2725        argv[2] = oid_to_hex(oid);
2726        argv[3] = NULL;
2727        return run_command_v_opt(argv, RUN_GIT_CMD);
2728}
2729
2730static int rollback_single_pick(struct repository *r)
2731{
2732        struct object_id head_oid;
2733
2734        if (!file_exists(git_path_cherry_pick_head(r)) &&
2735            !file_exists(git_path_revert_head(r)))
2736                return error(_("no cherry-pick or revert in progress"));
2737        if (read_ref_full("HEAD", 0, &head_oid, NULL))
2738                return error(_("cannot resolve HEAD"));
2739        if (is_null_oid(&head_oid))
2740                return error(_("cannot abort from a branch yet to be born"));
2741        return reset_for_rollback(&head_oid);
2742}
2743
2744int sequencer_rollback(struct repository *r, struct replay_opts *opts)
2745{
2746        FILE *f;
2747        struct object_id oid;
2748        struct strbuf buf = STRBUF_INIT;
2749        const char *p;
2750
2751        f = fopen(git_path_head_file(), "r");
2752        if (!f && errno == ENOENT) {
2753                /*
2754                 * There is no multiple-cherry-pick in progress.
2755                 * If CHERRY_PICK_HEAD or REVERT_HEAD indicates
2756                 * a single-cherry-pick in progress, abort that.
2757                 */
2758                return rollback_single_pick(r);
2759        }
2760        if (!f)
2761                return error_errno(_("cannot open '%s'"), git_path_head_file());
2762        if (strbuf_getline_lf(&buf, f)) {
2763                error(_("cannot read '%s': %s"), git_path_head_file(),
2764                      ferror(f) ?  strerror(errno) : _("unexpected end of file"));
2765                fclose(f);
2766                goto fail;
2767        }
2768        fclose(f);
2769        if (parse_oid_hex(buf.buf, &oid, &p) || *p != '\0') {
2770                error(_("stored pre-cherry-pick HEAD file '%s' is corrupt"),
2771                        git_path_head_file());
2772                goto fail;
2773        }
2774        if (is_null_oid(&oid)) {
2775                error(_("cannot abort from a branch yet to be born"));
2776                goto fail;
2777        }
2778
2779        if (!rollback_is_safe()) {
2780                /* Do not error, just do not rollback */
2781                warning(_("You seem to have moved HEAD. "
2782                          "Not rewinding, check your HEAD!"));
2783        } else
2784        if (reset_for_rollback(&oid))
2785                goto fail;
2786        strbuf_release(&buf);
2787        return sequencer_remove_state(opts);
2788fail:
2789        strbuf_release(&buf);
2790        return -1;
2791}
2792
2793static int save_todo(struct todo_list *todo_list, struct replay_opts *opts)
2794{
2795        struct lock_file todo_lock = LOCK_INIT;
2796        const char *todo_path = get_todo_path(opts);
2797        int next = todo_list->current, offset, fd;
2798
2799        /*
2800         * rebase -i writes "git-rebase-todo" without the currently executing
2801         * command, appending it to "done" instead.
2802         */
2803        if (is_rebase_i(opts))
2804                next++;
2805
2806        fd = hold_lock_file_for_update(&todo_lock, todo_path, 0);
2807        if (fd < 0)
2808                return error_errno(_("could not lock '%s'"), todo_path);
2809        offset = get_item_line_offset(todo_list, next);
2810        if (write_in_full(fd, todo_list->buf.buf + offset,
2811                        todo_list->buf.len - offset) < 0)
2812                return error_errno(_("could not write to '%s'"), todo_path);
2813        if (commit_lock_file(&todo_lock) < 0)
2814                return error(_("failed to finalize '%s'"), todo_path);
2815
2816        if (is_rebase_i(opts) && next > 0) {
2817                const char *done = rebase_path_done();
2818                int fd = open(done, O_CREAT | O_WRONLY | O_APPEND, 0666);
2819                int ret = 0;
2820
2821                if (fd < 0)
2822                        return 0;
2823                if (write_in_full(fd, get_item_line(todo_list, next - 1),
2824                                  get_item_line_length(todo_list, next - 1))
2825                    < 0)
2826                        ret = error_errno(_("could not write to '%s'"), done);
2827                if (close(fd) < 0)
2828                        ret = error_errno(_("failed to finalize '%s'"), done);
2829                return ret;
2830        }
2831        return 0;
2832}
2833
2834static int save_opts(struct replay_opts *opts)
2835{
2836        const char *opts_file = git_path_opts_file();
2837        int res = 0;
2838
2839        if (opts->no_commit)
2840                res |= git_config_set_in_file_gently(opts_file,
2841                                        "options.no-commit", "true");
2842        if (opts->edit)
2843                res |= git_config_set_in_file_gently(opts_file,
2844                                        "options.edit", "true");
2845        if (opts->allow_empty)
2846                res |= git_config_set_in_file_gently(opts_file,
2847                                        "options.allow-empty", "true");
2848        if (opts->allow_empty_message)
2849                res |= git_config_set_in_file_gently(opts_file,
2850                                "options.allow-empty-message", "true");
2851        if (opts->keep_redundant_commits)
2852                res |= git_config_set_in_file_gently(opts_file,
2853                                "options.keep-redundant-commits", "true");
2854        if (opts->signoff)
2855                res |= git_config_set_in_file_gently(opts_file,
2856                                        "options.signoff", "true");
2857        if (opts->record_origin)
2858                res |= git_config_set_in_file_gently(opts_file,
2859                                        "options.record-origin", "true");
2860        if (opts->allow_ff)
2861                res |= git_config_set_in_file_gently(opts_file,
2862                                        "options.allow-ff", "true");
2863        if (opts->mainline) {
2864                struct strbuf buf = STRBUF_INIT;
2865                strbuf_addf(&buf, "%d", opts->mainline);
2866                res |= git_config_set_in_file_gently(opts_file,
2867                                        "options.mainline", buf.buf);
2868                strbuf_release(&buf);
2869        }
2870        if (opts->strategy)
2871                res |= git_config_set_in_file_gently(opts_file,
2872                                        "options.strategy", opts->strategy);
2873        if (opts->gpg_sign)
2874                res |= git_config_set_in_file_gently(opts_file,
2875                                        "options.gpg-sign", opts->gpg_sign);
2876        if (opts->xopts) {
2877                int i;
2878                for (i = 0; i < opts->xopts_nr; i++)
2879                        res |= git_config_set_multivar_in_file_gently(opts_file,
2880                                        "options.strategy-option",
2881                                        opts->xopts[i], "^$", 0);
2882        }
2883        if (opts->allow_rerere_auto)
2884                res |= git_config_set_in_file_gently(opts_file,
2885                                "options.allow-rerere-auto",
2886                                opts->allow_rerere_auto == RERERE_AUTOUPDATE ?
2887                                "true" : "false");
2888
2889        if (opts->explicit_cleanup)
2890                res |= git_config_set_in_file_gently(opts_file,
2891                                "options.default-msg-cleanup",
2892                                describe_cleanup_mode(opts->default_msg_cleanup));
2893        return res;
2894}
2895
2896static int make_patch(struct repository *r,
2897                      struct commit *commit,
2898                      struct replay_opts *opts)
2899{
2900        struct strbuf buf = STRBUF_INIT;
2901        struct rev_info log_tree_opt;
2902        const char *subject, *p;
2903        int res = 0;
2904
2905        p = short_commit_name(commit);
2906        if (write_message(p, strlen(p), rebase_path_stopped_sha(), 1) < 0)
2907                return -1;
2908        if (update_ref("rebase", "REBASE_HEAD", &commit->object.oid,
2909                       NULL, REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
2910                res |= error(_("could not update %s"), "REBASE_HEAD");
2911
2912        strbuf_addf(&buf, "%s/patch", get_dir(opts));
2913        memset(&log_tree_opt, 0, sizeof(log_tree_opt));
2914        repo_init_revisions(r, &log_tree_opt, NULL);
2915        log_tree_opt.abbrev = 0;
2916        log_tree_opt.diff = 1;
2917        log_tree_opt.diffopt.output_format = DIFF_FORMAT_PATCH;
2918        log_tree_opt.disable_stdin = 1;
2919        log_tree_opt.no_commit_id = 1;
2920        log_tree_opt.diffopt.file = fopen(buf.buf, "w");
2921        log_tree_opt.diffopt.use_color = GIT_COLOR_NEVER;
2922        if (!log_tree_opt.diffopt.file)
2923                res |= error_errno(_("could not open '%s'"), buf.buf);
2924        else {
2925                res |= log_tree_commit(&log_tree_opt, commit);
2926                fclose(log_tree_opt.diffopt.file);
2927        }
2928        strbuf_reset(&buf);
2929
2930        strbuf_addf(&buf, "%s/message", get_dir(opts));
2931        if (!file_exists(buf.buf)) {
2932                const char *commit_buffer = get_commit_buffer(commit, NULL);
2933                find_commit_subject(commit_buffer, &subject);
2934                res |= write_message(subject, strlen(subject), buf.buf, 1);
2935                unuse_commit_buffer(commit, commit_buffer);
2936        }
2937        strbuf_release(&buf);
2938
2939        return res;
2940}
2941
2942static int intend_to_amend(void)
2943{
2944        struct object_id head;
2945        char *p;
2946
2947        if (get_oid("HEAD", &head))
2948                return error(_("cannot read HEAD"));
2949
2950        p = oid_to_hex(&head);
2951        return write_message(p, strlen(p), rebase_path_amend(), 1);
2952}
2953
2954static int error_with_patch(struct repository *r,
2955                            struct commit *commit,
2956                            const char *subject, int subject_len,
2957                            struct replay_opts *opts,
2958                            int exit_code, int to_amend)
2959{
2960        if (commit) {
2961                if (make_patch(r, commit, opts))
2962                        return -1;
2963        } else if (copy_file(rebase_path_message(),
2964                             git_path_merge_msg(r), 0666))
2965                return error(_("unable to copy '%s' to '%s'"),
2966                             git_path_merge_msg(r), rebase_path_message());
2967
2968        if (to_amend) {
2969                if (intend_to_amend())
2970                        return -1;
2971
2972                fprintf(stderr,
2973                        _("You can amend the commit now, with\n"
2974                          "\n"
2975                          "  git commit --amend %s\n"
2976                          "\n"
2977                          "Once you are satisfied with your changes, run\n"
2978                          "\n"
2979                          "  git rebase --continue\n"),
2980                        gpg_sign_opt_quoted(opts));
2981        } else if (exit_code) {
2982                if (commit)
2983                        fprintf_ln(stderr, _("Could not apply %s... %.*s"),
2984                                   short_commit_name(commit), subject_len, subject);
2985                else
2986                        /*
2987                         * We don't have the hash of the parent so
2988                         * just print the line from the todo file.
2989                         */
2990                        fprintf_ln(stderr, _("Could not merge %.*s"),
2991                                   subject_len, subject);
2992        }
2993
2994        return exit_code;
2995}
2996
2997static int error_failed_squash(struct repository *r,
2998                               struct commit *commit,
2999                               struct replay_opts *opts,
3000                               int subject_len,
3001                               const char *subject)
3002{
3003        if (copy_file(rebase_path_message(), rebase_path_squash_msg(), 0666))
3004                return error(_("could not copy '%s' to '%s'"),
3005                        rebase_path_squash_msg(), rebase_path_message());
3006        unlink(git_path_merge_msg(r));
3007        if (copy_file(git_path_merge_msg(r), rebase_path_message(), 0666))
3008                return error(_("could not copy '%s' to '%s'"),
3009                             rebase_path_message(),
3010                             git_path_merge_msg(r));
3011        return error_with_patch(r, commit, subject, subject_len, opts, 1, 0);
3012}
3013
3014static int do_exec(struct repository *r, const char *command_line)
3015{
3016        struct argv_array child_env = ARGV_ARRAY_INIT;
3017        const char *child_argv[] = { NULL, NULL };
3018        int dirty, status;
3019
3020        fprintf(stderr, "Executing: %s\n", command_line);
3021        child_argv[0] = command_line;
3022        argv_array_pushf(&child_env, "GIT_DIR=%s", absolute_path(get_git_dir()));
3023        argv_array_pushf(&child_env, "GIT_WORK_TREE=%s",
3024                         absolute_path(get_git_work_tree()));
3025        status = run_command_v_opt_cd_env(child_argv, RUN_USING_SHELL, NULL,
3026                                          child_env.argv);
3027
3028        /* force re-reading of the cache */
3029        if (discard_index(r->index) < 0 || repo_read_index(r) < 0)
3030                return error(_("could not read index"));
3031
3032        dirty = require_clean_work_tree(r, "rebase", NULL, 1, 1);
3033
3034        if (status) {
3035                warning(_("execution failed: %s\n%s"
3036                          "You can fix the problem, and then run\n"
3037                          "\n"
3038                          "  git rebase --continue\n"
3039                          "\n"),
3040                        command_line,
3041                        dirty ? N_("and made changes to the index and/or the "
3042                                "working tree\n") : "");
3043                if (status == 127)
3044                        /* command not found */
3045                        status = 1;
3046        } else if (dirty) {
3047                warning(_("execution succeeded: %s\nbut "
3048                          "left changes to the index and/or the working tree\n"
3049                          "Commit or stash your changes, and then run\n"
3050                          "\n"
3051                          "  git rebase --continue\n"
3052                          "\n"), command_line);
3053                status = 1;
3054        }
3055
3056        argv_array_clear(&child_env);
3057
3058        return status;
3059}
3060
3061static int safe_append(const char *filename, const char *fmt, ...)
3062{
3063        va_list ap;
3064        struct lock_file lock = LOCK_INIT;
3065        int fd = hold_lock_file_for_update(&lock, filename,
3066                                           LOCK_REPORT_ON_ERROR);
3067        struct strbuf buf = STRBUF_INIT;
3068
3069        if (fd < 0)
3070                return -1;
3071
3072        if (strbuf_read_file(&buf, filename, 0) < 0 && errno != ENOENT) {
3073                error_errno(_("could not read '%s'"), filename);
3074                rollback_lock_file(&lock);
3075                return -1;
3076        }
3077        strbuf_complete(&buf, '\n');
3078        va_start(ap, fmt);
3079        strbuf_vaddf(&buf, fmt, ap);
3080        va_end(ap);
3081
3082        if (write_in_full(fd, buf.buf, buf.len) < 0) {
3083                error_errno(_("could not write to '%s'"), filename);
3084                strbuf_release(&buf);
3085                rollback_lock_file(&lock);
3086                return -1;
3087        }
3088        if (commit_lock_file(&lock) < 0) {
3089                strbuf_release(&buf);
3090                rollback_lock_file(&lock);
3091                return error(_("failed to finalize '%s'"), filename);
3092        }
3093
3094        strbuf_release(&buf);
3095        return 0;
3096}
3097
3098static int do_label(struct repository *r, const char *name, int len)
3099{
3100        struct ref_store *refs = get_main_ref_store(r);
3101        struct ref_transaction *transaction;
3102        struct strbuf ref_name = STRBUF_INIT, err = STRBUF_INIT;
3103        struct strbuf msg = STRBUF_INIT;
3104        int ret = 0;
3105        struct object_id head_oid;
3106
3107        if (len == 1 && *name == '#')
3108                return error(_("illegal label name: '%.*s'"), len, name);
3109
3110        strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
3111        strbuf_addf(&msg, "rebase -i (label) '%.*s'", len, name);
3112
3113        transaction = ref_store_transaction_begin(refs, &err);
3114        if (!transaction) {
3115                error("%s", err.buf);
3116                ret = -1;
3117        } else if (get_oid("HEAD", &head_oid)) {
3118                error(_("could not read HEAD"));
3119                ret = -1;
3120        } else if (ref_transaction_update(transaction, ref_name.buf, &head_oid,
3121                                          NULL, 0, msg.buf, &err) < 0 ||
3122                   ref_transaction_commit(transaction, &err)) {
3123                error("%s", err.buf);
3124                ret = -1;
3125        }
3126        ref_transaction_free(transaction);
3127        strbuf_release(&err);
3128        strbuf_release(&msg);
3129
3130        if (!ret)
3131                ret = safe_append(rebase_path_refs_to_delete(),
3132                                  "%s\n", ref_name.buf);
3133        strbuf_release(&ref_name);
3134
3135        return ret;
3136}
3137
3138static const char *reflog_message(struct replay_opts *opts,
3139        const char *sub_action, const char *fmt, ...);
3140
3141static int do_reset(struct repository *r,
3142                    const char *name, int len,
3143                    struct replay_opts *opts)
3144{
3145        struct strbuf ref_name = STRBUF_INIT;
3146        struct object_id oid;
3147        struct lock_file lock = LOCK_INIT;
3148        struct tree_desc desc;
3149        struct tree *tree;
3150        struct unpack_trees_options unpack_tree_opts;
3151        int ret = 0;
3152
3153        if (repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0)
3154                return -1;
3155
3156        if (len == 10 && !strncmp("[new root]", name, len)) {
3157                if (!opts->have_squash_onto) {
3158                        const char *hex;
3159                        if (commit_tree("", 0, the_hash_algo->empty_tree,
3160                                        NULL, &opts->squash_onto,
3161                                        NULL, NULL))
3162                                return error(_("writing fake root commit"));
3163                        opts->have_squash_onto = 1;
3164                        hex = oid_to_hex(&opts->squash_onto);
3165                        if (write_message(hex, strlen(hex),
3166                                          rebase_path_squash_onto(), 0))
3167                                return error(_("writing squash-onto"));
3168                }
3169                oidcpy(&oid, &opts->squash_onto);
3170        } else {
3171                int i;
3172
3173                /* Determine the length of the label */
3174                for (i = 0; i < len; i++)
3175                        if (isspace(name[i]))
3176                                break;
3177                len = i;
3178
3179                strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
3180                if (get_oid(ref_name.buf, &oid) &&
3181                    get_oid(ref_name.buf + strlen("refs/rewritten/"), &oid)) {
3182                        error(_("could not read '%s'"), ref_name.buf);
3183                        rollback_lock_file(&lock);
3184                        strbuf_release(&ref_name);
3185                        return -1;
3186                }
3187        }
3188
3189        memset(&unpack_tree_opts, 0, sizeof(unpack_tree_opts));
3190        setup_unpack_trees_porcelain(&unpack_tree_opts, "reset");
3191        unpack_tree_opts.head_idx = 1;
3192        unpack_tree_opts.src_index = r->index;
3193        unpack_tree_opts.dst_index = r->index;
3194        unpack_tree_opts.fn = oneway_merge;
3195        unpack_tree_opts.merge = 1;
3196        unpack_tree_opts.update = 1;
3197
3198        if (repo_read_index_unmerged(r)) {
3199                rollback_lock_file(&lock);
3200                strbuf_release(&ref_name);
3201                return error_resolve_conflict(_(action_name(opts)));
3202        }
3203
3204        if (!fill_tree_descriptor(&desc, &oid)) {
3205                error(_("failed to find tree of %s"), oid_to_hex(&oid));
3206                rollback_lock_file(&lock);
3207                free((void *)desc.buffer);
3208                strbuf_release(&ref_name);
3209                return -1;
3210        }
3211
3212        if (unpack_trees(1, &desc, &unpack_tree_opts)) {
3213                rollback_lock_file(&lock);
3214                free((void *)desc.buffer);
3215                strbuf_release(&ref_name);
3216                return -1;
3217        }
3218
3219        tree = parse_tree_indirect(&oid);
3220        prime_cache_tree(r, r->index, tree);
3221
3222        if (write_locked_index(r->index, &lock, COMMIT_LOCK) < 0)
3223                ret = error(_("could not write index"));
3224        free((void *)desc.buffer);
3225
3226        if (!ret)
3227                ret = update_ref(reflog_message(opts, "reset", "'%.*s'",
3228                                                len, name), "HEAD", &oid,
3229                                 NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3230
3231        strbuf_release(&ref_name);
3232        return ret;
3233}
3234
3235static struct commit *lookup_label(const char *label, int len,
3236                                   struct strbuf *buf)
3237{
3238        struct commit *commit;
3239
3240        strbuf_reset(buf);
3241        strbuf_addf(buf, "refs/rewritten/%.*s", len, label);
3242        commit = lookup_commit_reference_by_name(buf->buf);
3243        if (!commit) {
3244                /* fall back to non-rewritten ref or commit */
3245                strbuf_splice(buf, 0, strlen("refs/rewritten/"), "", 0);
3246                commit = lookup_commit_reference_by_name(buf->buf);
3247        }
3248
3249        if (!commit)
3250                error(_("could not resolve '%s'"), buf->buf);
3251
3252        return commit;
3253}
3254
3255static int do_merge(struct repository *r,
3256                    struct commit *commit,
3257                    const char *arg, int arg_len,
3258                    int flags, struct replay_opts *opts)
3259{
3260        int run_commit_flags = (flags & TODO_EDIT_MERGE_MSG) ?
3261                EDIT_MSG | VERIFY_MSG : 0;
3262        struct strbuf ref_name = STRBUF_INIT;
3263        struct commit *head_commit, *merge_commit, *i;
3264        struct commit_list *bases, *j, *reversed = NULL;
3265        struct commit_list *to_merge = NULL, **tail = &to_merge;
3266        struct merge_options o;
3267        int merge_arg_len, oneline_offset, can_fast_forward, ret, k;
3268        static struct lock_file lock;
3269        const char *p;
3270
3271        if (repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0) {
3272                ret = -1;
3273                goto leave_merge;
3274        }
3275
3276        head_commit = lookup_commit_reference_by_name("HEAD");
3277        if (!head_commit) {
3278                ret = error(_("cannot merge without a current revision"));
3279                goto leave_merge;
3280        }
3281
3282        /*
3283         * For octopus merges, the arg starts with the list of revisions to be
3284         * merged. The list is optionally followed by '#' and the oneline.
3285         */
3286        merge_arg_len = oneline_offset = arg_len;
3287        for (p = arg; p - arg < arg_len; p += strspn(p, " \t\n")) {
3288                if (!*p)
3289                        break;
3290                if (*p == '#' && (!p[1] || isspace(p[1]))) {
3291                        p += 1 + strspn(p + 1, " \t\n");
3292                        oneline_offset = p - arg;
3293                        break;
3294                }
3295                k = strcspn(p, " \t\n");
3296                if (!k)
3297                        continue;
3298                merge_commit = lookup_label(p, k, &ref_name);
3299                if (!merge_commit) {
3300                        ret = error(_("unable to parse '%.*s'"), k, p);
3301                        goto leave_merge;
3302                }
3303                tail = &commit_list_insert(merge_commit, tail)->next;
3304                p += k;
3305                merge_arg_len = p - arg;
3306        }
3307
3308        if (!to_merge) {
3309                ret = error(_("nothing to merge: '%.*s'"), arg_len, arg);
3310                goto leave_merge;
3311        }
3312
3313        if (opts->have_squash_onto &&
3314            oideq(&head_commit->object.oid, &opts->squash_onto)) {
3315                /*
3316                 * When the user tells us to "merge" something into a
3317                 * "[new root]", let's simply fast-forward to the merge head.
3318                 */
3319                rollback_lock_file(&lock);
3320                if (to_merge->next)
3321                        ret = error(_("octopus merge cannot be executed on "
3322                                      "top of a [new root]"));
3323                else
3324                        ret = fast_forward_to(r, &to_merge->item->object.oid,
3325                                              &head_commit->object.oid, 0,
3326                                              opts);
3327                goto leave_merge;
3328        }
3329
3330        if (commit) {
3331                const char *message = get_commit_buffer(commit, NULL);
3332                const char *body;
3333                int len;
3334
3335                if (!message) {
3336                        ret = error(_("could not get commit message of '%s'"),
3337                                    oid_to_hex(&commit->object.oid));
3338                        goto leave_merge;
3339                }
3340                write_author_script(message);
3341                find_commit_subject(message, &body);
3342                len = strlen(body);
3343                ret = write_message(body, len, git_path_merge_msg(r), 0);
3344                unuse_commit_buffer(commit, message);
3345                if (ret) {
3346                        error_errno(_("could not write '%s'"),
3347                                    git_path_merge_msg(r));
3348                        goto leave_merge;
3349                }
3350        } else {
3351                struct strbuf buf = STRBUF_INIT;
3352                int len;
3353
3354                strbuf_addf(&buf, "author %s", git_author_info(0));
3355                write_author_script(buf.buf);
3356                strbuf_reset(&buf);
3357
3358                if (oneline_offset < arg_len) {
3359                        p = arg + oneline_offset;
3360                        len = arg_len - oneline_offset;
3361                } else {
3362                        strbuf_addf(&buf, "Merge %s '%.*s'",
3363                                    to_merge->next ? "branches" : "branch",
3364                                    merge_arg_len, arg);
3365                        p = buf.buf;
3366                        len = buf.len;
3367                }
3368
3369                ret = write_message(p, len, git_path_merge_msg(r), 0);
3370                strbuf_release(&buf);
3371                if (ret) {
3372                        error_errno(_("could not write '%s'"),
3373                                    git_path_merge_msg(r));
3374                        goto leave_merge;
3375                }
3376        }
3377
3378        /*
3379         * If HEAD is not identical to the first parent of the original merge
3380         * commit, we cannot fast-forward.
3381         */
3382        can_fast_forward = opts->allow_ff && commit && commit->parents &&
3383                oideq(&commit->parents->item->object.oid,
3384                      &head_commit->object.oid);
3385
3386        /*
3387         * If any merge head is different from the original one, we cannot
3388         * fast-forward.
3389         */
3390        if (can_fast_forward) {
3391                struct commit_list *p = commit->parents->next;
3392
3393                for (j = to_merge; j && p; j = j->next, p = p->next)
3394                        if (!oideq(&j->item->object.oid,
3395                                   &p->item->object.oid)) {
3396                                can_fast_forward = 0;
3397                                break;
3398                        }
3399                /*
3400                 * If the number of merge heads differs from the original merge
3401                 * commit, we cannot fast-forward.
3402                 */
3403                if (j || p)
3404                        can_fast_forward = 0;
3405        }
3406
3407        if (can_fast_forward) {
3408                rollback_lock_file(&lock);
3409                ret = fast_forward_to(r, &commit->object.oid,
3410                                      &head_commit->object.oid, 0, opts);
3411                goto leave_merge;
3412        }
3413
3414        if (to_merge->next) {
3415                /* Octopus merge */
3416                struct child_process cmd = CHILD_PROCESS_INIT;
3417
3418                if (read_env_script(&cmd.env_array)) {
3419                        const char *gpg_opt = gpg_sign_opt_quoted(opts);
3420
3421                        ret = error(_(staged_changes_advice), gpg_opt, gpg_opt);
3422                        goto leave_merge;
3423                }
3424
3425                cmd.git_cmd = 1;
3426                argv_array_push(&cmd.args, "merge");
3427                argv_array_push(&cmd.args, "-s");
3428                argv_array_push(&cmd.args, "octopus");
3429                argv_array_push(&cmd.args, "--no-edit");
3430                argv_array_push(&cmd.args, "--no-ff");
3431                argv_array_push(&cmd.args, "--no-log");
3432                argv_array_push(&cmd.args, "--no-stat");
3433                argv_array_push(&cmd.args, "-F");
3434                argv_array_push(&cmd.args, git_path_merge_msg(r));
3435                if (opts->gpg_sign)
3436                        argv_array_push(&cmd.args, opts->gpg_sign);
3437
3438                /* Add the tips to be merged */
3439                for (j = to_merge; j; j = j->next)
3440                        argv_array_push(&cmd.args,
3441                                        oid_to_hex(&j->item->object.oid));
3442
3443                strbuf_release(&ref_name);
3444                unlink(git_path_cherry_pick_head(r));
3445                rollback_lock_file(&lock);
3446
3447                rollback_lock_file(&lock);
3448                ret = run_command(&cmd);
3449
3450                /* force re-reading of the cache */
3451                if (!ret && (discard_index(r->index) < 0 ||
3452                             repo_read_index(r) < 0))
3453                        ret = error(_("could not read index"));
3454                goto leave_merge;
3455        }
3456
3457        merge_commit = to_merge->item;
3458        bases = get_merge_bases(head_commit, merge_commit);
3459        if (bases && oideq(&merge_commit->object.oid,
3460                           &bases->item->object.oid)) {
3461                ret = 0;
3462                /* skip merging an ancestor of HEAD */
3463                goto leave_merge;
3464        }
3465
3466        write_message(oid_to_hex(&merge_commit->object.oid), GIT_SHA1_HEXSZ,
3467                      git_path_merge_head(r), 0);
3468        write_message("no-ff", 5, git_path_merge_mode(r), 0);
3469
3470        for (j = bases; j; j = j->next)
3471                commit_list_insert(j->item, &reversed);
3472        free_commit_list(bases);
3473
3474        repo_read_index(r);
3475        init_merge_options(&o, r);
3476        o.branch1 = "HEAD";
3477        o.branch2 = ref_name.buf;
3478        o.buffer_output = 2;
3479
3480        ret = merge_recursive(&o, head_commit, merge_commit, reversed, &i);
3481        if (ret <= 0)
3482                fputs(o.obuf.buf, stdout);
3483        strbuf_release(&o.obuf);
3484        if (ret < 0) {
3485                error(_("could not even attempt to merge '%.*s'"),
3486                      merge_arg_len, arg);
3487                goto leave_merge;
3488        }
3489        /*
3490         * The return value of merge_recursive() is 1 on clean, and 0 on
3491         * unclean merge.
3492         *
3493         * Let's reverse that, so that do_merge() returns 0 upon success and
3494         * 1 upon failed merge (keeping the return value -1 for the cases where
3495         * we will want to reschedule the `merge` command).
3496         */
3497        ret = !ret;
3498
3499        if (r->index->cache_changed &&
3500            write_locked_index(r->index, &lock, COMMIT_LOCK)) {
3501                ret = error(_("merge: Unable to write new index file"));
3502                goto leave_merge;
3503        }
3504
3505        rollback_lock_file(&lock);
3506        if (ret)
3507                repo_rerere(r, opts->allow_rerere_auto);
3508        else
3509                /*
3510                 * In case of problems, we now want to return a positive
3511                 * value (a negative one would indicate that the `merge`
3512                 * command needs to be rescheduled).
3513                 */
3514                ret = !!run_git_commit(r, git_path_merge_msg(r), opts,
3515                                       run_commit_flags);
3516
3517leave_merge:
3518        strbuf_release(&ref_name);
3519        rollback_lock_file(&lock);
3520        free_commit_list(to_merge);
3521        return ret;
3522}
3523
3524static int is_final_fixup(struct todo_list *todo_list)
3525{
3526        int i = todo_list->current;
3527
3528        if (!is_fixup(todo_list->items[i].command))
3529                return 0;
3530
3531        while (++i < todo_list->nr)
3532                if (is_fixup(todo_list->items[i].command))
3533                        return 0;
3534                else if (!is_noop(todo_list->items[i].command))
3535                        break;
3536        return 1;
3537}
3538
3539static enum todo_command peek_command(struct todo_list *todo_list, int offset)
3540{
3541        int i;
3542
3543        for (i = todo_list->current + offset; i < todo_list->nr; i++)
3544                if (!is_noop(todo_list->items[i].command))
3545                        return todo_list->items[i].command;
3546
3547        return -1;
3548}
3549
3550static int apply_autostash(struct replay_opts *opts)
3551{
3552        struct strbuf stash_sha1 = STRBUF_INIT;
3553        struct child_process child = CHILD_PROCESS_INIT;
3554        int ret = 0;
3555
3556        if (!read_oneliner(&stash_sha1, rebase_path_autostash(), 1)) {
3557                strbuf_release(&stash_sha1);
3558                return 0;
3559        }
3560        strbuf_trim(&stash_sha1);
3561
3562        child.git_cmd = 1;
3563        child.no_stdout = 1;
3564        child.no_stderr = 1;
3565        argv_array_push(&child.args, "stash");
3566        argv_array_push(&child.args, "apply");
3567        argv_array_push(&child.args, stash_sha1.buf);
3568        if (!run_command(&child))
3569                fprintf(stderr, _("Applied autostash.\n"));
3570        else {
3571                struct child_process store = CHILD_PROCESS_INIT;
3572
3573                store.git_cmd = 1;
3574                argv_array_push(&store.args, "stash");
3575                argv_array_push(&store.args, "store");
3576                argv_array_push(&store.args, "-m");
3577                argv_array_push(&store.args, "autostash");
3578                argv_array_push(&store.args, "-q");
3579                argv_array_push(&store.args, stash_sha1.buf);
3580                if (run_command(&store))
3581                        ret = error(_("cannot store %s"), stash_sha1.buf);
3582                else
3583                        fprintf(stderr,
3584                                _("Applying autostash resulted in conflicts.\n"
3585                                  "Your changes are safe in the stash.\n"
3586                                  "You can run \"git stash pop\" or"
3587                                  " \"git stash drop\" at any time.\n"));
3588        }
3589
3590        strbuf_release(&stash_sha1);
3591        return ret;
3592}
3593
3594static const char *reflog_message(struct replay_opts *opts,
3595        const char *sub_action, const char *fmt, ...)
3596{
3597        va_list ap;
3598        static struct strbuf buf = STRBUF_INIT;
3599
3600        va_start(ap, fmt);
3601        strbuf_reset(&buf);
3602        strbuf_addstr(&buf, action_name(opts));
3603        if (sub_action)
3604                strbuf_addf(&buf, " (%s)", sub_action);
3605        if (fmt) {
3606                strbuf_addstr(&buf, ": ");
3607                strbuf_vaddf(&buf, fmt, ap);
3608        }
3609        va_end(ap);
3610
3611        return buf.buf;
3612}
3613
3614static int run_git_checkout(struct repository *r, struct replay_opts *opts,
3615                            const char *commit, const char *action)
3616{
3617        struct child_process cmd = CHILD_PROCESS_INIT;
3618        int ret;
3619
3620        cmd.git_cmd = 1;
3621
3622        argv_array_push(&cmd.args, "checkout");
3623        argv_array_push(&cmd.args, commit);
3624        argv_array_pushf(&cmd.env_array, GIT_REFLOG_ACTION "=%s", action);
3625
3626        if (opts->verbose)
3627                ret = run_command(&cmd);
3628        else
3629                ret = run_command_silent_on_success(&cmd);
3630
3631        if (!ret)
3632                discard_index(r->index);
3633
3634        return ret;
3635}
3636
3637int prepare_branch_to_be_rebased(struct repository *r, struct replay_opts *opts,
3638                                 const char *commit)
3639{
3640        const char *action;
3641
3642        if (commit && *commit) {
3643                action = reflog_message(opts, "start", "checkout %s", commit);
3644                if (run_git_checkout(r, opts, commit, action))
3645                        return error(_("could not checkout %s"), commit);
3646        }
3647
3648        return 0;
3649}
3650
3651static int checkout_onto(struct repository *r, struct replay_opts *opts,
3652                         const char *onto_name, const struct object_id *onto,
3653                         const char *orig_head)
3654{
3655        struct object_id oid;
3656        const char *action = reflog_message(opts, "start", "checkout %s", onto_name);
3657
3658        if (get_oid(orig_head, &oid))
3659                return error(_("%s: not a valid OID"), orig_head);
3660
3661        if (run_git_checkout(r, opts, oid_to_hex(onto), action)) {
3662                apply_autostash(opts);
3663                sequencer_remove_state(opts);
3664                return error(_("could not detach HEAD"));
3665        }
3666
3667        return update_ref(NULL, "ORIG_HEAD", &oid, NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3668}
3669
3670static int stopped_at_head(struct repository *r)
3671{
3672        struct object_id head;
3673        struct commit *commit;
3674        struct commit_message message;
3675
3676        if (get_oid("HEAD", &head) ||
3677            !(commit = lookup_commit(r, &head)) ||
3678            parse_commit(commit) || get_message(commit, &message))
3679                fprintf(stderr, _("Stopped at HEAD\n"));
3680        else {
3681                fprintf(stderr, _("Stopped at %s\n"), message.label);
3682                free_message(commit, &message);
3683        }
3684        return 0;
3685
3686}
3687
3688static const char rescheduled_advice[] =
3689N_("Could not execute the todo command\n"
3690"\n"
3691"    %.*s"
3692"\n"
3693"It has been rescheduled; To edit the command before continuing, please\n"
3694"edit the todo list first:\n"
3695"\n"
3696"    git rebase --edit-todo\n"
3697"    git rebase --continue\n");
3698
3699static int pick_commits(struct repository *r,
3700                        struct todo_list *todo_list,
3701                        struct replay_opts *opts)
3702{
3703        int res = 0, reschedule = 0;
3704
3705        setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
3706        if (opts->allow_ff)
3707                assert(!(opts->signoff || opts->no_commit ||
3708                                opts->record_origin || opts->edit));
3709        if (read_and_refresh_cache(r, opts))
3710                return -1;
3711
3712        while (todo_list->current < todo_list->nr) {
3713                struct todo_item *item = todo_list->items + todo_list->current;
3714                const char *arg = todo_item_get_arg(todo_list, item);
3715
3716                if (save_todo(todo_list, opts))
3717                        return -1;
3718                if (is_rebase_i(opts)) {
3719                        if (item->command != TODO_COMMENT) {
3720                                FILE *f = fopen(rebase_path_msgnum(), "w");
3721
3722                                todo_list->done_nr++;
3723
3724                                if (f) {
3725                                        fprintf(f, "%d\n", todo_list->done_nr);
3726                                        fclose(f);
3727                                }
3728                                if (!opts->quiet)
3729                                        fprintf(stderr, "Rebasing (%d/%d)%s",
3730                                                todo_list->done_nr,
3731                                                todo_list->total_nr,
3732                                                opts->verbose ? "\n" : "\r");
3733                        }
3734                        unlink(rebase_path_message());
3735                        unlink(rebase_path_author_script());
3736                        unlink(rebase_path_stopped_sha());
3737                        unlink(rebase_path_amend());
3738                        unlink(git_path_merge_head(the_repository));
3739                        delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
3740
3741                        if (item->command == TODO_BREAK)
3742                                return stopped_at_head(r);
3743                }
3744                if (item->command <= TODO_SQUASH) {
3745                        if (is_rebase_i(opts))
3746                                setenv("GIT_REFLOG_ACTION", reflog_message(opts,
3747                                        command_to_string(item->command), NULL),
3748                                        1);
3749                        res = do_pick_commit(r, item->command, item->commit,
3750                                        opts, is_final_fixup(todo_list));
3751                        if (is_rebase_i(opts) && res < 0) {
3752                                /* Reschedule */
3753                                advise(_(rescheduled_advice),
3754                                       get_item_line_length(todo_list,
3755                                                            todo_list->current),
3756                                       get_item_line(todo_list,
3757                                                     todo_list->current));
3758                                todo_list->current--;
3759                                if (save_todo(todo_list, opts))
3760                                        return -1;
3761                        }
3762                        if (item->command == TODO_EDIT) {
3763                                struct commit *commit = item->commit;
3764                                if (!res)
3765                                        fprintf(stderr,
3766                                                _("Stopped at %s...  %.*s\n"),
3767                                                short_commit_name(commit),
3768                                                item->arg_len, arg);
3769                                return error_with_patch(r, commit,
3770                                        arg, item->arg_len, opts, res, !res);
3771                        }
3772                        if (is_rebase_i(opts) && !res)
3773                                record_in_rewritten(&item->commit->object.oid,
3774                                        peek_command(todo_list, 1));
3775                        if (res && is_fixup(item->command)) {
3776                                if (res == 1)
3777                                        intend_to_amend();
3778                                return error_failed_squash(r, item->commit, opts,
3779                                        item->arg_len, arg);
3780                        } else if (res && is_rebase_i(opts) && item->commit) {
3781                                int to_amend = 0;
3782                                struct object_id oid;
3783
3784                                /*
3785                                 * If we are rewording and have either
3786                                 * fast-forwarded already, or are about to
3787                                 * create a new root commit, we want to amend,
3788                                 * otherwise we do not.
3789                                 */
3790                                if (item->command == TODO_REWORD &&
3791                                    !get_oid("HEAD", &oid) &&
3792                                    (oideq(&item->commit->object.oid, &oid) ||
3793                                     (opts->have_squash_onto &&
3794                                      oideq(&opts->squash_onto, &oid))))
3795                                        to_amend = 1;
3796
3797                                return res | error_with_patch(r, item->commit,
3798                                                arg, item->arg_len, opts,
3799                                                res, to_amend);
3800                        }
3801                } else if (item->command == TODO_EXEC) {
3802                        char *end_of_arg = (char *)(arg + item->arg_len);
3803                        int saved = *end_of_arg;
3804                        struct stat st;
3805
3806                        *end_of_arg = '\0';
3807                        res = do_exec(r, arg);
3808                        *end_of_arg = saved;
3809
3810                        if (res) {
3811                                if (opts->reschedule_failed_exec)
3812                                        reschedule = 1;
3813                        } else if (stat(get_todo_path(opts), &st))
3814                                res = error_errno(_("could not stat '%s'"),
3815                                                  get_todo_path(opts));
3816                        else if (match_stat_data(&todo_list->stat, &st)) {
3817                                /* Reread the todo file if it has changed. */
3818                                todo_list_release(todo_list);
3819                                if (read_populate_todo(r, todo_list, opts))
3820                                        res = -1; /* message was printed */
3821                                /* `current` will be incremented below */
3822                                todo_list->current = -1;
3823                        }
3824                } else if (item->command == TODO_LABEL) {
3825                        if ((res = do_label(r, arg, item->arg_len)))
3826                                reschedule = 1;
3827                } else if (item->command == TODO_RESET) {
3828                        if ((res = do_reset(r, arg, item->arg_len, opts)))
3829                                reschedule = 1;
3830                } else if (item->command == TODO_MERGE) {
3831                        if ((res = do_merge(r, item->commit,
3832                                            arg, item->arg_len,
3833                                            item->flags, opts)) < 0)
3834                                reschedule = 1;
3835                        else if (item->commit)
3836                                record_in_rewritten(&item->commit->object.oid,
3837                                                    peek_command(todo_list, 1));
3838                        if (res > 0)
3839                                /* failed with merge conflicts */
3840                                return error_with_patch(r, item->commit,
3841                                                        arg, item->arg_len,
3842                                                        opts, res, 0);
3843                } else if (!is_noop(item->command))
3844                        return error(_("unknown command %d"), item->command);
3845
3846                if (reschedule) {
3847                        advise(_(rescheduled_advice),
3848                               get_item_line_length(todo_list,
3849                                                    todo_list->current),
3850                               get_item_line(todo_list, todo_list->current));
3851                        todo_list->current--;
3852                        if (save_todo(todo_list, opts))
3853                                return -1;
3854                        if (item->commit)
3855                                return error_with_patch(r,
3856                                                        item->commit,
3857                                                        arg, item->arg_len,
3858                                                        opts, res, 0);
3859                }
3860
3861                todo_list->current++;
3862                if (res)
3863                        return res;
3864        }
3865
3866        if (is_rebase_i(opts)) {
3867                struct strbuf head_ref = STRBUF_INIT, buf = STRBUF_INIT;
3868                struct stat st;
3869
3870                /* Stopped in the middle, as planned? */
3871                if (todo_list->current < todo_list->nr)
3872                        return 0;
3873
3874                if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
3875                                starts_with(head_ref.buf, "refs/")) {
3876                        const char *msg;
3877                        struct object_id head, orig;
3878                        int res;
3879
3880                        if (get_oid("HEAD", &head)) {
3881                                res = error(_("cannot read HEAD"));
3882cleanup_head_ref:
3883                                strbuf_release(&head_ref);
3884                                strbuf_release(&buf);
3885                                return res;
3886                        }
3887                        if (!read_oneliner(&buf, rebase_path_orig_head(), 0) ||
3888                                        get_oid_hex(buf.buf, &orig)) {
3889                                res = error(_("could not read orig-head"));
3890                                goto cleanup_head_ref;
3891                        }
3892                        strbuf_reset(&buf);
3893                        if (!read_oneliner(&buf, rebase_path_onto(), 0)) {
3894                                res = error(_("could not read 'onto'"));
3895                                goto cleanup_head_ref;
3896                        }
3897                        msg = reflog_message(opts, "finish", "%s onto %s",
3898                                head_ref.buf, buf.buf);
3899                        if (update_ref(msg, head_ref.buf, &head, &orig,
3900                                       REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR)) {
3901                                res = error(_("could not update %s"),
3902                                        head_ref.buf);
3903                                goto cleanup_head_ref;
3904                        }
3905                        msg = reflog_message(opts, "finish", "returning to %s",
3906                                head_ref.buf);
3907                        if (create_symref("HEAD", head_ref.buf, msg)) {
3908                                res = error(_("could not update HEAD to %s"),
3909                                        head_ref.buf);
3910                                goto cleanup_head_ref;
3911                        }
3912                        strbuf_reset(&buf);
3913                }
3914
3915                if (opts->verbose) {
3916                        struct rev_info log_tree_opt;
3917                        struct object_id orig, head;
3918
3919                        memset(&log_tree_opt, 0, sizeof(log_tree_opt));
3920                        repo_init_revisions(r, &log_tree_opt, NULL);
3921                        log_tree_opt.diff = 1;
3922                        log_tree_opt.diffopt.output_format =
3923                                DIFF_FORMAT_DIFFSTAT;
3924                        log_tree_opt.disable_stdin = 1;
3925
3926                        if (read_oneliner(&buf, rebase_path_orig_head(), 0) &&
3927                            !get_oid(buf.buf, &orig) &&
3928                            !get_oid("HEAD", &head)) {
3929                                diff_tree_oid(&orig, &head, "",
3930                                              &log_tree_opt.diffopt);
3931                                log_tree_diff_flush(&log_tree_opt);
3932                        }
3933                }
3934                flush_rewritten_pending();
3935                if (!stat(rebase_path_rewritten_list(), &st) &&
3936                                st.st_size > 0) {
3937                        struct child_process child = CHILD_PROCESS_INIT;
3938                        const char *post_rewrite_hook =
3939                                find_hook("post-rewrite");
3940
3941                        child.in = open(rebase_path_rewritten_list(), O_RDONLY);
3942                        child.git_cmd = 1;
3943                        argv_array_push(&child.args, "notes");
3944                        argv_array_push(&child.args, "copy");
3945                        argv_array_push(&child.args, "--for-rewrite=rebase");
3946                        /* we don't care if this copying failed */
3947                        run_command(&child);
3948
3949                        if (post_rewrite_hook) {
3950                                struct child_process hook = CHILD_PROCESS_INIT;
3951
3952                                hook.in = open(rebase_path_rewritten_list(),
3953                                        O_RDONLY);
3954                                hook.stdout_to_stderr = 1;
3955                                hook.trace2_hook_name = "post-rewrite";
3956                                argv_array_push(&hook.args, post_rewrite_hook);
3957                                argv_array_push(&hook.args, "rebase");
3958                                /* we don't care if this hook failed */
3959                                run_command(&hook);
3960                        }
3961                }
3962                apply_autostash(opts);
3963
3964                if (!opts->quiet)
3965                        fprintf(stderr,
3966                                "Successfully rebased and updated %s.\n",
3967                                head_ref.buf);
3968
3969                strbuf_release(&buf);
3970                strbuf_release(&head_ref);
3971        }
3972
3973        /*
3974         * Sequence of picks finished successfully; cleanup by
3975         * removing the .git/sequencer directory
3976         */
3977        return sequencer_remove_state(opts);
3978}
3979
3980static int continue_single_pick(struct repository *r)
3981{
3982        const char *argv[] = { "commit", NULL };
3983
3984        if (!file_exists(git_path_cherry_pick_head(r)) &&
3985            !file_exists(git_path_revert_head(r)))
3986                return error(_("no cherry-pick or revert in progress"));
3987        return run_command_v_opt(argv, RUN_GIT_CMD);
3988}
3989
3990static int commit_staged_changes(struct repository *r,
3991                                 struct replay_opts *opts,
3992                                 struct todo_list *todo_list)
3993{
3994        unsigned int flags = ALLOW_EMPTY | EDIT_MSG;
3995        unsigned int final_fixup = 0, is_clean;
3996
3997        if (has_unstaged_changes(r, 1))
3998                return error(_("cannot rebase: You have unstaged changes."));
3999
4000        is_clean = !has_uncommitted_changes(r, 0);
4001
4002        if (file_exists(rebase_path_amend())) {
4003                struct strbuf rev = STRBUF_INIT;
4004                struct object_id head, to_amend;
4005
4006                if (get_oid("HEAD", &head))
4007                        return error(_("cannot amend non-existing commit"));
4008                if (!read_oneliner(&rev, rebase_path_amend(), 0))
4009                        return error(_("invalid file: '%s'"), rebase_path_amend());
4010                if (get_oid_hex(rev.buf, &to_amend))
4011                        return error(_("invalid contents: '%s'"),
4012                                rebase_path_amend());
4013                if (!is_clean && !oideq(&head, &to_amend))
4014                        return error(_("\nYou have uncommitted changes in your "
4015                                       "working tree. Please, commit them\n"
4016                                       "first and then run 'git rebase "
4017                                       "--continue' again."));
4018                /*
4019                 * When skipping a failed fixup/squash, we need to edit the
4020                 * commit message, the current fixup list and count, and if it
4021                 * was the last fixup/squash in the chain, we need to clean up
4022                 * the commit message and if there was a squash, let the user
4023                 * edit it.
4024                 */
4025                if (!is_clean || !opts->current_fixup_count)
4026                        ; /* this is not the final fixup */
4027                else if (!oideq(&head, &to_amend) ||
4028                         !file_exists(rebase_path_stopped_sha())) {
4029                        /* was a final fixup or squash done manually? */
4030                        if (!is_fixup(peek_command(todo_list, 0))) {
4031                                unlink(rebase_path_fixup_msg());
4032                                unlink(rebase_path_squash_msg());
4033                                unlink(rebase_path_current_fixups());
4034                                strbuf_reset(&opts->current_fixups);
4035                                opts->current_fixup_count = 0;
4036                        }
4037                } else {
4038                        /* we are in a fixup/squash chain */
4039                        const char *p = opts->current_fixups.buf;
4040                        int len = opts->current_fixups.len;
4041
4042                        opts->current_fixup_count--;
4043                        if (!len)
4044                                BUG("Incorrect current_fixups:\n%s", p);
4045                        while (len && p[len - 1] != '\n')
4046                                len--;
4047                        strbuf_setlen(&opts->current_fixups, len);
4048                        if (write_message(p, len, rebase_path_current_fixups(),
4049                                          0) < 0)
4050                                return error(_("could not write file: '%s'"),
4051                                             rebase_path_current_fixups());
4052
4053                        /*
4054                         * If a fixup/squash in a fixup/squash chain failed, the
4055                         * commit message is already correct, no need to commit
4056                         * it again.
4057                         *
4058                         * Only if it is the final command in the fixup/squash
4059                         * chain, and only if the chain is longer than a single
4060                         * fixup/squash command (which was just skipped), do we
4061                         * actually need to re-commit with a cleaned up commit
4062                         * message.
4063                         */
4064                        if (opts->current_fixup_count > 0 &&
4065                            !is_fixup(peek_command(todo_list, 0))) {
4066                                final_fixup = 1;
4067                                /*
4068                                 * If there was not a single "squash" in the
4069                                 * chain, we only need to clean up the commit
4070                                 * message, no need to bother the user with
4071                                 * opening the commit message in the editor.
4072                                 */
4073                                if (!starts_with(p, "squash ") &&
4074                                    !strstr(p, "\nsquash "))
4075                                        flags = (flags & ~EDIT_MSG) | CLEANUP_MSG;
4076                        } else if (is_fixup(peek_command(todo_list, 0))) {
4077                                /*
4078                                 * We need to update the squash message to skip
4079                                 * the latest commit message.
4080                                 */
4081                                struct commit *commit;
4082                                const char *path = rebase_path_squash_msg();
4083
4084                                if (parse_head(r, &commit) ||
4085                                    !(p = get_commit_buffer(commit, NULL)) ||
4086                                    write_message(p, strlen(p), path, 0)) {
4087                                        unuse_commit_buffer(commit, p);
4088                                        return error(_("could not write file: "
4089                                                       "'%s'"), path);
4090                                }
4091                                unuse_commit_buffer(commit, p);
4092                        }
4093                }
4094
4095                strbuf_release(&rev);
4096                flags |= AMEND_MSG;
4097        }
4098
4099        if (is_clean) {
4100                const char *cherry_pick_head = git_path_cherry_pick_head(r);
4101
4102                if (file_exists(cherry_pick_head) && unlink(cherry_pick_head))
4103                        return error(_("could not remove CHERRY_PICK_HEAD"));
4104                if (!final_fixup)
4105                        return 0;
4106        }
4107
4108        if (run_git_commit(r, final_fixup ? NULL : rebase_path_message(),
4109                           opts, flags))
4110                return error(_("could not commit staged changes."));
4111        unlink(rebase_path_amend());
4112        unlink(git_path_merge_head(the_repository));
4113        if (final_fixup) {
4114                unlink(rebase_path_fixup_msg());
4115                unlink(rebase_path_squash_msg());
4116        }
4117        if (opts->current_fixup_count > 0) {
4118                /*
4119                 * Whether final fixup or not, we just cleaned up the commit
4120                 * message...
4121                 */
4122                unlink(rebase_path_current_fixups());
4123                strbuf_reset(&opts->current_fixups);
4124                opts->current_fixup_count = 0;
4125        }
4126        return 0;
4127}
4128
4129int sequencer_continue(struct repository *r, struct replay_opts *opts)
4130{
4131        struct todo_list todo_list = TODO_LIST_INIT;
4132        int res;
4133
4134        if (read_and_refresh_cache(r, opts))
4135                return -1;
4136
4137        if (read_populate_opts(opts))
4138                return -1;
4139        if (is_rebase_i(opts)) {
4140                if ((res = read_populate_todo(r, &todo_list, opts)))
4141                        goto release_todo_list;
4142                if (commit_staged_changes(r, opts, &todo_list))
4143                        return -1;
4144        } else if (!file_exists(get_todo_path(opts)))
4145                return continue_single_pick(r);
4146        else if ((res = read_populate_todo(r, &todo_list, opts)))
4147                goto release_todo_list;
4148
4149        if (!is_rebase_i(opts)) {
4150                /* Verify that the conflict has been resolved */
4151                if (file_exists(git_path_cherry_pick_head(r)) ||
4152                    file_exists(git_path_revert_head(r))) {
4153                        res = continue_single_pick(r);
4154                        if (res)
4155                                goto release_todo_list;
4156                }
4157                if (index_differs_from(r, "HEAD", NULL, 0)) {
4158                        res = error_dirty_index(r, opts);
4159                        goto release_todo_list;
4160                }
4161                todo_list.current++;
4162        } else if (file_exists(rebase_path_stopped_sha())) {
4163                struct strbuf buf = STRBUF_INIT;
4164                struct object_id oid;
4165
4166                if (read_oneliner(&buf, rebase_path_stopped_sha(), 1) &&
4167                    !get_oid_committish(buf.buf, &oid))
4168                        record_in_rewritten(&oid, peek_command(&todo_list, 0));
4169                strbuf_release(&buf);
4170        }
4171
4172        res = pick_commits(r, &todo_list, opts);
4173release_todo_list:
4174        todo_list_release(&todo_list);
4175        return res;
4176}
4177
4178static int single_pick(struct repository *r,
4179                       struct commit *cmit,
4180                       struct replay_opts *opts)
4181{
4182        setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
4183        return do_pick_commit(r, opts->action == REPLAY_PICK ?
4184                TODO_PICK : TODO_REVERT, cmit, opts, 0);
4185}
4186
4187int sequencer_pick_revisions(struct repository *r,
4188                             struct replay_opts *opts)
4189{
4190        struct todo_list todo_list = TODO_LIST_INIT;
4191        struct object_id oid;
4192        int i, res;
4193
4194        assert(opts->revs);
4195        if (read_and_refresh_cache(r, opts))
4196                return -1;
4197
4198        for (i = 0; i < opts->revs->pending.nr; i++) {
4199                struct object_id oid;
4200                const char *name = opts->revs->pending.objects[i].name;
4201
4202                /* This happens when using --stdin. */
4203                if (!strlen(name))
4204                        continue;
4205
4206                if (!get_oid(name, &oid)) {
4207                        if (!lookup_commit_reference_gently(r, &oid, 1)) {
4208                                enum object_type type = oid_object_info(r,
4209                                                                        &oid,
4210                                                                        NULL);
4211                                return error(_("%s: can't cherry-pick a %s"),
4212                                        name, type_name(type));
4213                        }
4214                } else
4215                        return error(_("%s: bad revision"), name);
4216        }
4217
4218        /*
4219         * If we were called as "git cherry-pick <commit>", just
4220         * cherry-pick/revert it, set CHERRY_PICK_HEAD /
4221         * REVERT_HEAD, and don't touch the sequencer state.
4222         * This means it is possible to cherry-pick in the middle
4223         * of a cherry-pick sequence.
4224         */
4225        if (opts->revs->cmdline.nr == 1 &&
4226            opts->revs->cmdline.rev->whence == REV_CMD_REV &&
4227            opts->revs->no_walk &&
4228            !opts->revs->cmdline.rev->flags) {
4229                struct commit *cmit;
4230                if (prepare_revision_walk(opts->revs))
4231                        return error(_("revision walk setup failed"));
4232                cmit = get_revision(opts->revs);
4233                if (!cmit)
4234                        return error(_("empty commit set passed"));
4235                if (get_revision(opts->revs))
4236                        BUG("unexpected extra commit from walk");
4237                return single_pick(r, cmit, opts);
4238        }
4239
4240        /*
4241         * Start a new cherry-pick/ revert sequence; but
4242         * first, make sure that an existing one isn't in
4243         * progress
4244         */
4245
4246        if (walk_revs_populate_todo(&todo_list, opts) ||
4247                        create_seq_dir() < 0)
4248                return -1;
4249        if (get_oid("HEAD", &oid) && (opts->action == REPLAY_REVERT))
4250                return error(_("can't revert as initial commit"));
4251        if (save_head(oid_to_hex(&oid)))
4252                return -1;
4253        if (save_opts(opts))
4254                return -1;
4255        update_abort_safety_file();
4256        res = pick_commits(r, &todo_list, opts);
4257        todo_list_release(&todo_list);
4258        return res;
4259}
4260
4261void append_signoff(struct strbuf *msgbuf, size_t ignore_footer, unsigned flag)
4262{
4263        unsigned no_dup_sob = flag & APPEND_SIGNOFF_DEDUP;
4264        struct strbuf sob = STRBUF_INIT;
4265        int has_footer;
4266
4267        strbuf_addstr(&sob, sign_off_header);
4268        strbuf_addstr(&sob, fmt_name(WANT_COMMITTER_IDENT));
4269        strbuf_addch(&sob, '\n');
4270
4271        if (!ignore_footer)
4272                strbuf_complete_line(msgbuf);
4273
4274        /*
4275         * If the whole message buffer is equal to the sob, pretend that we
4276         * found a conforming footer with a matching sob
4277         */
4278        if (msgbuf->len - ignore_footer == sob.len &&
4279            !strncmp(msgbuf->buf, sob.buf, sob.len))
4280                has_footer = 3;
4281        else
4282                has_footer = has_conforming_footer(msgbuf, &sob, ignore_footer);
4283
4284        if (!has_footer) {
4285                const char *append_newlines = NULL;
4286                size_t len = msgbuf->len - ignore_footer;
4287
4288                if (!len) {
4289                        /*
4290                         * The buffer is completely empty.  Leave foom for
4291                         * the title and body to be filled in by the user.
4292                         */
4293                        append_newlines = "\n\n";
4294                } else if (len == 1) {
4295                        /*
4296                         * Buffer contains a single newline.  Add another
4297                         * so that we leave room for the title and body.
4298                         */
4299                        append_newlines = "\n";
4300                } else if (msgbuf->buf[len - 2] != '\n') {
4301                        /*
4302                         * Buffer ends with a single newline.  Add another
4303                         * so that there is an empty line between the message
4304                         * body and the sob.
4305                         */
4306                        append_newlines = "\n";
4307                } /* else, the buffer already ends with two newlines. */
4308
4309                if (append_newlines)
4310                        strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4311                                append_newlines, strlen(append_newlines));
4312        }
4313
4314        if (has_footer != 3 && (!no_dup_sob || has_footer != 2))
4315                strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4316                                sob.buf, sob.len);
4317
4318        strbuf_release(&sob);
4319}
4320
4321struct labels_entry {
4322        struct hashmap_entry entry;
4323        char label[FLEX_ARRAY];
4324};
4325
4326static int labels_cmp(const void *fndata, const struct labels_entry *a,
4327                      const struct labels_entry *b, const void *key)
4328{
4329        return key ? strcmp(a->label, key) : strcmp(a->label, b->label);
4330}
4331
4332struct string_entry {
4333        struct oidmap_entry entry;
4334        char string[FLEX_ARRAY];
4335};
4336
4337struct label_state {
4338        struct oidmap commit2label;
4339        struct hashmap labels;
4340        struct strbuf buf;
4341};
4342
4343static const char *label_oid(struct object_id *oid, const char *label,
4344                             struct label_state *state)
4345{
4346        struct labels_entry *labels_entry;
4347        struct string_entry *string_entry;
4348        struct object_id dummy;
4349        size_t len;
4350        int i;
4351
4352        string_entry = oidmap_get(&state->commit2label, oid);
4353        if (string_entry)
4354                return string_entry->string;
4355
4356        /*
4357         * For "uninteresting" commits, i.e. commits that are not to be
4358         * rebased, and which can therefore not be labeled, we use a unique
4359         * abbreviation of the commit name. This is slightly more complicated
4360         * than calling find_unique_abbrev() because we also need to make
4361         * sure that the abbreviation does not conflict with any other
4362         * label.
4363         *
4364         * We disallow "interesting" commits to be labeled by a string that
4365         * is a valid full-length hash, to ensure that we always can find an
4366         * abbreviation for any uninteresting commit's names that does not
4367         * clash with any other label.
4368         */
4369        if (!label) {
4370                char *p;
4371
4372                strbuf_reset(&state->buf);
4373                strbuf_grow(&state->buf, GIT_SHA1_HEXSZ);
4374                label = p = state->buf.buf;
4375
4376                find_unique_abbrev_r(p, oid, default_abbrev);
4377
4378                /*
4379                 * We may need to extend the abbreviated hash so that there is
4380                 * no conflicting label.
4381                 */
4382                if (hashmap_get_from_hash(&state->labels, strihash(p), p)) {
4383                        size_t i = strlen(p) + 1;
4384
4385                        oid_to_hex_r(p, oid);
4386                        for (; i < GIT_SHA1_HEXSZ; i++) {
4387                                char save = p[i];
4388                                p[i] = '\0';
4389                                if (!hashmap_get_from_hash(&state->labels,
4390                                                           strihash(p), p))
4391                                        break;
4392                                p[i] = save;
4393                        }
4394                }
4395        } else if (((len = strlen(label)) == the_hash_algo->hexsz &&
4396                    !get_oid_hex(label, &dummy)) ||
4397                   (len == 1 && *label == '#') ||
4398                   hashmap_get_from_hash(&state->labels,
4399                                         strihash(label), label)) {
4400                /*
4401                 * If the label already exists, or if the label is a valid full
4402                 * OID, or the label is a '#' (which we use as a separator
4403                 * between merge heads and oneline), we append a dash and a
4404                 * number to make it unique.
4405                 */
4406                struct strbuf *buf = &state->buf;
4407
4408                strbuf_reset(buf);
4409                strbuf_add(buf, label, len);
4410
4411                for (i = 2; ; i++) {
4412                        strbuf_setlen(buf, len);
4413                        strbuf_addf(buf, "-%d", i);
4414                        if (!hashmap_get_from_hash(&state->labels,
4415                                                   strihash(buf->buf),
4416                                                   buf->buf))
4417                                break;
4418                }
4419
4420                label = buf->buf;
4421        }
4422
4423        FLEX_ALLOC_STR(labels_entry, label, label);
4424        hashmap_entry_init(labels_entry, strihash(label));
4425        hashmap_add(&state->labels, labels_entry);
4426
4427        FLEX_ALLOC_STR(string_entry, string, label);
4428        oidcpy(&string_entry->entry.oid, oid);
4429        oidmap_put(&state->commit2label, string_entry);
4430
4431        return string_entry->string;
4432}
4433
4434static int make_script_with_merges(struct pretty_print_context *pp,
4435                                   struct rev_info *revs, struct strbuf *out,
4436                                   unsigned flags)
4437{
4438        int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4439        int rebase_cousins = flags & TODO_LIST_REBASE_COUSINS;
4440        struct strbuf buf = STRBUF_INIT, oneline = STRBUF_INIT;
4441        struct strbuf label = STRBUF_INIT;
4442        struct commit_list *commits = NULL, **tail = &commits, *iter;
4443        struct commit_list *tips = NULL, **tips_tail = &tips;
4444        struct commit *commit;
4445        struct oidmap commit2todo = OIDMAP_INIT;
4446        struct string_entry *entry;
4447        struct oidset interesting = OIDSET_INIT, child_seen = OIDSET_INIT,
4448                shown = OIDSET_INIT;
4449        struct label_state state = { OIDMAP_INIT, { NULL }, STRBUF_INIT };
4450
4451        int abbr = flags & TODO_LIST_ABBREVIATE_CMDS;
4452        const char *cmd_pick = abbr ? "p" : "pick",
4453                *cmd_label = abbr ? "l" : "label",
4454                *cmd_reset = abbr ? "t" : "reset",
4455                *cmd_merge = abbr ? "m" : "merge";
4456
4457        oidmap_init(&commit2todo, 0);
4458        oidmap_init(&state.commit2label, 0);
4459        hashmap_init(&state.labels, (hashmap_cmp_fn) labels_cmp, NULL, 0);
4460        strbuf_init(&state.buf, 32);
4461
4462        if (revs->cmdline.nr && (revs->cmdline.rev[0].flags & BOTTOM)) {
4463                struct object_id *oid = &revs->cmdline.rev[0].item->oid;
4464                FLEX_ALLOC_STR(entry, string, "onto");
4465                oidcpy(&entry->entry.oid, oid);
4466                oidmap_put(&state.commit2label, entry);
4467        }
4468
4469        /*
4470         * First phase:
4471         * - get onelines for all commits
4472         * - gather all branch tips (i.e. 2nd or later parents of merges)
4473         * - label all branch tips
4474         */
4475        while ((commit = get_revision(revs))) {
4476                struct commit_list *to_merge;
4477                const char *p1, *p2;
4478                struct object_id *oid;
4479                int is_empty;
4480
4481                tail = &commit_list_insert(commit, tail)->next;
4482                oidset_insert(&interesting, &commit->object.oid);
4483
4484                is_empty = is_original_commit_empty(commit);
4485                if (!is_empty && (commit->object.flags & PATCHSAME))
4486                        continue;
4487
4488                strbuf_reset(&oneline);
4489                pretty_print_commit(pp, commit, &oneline);
4490
4491                to_merge = commit->parents ? commit->parents->next : NULL;
4492                if (!to_merge) {
4493                        /* non-merge commit: easy case */
4494                        strbuf_reset(&buf);
4495                        if (!keep_empty && is_empty)
4496                                strbuf_addf(&buf, "%c ", comment_line_char);
4497                        strbuf_addf(&buf, "%s %s %s", cmd_pick,
4498                                    oid_to_hex(&commit->object.oid),
4499                                    oneline.buf);
4500
4501                        FLEX_ALLOC_STR(entry, string, buf.buf);
4502                        oidcpy(&entry->entry.oid, &commit->object.oid);
4503                        oidmap_put(&commit2todo, entry);
4504
4505                        continue;
4506                }
4507
4508                /* Create a label */
4509                strbuf_reset(&label);
4510                if (skip_prefix(oneline.buf, "Merge ", &p1) &&
4511                    (p1 = strchr(p1, '\'')) &&
4512                    (p2 = strchr(++p1, '\'')))
4513                        strbuf_add(&label, p1, p2 - p1);
4514                else if (skip_prefix(oneline.buf, "Merge pull request ",
4515                                     &p1) &&
4516                         (p1 = strstr(p1, " from ")))
4517                        strbuf_addstr(&label, p1 + strlen(" from "));
4518                else
4519                        strbuf_addbuf(&label, &oneline);
4520
4521                for (p1 = label.buf; *p1; p1++)
4522                        if (isspace(*p1))
4523                                *(char *)p1 = '-';
4524
4525                strbuf_reset(&buf);
4526                strbuf_addf(&buf, "%s -C %s",
4527                            cmd_merge, oid_to_hex(&commit->object.oid));
4528
4529                /* label the tips of merged branches */
4530                for (; to_merge; to_merge = to_merge->next) {
4531                        oid = &to_merge->item->object.oid;
4532                        strbuf_addch(&buf, ' ');
4533
4534                        if (!oidset_contains(&interesting, oid)) {
4535                                strbuf_addstr(&buf, label_oid(oid, NULL,
4536                                                              &state));
4537                                continue;
4538                        }
4539
4540                        tips_tail = &commit_list_insert(to_merge->item,
4541                                                        tips_tail)->next;
4542
4543                        strbuf_addstr(&buf, label_oid(oid, label.buf, &state));
4544                }
4545                strbuf_addf(&buf, " # %s", oneline.buf);
4546
4547                FLEX_ALLOC_STR(entry, string, buf.buf);
4548                oidcpy(&entry->entry.oid, &commit->object.oid);
4549                oidmap_put(&commit2todo, entry);
4550        }
4551
4552        /*
4553         * Second phase:
4554         * - label branch points
4555         * - add HEAD to the branch tips
4556         */
4557        for (iter = commits; iter; iter = iter->next) {
4558                struct commit_list *parent = iter->item->parents;
4559                for (; parent; parent = parent->next) {
4560                        struct object_id *oid = &parent->item->object.oid;
4561                        if (!oidset_contains(&interesting, oid))
4562                                continue;
4563                        if (oidset_insert(&child_seen, oid))
4564                                label_oid(oid, "branch-point", &state);
4565                }
4566
4567                /* Add HEAD as implict "tip of branch" */
4568                if (!iter->next)
4569                        tips_tail = &commit_list_insert(iter->item,
4570                                                        tips_tail)->next;
4571        }
4572
4573        /*
4574         * Third phase: output the todo list. This is a bit tricky, as we
4575         * want to avoid jumping back and forth between revisions. To
4576         * accomplish that goal, we walk backwards from the branch tips,
4577         * gathering commits not yet shown, reversing the list on the fly,
4578         * then outputting that list (labeling revisions as needed).
4579         */
4580        strbuf_addf(out, "%s onto\n", cmd_label);
4581        for (iter = tips; iter; iter = iter->next) {
4582                struct commit_list *list = NULL, *iter2;
4583
4584                commit = iter->item;
4585                if (oidset_contains(&shown, &commit->object.oid))
4586                        continue;
4587                entry = oidmap_get(&state.commit2label, &commit->object.oid);
4588
4589                if (entry)
4590                        strbuf_addf(out, "\n%c Branch %s\n", comment_line_char, entry->string);
4591                else
4592                        strbuf_addch(out, '\n');
4593
4594                while (oidset_contains(&interesting, &commit->object.oid) &&
4595                       !oidset_contains(&shown, &commit->object.oid)) {
4596                        commit_list_insert(commit, &list);
4597                        if (!commit->parents) {
4598                                commit = NULL;
4599                                break;
4600                        }
4601                        commit = commit->parents->item;
4602                }
4603
4604                if (!commit)
4605                        strbuf_addf(out, "%s %s\n", cmd_reset,
4606                                    rebase_cousins ? "onto" : "[new root]");
4607                else {
4608                        const char *to = NULL;
4609
4610                        entry = oidmap_get(&state.commit2label,
4611                                           &commit->object.oid);
4612                        if (entry)
4613                                to = entry->string;
4614                        else if (!rebase_cousins)
4615                                to = label_oid(&commit->object.oid, NULL,
4616                                               &state);
4617
4618                        if (!to || !strcmp(to, "onto"))
4619                                strbuf_addf(out, "%s onto\n", cmd_reset);
4620                        else {
4621                                strbuf_reset(&oneline);
4622                                pretty_print_commit(pp, commit, &oneline);
4623                                strbuf_addf(out, "%s %s # %s\n",
4624                                            cmd_reset, to, oneline.buf);
4625                        }
4626                }
4627
4628                for (iter2 = list; iter2; iter2 = iter2->next) {
4629                        struct object_id *oid = &iter2->item->object.oid;
4630                        entry = oidmap_get(&commit2todo, oid);
4631                        /* only show if not already upstream */
4632                        if (entry)
4633                                strbuf_addf(out, "%s\n", entry->string);
4634                        entry = oidmap_get(&state.commit2label, oid);
4635                        if (entry)
4636                                strbuf_addf(out, "%s %s\n",
4637                                            cmd_label, entry->string);
4638                        oidset_insert(&shown, oid);
4639                }
4640
4641                free_commit_list(list);
4642        }
4643
4644        free_commit_list(commits);
4645        free_commit_list(tips);
4646
4647        strbuf_release(&label);
4648        strbuf_release(&oneline);
4649        strbuf_release(&buf);
4650
4651        oidmap_free(&commit2todo, 1);
4652        oidmap_free(&state.commit2label, 1);
4653        hashmap_free(&state.labels, 1);
4654        strbuf_release(&state.buf);
4655
4656        return 0;
4657}
4658
4659int sequencer_make_script(struct repository *r, struct strbuf *out, int argc,
4660                          const char **argv, unsigned flags)
4661{
4662        char *format = NULL;
4663        struct pretty_print_context pp = {0};
4664        struct rev_info revs;
4665        struct commit *commit;
4666        int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4667        const char *insn = flags & TODO_LIST_ABBREVIATE_CMDS ? "p" : "pick";
4668        int rebase_merges = flags & TODO_LIST_REBASE_MERGES;
4669
4670        repo_init_revisions(r, &revs, NULL);
4671        revs.verbose_header = 1;
4672        if (!rebase_merges)
4673                revs.max_parents = 1;
4674        revs.cherry_mark = 1;
4675        revs.limited = 1;
4676        revs.reverse = 1;
4677        revs.right_only = 1;
4678        revs.sort_order = REV_SORT_IN_GRAPH_ORDER;
4679        revs.topo_order = 1;
4680
4681        revs.pretty_given = 1;
4682        git_config_get_string("rebase.instructionFormat", &format);
4683        if (!format || !*format) {
4684                free(format);
4685                format = xstrdup("%s");
4686        }
4687        get_commit_format(format, &revs);
4688        free(format);
4689        pp.fmt = revs.commit_format;
4690        pp.output_encoding = get_log_output_encoding();
4691
4692        if (setup_revisions(argc, argv, &revs, NULL) > 1)
4693                return error(_("make_script: unhandled options"));
4694
4695        if (prepare_revision_walk(&revs) < 0)
4696                return error(_("make_script: error preparing revisions"));
4697
4698        if (rebase_merges)
4699                return make_script_with_merges(&pp, &revs, out, flags);
4700
4701        while ((commit = get_revision(&revs))) {
4702                int is_empty  = is_original_commit_empty(commit);
4703
4704                if (!is_empty && (commit->object.flags & PATCHSAME))
4705                        continue;
4706                if (!keep_empty && is_empty)
4707                        strbuf_addf(out, "%c ", comment_line_char);
4708                strbuf_addf(out, "%s %s ", insn,
4709                            oid_to_hex(&commit->object.oid));
4710                pretty_print_commit(&pp, commit, out);
4711                strbuf_addch(out, '\n');
4712        }
4713        return 0;
4714}
4715
4716/*
4717 * Add commands after pick and (series of) squash/fixup commands
4718 * in the todo list.
4719 */
4720void todo_list_add_exec_commands(struct todo_list *todo_list,
4721                                 struct string_list *commands)
4722{
4723        struct strbuf *buf = &todo_list->buf;
4724        size_t base_offset = buf->len;
4725        int i, insert, nr = 0, alloc = 0;
4726        struct todo_item *items = NULL, *base_items = NULL;
4727
4728        base_items = xcalloc(commands->nr, sizeof(struct todo_item));
4729        for (i = 0; i < commands->nr; i++) {
4730                size_t command_len = strlen(commands->items[i].string);
4731
4732                strbuf_addstr(buf, commands->items[i].string);
4733                strbuf_addch(buf, '\n');
4734
4735                base_items[i].command = TODO_EXEC;
4736                base_items[i].offset_in_buf = base_offset;
4737                base_items[i].arg_offset = base_offset + strlen("exec ");
4738                base_items[i].arg_len = command_len - strlen("exec ");
4739
4740                base_offset += command_len + 1;
4741        }
4742
4743        /*
4744         * Insert <commands> after every pick. Here, fixup/squash chains
4745         * are considered part of the pick, so we insert the commands *after*
4746         * those chains if there are any.
4747         *
4748         * As we insert the exec commands immediatly after rearranging
4749         * any fixups and before the user edits the list, a fixup chain
4750         * can never contain comments (any comments are empty picks that
4751         * have been commented out because the user did not specify
4752         * --keep-empty).  So, it is safe to insert an exec command
4753         * without looking at the command following a comment.
4754         */
4755        insert = 0;
4756        for (i = 0; i < todo_list->nr; i++) {
4757                enum todo_command command = todo_list->items[i].command;
4758                if (insert && !is_fixup(command)) {
4759                        ALLOC_GROW(items, nr + commands->nr, alloc);
4760                        COPY_ARRAY(items + nr, base_items, commands->nr);
4761                        nr += commands->nr;
4762
4763                        insert = 0;
4764                }
4765
4766                ALLOC_GROW(items, nr + 1, alloc);
4767                items[nr++] = todo_list->items[i];
4768
4769                if (command == TODO_PICK || command == TODO_MERGE)
4770                        insert = 1;
4771        }
4772
4773        /* insert or append final <commands> */
4774        if (insert || nr == todo_list->nr) {
4775                ALLOC_GROW(items, nr + commands->nr, alloc);
4776                COPY_ARRAY(items + nr, base_items, commands->nr);
4777                nr += commands->nr;
4778        }
4779
4780        free(base_items);
4781        FREE_AND_NULL(todo_list->items);
4782        todo_list->items = items;
4783        todo_list->nr = nr;
4784        todo_list->alloc = alloc;
4785}
4786
4787static void todo_list_to_strbuf(struct repository *r, struct todo_list *todo_list,
4788                                struct strbuf *buf, int num, unsigned flags)
4789{
4790        struct todo_item *item;
4791        int i, max = todo_list->nr;
4792
4793        if (num > 0 && num < max)
4794                max = num;
4795
4796        for (item = todo_list->items, i = 0; i < max; i++, item++) {
4797                /* if the item is not a command write it and continue */
4798                if (item->command >= TODO_COMMENT) {
4799                        strbuf_addf(buf, "%.*s\n", item->arg_len,
4800                                    todo_item_get_arg(todo_list, item));
4801                        continue;
4802                }
4803
4804                /* add command to the buffer */
4805                if (flags & TODO_LIST_ABBREVIATE_CMDS)
4806                        strbuf_addch(buf, command_to_char(item->command));
4807                else
4808                        strbuf_addstr(buf, command_to_string(item->command));
4809
4810                /* add commit id */
4811                if (item->commit) {
4812                        const char *oid = flags & TODO_LIST_SHORTEN_IDS ?
4813                                          short_commit_name(item->commit) :
4814                                          oid_to_hex(&item->commit->object.oid);
4815
4816                        if (item->command == TODO_MERGE) {
4817                                if (item->flags & TODO_EDIT_MERGE_MSG)
4818                                        strbuf_addstr(buf, " -c");
4819                                else
4820                                        strbuf_addstr(buf, " -C");
4821                        }
4822
4823                        strbuf_addf(buf, " %s", oid);
4824                }
4825
4826                /* add all the rest */
4827                if (!item->arg_len)
4828                        strbuf_addch(buf, '\n');
4829                else
4830                        strbuf_addf(buf, " %.*s\n", item->arg_len,
4831                                    todo_item_get_arg(todo_list, item));
4832        }
4833}
4834
4835int todo_list_write_to_file(struct repository *r, struct todo_list *todo_list,
4836                            const char *file, const char *shortrevisions,
4837                            const char *shortonto, int num, unsigned flags)
4838{
4839        int res;
4840        struct strbuf buf = STRBUF_INIT;
4841
4842        todo_list_to_strbuf(r, todo_list, &buf, num, flags);
4843        if (flags & TODO_LIST_APPEND_TODO_HELP)
4844                append_todo_help(flags & TODO_LIST_KEEP_EMPTY, count_commands(todo_list),
4845                                 shortrevisions, shortonto, &buf);
4846
4847        res = write_message(buf.buf, buf.len, file, 0);
4848        strbuf_release(&buf);
4849
4850        return res;
4851}
4852
4853static const char edit_todo_list_advice[] =
4854N_("You can fix this with 'git rebase --edit-todo' "
4855"and then run 'git rebase --continue'.\n"
4856"Or you can abort the rebase with 'git rebase"
4857" --abort'.\n");
4858
4859int check_todo_list_from_file(struct repository *r)
4860{
4861        struct todo_list old_todo = TODO_LIST_INIT, new_todo = TODO_LIST_INIT;
4862        int res = 0;
4863
4864        if (strbuf_read_file_or_whine(&new_todo.buf, rebase_path_todo()) < 0) {
4865                res = -1;
4866                goto out;
4867        }
4868
4869        if (strbuf_read_file_or_whine(&old_todo.buf, rebase_path_todo_backup()) < 0) {
4870                res = -1;
4871                goto out;
4872        }
4873
4874        res = todo_list_parse_insn_buffer(r, old_todo.buf.buf, &old_todo);
4875        if (!res)
4876                res = todo_list_parse_insn_buffer(r, new_todo.buf.buf, &new_todo);
4877        if (!res)
4878                res = todo_list_check(&old_todo, &new_todo);
4879        if (res)
4880                fprintf(stderr, _(edit_todo_list_advice));
4881out:
4882        todo_list_release(&old_todo);
4883        todo_list_release(&new_todo);
4884
4885        return res;
4886}
4887
4888/* skip picking commits whose parents are unchanged */
4889static int skip_unnecessary_picks(struct repository *r,
4890                                  struct todo_list *todo_list,
4891                                  struct object_id *base_oid)
4892{
4893        struct object_id *parent_oid;
4894        int i;
4895
4896        for (i = 0; i < todo_list->nr; i++) {
4897                struct todo_item *item = todo_list->items + i;
4898
4899                if (item->command >= TODO_NOOP)
4900                        continue;
4901                if (item->command != TODO_PICK)
4902                        break;
4903                if (parse_commit(item->commit)) {
4904                        return error(_("could not parse commit '%s'"),
4905                                oid_to_hex(&item->commit->object.oid));
4906                }
4907                if (!item->commit->parents)
4908                        break; /* root commit */
4909                if (item->commit->parents->next)
4910                        break; /* merge commit */
4911                parent_oid = &item->commit->parents->item->object.oid;
4912                if (!oideq(parent_oid, base_oid))
4913                        break;
4914                oidcpy(base_oid, &item->commit->object.oid);
4915        }
4916        if (i > 0) {
4917                const char *done_path = rebase_path_done();
4918
4919                if (todo_list_write_to_file(r, todo_list, done_path, NULL, NULL, i, 0)) {
4920                        error_errno(_("could not write to '%s'"), done_path);
4921                        return -1;
4922                }
4923
4924                MOVE_ARRAY(todo_list->items, todo_list->items + i, todo_list->nr - i);
4925                todo_list->nr -= i;
4926                todo_list->current = 0;
4927
4928                if (is_fixup(peek_command(todo_list, 0)))
4929                        record_in_rewritten(base_oid, peek_command(todo_list, 0));
4930        }
4931
4932        return 0;
4933}
4934
4935int complete_action(struct repository *r, struct replay_opts *opts, unsigned flags,
4936                    const char *shortrevisions, const char *onto_name,
4937                    struct commit *onto, const char *orig_head,
4938                    struct string_list *commands, unsigned autosquash,
4939                    struct todo_list *todo_list)
4940{
4941        const char *shortonto, *todo_file = rebase_path_todo();
4942        struct todo_list new_todo = TODO_LIST_INIT;
4943        struct strbuf *buf = &todo_list->buf;
4944        struct object_id oid = onto->object.oid;
4945        int res;
4946
4947        shortonto = find_unique_abbrev(&oid, DEFAULT_ABBREV);
4948
4949        if (buf->len == 0) {
4950                struct todo_item *item = append_new_todo(todo_list);
4951                item->command = TODO_NOOP;
4952                item->commit = NULL;
4953                item->arg_len = item->arg_offset = item->flags = item->offset_in_buf = 0;
4954        }
4955
4956        if (autosquash && todo_list_rearrange_squash(todo_list))
4957                return -1;
4958
4959        if (commands->nr)
4960                todo_list_add_exec_commands(todo_list, commands);
4961
4962        if (count_commands(todo_list) == 0) {
4963                apply_autostash(opts);
4964                sequencer_remove_state(opts);
4965
4966                return error(_("nothing to do"));
4967        }
4968
4969        res = edit_todo_list(r, todo_list, &new_todo, shortrevisions,
4970                             shortonto, flags);
4971        if (res == -1)
4972                return -1;
4973        else if (res == -2) {
4974                apply_autostash(opts);
4975                sequencer_remove_state(opts);
4976
4977                return -1;
4978        } else if (res == -3) {
4979                apply_autostash(opts);
4980                sequencer_remove_state(opts);
4981                todo_list_release(&new_todo);
4982
4983                return error(_("nothing to do"));
4984        }
4985
4986        if (todo_list_parse_insn_buffer(r, new_todo.buf.buf, &new_todo) ||
4987            todo_list_check(todo_list, &new_todo)) {
4988                fprintf(stderr, _(edit_todo_list_advice));
4989                checkout_onto(r, opts, onto_name, &onto->object.oid, orig_head);
4990                todo_list_release(&new_todo);
4991
4992                return -1;
4993        }
4994
4995        if (opts->allow_ff && skip_unnecessary_picks(r, &new_todo, &oid)) {
4996                todo_list_release(&new_todo);
4997                return error(_("could not skip unnecessary pick commands"));
4998        }
4999
5000        if (todo_list_write_to_file(r, &new_todo, todo_file, NULL, NULL, -1,
5001                                    flags & ~(TODO_LIST_SHORTEN_IDS))) {
5002                todo_list_release(&new_todo);
5003                return error_errno(_("could not write '%s'"), todo_file);
5004        }
5005
5006        todo_list_release(&new_todo);
5007
5008        if (checkout_onto(r, opts, onto_name, &oid, orig_head))
5009                return -1;
5010
5011        if (require_clean_work_tree(r, "rebase", "", 1, 1))
5012                return -1;
5013
5014        return sequencer_continue(r, opts);
5015}
5016
5017struct subject2item_entry {
5018        struct hashmap_entry entry;
5019        int i;
5020        char subject[FLEX_ARRAY];
5021};
5022
5023static int subject2item_cmp(const void *fndata,
5024                            const struct subject2item_entry *a,
5025                            const struct subject2item_entry *b, const void *key)
5026{
5027        return key ? strcmp(a->subject, key) : strcmp(a->subject, b->subject);
5028}
5029
5030define_commit_slab(commit_todo_item, struct todo_item *);
5031
5032/*
5033 * Rearrange the todo list that has both "pick commit-id msg" and "pick
5034 * commit-id fixup!/squash! msg" in it so that the latter is put immediately
5035 * after the former, and change "pick" to "fixup"/"squash".
5036 *
5037 * Note that if the config has specified a custom instruction format, each log
5038 * message will have to be retrieved from the commit (as the oneline in the
5039 * script cannot be trusted) in order to normalize the autosquash arrangement.
5040 */
5041int todo_list_rearrange_squash(struct todo_list *todo_list)
5042{
5043        struct hashmap subject2item;
5044        int rearranged = 0, *next, *tail, i, nr = 0, alloc = 0;
5045        char **subjects;
5046        struct commit_todo_item commit_todo;
5047        struct todo_item *items = NULL;
5048
5049        init_commit_todo_item(&commit_todo);
5050        /*
5051         * The hashmap maps onelines to the respective todo list index.
5052         *
5053         * If any items need to be rearranged, the next[i] value will indicate
5054         * which item was moved directly after the i'th.
5055         *
5056         * In that case, last[i] will indicate the index of the latest item to
5057         * be moved to appear after the i'th.
5058         */
5059        hashmap_init(&subject2item, (hashmap_cmp_fn) subject2item_cmp,
5060                     NULL, todo_list->nr);
5061        ALLOC_ARRAY(next, todo_list->nr);
5062        ALLOC_ARRAY(tail, todo_list->nr);
5063        ALLOC_ARRAY(subjects, todo_list->nr);
5064        for (i = 0; i < todo_list->nr; i++) {
5065                struct strbuf buf = STRBUF_INIT;
5066                struct todo_item *item = todo_list->items + i;
5067                const char *commit_buffer, *subject, *p;
5068                size_t subject_len;
5069                int i2 = -1;
5070                struct subject2item_entry *entry;
5071
5072                next[i] = tail[i] = -1;
5073                if (!item->commit || item->command == TODO_DROP) {
5074                        subjects[i] = NULL;
5075                        continue;
5076                }
5077
5078                if (is_fixup(item->command)) {
5079                        clear_commit_todo_item(&commit_todo);
5080                        return error(_("the script was already rearranged."));
5081                }
5082
5083                *commit_todo_item_at(&commit_todo, item->commit) = item;
5084
5085                parse_commit(item->commit);
5086                commit_buffer = get_commit_buffer(item->commit, NULL);
5087                find_commit_subject(commit_buffer, &subject);
5088                format_subject(&buf, subject, " ");
5089                subject = subjects[i] = strbuf_detach(&buf, &subject_len);
5090                unuse_commit_buffer(item->commit, commit_buffer);
5091                if ((skip_prefix(subject, "fixup! ", &p) ||
5092                     skip_prefix(subject, "squash! ", &p))) {
5093                        struct commit *commit2;
5094
5095                        for (;;) {
5096                                while (isspace(*p))
5097                                        p++;
5098                                if (!skip_prefix(p, "fixup! ", &p) &&
5099                                    !skip_prefix(p, "squash! ", &p))
5100                                        break;
5101                        }
5102
5103                        if ((entry = hashmap_get_from_hash(&subject2item,
5104                                                           strhash(p), p)))
5105                                /* found by title */
5106                                i2 = entry->i;
5107                        else if (!strchr(p, ' ') &&
5108                                 (commit2 =
5109                                  lookup_commit_reference_by_name(p)) &&
5110                                 *commit_todo_item_at(&commit_todo, commit2))
5111                                /* found by commit name */
5112                                i2 = *commit_todo_item_at(&commit_todo, commit2)
5113                                        - todo_list->items;
5114                        else {
5115                                /* copy can be a prefix of the commit subject */
5116                                for (i2 = 0; i2 < i; i2++)
5117                                        if (subjects[i2] &&
5118                                            starts_with(subjects[i2], p))
5119                                                break;
5120                                if (i2 == i)
5121                                        i2 = -1;
5122                        }
5123                }
5124                if (i2 >= 0) {
5125                        rearranged = 1;
5126                        todo_list->items[i].command =
5127                                starts_with(subject, "fixup!") ?
5128                                TODO_FIXUP : TODO_SQUASH;
5129                        if (next[i2] < 0)
5130                                next[i2] = i;
5131                        else
5132                                next[tail[i2]] = i;
5133                        tail[i2] = i;
5134                } else if (!hashmap_get_from_hash(&subject2item,
5135                                                strhash(subject), subject)) {
5136                        FLEX_ALLOC_MEM(entry, subject, subject, subject_len);
5137                        entry->i = i;
5138                        hashmap_entry_init(entry, strhash(entry->subject));
5139                        hashmap_put(&subject2item, entry);
5140                }
5141        }
5142
5143        if (rearranged) {
5144                for (i = 0; i < todo_list->nr; i++) {
5145                        enum todo_command command = todo_list->items[i].command;
5146                        int cur = i;
5147
5148                        /*
5149                         * Initially, all commands are 'pick's. If it is a
5150                         * fixup or a squash now, we have rearranged it.
5151                         */
5152                        if (is_fixup(command))
5153                                continue;
5154
5155                        while (cur >= 0) {
5156                                ALLOC_GROW(items, nr + 1, alloc);
5157                                items[nr++] = todo_list->items[cur];
5158                                cur = next[cur];
5159                        }
5160                }
5161
5162                FREE_AND_NULL(todo_list->items);
5163                todo_list->items = items;
5164                todo_list->nr = nr;
5165                todo_list->alloc = alloc;
5166        }
5167
5168        free(next);
5169        free(tail);
5170        for (i = 0; i < todo_list->nr; i++)
5171                free(subjects[i]);
5172        free(subjects);
5173        hashmap_free(&subject2item, 1);
5174
5175        clear_commit_todo_item(&commit_todo);
5176
5177        return 0;
5178}