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