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