5 #include "object-store.h"
10 #include "run-command.h"
13 #include "cache-tree.h"
17 #include "merge-recursive.h"
19 #include "argv-array.h"
23 #include "wt-status.h"
25 #include "notes-utils.h"
27 #include "unpack-trees.h"
31 #include "commit-slab.h"
33 #include "commit-reach.h"
34 #include "rebase-interactive.h"
36 #define GIT_REFLOG_ACTION "GIT_REFLOG_ACTION"
38 static const char sign_off_header[] = "Signed-off-by: ";
39 static const char cherry_picked_prefix[] = "(cherry picked from commit ";
41 GIT_PATH_FUNC(git_path_commit_editmsg, "COMMIT_EDITMSG")
43 GIT_PATH_FUNC(git_path_seq_dir, "sequencer")
45 static GIT_PATH_FUNC(git_path_todo_file, "sequencer/todo")
46 static GIT_PATH_FUNC(git_path_opts_file, "sequencer/opts")
47 static GIT_PATH_FUNC(git_path_head_file, "sequencer/head")
48 static GIT_PATH_FUNC(git_path_abort_safety_file, "sequencer/abort-safety")
50 static GIT_PATH_FUNC(rebase_path, "rebase-merge")
52 * The file containing rebase commands, comments, and empty lines.
53 * This file is created by "git rebase -i" then edited by the user. As
54 * the lines are processed, they are removed from the front of this
55 * file and written to the tail of 'done'.
57 GIT_PATH_FUNC(rebase_path_todo, "rebase-merge/git-rebase-todo")
58 GIT_PATH_FUNC(rebase_path_todo_backup, "rebase-merge/git-rebase-todo.backup")
61 * The rebase command lines that have already been processed. A line
62 * is moved here when it is first handled, before any associated user
65 static GIT_PATH_FUNC(rebase_path_done, "rebase-merge/done")
67 * The file to keep track of how many commands were already processed (e.g.
70 static GIT_PATH_FUNC(rebase_path_msgnum, "rebase-merge/msgnum")
72 * The file to keep track of how many commands are to be processed in total
73 * (e.g. for the prompt).
75 static GIT_PATH_FUNC(rebase_path_msgtotal, "rebase-merge/end")
77 * The commit message that is planned to be used for any changes that
78 * need to be committed following a user interaction.
80 static GIT_PATH_FUNC(rebase_path_message, "rebase-merge/message")
82 * The file into which is accumulated the suggested commit message for
83 * squash/fixup commands. When the first of a series of squash/fixups
84 * is seen, the file is created and the commit message from the
85 * previous commit and from the first squash/fixup commit are written
86 * to it. The commit message for each subsequent squash/fixup commit
87 * is appended to the file as it is processed.
89 static GIT_PATH_FUNC(rebase_path_squash_msg, "rebase-merge/message-squash")
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.)
97 static GIT_PATH_FUNC(rebase_path_fixup_msg, "rebase-merge/message-fixup")
99 * This file contains the list fixup/squash commands that have been
100 * accumulated into message-fixup or message-squash so far.
102 static GIT_PATH_FUNC(rebase_path_current_fixups, "rebase-merge/current-fixups")
104 * A script to set the GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, and
105 * GIT_AUTHOR_DATE that will be used for the commit that is currently
108 static GIT_PATH_FUNC(rebase_path_author_script, "rebase-merge/author-script")
110 * When an "edit" rebase command is being processed, the SHA1 of the
111 * commit to be edited is recorded in this file. When "git rebase
112 * --continue" is executed, if there are any staged changes then they
113 * will be amended to the HEAD commit, but only provided the HEAD
114 * commit is still the commit to be edited. When any other rebase
115 * command is processed, this file is deleted.
117 static GIT_PATH_FUNC(rebase_path_amend, "rebase-merge/amend")
119 * When we stop at a given patch via the "edit" command, this file contains
120 * the abbreviated commit name of the corresponding patch.
122 static GIT_PATH_FUNC(rebase_path_stopped_sha, "rebase-merge/stopped-sha")
124 * For the post-rewrite hook, we make a list of rewritten commits and
125 * their new sha1s. The rewritten-pending list keeps the sha1s of
126 * commits that have been processed, but not committed yet,
127 * e.g. because they are waiting for a 'squash' command.
129 static GIT_PATH_FUNC(rebase_path_rewritten_list, "rebase-merge/rewritten-list")
130 static GIT_PATH_FUNC(rebase_path_rewritten_pending,
131 "rebase-merge/rewritten-pending")
134 * The path of the file containig the OID of the "squash onto" commit, i.e.
135 * the dummy commit used for `reset [new root]`.
137 static GIT_PATH_FUNC(rebase_path_squash_onto, "rebase-merge/squash-onto")
140 * The path of the file listing refs that need to be deleted after the rebase
141 * finishes. This is used by the `label` command to record the need for cleanup.
143 static GIT_PATH_FUNC(rebase_path_refs_to_delete, "rebase-merge/refs-to-delete")
146 * The following files are written by git-rebase just after parsing the
149 static GIT_PATH_FUNC(rebase_path_gpg_sign_opt, "rebase-merge/gpg_sign_opt")
150 static GIT_PATH_FUNC(rebase_path_orig_head, "rebase-merge/orig-head")
151 static GIT_PATH_FUNC(rebase_path_verbose, "rebase-merge/verbose")
152 static GIT_PATH_FUNC(rebase_path_quiet, "rebase-merge/quiet")
153 static GIT_PATH_FUNC(rebase_path_signoff, "rebase-merge/signoff")
154 static GIT_PATH_FUNC(rebase_path_head_name, "rebase-merge/head-name")
155 static GIT_PATH_FUNC(rebase_path_onto, "rebase-merge/onto")
156 static GIT_PATH_FUNC(rebase_path_autostash, "rebase-merge/autostash")
157 static GIT_PATH_FUNC(rebase_path_strategy, "rebase-merge/strategy")
158 static GIT_PATH_FUNC(rebase_path_strategy_opts, "rebase-merge/strategy_opts")
159 static GIT_PATH_FUNC(rebase_path_allow_rerere_autoupdate, "rebase-merge/allow_rerere_autoupdate")
160 static GIT_PATH_FUNC(rebase_path_reschedule_failed_exec, "rebase-merge/reschedule-failed-exec")
162 static int git_sequencer_config(const char *k, const char *v, void *cb)
164 struct replay_opts *opts = cb;
167 if (!strcmp(k, "commit.cleanup")) {
170 status = git_config_string(&s, k, v);
174 if (!strcmp(s, "verbatim")) {
175 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_NONE;
176 opts->explicit_cleanup = 1;
177 } else if (!strcmp(s, "whitespace")) {
178 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_SPACE;
179 opts->explicit_cleanup = 1;
180 } else if (!strcmp(s, "strip")) {
181 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_ALL;
182 opts->explicit_cleanup = 1;
183 } else if (!strcmp(s, "scissors")) {
184 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_SCISSORS;
185 opts->explicit_cleanup = 1;
187 warning(_("invalid commit message cleanup mode '%s'"),
195 if (!strcmp(k, "commit.gpgsign")) {
196 opts->gpg_sign = git_config_bool(k, v) ? xstrdup("") : NULL;
200 status = git_gpg_config(k, v, NULL);
204 return git_diff_basic_config(k, v, NULL);
207 void sequencer_init_config(struct replay_opts *opts)
209 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_NONE;
210 git_config(git_sequencer_config, opts);
213 static inline int is_rebase_i(const struct replay_opts *opts)
215 return opts->action == REPLAY_INTERACTIVE_REBASE;
218 static const char *get_dir(const struct replay_opts *opts)
220 if (is_rebase_i(opts))
221 return rebase_path();
222 return git_path_seq_dir();
225 static const char *get_todo_path(const struct replay_opts *opts)
227 if (is_rebase_i(opts))
228 return rebase_path_todo();
229 return git_path_todo_file();
233 * Returns 0 for non-conforming footer
234 * Returns 1 for conforming footer
235 * Returns 2 when sob exists within conforming footer
236 * Returns 3 when sob exists within conforming footer as last entry
238 static int has_conforming_footer(struct strbuf *sb, struct strbuf *sob,
239 size_t ignore_footer)
241 struct process_trailer_options opts = PROCESS_TRAILER_OPTIONS_INIT;
242 struct trailer_info info;
244 int found_sob = 0, found_sob_last = 0;
248 trailer_info_get(&info, sb->buf, &opts);
250 if (info.trailer_start == info.trailer_end)
253 for (i = 0; i < info.trailer_nr; i++)
254 if (sob && !strncmp(info.trailers[i], sob->buf, sob->len)) {
256 if (i == info.trailer_nr - 1)
260 trailer_info_release(&info);
269 static const char *gpg_sign_opt_quoted(struct replay_opts *opts)
271 static struct strbuf buf = STRBUF_INIT;
275 sq_quotef(&buf, "-S%s", opts->gpg_sign);
279 int sequencer_remove_state(struct replay_opts *opts)
281 struct strbuf buf = STRBUF_INIT;
284 if (is_rebase_i(opts) &&
285 strbuf_read_file(&buf, rebase_path_refs_to_delete(), 0) > 0) {
288 char *eol = strchr(p, '\n');
291 if (delete_ref("(rebase -i) cleanup", p, NULL, 0) < 0) {
292 warning(_("could not delete '%s'"), p);
301 free(opts->gpg_sign);
302 free(opts->strategy);
303 for (i = 0; i < opts->xopts_nr; i++)
304 free(opts->xopts[i]);
306 strbuf_release(&opts->current_fixups);
309 strbuf_addstr(&buf, get_dir(opts));
310 if (remove_dir_recursively(&buf, 0))
311 ret = error(_("could not remove '%s'"), buf.buf);
312 strbuf_release(&buf);
317 static const char *action_name(const struct replay_opts *opts)
319 switch (opts->action) {
323 return N_("cherry-pick");
324 case REPLAY_INTERACTIVE_REBASE:
325 return N_("rebase -i");
327 die(_("unknown action: %d"), opts->action);
330 struct commit_message {
337 static const char *short_commit_name(struct commit *commit)
339 return find_unique_abbrev(&commit->object.oid, DEFAULT_ABBREV);
342 static int get_message(struct commit *commit, struct commit_message *out)
344 const char *abbrev, *subject;
347 out->message = logmsg_reencode(commit, NULL, get_commit_output_encoding());
348 abbrev = short_commit_name(commit);
350 subject_len = find_commit_subject(out->message, &subject);
352 out->subject = xmemdupz(subject, subject_len);
353 out->label = xstrfmt("%s... %s", abbrev, out->subject);
354 out->parent_label = xstrfmt("parent of %s", out->label);
359 static void free_message(struct commit *commit, struct commit_message *msg)
361 free(msg->parent_label);
364 unuse_commit_buffer(commit, msg->message);
367 static void print_advice(struct repository *r, int show_hint,
368 struct replay_opts *opts)
370 char *msg = getenv("GIT_CHERRY_PICK_HELP");
373 fprintf(stderr, "%s\n", msg);
375 * A conflict has occurred but the porcelain
376 * (typically rebase --interactive) wants to take care
377 * of the commit itself so remove CHERRY_PICK_HEAD
379 unlink(git_path_cherry_pick_head(r));
385 advise(_("after resolving the conflicts, mark the corrected paths\n"
386 "with 'git add <paths>' or 'git rm <paths>'"));
388 advise(_("after resolving the conflicts, mark the corrected paths\n"
389 "with 'git add <paths>' or 'git rm <paths>'\n"
390 "and commit the result with 'git commit'"));
394 static int write_message(const void *buf, size_t len, const char *filename,
397 struct lock_file msg_file = LOCK_INIT;
399 int msg_fd = hold_lock_file_for_update(&msg_file, filename, 0);
401 return error_errno(_("could not lock '%s'"), filename);
402 if (write_in_full(msg_fd, buf, len) < 0) {
403 error_errno(_("could not write to '%s'"), filename);
404 rollback_lock_file(&msg_file);
407 if (append_eol && write(msg_fd, "\n", 1) < 0) {
408 error_errno(_("could not write eol to '%s'"), filename);
409 rollback_lock_file(&msg_file);
412 if (commit_lock_file(&msg_file) < 0)
413 return error(_("failed to finalize '%s'"), filename);
419 * Reads a file that was presumably written by a shell script, i.e. with an
420 * end-of-line marker that needs to be stripped.
422 * Note that only the last end-of-line marker is stripped, consistent with the
423 * behavior of "$(cat path)" in a shell script.
425 * Returns 1 if the file was read, 0 if it could not be read or does not exist.
427 static int read_oneliner(struct strbuf *buf,
428 const char *path, int skip_if_empty)
430 int orig_len = buf->len;
432 if (!file_exists(path))
435 if (strbuf_read_file(buf, path, 0) < 0) {
436 warning_errno(_("could not read '%s'"), path);
440 if (buf->len > orig_len && buf->buf[buf->len - 1] == '\n') {
441 if (--buf->len > orig_len && buf->buf[buf->len - 1] == '\r')
443 buf->buf[buf->len] = '\0';
446 if (skip_if_empty && buf->len == orig_len)
452 static struct tree *empty_tree(struct repository *r)
454 return lookup_tree(r, the_hash_algo->empty_tree);
457 static int error_dirty_index(struct repository *repo, struct replay_opts *opts)
459 if (repo_read_index_unmerged(repo))
460 return error_resolve_conflict(_(action_name(opts)));
462 error(_("your local changes would be overwritten by %s."),
463 _(action_name(opts)));
465 if (advice_commit_before_merge)
466 advise(_("commit your changes or stash them to proceed."));
470 static void update_abort_safety_file(void)
472 struct object_id head;
474 /* Do nothing on a single-pick */
475 if (!file_exists(git_path_seq_dir()))
478 if (!get_oid("HEAD", &head))
479 write_file(git_path_abort_safety_file(), "%s", oid_to_hex(&head));
481 write_file(git_path_abort_safety_file(), "%s", "");
484 static int fast_forward_to(struct repository *r,
485 const struct object_id *to,
486 const struct object_id *from,
488 struct replay_opts *opts)
490 struct ref_transaction *transaction;
491 struct strbuf sb = STRBUF_INIT;
492 struct strbuf err = STRBUF_INIT;
495 if (checkout_fast_forward(r, from, to, 1))
496 return -1; /* the callee should have complained already */
498 strbuf_addf(&sb, _("%s: fast-forward"), _(action_name(opts)));
500 transaction = ref_transaction_begin(&err);
502 ref_transaction_update(transaction, "HEAD",
503 to, unborn && !is_rebase_i(opts) ?
506 ref_transaction_commit(transaction, &err)) {
507 ref_transaction_free(transaction);
508 error("%s", err.buf);
510 strbuf_release(&err);
515 strbuf_release(&err);
516 ref_transaction_free(transaction);
517 update_abort_safety_file();
521 enum commit_msg_cleanup_mode get_cleanup_mode(const char *cleanup_arg,
524 if (!cleanup_arg || !strcmp(cleanup_arg, "default"))
525 return use_editor ? COMMIT_MSG_CLEANUP_ALL :
526 COMMIT_MSG_CLEANUP_SPACE;
527 else if (!strcmp(cleanup_arg, "verbatim"))
528 return COMMIT_MSG_CLEANUP_NONE;
529 else if (!strcmp(cleanup_arg, "whitespace"))
530 return COMMIT_MSG_CLEANUP_SPACE;
531 else if (!strcmp(cleanup_arg, "strip"))
532 return COMMIT_MSG_CLEANUP_ALL;
533 else if (!strcmp(cleanup_arg, "scissors"))
534 return use_editor ? COMMIT_MSG_CLEANUP_SCISSORS :
535 COMMIT_MSG_CLEANUP_SPACE;
537 die(_("Invalid cleanup mode %s"), cleanup_arg);
541 * NB using int rather than enum cleanup_mode to stop clang's
542 * -Wtautological-constant-out-of-range-compare complaining that the comparison
545 static const char *describe_cleanup_mode(int cleanup_mode)
547 static const char *modes[] = { "whitespace",
552 if (cleanup_mode < ARRAY_SIZE(modes))
553 return modes[cleanup_mode];
555 BUG("invalid cleanup_mode provided (%d)", cleanup_mode);
558 void append_conflicts_hint(struct index_state *istate,
559 struct strbuf *msgbuf, enum commit_msg_cleanup_mode cleanup_mode)
563 if (cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS) {
564 strbuf_addch(msgbuf, '\n');
565 wt_status_append_cut_line(msgbuf);
566 strbuf_addch(msgbuf, comment_line_char);
569 strbuf_addch(msgbuf, '\n');
570 strbuf_commented_addf(msgbuf, "Conflicts:\n");
571 for (i = 0; i < istate->cache_nr;) {
572 const struct cache_entry *ce = istate->cache[i++];
574 strbuf_commented_addf(msgbuf, "\t%s\n", ce->name);
575 while (i < istate->cache_nr &&
576 !strcmp(ce->name, istate->cache[i]->name))
582 static int do_recursive_merge(struct repository *r,
583 struct commit *base, struct commit *next,
584 const char *base_label, const char *next_label,
585 struct object_id *head, struct strbuf *msgbuf,
586 struct replay_opts *opts)
588 struct merge_options o;
589 struct tree *result, *next_tree, *base_tree, *head_tree;
592 struct lock_file index_lock = LOCK_INIT;
594 if (repo_hold_locked_index(r, &index_lock, LOCK_REPORT_ON_ERROR) < 0)
599 init_merge_options(&o, r);
600 o.ancestor = base ? base_label : "(empty tree)";
602 o.branch2 = next ? next_label : "(empty tree)";
603 if (is_rebase_i(opts))
605 o.show_rename_progress = 1;
607 head_tree = parse_tree_indirect(head);
608 next_tree = next ? get_commit_tree(next) : empty_tree(r);
609 base_tree = base ? get_commit_tree(base) : empty_tree(r);
611 for (xopt = opts->xopts; xopt != opts->xopts + opts->xopts_nr; xopt++)
612 parse_merge_opt(&o, *xopt);
614 clean = merge_trees(&o,
616 next_tree, base_tree, &result);
617 if (is_rebase_i(opts) && clean <= 0)
618 fputs(o.obuf.buf, stdout);
619 strbuf_release(&o.obuf);
620 diff_warn_rename_limit("merge.renamelimit", o.needed_rename_limit, 0);
622 rollback_lock_file(&index_lock);
626 if (write_locked_index(r->index, &index_lock,
627 COMMIT_LOCK | SKIP_IF_UNCHANGED))
629 * TRANSLATORS: %s will be "revert", "cherry-pick" or
632 return error(_("%s: Unable to write new index file"),
633 _(action_name(opts)));
636 append_conflicts_hint(r->index, msgbuf,
637 opts->default_msg_cleanup);
642 static struct object_id *get_cache_tree_oid(struct index_state *istate)
644 if (!istate->cache_tree)
645 istate->cache_tree = cache_tree();
647 if (!cache_tree_fully_valid(istate->cache_tree))
648 if (cache_tree_update(istate, 0)) {
649 error(_("unable to update cache tree"));
653 return &istate->cache_tree->oid;
656 static int is_index_unchanged(struct repository *r)
658 struct object_id head_oid, *cache_tree_oid;
659 struct commit *head_commit;
660 struct index_state *istate = r->index;
662 if (!resolve_ref_unsafe("HEAD", RESOLVE_REF_READING, &head_oid, NULL))
663 return error(_("could not resolve HEAD commit"));
665 head_commit = lookup_commit(r, &head_oid);
668 * If head_commit is NULL, check_commit, called from
669 * lookup_commit, would have indicated that head_commit is not
670 * a commit object already. parse_commit() will return failure
671 * without further complaints in such a case. Otherwise, if
672 * the commit is invalid, parse_commit() will complain. So
673 * there is nothing for us to say here. Just return failure.
675 if (parse_commit(head_commit))
678 if (!(cache_tree_oid = get_cache_tree_oid(istate)))
681 return oideq(cache_tree_oid, get_commit_tree_oid(head_commit));
684 static int write_author_script(const char *message)
686 struct strbuf buf = STRBUF_INIT;
691 if (!*message || starts_with(message, "\n")) {
693 /* Missing 'author' line? */
694 unlink(rebase_path_author_script());
696 } else if (skip_prefix(message, "author ", &message))
698 else if ((eol = strchr(message, '\n')))
703 strbuf_addstr(&buf, "GIT_AUTHOR_NAME='");
704 while (*message && *message != '\n' && *message != '\r')
705 if (skip_prefix(message, " <", &message))
707 else if (*message != '\'')
708 strbuf_addch(&buf, *(message++));
710 strbuf_addf(&buf, "'\\%c'", *(message++));
711 strbuf_addstr(&buf, "'\nGIT_AUTHOR_EMAIL='");
712 while (*message && *message != '\n' && *message != '\r')
713 if (skip_prefix(message, "> ", &message))
715 else if (*message != '\'')
716 strbuf_addch(&buf, *(message++));
718 strbuf_addf(&buf, "'\\%c'", *(message++));
719 strbuf_addstr(&buf, "'\nGIT_AUTHOR_DATE='@");
720 while (*message && *message != '\n' && *message != '\r')
721 if (*message != '\'')
722 strbuf_addch(&buf, *(message++));
724 strbuf_addf(&buf, "'\\%c'", *(message++));
725 strbuf_addch(&buf, '\'');
726 res = write_message(buf.buf, buf.len, rebase_path_author_script(), 1);
727 strbuf_release(&buf);
732 * Take a series of KEY='VALUE' lines where VALUE part is
733 * sq-quoted, and append <KEY, VALUE> at the end of the string list
735 static int parse_key_value_squoted(char *buf, struct string_list *list)
738 struct string_list_item *item;
740 char *cp = strchr(buf, '=');
742 np = strchrnul(buf, '\n');
743 return error(_("no key present in '%.*s'"),
744 (int) (np - buf), buf);
746 np = strchrnul(cp, '\n');
748 item = string_list_append(list, buf);
750 buf = np + (*np == '\n');
754 return error(_("unable to dequote value of '%s'"),
756 item->util = xstrdup(cp);
762 * Reads and parses the state directory's "author-script" file, and sets name,
763 * email and date accordingly.
764 * Returns 0 on success, -1 if the file could not be parsed.
766 * The author script is of the format:
768 * GIT_AUTHOR_NAME='$author_name'
769 * GIT_AUTHOR_EMAIL='$author_email'
770 * GIT_AUTHOR_DATE='$author_date'
772 * where $author_name, $author_email and $author_date are quoted. We are strict
773 * with our parsing, as the file was meant to be eval'd in the old
774 * git-am.sh/git-rebase--interactive.sh scripts, and thus if the file differs
775 * from what this function expects, it is better to bail out than to do
776 * something that the user does not expect.
778 int read_author_script(const char *path, char **name, char **email, char **date,
781 struct strbuf buf = STRBUF_INIT;
782 struct string_list kv = STRING_LIST_INIT_DUP;
783 int retval = -1; /* assume failure */
784 int i, name_i = -2, email_i = -2, date_i = -2, err = 0;
786 if (strbuf_read_file(&buf, path, 256) <= 0) {
787 strbuf_release(&buf);
788 if (errno == ENOENT && allow_missing)
791 return error_errno(_("could not open '%s' for reading"),
795 if (parse_key_value_squoted(buf.buf, &kv))
798 for (i = 0; i < kv.nr; i++) {
799 if (!strcmp(kv.items[i].string, "GIT_AUTHOR_NAME")) {
801 name_i = error(_("'GIT_AUTHOR_NAME' already given"));
804 } else if (!strcmp(kv.items[i].string, "GIT_AUTHOR_EMAIL")) {
806 email_i = error(_("'GIT_AUTHOR_EMAIL' already given"));
809 } else if (!strcmp(kv.items[i].string, "GIT_AUTHOR_DATE")) {
811 date_i = error(_("'GIT_AUTHOR_DATE' already given"));
815 err = error(_("unknown variable '%s'"),
820 error(_("missing 'GIT_AUTHOR_NAME'"));
822 error(_("missing 'GIT_AUTHOR_EMAIL'"));
824 error(_("missing 'GIT_AUTHOR_DATE'"));
825 if (date_i < 0 || email_i < 0 || date_i < 0 || err)
827 *name = kv.items[name_i].util;
828 *email = kv.items[email_i].util;
829 *date = kv.items[date_i].util;
832 string_list_clear(&kv, !!retval);
833 strbuf_release(&buf);
838 * Read a GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL AND GIT_AUTHOR_DATE from a
839 * file with shell quoting into struct argv_array. Returns -1 on
840 * error, 0 otherwise.
842 static int read_env_script(struct argv_array *env)
844 char *name, *email, *date;
846 if (read_author_script(rebase_path_author_script(),
847 &name, &email, &date, 0))
850 argv_array_pushf(env, "GIT_AUTHOR_NAME=%s", name);
851 argv_array_pushf(env, "GIT_AUTHOR_EMAIL=%s", email);
852 argv_array_pushf(env, "GIT_AUTHOR_DATE=%s", date);
860 static char *get_author(const char *message)
865 a = find_commit_header(message, "author", &len);
867 return xmemdupz(a, len);
872 static const char staged_changes_advice[] =
873 N_("you have staged changes in your working tree\n"
874 "If these changes are meant to be squashed into the previous commit, run:\n"
876 " git commit --amend %s\n"
878 "If they are meant to go into a new commit, run:\n"
882 "In both cases, once you're done, continue with:\n"
884 " git rebase --continue\n");
886 #define ALLOW_EMPTY (1<<0)
887 #define EDIT_MSG (1<<1)
888 #define AMEND_MSG (1<<2)
889 #define CLEANUP_MSG (1<<3)
890 #define VERIFY_MSG (1<<4)
891 #define CREATE_ROOT_COMMIT (1<<5)
893 static int run_command_silent_on_success(struct child_process *cmd)
895 struct strbuf buf = STRBUF_INIT;
898 cmd->stdout_to_stderr = 1;
899 rc = pipe_command(cmd,
905 fputs(buf.buf, stderr);
906 strbuf_release(&buf);
911 * If we are cherry-pick, and if the merge did not result in
912 * hand-editing, we will hit this commit and inherit the original
913 * author date and name.
915 * If we are revert, or if our cherry-pick results in a hand merge,
916 * we had better say that the current user is responsible for that.
918 * An exception is when run_git_commit() is called during an
919 * interactive rebase: in that case, we will want to retain the
922 static int run_git_commit(struct repository *r,
924 struct replay_opts *opts,
927 struct child_process cmd = CHILD_PROCESS_INIT;
931 if (is_rebase_i(opts) && read_env_script(&cmd.env_array)) {
932 const char *gpg_opt = gpg_sign_opt_quoted(opts);
934 return error(_(staged_changes_advice),
938 argv_array_push(&cmd.args, "commit");
940 if (!(flags & VERIFY_MSG))
941 argv_array_push(&cmd.args, "-n");
942 if ((flags & AMEND_MSG))
943 argv_array_push(&cmd.args, "--amend");
945 argv_array_pushf(&cmd.args, "-S%s", opts->gpg_sign);
947 argv_array_pushl(&cmd.args, "-F", defmsg, NULL);
948 else if (!(flags & EDIT_MSG))
949 argv_array_pushl(&cmd.args, "-C", "HEAD", NULL);
950 if ((flags & CLEANUP_MSG))
951 argv_array_push(&cmd.args, "--cleanup=strip");
952 if ((flags & EDIT_MSG))
953 argv_array_push(&cmd.args, "-e");
954 else if (!(flags & CLEANUP_MSG) &&
955 !opts->signoff && !opts->record_origin &&
956 !opts->explicit_cleanup)
957 argv_array_push(&cmd.args, "--cleanup=verbatim");
959 if ((flags & ALLOW_EMPTY))
960 argv_array_push(&cmd.args, "--allow-empty");
962 if (!(flags & EDIT_MSG))
963 argv_array_push(&cmd.args, "--allow-empty-message");
965 if (is_rebase_i(opts) && !(flags & EDIT_MSG))
966 return run_command_silent_on_success(&cmd);
968 return run_command(&cmd);
971 static int rest_is_empty(const struct strbuf *sb, int start)
976 /* Check if the rest is just whitespace and Signed-off-by's. */
977 for (i = start; i < sb->len; i++) {
978 nl = memchr(sb->buf + i, '\n', sb->len - i);
984 if (strlen(sign_off_header) <= eol - i &&
985 starts_with(sb->buf + i, sign_off_header)) {
990 if (!isspace(sb->buf[i++]))
997 void cleanup_message(struct strbuf *msgbuf,
998 enum commit_msg_cleanup_mode cleanup_mode, int verbose)
1000 if (verbose || /* Truncate the message just before the diff, if any. */
1001 cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS)
1002 strbuf_setlen(msgbuf, wt_status_locate_end(msgbuf->buf, msgbuf->len));
1003 if (cleanup_mode != COMMIT_MSG_CLEANUP_NONE)
1004 strbuf_stripspace(msgbuf, cleanup_mode == COMMIT_MSG_CLEANUP_ALL);
1008 * Find out if the message in the strbuf contains only whitespace and
1009 * Signed-off-by lines.
1011 int message_is_empty(const struct strbuf *sb,
1012 enum commit_msg_cleanup_mode cleanup_mode)
1014 if (cleanup_mode == COMMIT_MSG_CLEANUP_NONE && sb->len)
1016 return rest_is_empty(sb, 0);
1020 * See if the user edited the message in the editor or left what
1021 * was in the template intact
1023 int template_untouched(const struct strbuf *sb, const char *template_file,
1024 enum commit_msg_cleanup_mode cleanup_mode)
1026 struct strbuf tmpl = STRBUF_INIT;
1029 if (cleanup_mode == COMMIT_MSG_CLEANUP_NONE && sb->len)
1032 if (!template_file || strbuf_read_file(&tmpl, template_file, 0) <= 0)
1035 strbuf_stripspace(&tmpl, cleanup_mode == COMMIT_MSG_CLEANUP_ALL);
1036 if (!skip_prefix(sb->buf, tmpl.buf, &start))
1038 strbuf_release(&tmpl);
1039 return rest_is_empty(sb, start - sb->buf);
1042 int update_head_with_reflog(const struct commit *old_head,
1043 const struct object_id *new_head,
1044 const char *action, const struct strbuf *msg,
1047 struct ref_transaction *transaction;
1048 struct strbuf sb = STRBUF_INIT;
1053 strbuf_addstr(&sb, action);
1054 strbuf_addstr(&sb, ": ");
1057 nl = strchr(msg->buf, '\n');
1059 strbuf_add(&sb, msg->buf, nl + 1 - msg->buf);
1061 strbuf_addbuf(&sb, msg);
1062 strbuf_addch(&sb, '\n');
1065 transaction = ref_transaction_begin(err);
1067 ref_transaction_update(transaction, "HEAD", new_head,
1068 old_head ? &old_head->object.oid : &null_oid,
1070 ref_transaction_commit(transaction, err)) {
1073 ref_transaction_free(transaction);
1074 strbuf_release(&sb);
1079 static int run_rewrite_hook(const struct object_id *oldoid,
1080 const struct object_id *newoid)
1082 struct child_process proc = CHILD_PROCESS_INIT;
1083 const char *argv[3];
1085 struct strbuf sb = STRBUF_INIT;
1087 argv[0] = find_hook("post-rewrite");
1096 proc.stdout_to_stderr = 1;
1097 proc.trace2_hook_name = "post-rewrite";
1099 code = start_command(&proc);
1102 strbuf_addf(&sb, "%s %s\n", oid_to_hex(oldoid), oid_to_hex(newoid));
1103 sigchain_push(SIGPIPE, SIG_IGN);
1104 write_in_full(proc.in, sb.buf, sb.len);
1106 strbuf_release(&sb);
1107 sigchain_pop(SIGPIPE);
1108 return finish_command(&proc);
1111 void commit_post_rewrite(struct repository *r,
1112 const struct commit *old_head,
1113 const struct object_id *new_head)
1115 struct notes_rewrite_cfg *cfg;
1117 cfg = init_copy_notes_for_rewrite("amend");
1119 /* we are amending, so old_head is not NULL */
1120 copy_note_for_rewrite(cfg, &old_head->object.oid, new_head);
1121 finish_copy_notes_for_rewrite(r, cfg, "Notes added by 'git commit --amend'");
1123 run_rewrite_hook(&old_head->object.oid, new_head);
1126 static int run_prepare_commit_msg_hook(struct repository *r,
1131 const char *name, *arg1 = NULL, *arg2 = NULL;
1133 name = git_path_commit_editmsg();
1134 if (write_message(msg->buf, msg->len, name, 0))
1143 if (run_commit_hook(0, r->index_file, "prepare-commit-msg", name,
1145 ret = error(_("'prepare-commit-msg' hook failed"));
1150 static const char implicit_ident_advice_noconfig[] =
1151 N_("Your name and email address were configured automatically based\n"
1152 "on your username and hostname. Please check that they are accurate.\n"
1153 "You can suppress this message by setting them explicitly. Run the\n"
1154 "following command and follow the instructions in your editor to edit\n"
1155 "your configuration file:\n"
1157 " git config --global --edit\n"
1159 "After doing this, you may fix the identity used for this commit with:\n"
1161 " git commit --amend --reset-author\n");
1163 static const char implicit_ident_advice_config[] =
1164 N_("Your name and email address were configured automatically based\n"
1165 "on your username and hostname. Please check that they are accurate.\n"
1166 "You can suppress this message by setting them explicitly:\n"
1168 " git config --global user.name \"Your Name\"\n"
1169 " git config --global user.email you@example.com\n"
1171 "After doing this, you may fix the identity used for this commit with:\n"
1173 " git commit --amend --reset-author\n");
1175 static const char *implicit_ident_advice(void)
1177 char *user_config = expand_user_path("~/.gitconfig", 0);
1178 char *xdg_config = xdg_config_home("config");
1179 int config_exists = file_exists(user_config) || file_exists(xdg_config);
1185 return _(implicit_ident_advice_config);
1187 return _(implicit_ident_advice_noconfig);
1191 void print_commit_summary(struct repository *r,
1193 const struct object_id *oid,
1196 struct rev_info rev;
1197 struct commit *commit;
1198 struct strbuf format = STRBUF_INIT;
1200 struct pretty_print_context pctx = {0};
1201 struct strbuf author_ident = STRBUF_INIT;
1202 struct strbuf committer_ident = STRBUF_INIT;
1204 commit = lookup_commit(r, oid);
1206 die(_("couldn't look up newly created commit"));
1207 if (parse_commit(commit))
1208 die(_("could not parse newly created commit"));
1210 strbuf_addstr(&format, "format:%h] %s");
1212 format_commit_message(commit, "%an <%ae>", &author_ident, &pctx);
1213 format_commit_message(commit, "%cn <%ce>", &committer_ident, &pctx);
1214 if (strbuf_cmp(&author_ident, &committer_ident)) {
1215 strbuf_addstr(&format, "\n Author: ");
1216 strbuf_addbuf_percentquote(&format, &author_ident);
1218 if (flags & SUMMARY_SHOW_AUTHOR_DATE) {
1219 struct strbuf date = STRBUF_INIT;
1221 format_commit_message(commit, "%ad", &date, &pctx);
1222 strbuf_addstr(&format, "\n Date: ");
1223 strbuf_addbuf_percentquote(&format, &date);
1224 strbuf_release(&date);
1226 if (!committer_ident_sufficiently_given()) {
1227 strbuf_addstr(&format, "\n Committer: ");
1228 strbuf_addbuf_percentquote(&format, &committer_ident);
1229 if (advice_implicit_identity) {
1230 strbuf_addch(&format, '\n');
1231 strbuf_addstr(&format, implicit_ident_advice());
1234 strbuf_release(&author_ident);
1235 strbuf_release(&committer_ident);
1237 repo_init_revisions(r, &rev, prefix);
1238 setup_revisions(0, NULL, &rev, NULL);
1241 rev.diffopt.output_format =
1242 DIFF_FORMAT_SHORTSTAT | DIFF_FORMAT_SUMMARY;
1244 rev.verbose_header = 1;
1245 rev.show_root_diff = 1;
1246 get_commit_format(format.buf, &rev);
1247 rev.always_show_header = 0;
1248 rev.diffopt.detect_rename = DIFF_DETECT_RENAME;
1249 rev.diffopt.break_opt = 0;
1250 diff_setup_done(&rev.diffopt);
1252 head = resolve_ref_unsafe("HEAD", 0, NULL, NULL);
1254 die_errno(_("unable to resolve HEAD after creating commit"));
1255 if (!strcmp(head, "HEAD"))
1256 head = _("detached HEAD");
1258 skip_prefix(head, "refs/heads/", &head);
1259 printf("[%s%s ", head, (flags & SUMMARY_INITIAL_COMMIT) ?
1260 _(" (root-commit)") : "");
1262 if (!log_tree_commit(&rev, commit)) {
1263 rev.always_show_header = 1;
1264 rev.use_terminator = 1;
1265 log_tree_commit(&rev, commit);
1268 strbuf_release(&format);
1271 static int parse_head(struct repository *r, struct commit **head)
1273 struct commit *current_head;
1274 struct object_id oid;
1276 if (get_oid("HEAD", &oid)) {
1277 current_head = NULL;
1279 current_head = lookup_commit_reference(r, &oid);
1281 return error(_("could not parse HEAD"));
1282 if (!oideq(&oid, ¤t_head->object.oid)) {
1283 warning(_("HEAD %s is not a commit!"),
1286 if (parse_commit(current_head))
1287 return error(_("could not parse HEAD commit"));
1289 *head = current_head;
1295 * Try to commit without forking 'git commit'. In some cases we need
1296 * to run 'git commit' to display an error message
1299 * -1 - error unable to commit
1301 * 1 - run 'git commit'
1303 static int try_to_commit(struct repository *r,
1304 struct strbuf *msg, const char *author,
1305 struct replay_opts *opts, unsigned int flags,
1306 struct object_id *oid)
1308 struct object_id tree;
1309 struct commit *current_head = NULL;
1310 struct commit_list *parents = NULL;
1311 struct commit_extra_header *extra = NULL;
1312 struct strbuf err = STRBUF_INIT;
1313 struct strbuf commit_msg = STRBUF_INIT;
1314 char *amend_author = NULL;
1315 const char *hook_commit = NULL;
1316 enum commit_msg_cleanup_mode cleanup;
1319 if (parse_head(r, ¤t_head))
1322 if (flags & AMEND_MSG) {
1323 const char *exclude_gpgsig[] = { "gpgsig", NULL };
1324 const char *out_enc = get_commit_output_encoding();
1325 const char *message = logmsg_reencode(current_head, NULL,
1329 const char *orig_message = NULL;
1331 find_commit_subject(message, &orig_message);
1333 strbuf_addstr(msg, orig_message);
1334 hook_commit = "HEAD";
1336 author = amend_author = get_author(message);
1337 unuse_commit_buffer(current_head, message);
1339 res = error(_("unable to parse commit author"));
1342 parents = copy_commit_list(current_head->parents);
1343 extra = read_commit_extra_headers(current_head, exclude_gpgsig);
1344 } else if (current_head &&
1345 (!(flags & CREATE_ROOT_COMMIT) || (flags & AMEND_MSG))) {
1346 commit_list_insert(current_head, &parents);
1349 if (write_index_as_tree(&tree, r->index, r->index_file, 0, NULL)) {
1350 res = error(_("git write-tree failed to write a tree"));
1354 if (!(flags & ALLOW_EMPTY) && oideq(current_head ?
1355 get_commit_tree_oid(current_head) :
1356 the_hash_algo->empty_tree, &tree)) {
1357 res = 1; /* run 'git commit' to display error message */
1361 if (find_hook("prepare-commit-msg")) {
1362 res = run_prepare_commit_msg_hook(r, msg, hook_commit);
1365 if (strbuf_read_file(&commit_msg, git_path_commit_editmsg(),
1367 res = error_errno(_("unable to read commit message "
1369 git_path_commit_editmsg());
1375 if (flags & CLEANUP_MSG)
1376 cleanup = COMMIT_MSG_CLEANUP_ALL;
1377 else if ((opts->signoff || opts->record_origin) &&
1378 !opts->explicit_cleanup)
1379 cleanup = COMMIT_MSG_CLEANUP_SPACE;
1381 cleanup = opts->default_msg_cleanup;
1383 if (cleanup != COMMIT_MSG_CLEANUP_NONE)
1384 strbuf_stripspace(msg, cleanup == COMMIT_MSG_CLEANUP_ALL);
1385 if ((flags & EDIT_MSG) && message_is_empty(msg, cleanup)) {
1386 res = 1; /* run 'git commit' to display error message */
1392 if (commit_tree_extended(msg->buf, msg->len, &tree, parents,
1393 oid, author, opts->gpg_sign, extra)) {
1394 res = error(_("failed to write commit object"));
1398 if (update_head_with_reflog(current_head, oid,
1399 getenv("GIT_REFLOG_ACTION"), msg, &err)) {
1400 res = error("%s", err.buf);
1404 if (flags & AMEND_MSG)
1405 commit_post_rewrite(r, current_head, oid);
1408 free_commit_extra_headers(extra);
1409 strbuf_release(&err);
1410 strbuf_release(&commit_msg);
1416 static int do_commit(struct repository *r,
1417 const char *msg_file, const char *author,
1418 struct replay_opts *opts, unsigned int flags)
1422 if (!(flags & EDIT_MSG) && !(flags & VERIFY_MSG)) {
1423 struct object_id oid;
1424 struct strbuf sb = STRBUF_INIT;
1426 if (msg_file && strbuf_read_file(&sb, msg_file, 2048) < 0)
1427 return error_errno(_("unable to read commit message "
1431 res = try_to_commit(r, msg_file ? &sb : NULL,
1432 author, opts, flags, &oid);
1433 strbuf_release(&sb);
1435 unlink(git_path_cherry_pick_head(r));
1436 unlink(git_path_merge_msg(r));
1437 if (!is_rebase_i(opts))
1438 print_commit_summary(r, NULL, &oid,
1439 SUMMARY_SHOW_AUTHOR_DATE);
1444 return run_git_commit(r, msg_file, opts, flags);
1449 static int is_original_commit_empty(struct commit *commit)
1451 const struct object_id *ptree_oid;
1453 if (parse_commit(commit))
1454 return error(_("could not parse commit %s"),
1455 oid_to_hex(&commit->object.oid));
1456 if (commit->parents) {
1457 struct commit *parent = commit->parents->item;
1458 if (parse_commit(parent))
1459 return error(_("could not parse parent commit %s"),
1460 oid_to_hex(&parent->object.oid));
1461 ptree_oid = get_commit_tree_oid(parent);
1463 ptree_oid = the_hash_algo->empty_tree; /* commit is root */
1466 return oideq(ptree_oid, get_commit_tree_oid(commit));
1470 * Do we run "git commit" with "--allow-empty"?
1472 static int allow_empty(struct repository *r,
1473 struct replay_opts *opts,
1474 struct commit *commit)
1476 int index_unchanged, empty_commit;
1481 * (1) we do not allow empty at all and error out.
1483 * (2) we allow ones that were initially empty, but
1484 * forbid the ones that become empty;
1486 * (3) we allow both.
1488 if (!opts->allow_empty)
1489 return 0; /* let "git commit" barf as necessary */
1491 index_unchanged = is_index_unchanged(r);
1492 if (index_unchanged < 0)
1493 return index_unchanged;
1494 if (!index_unchanged)
1495 return 0; /* we do not have to say --allow-empty */
1497 if (opts->keep_redundant_commits)
1500 empty_commit = is_original_commit_empty(commit);
1501 if (empty_commit < 0)
1502 return empty_commit;
1512 } todo_command_info[] = {
1529 static const char *command_to_string(const enum todo_command command)
1531 if (command < TODO_COMMENT)
1532 return todo_command_info[command].str;
1533 die(_("unknown command: %d"), command);
1536 static char command_to_char(const enum todo_command command)
1538 if (command < TODO_COMMENT && todo_command_info[command].c)
1539 return todo_command_info[command].c;
1540 return comment_line_char;
1543 static int is_noop(const enum todo_command command)
1545 return TODO_NOOP <= command;
1548 static int is_fixup(enum todo_command command)
1550 return command == TODO_FIXUP || command == TODO_SQUASH;
1553 /* Does this command create a (non-merge) commit? */
1554 static int is_pick_or_similar(enum todo_command command)
1569 static int update_squash_messages(struct repository *r,
1570 enum todo_command command,
1571 struct commit *commit,
1572 struct replay_opts *opts)
1574 struct strbuf buf = STRBUF_INIT;
1576 const char *message, *body;
1578 if (opts->current_fixup_count > 0) {
1579 struct strbuf header = STRBUF_INIT;
1582 if (strbuf_read_file(&buf, rebase_path_squash_msg(), 9) <= 0)
1583 return error(_("could not read '%s'"),
1584 rebase_path_squash_msg());
1586 eol = buf.buf[0] != comment_line_char ?
1587 buf.buf : strchrnul(buf.buf, '\n');
1589 strbuf_addf(&header, "%c ", comment_line_char);
1590 strbuf_addf(&header, _("This is a combination of %d commits."),
1591 opts->current_fixup_count + 2);
1592 strbuf_splice(&buf, 0, eol - buf.buf, header.buf, header.len);
1593 strbuf_release(&header);
1595 struct object_id head;
1596 struct commit *head_commit;
1597 const char *head_message, *body;
1599 if (get_oid("HEAD", &head))
1600 return error(_("need a HEAD to fixup"));
1601 if (!(head_commit = lookup_commit_reference(r, &head)))
1602 return error(_("could not read HEAD"));
1603 if (!(head_message = get_commit_buffer(head_commit, NULL)))
1604 return error(_("could not read HEAD's commit message"));
1606 find_commit_subject(head_message, &body);
1607 if (write_message(body, strlen(body),
1608 rebase_path_fixup_msg(), 0)) {
1609 unuse_commit_buffer(head_commit, head_message);
1610 return error(_("cannot write '%s'"),
1611 rebase_path_fixup_msg());
1614 strbuf_addf(&buf, "%c ", comment_line_char);
1615 strbuf_addf(&buf, _("This is a combination of %d commits."), 2);
1616 strbuf_addf(&buf, "\n%c ", comment_line_char);
1617 strbuf_addstr(&buf, _("This is the 1st commit message:"));
1618 strbuf_addstr(&buf, "\n\n");
1619 strbuf_addstr(&buf, body);
1621 unuse_commit_buffer(head_commit, head_message);
1624 if (!(message = get_commit_buffer(commit, NULL)))
1625 return error(_("could not read commit message of %s"),
1626 oid_to_hex(&commit->object.oid));
1627 find_commit_subject(message, &body);
1629 if (command == TODO_SQUASH) {
1630 unlink(rebase_path_fixup_msg());
1631 strbuf_addf(&buf, "\n%c ", comment_line_char);
1632 strbuf_addf(&buf, _("This is the commit message #%d:"),
1633 ++opts->current_fixup_count + 1);
1634 strbuf_addstr(&buf, "\n\n");
1635 strbuf_addstr(&buf, body);
1636 } else if (command == TODO_FIXUP) {
1637 strbuf_addf(&buf, "\n%c ", comment_line_char);
1638 strbuf_addf(&buf, _("The commit message #%d will be skipped:"),
1639 ++opts->current_fixup_count + 1);
1640 strbuf_addstr(&buf, "\n\n");
1641 strbuf_add_commented_lines(&buf, body, strlen(body));
1643 return error(_("unknown command: %d"), command);
1644 unuse_commit_buffer(commit, message);
1646 res = write_message(buf.buf, buf.len, rebase_path_squash_msg(), 0);
1647 strbuf_release(&buf);
1650 strbuf_addf(&opts->current_fixups, "%s%s %s",
1651 opts->current_fixups.len ? "\n" : "",
1652 command_to_string(command),
1653 oid_to_hex(&commit->object.oid));
1654 res = write_message(opts->current_fixups.buf,
1655 opts->current_fixups.len,
1656 rebase_path_current_fixups(), 0);
1662 static void flush_rewritten_pending(void)
1664 struct strbuf buf = STRBUF_INIT;
1665 struct object_id newoid;
1668 if (strbuf_read_file(&buf, rebase_path_rewritten_pending(), (GIT_MAX_HEXSZ + 1) * 2) > 0 &&
1669 !get_oid("HEAD", &newoid) &&
1670 (out = fopen_or_warn(rebase_path_rewritten_list(), "a"))) {
1671 char *bol = buf.buf, *eol;
1674 eol = strchrnul(bol, '\n');
1675 fprintf(out, "%.*s %s\n", (int)(eol - bol),
1676 bol, oid_to_hex(&newoid));
1682 unlink(rebase_path_rewritten_pending());
1684 strbuf_release(&buf);
1687 static void record_in_rewritten(struct object_id *oid,
1688 enum todo_command next_command)
1690 FILE *out = fopen_or_warn(rebase_path_rewritten_pending(), "a");
1695 fprintf(out, "%s\n", oid_to_hex(oid));
1698 if (!is_fixup(next_command))
1699 flush_rewritten_pending();
1702 static int do_pick_commit(struct repository *r,
1703 enum todo_command command,
1704 struct commit *commit,
1705 struct replay_opts *opts,
1706 int final_fixup, int *check_todo)
1708 unsigned int flags = opts->edit ? EDIT_MSG : 0;
1709 const char *msg_file = opts->edit ? NULL : git_path_merge_msg(r);
1710 struct object_id head;
1711 struct commit *base, *next, *parent;
1712 const char *base_label, *next_label;
1713 char *author = NULL;
1714 struct commit_message msg = { NULL, NULL, NULL, NULL };
1715 struct strbuf msgbuf = STRBUF_INIT;
1716 int res, unborn = 0, reword = 0, allow;
1718 if (opts->no_commit) {
1720 * We do not intend to commit immediately. We just want to
1721 * merge the differences in, so let's compute the tree
1722 * that represents the "current" state for merge-recursive
1725 if (write_index_as_tree(&head, r->index, r->index_file, 0, NULL))
1726 return error(_("your index file is unmerged."));
1728 unborn = get_oid("HEAD", &head);
1729 /* Do we want to generate a root commit? */
1730 if (is_pick_or_similar(command) && opts->have_squash_onto &&
1731 oideq(&head, &opts->squash_onto)) {
1732 if (is_fixup(command))
1733 return error(_("cannot fixup root commit"));
1734 flags |= CREATE_ROOT_COMMIT;
1737 oidcpy(&head, the_hash_algo->empty_tree);
1738 if (index_differs_from(r, unborn ? empty_tree_oid_hex() : "HEAD",
1740 return error_dirty_index(r, opts);
1742 discard_index(r->index);
1744 if (!commit->parents)
1746 else if (commit->parents->next) {
1747 /* Reverting or cherry-picking a merge commit */
1749 struct commit_list *p;
1751 if (!opts->mainline)
1752 return error(_("commit %s is a merge but no -m option was given."),
1753 oid_to_hex(&commit->object.oid));
1755 for (cnt = 1, p = commit->parents;
1756 cnt != opts->mainline && p;
1759 if (cnt != opts->mainline || !p)
1760 return error(_("commit %s does not have parent %d"),
1761 oid_to_hex(&commit->object.oid), opts->mainline);
1763 } else if (1 < opts->mainline)
1765 * Non-first parent explicitly specified as mainline for
1768 return error(_("commit %s does not have parent %d"),
1769 oid_to_hex(&commit->object.oid), opts->mainline);
1771 parent = commit->parents->item;
1773 if (get_message(commit, &msg) != 0)
1774 return error(_("cannot get commit message for %s"),
1775 oid_to_hex(&commit->object.oid));
1777 if (opts->allow_ff && !is_fixup(command) &&
1778 ((parent && oideq(&parent->object.oid, &head)) ||
1779 (!parent && unborn))) {
1780 if (is_rebase_i(opts))
1781 write_author_script(msg.message);
1782 res = fast_forward_to(r, &commit->object.oid, &head, unborn,
1784 if (res || command != TODO_REWORD)
1788 goto fast_forward_edit;
1790 if (parent && parse_commit(parent) < 0)
1791 /* TRANSLATORS: The first %s will be a "todo" command like
1792 "revert" or "pick", the second %s a SHA1. */
1793 return error(_("%s: cannot parse parent commit %s"),
1794 command_to_string(command),
1795 oid_to_hex(&parent->object.oid));
1798 * "commit" is an existing commit. We would want to apply
1799 * the difference it introduces since its first parent "prev"
1800 * on top of the current HEAD if we are cherry-pick. Or the
1801 * reverse of it if we are revert.
1804 if (command == TODO_REVERT) {
1806 base_label = msg.label;
1808 next_label = msg.parent_label;
1809 strbuf_addstr(&msgbuf, "Revert \"");
1810 strbuf_addstr(&msgbuf, msg.subject);
1811 strbuf_addstr(&msgbuf, "\"\n\nThis reverts commit ");
1812 strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1814 if (commit->parents && commit->parents->next) {
1815 strbuf_addstr(&msgbuf, ", reversing\nchanges made to ");
1816 strbuf_addstr(&msgbuf, oid_to_hex(&parent->object.oid));
1818 strbuf_addstr(&msgbuf, ".\n");
1823 base_label = msg.parent_label;
1825 next_label = msg.label;
1827 /* Append the commit log message to msgbuf. */
1828 if (find_commit_subject(msg.message, &p))
1829 strbuf_addstr(&msgbuf, p);
1831 if (opts->record_origin) {
1832 strbuf_complete_line(&msgbuf);
1833 if (!has_conforming_footer(&msgbuf, NULL, 0))
1834 strbuf_addch(&msgbuf, '\n');
1835 strbuf_addstr(&msgbuf, cherry_picked_prefix);
1836 strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1837 strbuf_addstr(&msgbuf, ")\n");
1839 if (!is_fixup(command))
1840 author = get_author(msg.message);
1843 if (command == TODO_REWORD)
1845 else if (is_fixup(command)) {
1846 if (update_squash_messages(r, command, commit, opts))
1850 msg_file = rebase_path_squash_msg();
1851 else if (file_exists(rebase_path_fixup_msg())) {
1852 flags |= CLEANUP_MSG;
1853 msg_file = rebase_path_fixup_msg();
1855 const char *dest = git_path_squash_msg(r);
1857 if (copy_file(dest, rebase_path_squash_msg(), 0666))
1858 return error(_("could not rename '%s' to '%s'"),
1859 rebase_path_squash_msg(), dest);
1860 unlink(git_path_merge_msg(r));
1866 if (opts->signoff && !is_fixup(command))
1867 append_signoff(&msgbuf, 0, 0);
1869 if (is_rebase_i(opts) && write_author_script(msg.message) < 0)
1871 else if (!opts->strategy || !strcmp(opts->strategy, "recursive") || command == TODO_REVERT) {
1872 res = do_recursive_merge(r, base, next, base_label, next_label,
1873 &head, &msgbuf, opts);
1877 res |= write_message(msgbuf.buf, msgbuf.len,
1878 git_path_merge_msg(r), 0);
1880 struct commit_list *common = NULL;
1881 struct commit_list *remotes = NULL;
1883 res = write_message(msgbuf.buf, msgbuf.len,
1884 git_path_merge_msg(r), 0);
1886 commit_list_insert(base, &common);
1887 commit_list_insert(next, &remotes);
1888 res |= try_merge_command(r, opts->strategy,
1889 opts->xopts_nr, (const char **)opts->xopts,
1890 common, oid_to_hex(&head), remotes);
1891 free_commit_list(common);
1892 free_commit_list(remotes);
1894 strbuf_release(&msgbuf);
1897 * If the merge was clean or if it failed due to conflict, we write
1898 * CHERRY_PICK_HEAD for the subsequent invocation of commit to use.
1899 * However, if the merge did not even start, then we don't want to
1902 if (command == TODO_PICK && !opts->no_commit && (res == 0 || res == 1) &&
1903 update_ref(NULL, "CHERRY_PICK_HEAD", &commit->object.oid, NULL,
1904 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1906 if (command == TODO_REVERT && ((opts->no_commit && res == 0) || res == 1) &&
1907 update_ref(NULL, "REVERT_HEAD", &commit->object.oid, NULL,
1908 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1912 error(command == TODO_REVERT
1913 ? _("could not revert %s... %s")
1914 : _("could not apply %s... %s"),
1915 short_commit_name(commit), msg.subject);
1916 print_advice(r, res == 1, opts);
1917 repo_rerere(r, opts->allow_rerere_auto);
1921 allow = allow_empty(r, opts, commit);
1926 flags |= ALLOW_EMPTY;
1927 if (!opts->no_commit) {
1928 if (author || command == TODO_REVERT || (flags & AMEND_MSG))
1929 res = do_commit(r, msg_file, author, opts, flags);
1931 res = error(_("unable to parse commit author"));
1932 *check_todo = !!(flags & EDIT_MSG);
1933 if (!res && reword) {
1935 res = run_git_commit(r, NULL, opts, EDIT_MSG |
1936 VERIFY_MSG | AMEND_MSG |
1937 (flags & ALLOW_EMPTY));
1943 if (!res && final_fixup) {
1944 unlink(rebase_path_fixup_msg());
1945 unlink(rebase_path_squash_msg());
1946 unlink(rebase_path_current_fixups());
1947 strbuf_reset(&opts->current_fixups);
1948 opts->current_fixup_count = 0;
1952 free_message(commit, &msg);
1954 update_abort_safety_file();
1959 static int prepare_revs(struct replay_opts *opts)
1962 * picking (but not reverting) ranges (but not individual revisions)
1963 * should be done in reverse
1965 if (opts->action == REPLAY_PICK && !opts->revs->no_walk)
1966 opts->revs->reverse ^= 1;
1968 if (prepare_revision_walk(opts->revs))
1969 return error(_("revision walk setup failed"));
1974 static int read_and_refresh_cache(struct repository *r,
1975 struct replay_opts *opts)
1977 struct lock_file index_lock = LOCK_INIT;
1978 int index_fd = repo_hold_locked_index(r, &index_lock, 0);
1979 if (repo_read_index(r) < 0) {
1980 rollback_lock_file(&index_lock);
1981 return error(_("git %s: failed to read the index"),
1982 _(action_name(opts)));
1984 refresh_index(r->index, REFRESH_QUIET|REFRESH_UNMERGED, NULL, NULL, NULL);
1985 if (index_fd >= 0) {
1986 if (write_locked_index(r->index, &index_lock,
1987 COMMIT_LOCK | SKIP_IF_UNCHANGED)) {
1988 return error(_("git %s: failed to refresh the index"),
1989 _(action_name(opts)));
1995 enum todo_item_flags {
1996 TODO_EDIT_MERGE_MSG = 1
1999 void todo_list_release(struct todo_list *todo_list)
2001 strbuf_release(&todo_list->buf);
2002 FREE_AND_NULL(todo_list->items);
2003 todo_list->nr = todo_list->alloc = 0;
2006 static struct todo_item *append_new_todo(struct todo_list *todo_list)
2008 ALLOC_GROW(todo_list->items, todo_list->nr + 1, todo_list->alloc);
2009 return todo_list->items + todo_list->nr++;
2012 const char *todo_item_get_arg(struct todo_list *todo_list,
2013 struct todo_item *item)
2015 return todo_list->buf.buf + item->arg_offset;
2018 static int parse_insn_line(struct repository *r, struct todo_item *item,
2019 const char *buf, const char *bol, char *eol)
2021 struct object_id commit_oid;
2022 char *end_of_object_name;
2023 int i, saved, status, padding;
2028 bol += strspn(bol, " \t");
2030 if (bol == eol || *bol == '\r' || *bol == comment_line_char) {
2031 item->command = TODO_COMMENT;
2032 item->commit = NULL;
2033 item->arg_offset = bol - buf;
2034 item->arg_len = eol - bol;
2038 for (i = 0; i < TODO_COMMENT; i++)
2039 if (skip_prefix(bol, todo_command_info[i].str, &bol)) {
2042 } else if ((bol + 1 == eol || bol[1] == ' ') &&
2043 *bol == todo_command_info[i].c) {
2048 if (i >= TODO_COMMENT)
2051 /* Eat up extra spaces/ tabs before object name */
2052 padding = strspn(bol, " \t");
2055 if (item->command == TODO_NOOP || item->command == TODO_BREAK) {
2057 return error(_("%s does not accept arguments: '%s'"),
2058 command_to_string(item->command), bol);
2059 item->commit = NULL;
2060 item->arg_offset = bol - buf;
2061 item->arg_len = eol - bol;
2066 return error(_("missing arguments for %s"),
2067 command_to_string(item->command));
2069 if (item->command == TODO_EXEC || item->command == TODO_LABEL ||
2070 item->command == TODO_RESET) {
2071 item->commit = NULL;
2072 item->arg_offset = bol - buf;
2073 item->arg_len = (int)(eol - bol);
2077 if (item->command == TODO_MERGE) {
2078 if (skip_prefix(bol, "-C", &bol))
2079 bol += strspn(bol, " \t");
2080 else if (skip_prefix(bol, "-c", &bol)) {
2081 bol += strspn(bol, " \t");
2082 item->flags |= TODO_EDIT_MERGE_MSG;
2084 item->flags |= TODO_EDIT_MERGE_MSG;
2085 item->commit = NULL;
2086 item->arg_offset = bol - buf;
2087 item->arg_len = (int)(eol - bol);
2092 end_of_object_name = (char *) bol + strcspn(bol, " \t\n");
2093 saved = *end_of_object_name;
2094 *end_of_object_name = '\0';
2095 status = get_oid(bol, &commit_oid);
2096 *end_of_object_name = saved;
2098 bol = end_of_object_name + strspn(end_of_object_name, " \t");
2099 item->arg_offset = bol - buf;
2100 item->arg_len = (int)(eol - bol);
2103 return error(_("could not parse '%.*s'"),
2104 (int)(end_of_object_name - bol), bol);
2106 item->commit = lookup_commit_reference(r, &commit_oid);
2107 return !item->commit;
2110 int sequencer_get_last_command(struct repository *r, enum replay_action *action)
2112 struct todo_item item;
2114 const char *todo_file;
2115 struct strbuf buf = STRBUF_INIT;
2118 todo_file = git_path_todo_file();
2119 if (strbuf_read_file(&buf, todo_file, 0) < 0) {
2120 if (errno == ENOENT)
2123 return error_errno("unable to open '%s'", todo_file);
2125 eol = strchrnul(buf.buf, '\n');
2126 if (buf.buf != eol && eol[-1] == '\r')
2127 eol--; /* strip Carriage Return */
2128 if (parse_insn_line(r, &item, buf.buf, buf.buf, eol))
2130 if (item.command == TODO_PICK)
2131 *action = REPLAY_PICK;
2132 else if (item.command == TODO_REVERT)
2133 *action = REPLAY_REVERT;
2140 strbuf_release(&buf);
2145 int todo_list_parse_insn_buffer(struct repository *r, char *buf,
2146 struct todo_list *todo_list)
2148 struct todo_item *item;
2149 char *p = buf, *next_p;
2150 int i, res = 0, fixup_okay = file_exists(rebase_path_done());
2152 todo_list->current = todo_list->nr = 0;
2154 for (i = 1; *p; i++, p = next_p) {
2155 char *eol = strchrnul(p, '\n');
2157 next_p = *eol ? eol + 1 /* skip LF */ : eol;
2159 if (p != eol && eol[-1] == '\r')
2160 eol--; /* strip Carriage Return */
2162 item = append_new_todo(todo_list);
2163 item->offset_in_buf = p - todo_list->buf.buf;
2164 if (parse_insn_line(r, item, buf, p, eol)) {
2165 res = error(_("invalid line %d: %.*s"),
2166 i, (int)(eol - p), p);
2167 item->command = TODO_COMMENT + 1;
2168 item->arg_offset = p - buf;
2169 item->arg_len = (int)(eol - p);
2170 item->commit = NULL;
2175 else if (is_fixup(item->command))
2176 return error(_("cannot '%s' without a previous commit"),
2177 command_to_string(item->command));
2178 else if (!is_noop(item->command))
2185 static int count_commands(struct todo_list *todo_list)
2189 for (i = 0; i < todo_list->nr; i++)
2190 if (todo_list->items[i].command != TODO_COMMENT)
2196 static int get_item_line_offset(struct todo_list *todo_list, int index)
2198 return index < todo_list->nr ?
2199 todo_list->items[index].offset_in_buf : todo_list->buf.len;
2202 static const char *get_item_line(struct todo_list *todo_list, int index)
2204 return todo_list->buf.buf + get_item_line_offset(todo_list, index);
2207 static int get_item_line_length(struct todo_list *todo_list, int index)
2209 return get_item_line_offset(todo_list, index + 1)
2210 - get_item_line_offset(todo_list, index);
2213 static ssize_t strbuf_read_file_or_whine(struct strbuf *sb, const char *path)
2218 fd = open(path, O_RDONLY);
2220 return error_errno(_("could not open '%s'"), path);
2221 len = strbuf_read(sb, fd, 0);
2224 return error(_("could not read '%s'."), path);
2228 static int have_finished_the_last_pick(void)
2230 struct strbuf buf = STRBUF_INIT;
2232 const char *todo_path = git_path_todo_file();
2235 if (strbuf_read_file(&buf, todo_path, 0) < 0) {
2236 if (errno == ENOENT) {
2239 error_errno("unable to open '%s'", todo_path);
2243 /* If there is only one line then we are done */
2244 eol = strchr(buf.buf, '\n');
2245 if (!eol || !eol[1])
2248 strbuf_release(&buf);
2253 void sequencer_post_commit_cleanup(struct repository *r)
2255 struct replay_opts opts = REPLAY_OPTS_INIT;
2256 int need_cleanup = 0;
2258 if (file_exists(git_path_cherry_pick_head(r))) {
2259 unlink(git_path_cherry_pick_head(r));
2260 opts.action = REPLAY_PICK;
2264 if (file_exists(git_path_revert_head(r))) {
2265 unlink(git_path_revert_head(r));
2266 opts.action = REPLAY_REVERT;
2273 if (!have_finished_the_last_pick())
2276 sequencer_remove_state(&opts);
2279 static int read_populate_todo(struct repository *r,
2280 struct todo_list *todo_list,
2281 struct replay_opts *opts)
2284 const char *todo_file = get_todo_path(opts);
2287 strbuf_reset(&todo_list->buf);
2288 if (strbuf_read_file_or_whine(&todo_list->buf, todo_file) < 0)
2291 res = stat(todo_file, &st);
2293 return error(_("could not stat '%s'"), todo_file);
2294 fill_stat_data(&todo_list->stat, &st);
2296 res = todo_list_parse_insn_buffer(r, todo_list->buf.buf, todo_list);
2298 if (is_rebase_i(opts))
2299 return error(_("please fix this using "
2300 "'git rebase --edit-todo'."));
2301 return error(_("unusable instruction sheet: '%s'"), todo_file);
2304 if (!todo_list->nr &&
2305 (!is_rebase_i(opts) || !file_exists(rebase_path_done())))
2306 return error(_("no commits parsed."));
2308 if (!is_rebase_i(opts)) {
2309 enum todo_command valid =
2310 opts->action == REPLAY_PICK ? TODO_PICK : TODO_REVERT;
2313 for (i = 0; i < todo_list->nr; i++)
2314 if (valid == todo_list->items[i].command)
2316 else if (valid == TODO_PICK)
2317 return error(_("cannot cherry-pick during a revert."));
2319 return error(_("cannot revert during a cherry-pick."));
2322 if (is_rebase_i(opts)) {
2323 struct todo_list done = TODO_LIST_INIT;
2324 FILE *f = fopen_or_warn(rebase_path_msgtotal(), "w");
2326 if (strbuf_read_file(&done.buf, rebase_path_done(), 0) > 0 &&
2327 !todo_list_parse_insn_buffer(r, done.buf.buf, &done))
2328 todo_list->done_nr = count_commands(&done);
2330 todo_list->done_nr = 0;
2332 todo_list->total_nr = todo_list->done_nr
2333 + count_commands(todo_list);
2334 todo_list_release(&done);
2337 fprintf(f, "%d\n", todo_list->total_nr);
2345 static int git_config_string_dup(char **dest,
2346 const char *var, const char *value)
2349 return config_error_nonbool(var);
2351 *dest = xstrdup(value);
2355 static int populate_opts_cb(const char *key, const char *value, void *data)
2357 struct replay_opts *opts = data;
2362 else if (!strcmp(key, "options.no-commit"))
2363 opts->no_commit = git_config_bool_or_int(key, value, &error_flag);
2364 else if (!strcmp(key, "options.edit"))
2365 opts->edit = git_config_bool_or_int(key, value, &error_flag);
2366 else if (!strcmp(key, "options.allow-empty"))
2368 git_config_bool_or_int(key, value, &error_flag);
2369 else if (!strcmp(key, "options.allow-empty-message"))
2370 opts->allow_empty_message =
2371 git_config_bool_or_int(key, value, &error_flag);
2372 else if (!strcmp(key, "options.keep-redundant-commits"))
2373 opts->keep_redundant_commits =
2374 git_config_bool_or_int(key, value, &error_flag);
2375 else if (!strcmp(key, "options.signoff"))
2376 opts->signoff = git_config_bool_or_int(key, value, &error_flag);
2377 else if (!strcmp(key, "options.record-origin"))
2378 opts->record_origin = git_config_bool_or_int(key, value, &error_flag);
2379 else if (!strcmp(key, "options.allow-ff"))
2380 opts->allow_ff = git_config_bool_or_int(key, value, &error_flag);
2381 else if (!strcmp(key, "options.mainline"))
2382 opts->mainline = git_config_int(key, value);
2383 else if (!strcmp(key, "options.strategy"))
2384 git_config_string_dup(&opts->strategy, key, value);
2385 else if (!strcmp(key, "options.gpg-sign"))
2386 git_config_string_dup(&opts->gpg_sign, key, value);
2387 else if (!strcmp(key, "options.strategy-option")) {
2388 ALLOC_GROW(opts->xopts, opts->xopts_nr + 1, opts->xopts_alloc);
2389 opts->xopts[opts->xopts_nr++] = xstrdup(value);
2390 } else if (!strcmp(key, "options.allow-rerere-auto"))
2391 opts->allow_rerere_auto =
2392 git_config_bool_or_int(key, value, &error_flag) ?
2393 RERERE_AUTOUPDATE : RERERE_NOAUTOUPDATE;
2394 else if (!strcmp(key, "options.default-msg-cleanup")) {
2395 opts->explicit_cleanup = 1;
2396 opts->default_msg_cleanup = get_cleanup_mode(value, 1);
2398 return error(_("invalid key: %s"), key);
2401 return error(_("invalid value for %s: %s"), key, value);
2406 void parse_strategy_opts(struct replay_opts *opts, char *raw_opts)
2409 char *strategy_opts_string = raw_opts;
2411 if (*strategy_opts_string == ' ')
2412 strategy_opts_string++;
2414 opts->xopts_nr = split_cmdline(strategy_opts_string,
2415 (const char ***)&opts->xopts);
2416 for (i = 0; i < opts->xopts_nr; i++) {
2417 const char *arg = opts->xopts[i];
2419 skip_prefix(arg, "--", &arg);
2420 opts->xopts[i] = xstrdup(arg);
2424 static void read_strategy_opts(struct replay_opts *opts, struct strbuf *buf)
2427 if (!read_oneliner(buf, rebase_path_strategy(), 0))
2429 opts->strategy = strbuf_detach(buf, NULL);
2430 if (!read_oneliner(buf, rebase_path_strategy_opts(), 0))
2433 parse_strategy_opts(opts, buf->buf);
2436 static int read_populate_opts(struct replay_opts *opts)
2438 if (is_rebase_i(opts)) {
2439 struct strbuf buf = STRBUF_INIT;
2441 if (read_oneliner(&buf, rebase_path_gpg_sign_opt(), 1)) {
2442 if (!starts_with(buf.buf, "-S"))
2445 free(opts->gpg_sign);
2446 opts->gpg_sign = xstrdup(buf.buf + 2);
2451 if (read_oneliner(&buf, rebase_path_allow_rerere_autoupdate(), 1)) {
2452 if (!strcmp(buf.buf, "--rerere-autoupdate"))
2453 opts->allow_rerere_auto = RERERE_AUTOUPDATE;
2454 else if (!strcmp(buf.buf, "--no-rerere-autoupdate"))
2455 opts->allow_rerere_auto = RERERE_NOAUTOUPDATE;
2459 if (file_exists(rebase_path_verbose()))
2462 if (file_exists(rebase_path_quiet()))
2465 if (file_exists(rebase_path_signoff())) {
2470 if (file_exists(rebase_path_reschedule_failed_exec()))
2471 opts->reschedule_failed_exec = 1;
2473 read_strategy_opts(opts, &buf);
2474 strbuf_release(&buf);
2476 if (read_oneliner(&opts->current_fixups,
2477 rebase_path_current_fixups(), 1)) {
2478 const char *p = opts->current_fixups.buf;
2479 opts->current_fixup_count = 1;
2480 while ((p = strchr(p, '\n'))) {
2481 opts->current_fixup_count++;
2486 if (read_oneliner(&buf, rebase_path_squash_onto(), 0)) {
2487 if (get_oid_hex(buf.buf, &opts->squash_onto) < 0)
2488 return error(_("unusable squash-onto"));
2489 opts->have_squash_onto = 1;
2495 if (!file_exists(git_path_opts_file()))
2498 * The function git_parse_source(), called from git_config_from_file(),
2499 * may die() in case of a syntactically incorrect file. We do not care
2500 * about this case, though, because we wrote that file ourselves, so we
2501 * are pretty certain that it is syntactically correct.
2503 if (git_config_from_file(populate_opts_cb, git_path_opts_file(), opts) < 0)
2504 return error(_("malformed options sheet: '%s'"),
2505 git_path_opts_file());
2509 static void write_strategy_opts(struct replay_opts *opts)
2512 struct strbuf buf = STRBUF_INIT;
2514 for (i = 0; i < opts->xopts_nr; ++i)
2515 strbuf_addf(&buf, " --%s", opts->xopts[i]);
2517 write_file(rebase_path_strategy_opts(), "%s\n", buf.buf);
2518 strbuf_release(&buf);
2521 int write_basic_state(struct replay_opts *opts, const char *head_name,
2522 struct commit *onto, const char *orig_head)
2524 const char *quiet = getenv("GIT_QUIET");
2527 write_file(rebase_path_head_name(), "%s\n", head_name);
2529 write_file(rebase_path_onto(), "%s\n",
2530 oid_to_hex(&onto->object.oid));
2532 write_file(rebase_path_orig_head(), "%s\n", orig_head);
2535 write_file(rebase_path_quiet(), "%s\n", quiet);
2537 write_file(rebase_path_verbose(), "%s", "");
2539 write_file(rebase_path_strategy(), "%s\n", opts->strategy);
2540 if (opts->xopts_nr > 0)
2541 write_strategy_opts(opts);
2543 if (opts->allow_rerere_auto == RERERE_AUTOUPDATE)
2544 write_file(rebase_path_allow_rerere_autoupdate(), "--rerere-autoupdate\n");
2545 else if (opts->allow_rerere_auto == RERERE_NOAUTOUPDATE)
2546 write_file(rebase_path_allow_rerere_autoupdate(), "--no-rerere-autoupdate\n");
2549 write_file(rebase_path_gpg_sign_opt(), "-S%s\n", opts->gpg_sign);
2551 write_file(rebase_path_signoff(), "--signoff\n");
2552 if (opts->reschedule_failed_exec)
2553 write_file(rebase_path_reschedule_failed_exec(), "%s", "");
2558 static int walk_revs_populate_todo(struct todo_list *todo_list,
2559 struct replay_opts *opts)
2561 enum todo_command command = opts->action == REPLAY_PICK ?
2562 TODO_PICK : TODO_REVERT;
2563 const char *command_string = todo_command_info[command].str;
2564 struct commit *commit;
2566 if (prepare_revs(opts))
2569 while ((commit = get_revision(opts->revs))) {
2570 struct todo_item *item = append_new_todo(todo_list);
2571 const char *commit_buffer = get_commit_buffer(commit, NULL);
2572 const char *subject;
2575 item->command = command;
2576 item->commit = commit;
2577 item->arg_offset = 0;
2579 item->offset_in_buf = todo_list->buf.len;
2580 subject_len = find_commit_subject(commit_buffer, &subject);
2581 strbuf_addf(&todo_list->buf, "%s %s %.*s\n", command_string,
2582 short_commit_name(commit), subject_len, subject);
2583 unuse_commit_buffer(commit, commit_buffer);
2587 return error(_("empty commit set passed"));
2592 static int create_seq_dir(void)
2594 if (file_exists(git_path_seq_dir())) {
2595 error(_("a cherry-pick or revert is already in progress"));
2596 advise(_("try \"git cherry-pick (--continue | --quit | --abort)\""));
2598 } else if (mkdir(git_path_seq_dir(), 0777) < 0)
2599 return error_errno(_("could not create sequencer directory '%s'"),
2600 git_path_seq_dir());
2604 static int save_head(const char *head)
2606 struct lock_file head_lock = LOCK_INIT;
2607 struct strbuf buf = STRBUF_INIT;
2611 fd = hold_lock_file_for_update(&head_lock, git_path_head_file(), 0);
2613 return error_errno(_("could not lock HEAD"));
2614 strbuf_addf(&buf, "%s\n", head);
2615 written = write_in_full(fd, buf.buf, buf.len);
2616 strbuf_release(&buf);
2618 error_errno(_("could not write to '%s'"), git_path_head_file());
2619 rollback_lock_file(&head_lock);
2622 if (commit_lock_file(&head_lock) < 0)
2623 return error(_("failed to finalize '%s'"), git_path_head_file());
2627 static int rollback_is_safe(void)
2629 struct strbuf sb = STRBUF_INIT;
2630 struct object_id expected_head, actual_head;
2632 if (strbuf_read_file(&sb, git_path_abort_safety_file(), 0) >= 0) {
2634 if (get_oid_hex(sb.buf, &expected_head)) {
2635 strbuf_release(&sb);
2636 die(_("could not parse %s"), git_path_abort_safety_file());
2638 strbuf_release(&sb);
2640 else if (errno == ENOENT)
2641 oidclr(&expected_head);
2643 die_errno(_("could not read '%s'"), git_path_abort_safety_file());
2645 if (get_oid("HEAD", &actual_head))
2646 oidclr(&actual_head);
2648 return oideq(&actual_head, &expected_head);
2651 static int reset_for_rollback(const struct object_id *oid)
2653 const char *argv[4]; /* reset --merge <arg> + NULL */
2656 argv[1] = "--merge";
2657 argv[2] = oid_to_hex(oid);
2659 return run_command_v_opt(argv, RUN_GIT_CMD);
2662 static int rollback_single_pick(struct repository *r)
2664 struct object_id head_oid;
2666 if (!file_exists(git_path_cherry_pick_head(r)) &&
2667 !file_exists(git_path_revert_head(r)))
2668 return error(_("no cherry-pick or revert in progress"));
2669 if (read_ref_full("HEAD", 0, &head_oid, NULL))
2670 return error(_("cannot resolve HEAD"));
2671 if (is_null_oid(&head_oid))
2672 return error(_("cannot abort from a branch yet to be born"));
2673 return reset_for_rollback(&head_oid);
2676 int sequencer_rollback(struct repository *r, struct replay_opts *opts)
2679 struct object_id oid;
2680 struct strbuf buf = STRBUF_INIT;
2683 f = fopen(git_path_head_file(), "r");
2684 if (!f && errno == ENOENT) {
2686 * There is no multiple-cherry-pick in progress.
2687 * If CHERRY_PICK_HEAD or REVERT_HEAD indicates
2688 * a single-cherry-pick in progress, abort that.
2690 return rollback_single_pick(r);
2693 return error_errno(_("cannot open '%s'"), git_path_head_file());
2694 if (strbuf_getline_lf(&buf, f)) {
2695 error(_("cannot read '%s': %s"), git_path_head_file(),
2696 ferror(f) ? strerror(errno) : _("unexpected end of file"));
2701 if (parse_oid_hex(buf.buf, &oid, &p) || *p != '\0') {
2702 error(_("stored pre-cherry-pick HEAD file '%s' is corrupt"),
2703 git_path_head_file());
2706 if (is_null_oid(&oid)) {
2707 error(_("cannot abort from a branch yet to be born"));
2711 if (!rollback_is_safe()) {
2712 /* Do not error, just do not rollback */
2713 warning(_("You seem to have moved HEAD. "
2714 "Not rewinding, check your HEAD!"));
2716 if (reset_for_rollback(&oid))
2718 strbuf_release(&buf);
2719 return sequencer_remove_state(opts);
2721 strbuf_release(&buf);
2725 static int save_todo(struct todo_list *todo_list, struct replay_opts *opts)
2727 struct lock_file todo_lock = LOCK_INIT;
2728 const char *todo_path = get_todo_path(opts);
2729 int next = todo_list->current, offset, fd;
2732 * rebase -i writes "git-rebase-todo" without the currently executing
2733 * command, appending it to "done" instead.
2735 if (is_rebase_i(opts))
2738 fd = hold_lock_file_for_update(&todo_lock, todo_path, 0);
2740 return error_errno(_("could not lock '%s'"), todo_path);
2741 offset = get_item_line_offset(todo_list, next);
2742 if (write_in_full(fd, todo_list->buf.buf + offset,
2743 todo_list->buf.len - offset) < 0)
2744 return error_errno(_("could not write to '%s'"), todo_path);
2745 if (commit_lock_file(&todo_lock) < 0)
2746 return error(_("failed to finalize '%s'"), todo_path);
2748 if (is_rebase_i(opts) && next > 0) {
2749 const char *done = rebase_path_done();
2750 int fd = open(done, O_CREAT | O_WRONLY | O_APPEND, 0666);
2755 if (write_in_full(fd, get_item_line(todo_list, next - 1),
2756 get_item_line_length(todo_list, next - 1))
2758 ret = error_errno(_("could not write to '%s'"), done);
2760 ret = error_errno(_("failed to finalize '%s'"), done);
2766 static int save_opts(struct replay_opts *opts)
2768 const char *opts_file = git_path_opts_file();
2771 if (opts->no_commit)
2772 res |= git_config_set_in_file_gently(opts_file,
2773 "options.no-commit", "true");
2775 res |= git_config_set_in_file_gently(opts_file,
2776 "options.edit", "true");
2777 if (opts->allow_empty)
2778 res |= git_config_set_in_file_gently(opts_file,
2779 "options.allow-empty", "true");
2780 if (opts->allow_empty_message)
2781 res |= git_config_set_in_file_gently(opts_file,
2782 "options.allow-empty-message", "true");
2783 if (opts->keep_redundant_commits)
2784 res |= git_config_set_in_file_gently(opts_file,
2785 "options.keep-redundant-commits", "true");
2787 res |= git_config_set_in_file_gently(opts_file,
2788 "options.signoff", "true");
2789 if (opts->record_origin)
2790 res |= git_config_set_in_file_gently(opts_file,
2791 "options.record-origin", "true");
2793 res |= git_config_set_in_file_gently(opts_file,
2794 "options.allow-ff", "true");
2795 if (opts->mainline) {
2796 struct strbuf buf = STRBUF_INIT;
2797 strbuf_addf(&buf, "%d", opts->mainline);
2798 res |= git_config_set_in_file_gently(opts_file,
2799 "options.mainline", buf.buf);
2800 strbuf_release(&buf);
2803 res |= git_config_set_in_file_gently(opts_file,
2804 "options.strategy", opts->strategy);
2806 res |= git_config_set_in_file_gently(opts_file,
2807 "options.gpg-sign", opts->gpg_sign);
2810 for (i = 0; i < opts->xopts_nr; i++)
2811 res |= git_config_set_multivar_in_file_gently(opts_file,
2812 "options.strategy-option",
2813 opts->xopts[i], "^$", 0);
2815 if (opts->allow_rerere_auto)
2816 res |= git_config_set_in_file_gently(opts_file,
2817 "options.allow-rerere-auto",
2818 opts->allow_rerere_auto == RERERE_AUTOUPDATE ?
2821 if (opts->explicit_cleanup)
2822 res |= git_config_set_in_file_gently(opts_file,
2823 "options.default-msg-cleanup",
2824 describe_cleanup_mode(opts->default_msg_cleanup));
2828 static int make_patch(struct repository *r,
2829 struct commit *commit,
2830 struct replay_opts *opts)
2832 struct strbuf buf = STRBUF_INIT;
2833 struct rev_info log_tree_opt;
2834 const char *subject, *p;
2837 p = short_commit_name(commit);
2838 if (write_message(p, strlen(p), rebase_path_stopped_sha(), 1) < 0)
2840 if (update_ref("rebase", "REBASE_HEAD", &commit->object.oid,
2841 NULL, REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
2842 res |= error(_("could not update %s"), "REBASE_HEAD");
2844 strbuf_addf(&buf, "%s/patch", get_dir(opts));
2845 memset(&log_tree_opt, 0, sizeof(log_tree_opt));
2846 repo_init_revisions(r, &log_tree_opt, NULL);
2847 log_tree_opt.abbrev = 0;
2848 log_tree_opt.diff = 1;
2849 log_tree_opt.diffopt.output_format = DIFF_FORMAT_PATCH;
2850 log_tree_opt.disable_stdin = 1;
2851 log_tree_opt.no_commit_id = 1;
2852 log_tree_opt.diffopt.file = fopen(buf.buf, "w");
2853 log_tree_opt.diffopt.use_color = GIT_COLOR_NEVER;
2854 if (!log_tree_opt.diffopt.file)
2855 res |= error_errno(_("could not open '%s'"), buf.buf);
2857 res |= log_tree_commit(&log_tree_opt, commit);
2858 fclose(log_tree_opt.diffopt.file);
2862 strbuf_addf(&buf, "%s/message", get_dir(opts));
2863 if (!file_exists(buf.buf)) {
2864 const char *commit_buffer = get_commit_buffer(commit, NULL);
2865 find_commit_subject(commit_buffer, &subject);
2866 res |= write_message(subject, strlen(subject), buf.buf, 1);
2867 unuse_commit_buffer(commit, commit_buffer);
2869 strbuf_release(&buf);
2874 static int intend_to_amend(void)
2876 struct object_id head;
2879 if (get_oid("HEAD", &head))
2880 return error(_("cannot read HEAD"));
2882 p = oid_to_hex(&head);
2883 return write_message(p, strlen(p), rebase_path_amend(), 1);
2886 static int error_with_patch(struct repository *r,
2887 struct commit *commit,
2888 const char *subject, int subject_len,
2889 struct replay_opts *opts,
2890 int exit_code, int to_amend)
2893 if (make_patch(r, commit, opts))
2895 } else if (copy_file(rebase_path_message(),
2896 git_path_merge_msg(r), 0666))
2897 return error(_("unable to copy '%s' to '%s'"),
2898 git_path_merge_msg(r), rebase_path_message());
2901 if (intend_to_amend())
2905 _("You can amend the commit now, with\n"
2907 " git commit --amend %s\n"
2909 "Once you are satisfied with your changes, run\n"
2911 " git rebase --continue\n"),
2912 gpg_sign_opt_quoted(opts));
2913 } else if (exit_code) {
2915 fprintf_ln(stderr, _("Could not apply %s... %.*s"),
2916 short_commit_name(commit), subject_len, subject);
2919 * We don't have the hash of the parent so
2920 * just print the line from the todo file.
2922 fprintf_ln(stderr, _("Could not merge %.*s"),
2923 subject_len, subject);
2929 static int error_failed_squash(struct repository *r,
2930 struct commit *commit,
2931 struct replay_opts *opts,
2933 const char *subject)
2935 if (copy_file(rebase_path_message(), rebase_path_squash_msg(), 0666))
2936 return error(_("could not copy '%s' to '%s'"),
2937 rebase_path_squash_msg(), rebase_path_message());
2938 unlink(git_path_merge_msg(r));
2939 if (copy_file(git_path_merge_msg(r), rebase_path_message(), 0666))
2940 return error(_("could not copy '%s' to '%s'"),
2941 rebase_path_message(),
2942 git_path_merge_msg(r));
2943 return error_with_patch(r, commit, subject, subject_len, opts, 1, 0);
2946 static int do_exec(struct repository *r, const char *command_line)
2948 struct argv_array child_env = ARGV_ARRAY_INIT;
2949 const char *child_argv[] = { NULL, NULL };
2952 fprintf(stderr, "Executing: %s\n", command_line);
2953 child_argv[0] = command_line;
2954 argv_array_pushf(&child_env, "GIT_DIR=%s", absolute_path(get_git_dir()));
2955 argv_array_pushf(&child_env, "GIT_WORK_TREE=%s",
2956 absolute_path(get_git_work_tree()));
2957 status = run_command_v_opt_cd_env(child_argv, RUN_USING_SHELL, NULL,
2960 /* force re-reading of the cache */
2961 if (discard_index(r->index) < 0 || repo_read_index(r) < 0)
2962 return error(_("could not read index"));
2964 dirty = require_clean_work_tree(r, "rebase", NULL, 1, 1);
2967 warning(_("execution failed: %s\n%s"
2968 "You can fix the problem, and then run\n"
2970 " git rebase --continue\n"
2973 dirty ? N_("and made changes to the index and/or the "
2974 "working tree\n") : "");
2976 /* command not found */
2979 warning(_("execution succeeded: %s\nbut "
2980 "left changes to the index and/or the working tree\n"
2981 "Commit or stash your changes, and then run\n"
2983 " git rebase --continue\n"
2984 "\n"), command_line);
2988 argv_array_clear(&child_env);
2993 static int safe_append(const char *filename, const char *fmt, ...)
2996 struct lock_file lock = LOCK_INIT;
2997 int fd = hold_lock_file_for_update(&lock, filename,
2998 LOCK_REPORT_ON_ERROR);
2999 struct strbuf buf = STRBUF_INIT;
3004 if (strbuf_read_file(&buf, filename, 0) < 0 && errno != ENOENT) {
3005 error_errno(_("could not read '%s'"), filename);
3006 rollback_lock_file(&lock);
3009 strbuf_complete(&buf, '\n');
3011 strbuf_vaddf(&buf, fmt, ap);
3014 if (write_in_full(fd, buf.buf, buf.len) < 0) {
3015 error_errno(_("could not write to '%s'"), filename);
3016 strbuf_release(&buf);
3017 rollback_lock_file(&lock);
3020 if (commit_lock_file(&lock) < 0) {
3021 strbuf_release(&buf);
3022 rollback_lock_file(&lock);
3023 return error(_("failed to finalize '%s'"), filename);
3026 strbuf_release(&buf);
3030 static int do_label(struct repository *r, const char *name, int len)
3032 struct ref_store *refs = get_main_ref_store(r);
3033 struct ref_transaction *transaction;
3034 struct strbuf ref_name = STRBUF_INIT, err = STRBUF_INIT;
3035 struct strbuf msg = STRBUF_INIT;
3037 struct object_id head_oid;
3039 if (len == 1 && *name == '#')
3040 return error(_("illegal label name: '%.*s'"), len, name);
3042 strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
3043 strbuf_addf(&msg, "rebase -i (label) '%.*s'", len, name);
3045 transaction = ref_store_transaction_begin(refs, &err);
3047 error("%s", err.buf);
3049 } else if (get_oid("HEAD", &head_oid)) {
3050 error(_("could not read HEAD"));
3052 } else if (ref_transaction_update(transaction, ref_name.buf, &head_oid,
3053 NULL, 0, msg.buf, &err) < 0 ||
3054 ref_transaction_commit(transaction, &err)) {
3055 error("%s", err.buf);
3058 ref_transaction_free(transaction);
3059 strbuf_release(&err);
3060 strbuf_release(&msg);
3063 ret = safe_append(rebase_path_refs_to_delete(),
3064 "%s\n", ref_name.buf);
3065 strbuf_release(&ref_name);
3070 static const char *reflog_message(struct replay_opts *opts,
3071 const char *sub_action, const char *fmt, ...);
3073 static int do_reset(struct repository *r,
3074 const char *name, int len,
3075 struct replay_opts *opts)
3077 struct strbuf ref_name = STRBUF_INIT;
3078 struct object_id oid;
3079 struct lock_file lock = LOCK_INIT;
3080 struct tree_desc desc;
3082 struct unpack_trees_options unpack_tree_opts;
3085 if (repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0)
3088 if (len == 10 && !strncmp("[new root]", name, len)) {
3089 if (!opts->have_squash_onto) {
3091 if (commit_tree("", 0, the_hash_algo->empty_tree,
3092 NULL, &opts->squash_onto,
3094 return error(_("writing fake root commit"));
3095 opts->have_squash_onto = 1;
3096 hex = oid_to_hex(&opts->squash_onto);
3097 if (write_message(hex, strlen(hex),
3098 rebase_path_squash_onto(), 0))
3099 return error(_("writing squash-onto"));
3101 oidcpy(&oid, &opts->squash_onto);
3105 /* Determine the length of the label */
3106 for (i = 0; i < len; i++)
3107 if (isspace(name[i]))
3111 strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
3112 if (get_oid(ref_name.buf, &oid) &&
3113 get_oid(ref_name.buf + strlen("refs/rewritten/"), &oid)) {
3114 error(_("could not read '%s'"), ref_name.buf);
3115 rollback_lock_file(&lock);
3116 strbuf_release(&ref_name);
3121 memset(&unpack_tree_opts, 0, sizeof(unpack_tree_opts));
3122 setup_unpack_trees_porcelain(&unpack_tree_opts, "reset");
3123 unpack_tree_opts.head_idx = 1;
3124 unpack_tree_opts.src_index = r->index;
3125 unpack_tree_opts.dst_index = r->index;
3126 unpack_tree_opts.fn = oneway_merge;
3127 unpack_tree_opts.merge = 1;
3128 unpack_tree_opts.update = 1;
3130 if (repo_read_index_unmerged(r)) {
3131 rollback_lock_file(&lock);
3132 strbuf_release(&ref_name);
3133 return error_resolve_conflict(_(action_name(opts)));
3136 if (!fill_tree_descriptor(&desc, &oid)) {
3137 error(_("failed to find tree of %s"), oid_to_hex(&oid));
3138 rollback_lock_file(&lock);
3139 free((void *)desc.buffer);
3140 strbuf_release(&ref_name);
3144 if (unpack_trees(1, &desc, &unpack_tree_opts)) {
3145 rollback_lock_file(&lock);
3146 free((void *)desc.buffer);
3147 strbuf_release(&ref_name);
3151 tree = parse_tree_indirect(&oid);
3152 prime_cache_tree(r, r->index, tree);
3154 if (write_locked_index(r->index, &lock, COMMIT_LOCK) < 0)
3155 ret = error(_("could not write index"));
3156 free((void *)desc.buffer);
3159 ret = update_ref(reflog_message(opts, "reset", "'%.*s'",
3160 len, name), "HEAD", &oid,
3161 NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3163 strbuf_release(&ref_name);
3167 static struct commit *lookup_label(const char *label, int len,
3170 struct commit *commit;
3173 strbuf_addf(buf, "refs/rewritten/%.*s", len, label);
3174 commit = lookup_commit_reference_by_name(buf->buf);
3176 /* fall back to non-rewritten ref or commit */
3177 strbuf_splice(buf, 0, strlen("refs/rewritten/"), "", 0);
3178 commit = lookup_commit_reference_by_name(buf->buf);
3182 error(_("could not resolve '%s'"), buf->buf);
3187 static int do_merge(struct repository *r,
3188 struct commit *commit,
3189 const char *arg, int arg_len,
3190 int flags, struct replay_opts *opts)
3192 int run_commit_flags = (flags & TODO_EDIT_MERGE_MSG) ?
3193 EDIT_MSG | VERIFY_MSG : 0;
3194 struct strbuf ref_name = STRBUF_INIT;
3195 struct commit *head_commit, *merge_commit, *i;
3196 struct commit_list *bases, *j, *reversed = NULL;
3197 struct commit_list *to_merge = NULL, **tail = &to_merge;
3198 struct merge_options o;
3199 int merge_arg_len, oneline_offset, can_fast_forward, ret, k;
3200 static struct lock_file lock;
3203 if (repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0) {
3208 head_commit = lookup_commit_reference_by_name("HEAD");
3210 ret = error(_("cannot merge without a current revision"));
3215 * For octopus merges, the arg starts with the list of revisions to be
3216 * merged. The list is optionally followed by '#' and the oneline.
3218 merge_arg_len = oneline_offset = arg_len;
3219 for (p = arg; p - arg < arg_len; p += strspn(p, " \t\n")) {
3222 if (*p == '#' && (!p[1] || isspace(p[1]))) {
3223 p += 1 + strspn(p + 1, " \t\n");
3224 oneline_offset = p - arg;
3227 k = strcspn(p, " \t\n");
3230 merge_commit = lookup_label(p, k, &ref_name);
3231 if (!merge_commit) {
3232 ret = error(_("unable to parse '%.*s'"), k, p);
3235 tail = &commit_list_insert(merge_commit, tail)->next;
3237 merge_arg_len = p - arg;
3241 ret = error(_("nothing to merge: '%.*s'"), arg_len, arg);
3245 if (opts->have_squash_onto &&
3246 oideq(&head_commit->object.oid, &opts->squash_onto)) {
3248 * When the user tells us to "merge" something into a
3249 * "[new root]", let's simply fast-forward to the merge head.
3251 rollback_lock_file(&lock);
3253 ret = error(_("octopus merge cannot be executed on "
3254 "top of a [new root]"));
3256 ret = fast_forward_to(r, &to_merge->item->object.oid,
3257 &head_commit->object.oid, 0,
3263 const char *message = get_commit_buffer(commit, NULL);
3268 ret = error(_("could not get commit message of '%s'"),
3269 oid_to_hex(&commit->object.oid));
3272 write_author_script(message);
3273 find_commit_subject(message, &body);
3275 ret = write_message(body, len, git_path_merge_msg(r), 0);
3276 unuse_commit_buffer(commit, message);
3278 error_errno(_("could not write '%s'"),
3279 git_path_merge_msg(r));
3283 struct strbuf buf = STRBUF_INIT;
3286 strbuf_addf(&buf, "author %s", git_author_info(0));
3287 write_author_script(buf.buf);
3290 if (oneline_offset < arg_len) {
3291 p = arg + oneline_offset;
3292 len = arg_len - oneline_offset;
3294 strbuf_addf(&buf, "Merge %s '%.*s'",
3295 to_merge->next ? "branches" : "branch",
3296 merge_arg_len, arg);
3301 ret = write_message(p, len, git_path_merge_msg(r), 0);
3302 strbuf_release(&buf);
3304 error_errno(_("could not write '%s'"),
3305 git_path_merge_msg(r));
3311 * If HEAD is not identical to the first parent of the original merge
3312 * commit, we cannot fast-forward.
3314 can_fast_forward = opts->allow_ff && commit && commit->parents &&
3315 oideq(&commit->parents->item->object.oid,
3316 &head_commit->object.oid);
3319 * If any merge head is different from the original one, we cannot
3322 if (can_fast_forward) {
3323 struct commit_list *p = commit->parents->next;
3325 for (j = to_merge; j && p; j = j->next, p = p->next)
3326 if (!oideq(&j->item->object.oid,
3327 &p->item->object.oid)) {
3328 can_fast_forward = 0;
3332 * If the number of merge heads differs from the original merge
3333 * commit, we cannot fast-forward.
3336 can_fast_forward = 0;
3339 if (can_fast_forward) {
3340 rollback_lock_file(&lock);
3341 ret = fast_forward_to(r, &commit->object.oid,
3342 &head_commit->object.oid, 0, opts);
3346 if (to_merge->next) {
3348 struct child_process cmd = CHILD_PROCESS_INIT;
3350 if (read_env_script(&cmd.env_array)) {
3351 const char *gpg_opt = gpg_sign_opt_quoted(opts);
3353 ret = error(_(staged_changes_advice), gpg_opt, gpg_opt);
3358 argv_array_push(&cmd.args, "merge");
3359 argv_array_push(&cmd.args, "-s");
3360 argv_array_push(&cmd.args, "octopus");
3361 argv_array_push(&cmd.args, "--no-edit");
3362 argv_array_push(&cmd.args, "--no-ff");
3363 argv_array_push(&cmd.args, "--no-log");
3364 argv_array_push(&cmd.args, "--no-stat");
3365 argv_array_push(&cmd.args, "-F");
3366 argv_array_push(&cmd.args, git_path_merge_msg(r));
3368 argv_array_push(&cmd.args, opts->gpg_sign);
3370 /* Add the tips to be merged */
3371 for (j = to_merge; j; j = j->next)
3372 argv_array_push(&cmd.args,
3373 oid_to_hex(&j->item->object.oid));
3375 strbuf_release(&ref_name);
3376 unlink(git_path_cherry_pick_head(r));
3377 rollback_lock_file(&lock);
3379 rollback_lock_file(&lock);
3380 ret = run_command(&cmd);
3382 /* force re-reading of the cache */
3383 if (!ret && (discard_index(r->index) < 0 ||
3384 repo_read_index(r) < 0))
3385 ret = error(_("could not read index"));
3389 merge_commit = to_merge->item;
3390 bases = get_merge_bases(head_commit, merge_commit);
3391 if (bases && oideq(&merge_commit->object.oid,
3392 &bases->item->object.oid)) {
3394 /* skip merging an ancestor of HEAD */
3398 write_message(oid_to_hex(&merge_commit->object.oid), GIT_SHA1_HEXSZ,
3399 git_path_merge_head(r), 0);
3400 write_message("no-ff", 5, git_path_merge_mode(r), 0);
3402 for (j = bases; j; j = j->next)
3403 commit_list_insert(j->item, &reversed);
3404 free_commit_list(bases);
3407 init_merge_options(&o, r);
3409 o.branch2 = ref_name.buf;
3410 o.buffer_output = 2;
3412 ret = merge_recursive(&o, head_commit, merge_commit, reversed, &i);
3414 fputs(o.obuf.buf, stdout);
3415 strbuf_release(&o.obuf);
3417 error(_("could not even attempt to merge '%.*s'"),
3418 merge_arg_len, arg);
3422 * The return value of merge_recursive() is 1 on clean, and 0 on
3425 * Let's reverse that, so that do_merge() returns 0 upon success and
3426 * 1 upon failed merge (keeping the return value -1 for the cases where
3427 * we will want to reschedule the `merge` command).
3431 if (r->index->cache_changed &&
3432 write_locked_index(r->index, &lock, COMMIT_LOCK)) {
3433 ret = error(_("merge: Unable to write new index file"));
3437 rollback_lock_file(&lock);
3439 repo_rerere(r, opts->allow_rerere_auto);
3442 * In case of problems, we now want to return a positive
3443 * value (a negative one would indicate that the `merge`
3444 * command needs to be rescheduled).
3446 ret = !!run_git_commit(r, git_path_merge_msg(r), opts,
3450 strbuf_release(&ref_name);
3451 rollback_lock_file(&lock);
3452 free_commit_list(to_merge);
3456 static int is_final_fixup(struct todo_list *todo_list)
3458 int i = todo_list->current;
3460 if (!is_fixup(todo_list->items[i].command))
3463 while (++i < todo_list->nr)
3464 if (is_fixup(todo_list->items[i].command))
3466 else if (!is_noop(todo_list->items[i].command))
3471 static enum todo_command peek_command(struct todo_list *todo_list, int offset)
3475 for (i = todo_list->current + offset; i < todo_list->nr; i++)
3476 if (!is_noop(todo_list->items[i].command))
3477 return todo_list->items[i].command;
3482 static int apply_autostash(struct replay_opts *opts)
3484 struct strbuf stash_sha1 = STRBUF_INIT;
3485 struct child_process child = CHILD_PROCESS_INIT;
3488 if (!read_oneliner(&stash_sha1, rebase_path_autostash(), 1)) {
3489 strbuf_release(&stash_sha1);
3492 strbuf_trim(&stash_sha1);
3495 child.no_stdout = 1;
3496 child.no_stderr = 1;
3497 argv_array_push(&child.args, "stash");
3498 argv_array_push(&child.args, "apply");
3499 argv_array_push(&child.args, stash_sha1.buf);
3500 if (!run_command(&child))
3501 fprintf(stderr, _("Applied autostash.\n"));
3503 struct child_process store = CHILD_PROCESS_INIT;
3506 argv_array_push(&store.args, "stash");
3507 argv_array_push(&store.args, "store");
3508 argv_array_push(&store.args, "-m");
3509 argv_array_push(&store.args, "autostash");
3510 argv_array_push(&store.args, "-q");
3511 argv_array_push(&store.args, stash_sha1.buf);
3512 if (run_command(&store))
3513 ret = error(_("cannot store %s"), stash_sha1.buf);
3516 _("Applying autostash resulted in conflicts.\n"
3517 "Your changes are safe in the stash.\n"
3518 "You can run \"git stash pop\" or"
3519 " \"git stash drop\" at any time.\n"));
3522 strbuf_release(&stash_sha1);
3526 static const char *reflog_message(struct replay_opts *opts,
3527 const char *sub_action, const char *fmt, ...)
3530 static struct strbuf buf = STRBUF_INIT;
3534 strbuf_addstr(&buf, action_name(opts));
3536 strbuf_addf(&buf, " (%s)", sub_action);
3538 strbuf_addstr(&buf, ": ");
3539 strbuf_vaddf(&buf, fmt, ap);
3546 static int run_git_checkout(struct repository *r, struct replay_opts *opts,
3547 const char *commit, const char *action)
3549 struct child_process cmd = CHILD_PROCESS_INIT;
3554 argv_array_push(&cmd.args, "checkout");
3555 argv_array_push(&cmd.args, commit);
3556 argv_array_pushf(&cmd.env_array, GIT_REFLOG_ACTION "=%s", action);
3559 ret = run_command(&cmd);
3561 ret = run_command_silent_on_success(&cmd);
3564 discard_index(r->index);
3569 int prepare_branch_to_be_rebased(struct repository *r, struct replay_opts *opts,
3574 if (commit && *commit) {
3575 action = reflog_message(opts, "start", "checkout %s", commit);
3576 if (run_git_checkout(r, opts, commit, action))
3577 return error(_("could not checkout %s"), commit);
3583 static int checkout_onto(struct repository *r, struct replay_opts *opts,
3584 const char *onto_name, const struct object_id *onto,
3585 const char *orig_head)
3587 struct object_id oid;
3588 const char *action = reflog_message(opts, "start", "checkout %s", onto_name);
3590 if (get_oid(orig_head, &oid))
3591 return error(_("%s: not a valid OID"), orig_head);
3593 if (run_git_checkout(r, opts, oid_to_hex(onto), action)) {
3594 apply_autostash(opts);
3595 sequencer_remove_state(opts);
3596 return error(_("could not detach HEAD"));
3599 return update_ref(NULL, "ORIG_HEAD", &oid, NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3602 static int stopped_at_head(struct repository *r)
3604 struct object_id head;
3605 struct commit *commit;
3606 struct commit_message message;
3608 if (get_oid("HEAD", &head) ||
3609 !(commit = lookup_commit(r, &head)) ||
3610 parse_commit(commit) || get_message(commit, &message))
3611 fprintf(stderr, _("Stopped at HEAD\n"));
3613 fprintf(stderr, _("Stopped at %s\n"), message.label);
3614 free_message(commit, &message);
3620 static const char rescheduled_advice[] =
3621 N_("Could not execute the todo command\n"
3625 "It has been rescheduled; To edit the command before continuing, please\n"
3626 "edit the todo list first:\n"
3628 " git rebase --edit-todo\n"
3629 " git rebase --continue\n");
3631 static int pick_commits(struct repository *r,
3632 struct todo_list *todo_list,
3633 struct replay_opts *opts)
3635 int res = 0, reschedule = 0;
3637 setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
3639 assert(!(opts->signoff || opts->no_commit ||
3640 opts->record_origin || opts->edit));
3641 if (read_and_refresh_cache(r, opts))
3644 while (todo_list->current < todo_list->nr) {
3645 struct todo_item *item = todo_list->items + todo_list->current;
3646 const char *arg = todo_item_get_arg(todo_list, item);
3649 if (save_todo(todo_list, opts))
3651 if (is_rebase_i(opts)) {
3652 if (item->command != TODO_COMMENT) {
3653 FILE *f = fopen(rebase_path_msgnum(), "w");
3655 todo_list->done_nr++;
3658 fprintf(f, "%d\n", todo_list->done_nr);
3662 fprintf(stderr, "Rebasing (%d/%d)%s",
3664 todo_list->total_nr,
3665 opts->verbose ? "\n" : "\r");
3667 unlink(rebase_path_message());
3668 unlink(rebase_path_author_script());
3669 unlink(rebase_path_stopped_sha());
3670 unlink(rebase_path_amend());
3671 unlink(git_path_merge_head(the_repository));
3672 delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
3674 if (item->command == TODO_BREAK) {
3677 return stopped_at_head(r);
3680 if (item->command <= TODO_SQUASH) {
3681 if (is_rebase_i(opts))
3682 setenv("GIT_REFLOG_ACTION", reflog_message(opts,
3683 command_to_string(item->command), NULL),
3685 res = do_pick_commit(r, item->command, item->commit,
3686 opts, is_final_fixup(todo_list),
3688 if (is_rebase_i(opts) && res < 0) {
3690 advise(_(rescheduled_advice),
3691 get_item_line_length(todo_list,
3692 todo_list->current),
3693 get_item_line(todo_list,
3694 todo_list->current));
3695 todo_list->current--;
3696 if (save_todo(todo_list, opts))
3699 if (item->command == TODO_EDIT) {
3700 struct commit *commit = item->commit;
3705 _("Stopped at %s... %.*s\n"),
3706 short_commit_name(commit),
3707 item->arg_len, arg);
3709 return error_with_patch(r, commit,
3710 arg, item->arg_len, opts, res, !res);
3712 if (is_rebase_i(opts) && !res)
3713 record_in_rewritten(&item->commit->object.oid,
3714 peek_command(todo_list, 1));
3715 if (res && is_fixup(item->command)) {
3718 return error_failed_squash(r, item->commit, opts,
3719 item->arg_len, arg);
3720 } else if (res && is_rebase_i(opts) && item->commit) {
3722 struct object_id oid;
3725 * If we are rewording and have either
3726 * fast-forwarded already, or are about to
3727 * create a new root commit, we want to amend,
3728 * otherwise we do not.
3730 if (item->command == TODO_REWORD &&
3731 !get_oid("HEAD", &oid) &&
3732 (oideq(&item->commit->object.oid, &oid) ||
3733 (opts->have_squash_onto &&
3734 oideq(&opts->squash_onto, &oid))))
3737 return res | error_with_patch(r, item->commit,
3738 arg, item->arg_len, opts,
3741 } else if (item->command == TODO_EXEC) {
3742 char *end_of_arg = (char *)(arg + item->arg_len);
3743 int saved = *end_of_arg;
3748 res = do_exec(r, arg);
3749 *end_of_arg = saved;
3752 if (opts->reschedule_failed_exec)
3756 } else if (item->command == TODO_LABEL) {
3757 if ((res = do_label(r, arg, item->arg_len)))
3759 } else if (item->command == TODO_RESET) {
3760 if ((res = do_reset(r, arg, item->arg_len, opts)))
3762 } else if (item->command == TODO_MERGE) {
3763 if ((res = do_merge(r, item->commit,
3765 item->flags, opts)) < 0)
3767 else if (item->commit)
3768 record_in_rewritten(&item->commit->object.oid,
3769 peek_command(todo_list, 1));
3771 /* failed with merge conflicts */
3772 return error_with_patch(r, item->commit,
3775 } else if (!is_noop(item->command))
3776 return error(_("unknown command %d"), item->command);
3779 advise(_(rescheduled_advice),
3780 get_item_line_length(todo_list,
3781 todo_list->current),
3782 get_item_line(todo_list, todo_list->current));
3783 todo_list->current--;
3784 if (save_todo(todo_list, opts))
3787 return error_with_patch(r,
3791 } else if (check_todo && !res) {
3794 if (stat(get_todo_path(opts), &st)) {
3795 res = error_errno(_("could not stat '%s'"),
3796 get_todo_path(opts));
3797 } else if (match_stat_data(&todo_list->stat, &st)) {
3798 /* Reread the todo file if it has changed. */
3799 todo_list_release(todo_list);
3800 if (read_populate_todo(r, todo_list, opts))
3801 res = -1; /* message was printed */
3802 /* `current` will be incremented below */
3803 todo_list->current = -1;
3807 todo_list->current++;
3812 if (is_rebase_i(opts)) {
3813 struct strbuf head_ref = STRBUF_INIT, buf = STRBUF_INIT;
3816 /* Stopped in the middle, as planned? */
3817 if (todo_list->current < todo_list->nr)
3820 if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
3821 starts_with(head_ref.buf, "refs/")) {
3823 struct object_id head, orig;
3826 if (get_oid("HEAD", &head)) {
3827 res = error(_("cannot read HEAD"));
3829 strbuf_release(&head_ref);
3830 strbuf_release(&buf);
3833 if (!read_oneliner(&buf, rebase_path_orig_head(), 0) ||
3834 get_oid_hex(buf.buf, &orig)) {
3835 res = error(_("could not read orig-head"));
3836 goto cleanup_head_ref;
3839 if (!read_oneliner(&buf, rebase_path_onto(), 0)) {
3840 res = error(_("could not read 'onto'"));
3841 goto cleanup_head_ref;
3843 msg = reflog_message(opts, "finish", "%s onto %s",
3844 head_ref.buf, buf.buf);
3845 if (update_ref(msg, head_ref.buf, &head, &orig,
3846 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR)) {
3847 res = error(_("could not update %s"),
3849 goto cleanup_head_ref;
3851 msg = reflog_message(opts, "finish", "returning to %s",
3853 if (create_symref("HEAD", head_ref.buf, msg)) {
3854 res = error(_("could not update HEAD to %s"),
3856 goto cleanup_head_ref;
3861 if (opts->verbose) {
3862 struct rev_info log_tree_opt;
3863 struct object_id orig, head;
3865 memset(&log_tree_opt, 0, sizeof(log_tree_opt));
3866 repo_init_revisions(r, &log_tree_opt, NULL);
3867 log_tree_opt.diff = 1;
3868 log_tree_opt.diffopt.output_format =
3869 DIFF_FORMAT_DIFFSTAT;
3870 log_tree_opt.disable_stdin = 1;
3872 if (read_oneliner(&buf, rebase_path_orig_head(), 0) &&
3873 !get_oid(buf.buf, &orig) &&
3874 !get_oid("HEAD", &head)) {
3875 diff_tree_oid(&orig, &head, "",
3876 &log_tree_opt.diffopt);
3877 log_tree_diff_flush(&log_tree_opt);
3880 flush_rewritten_pending();
3881 if (!stat(rebase_path_rewritten_list(), &st) &&
3883 struct child_process child = CHILD_PROCESS_INIT;
3884 const char *post_rewrite_hook =
3885 find_hook("post-rewrite");
3887 child.in = open(rebase_path_rewritten_list(), O_RDONLY);
3889 argv_array_push(&child.args, "notes");
3890 argv_array_push(&child.args, "copy");
3891 argv_array_push(&child.args, "--for-rewrite=rebase");
3892 /* we don't care if this copying failed */
3893 run_command(&child);
3895 if (post_rewrite_hook) {
3896 struct child_process hook = CHILD_PROCESS_INIT;
3898 hook.in = open(rebase_path_rewritten_list(),
3900 hook.stdout_to_stderr = 1;
3901 hook.trace2_hook_name = "post-rewrite";
3902 argv_array_push(&hook.args, post_rewrite_hook);
3903 argv_array_push(&hook.args, "rebase");
3904 /* we don't care if this hook failed */
3908 apply_autostash(opts);
3914 "Successfully rebased and updated %s.\n",
3918 strbuf_release(&buf);
3919 strbuf_release(&head_ref);
3923 * Sequence of picks finished successfully; cleanup by
3924 * removing the .git/sequencer directory
3926 return sequencer_remove_state(opts);
3929 static int continue_single_pick(struct repository *r)
3931 const char *argv[] = { "commit", NULL };
3933 if (!file_exists(git_path_cherry_pick_head(r)) &&
3934 !file_exists(git_path_revert_head(r)))
3935 return error(_("no cherry-pick or revert in progress"));
3936 return run_command_v_opt(argv, RUN_GIT_CMD);
3939 static int commit_staged_changes(struct repository *r,
3940 struct replay_opts *opts,
3941 struct todo_list *todo_list)
3943 unsigned int flags = ALLOW_EMPTY | EDIT_MSG;
3944 unsigned int final_fixup = 0, is_clean;
3946 if (has_unstaged_changes(r, 1))
3947 return error(_("cannot rebase: You have unstaged changes."));
3949 is_clean = !has_uncommitted_changes(r, 0);
3951 if (file_exists(rebase_path_amend())) {
3952 struct strbuf rev = STRBUF_INIT;
3953 struct object_id head, to_amend;
3955 if (get_oid("HEAD", &head))
3956 return error(_("cannot amend non-existing commit"));
3957 if (!read_oneliner(&rev, rebase_path_amend(), 0))
3958 return error(_("invalid file: '%s'"), rebase_path_amend());
3959 if (get_oid_hex(rev.buf, &to_amend))
3960 return error(_("invalid contents: '%s'"),
3961 rebase_path_amend());
3962 if (!is_clean && !oideq(&head, &to_amend))
3963 return error(_("\nYou have uncommitted changes in your "
3964 "working tree. Please, commit them\n"
3965 "first and then run 'git rebase "
3966 "--continue' again."));
3968 * When skipping a failed fixup/squash, we need to edit the
3969 * commit message, the current fixup list and count, and if it
3970 * was the last fixup/squash in the chain, we need to clean up
3971 * the commit message and if there was a squash, let the user
3974 if (!is_clean || !opts->current_fixup_count)
3975 ; /* this is not the final fixup */
3976 else if (!oideq(&head, &to_amend) ||
3977 !file_exists(rebase_path_stopped_sha())) {
3978 /* was a final fixup or squash done manually? */
3979 if (!is_fixup(peek_command(todo_list, 0))) {
3980 unlink(rebase_path_fixup_msg());
3981 unlink(rebase_path_squash_msg());
3982 unlink(rebase_path_current_fixups());
3983 strbuf_reset(&opts->current_fixups);
3984 opts->current_fixup_count = 0;
3987 /* we are in a fixup/squash chain */
3988 const char *p = opts->current_fixups.buf;
3989 int len = opts->current_fixups.len;
3991 opts->current_fixup_count--;
3993 BUG("Incorrect current_fixups:\n%s", p);
3994 while (len && p[len - 1] != '\n')
3996 strbuf_setlen(&opts->current_fixups, len);
3997 if (write_message(p, len, rebase_path_current_fixups(),
3999 return error(_("could not write file: '%s'"),
4000 rebase_path_current_fixups());
4003 * If a fixup/squash in a fixup/squash chain failed, the
4004 * commit message is already correct, no need to commit
4007 * Only if it is the final command in the fixup/squash
4008 * chain, and only if the chain is longer than a single
4009 * fixup/squash command (which was just skipped), do we
4010 * actually need to re-commit with a cleaned up commit
4013 if (opts->current_fixup_count > 0 &&
4014 !is_fixup(peek_command(todo_list, 0))) {
4017 * If there was not a single "squash" in the
4018 * chain, we only need to clean up the commit
4019 * message, no need to bother the user with
4020 * opening the commit message in the editor.
4022 if (!starts_with(p, "squash ") &&
4023 !strstr(p, "\nsquash "))
4024 flags = (flags & ~EDIT_MSG) | CLEANUP_MSG;
4025 } else if (is_fixup(peek_command(todo_list, 0))) {
4027 * We need to update the squash message to skip
4028 * the latest commit message.
4030 struct commit *commit;
4031 const char *path = rebase_path_squash_msg();
4033 if (parse_head(r, &commit) ||
4034 !(p = get_commit_buffer(commit, NULL)) ||
4035 write_message(p, strlen(p), path, 0)) {
4036 unuse_commit_buffer(commit, p);
4037 return error(_("could not write file: "
4040 unuse_commit_buffer(commit, p);
4044 strbuf_release(&rev);
4049 const char *cherry_pick_head = git_path_cherry_pick_head(r);
4051 if (file_exists(cherry_pick_head) && unlink(cherry_pick_head))
4052 return error(_("could not remove CHERRY_PICK_HEAD"));
4057 if (run_git_commit(r, final_fixup ? NULL : rebase_path_message(),
4059 return error(_("could not commit staged changes."));
4060 unlink(rebase_path_amend());
4061 unlink(git_path_merge_head(the_repository));
4063 unlink(rebase_path_fixup_msg());
4064 unlink(rebase_path_squash_msg());
4066 if (opts->current_fixup_count > 0) {
4068 * Whether final fixup or not, we just cleaned up the commit
4071 unlink(rebase_path_current_fixups());
4072 strbuf_reset(&opts->current_fixups);
4073 opts->current_fixup_count = 0;
4078 int sequencer_continue(struct repository *r, struct replay_opts *opts)
4080 struct todo_list todo_list = TODO_LIST_INIT;
4083 if (read_and_refresh_cache(r, opts))
4086 if (read_populate_opts(opts))
4088 if (is_rebase_i(opts)) {
4089 if ((res = read_populate_todo(r, &todo_list, opts)))
4090 goto release_todo_list;
4091 if (commit_staged_changes(r, opts, &todo_list))
4093 } else if (!file_exists(get_todo_path(opts)))
4094 return continue_single_pick(r);
4095 else if ((res = read_populate_todo(r, &todo_list, opts)))
4096 goto release_todo_list;
4098 if (!is_rebase_i(opts)) {
4099 /* Verify that the conflict has been resolved */
4100 if (file_exists(git_path_cherry_pick_head(r)) ||
4101 file_exists(git_path_revert_head(r))) {
4102 res = continue_single_pick(r);
4104 goto release_todo_list;
4106 if (index_differs_from(r, "HEAD", NULL, 0)) {
4107 res = error_dirty_index(r, opts);
4108 goto release_todo_list;
4110 todo_list.current++;
4111 } else if (file_exists(rebase_path_stopped_sha())) {
4112 struct strbuf buf = STRBUF_INIT;
4113 struct object_id oid;
4115 if (read_oneliner(&buf, rebase_path_stopped_sha(), 1) &&
4116 !get_oid_committish(buf.buf, &oid))
4117 record_in_rewritten(&oid, peek_command(&todo_list, 0));
4118 strbuf_release(&buf);
4121 res = pick_commits(r, &todo_list, opts);
4123 todo_list_release(&todo_list);
4127 static int single_pick(struct repository *r,
4128 struct commit *cmit,
4129 struct replay_opts *opts)
4133 setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
4134 return do_pick_commit(r, opts->action == REPLAY_PICK ?
4135 TODO_PICK : TODO_REVERT, cmit, opts, 0,
4139 int sequencer_pick_revisions(struct repository *r,
4140 struct replay_opts *opts)
4142 struct todo_list todo_list = TODO_LIST_INIT;
4143 struct object_id oid;
4147 if (read_and_refresh_cache(r, opts))
4150 for (i = 0; i < opts->revs->pending.nr; i++) {
4151 struct object_id oid;
4152 const char *name = opts->revs->pending.objects[i].name;
4154 /* This happens when using --stdin. */
4158 if (!get_oid(name, &oid)) {
4159 if (!lookup_commit_reference_gently(r, &oid, 1)) {
4160 enum object_type type = oid_object_info(r,
4163 return error(_("%s: can't cherry-pick a %s"),
4164 name, type_name(type));
4167 return error(_("%s: bad revision"), name);
4171 * If we were called as "git cherry-pick <commit>", just
4172 * cherry-pick/revert it, set CHERRY_PICK_HEAD /
4173 * REVERT_HEAD, and don't touch the sequencer state.
4174 * This means it is possible to cherry-pick in the middle
4175 * of a cherry-pick sequence.
4177 if (opts->revs->cmdline.nr == 1 &&
4178 opts->revs->cmdline.rev->whence == REV_CMD_REV &&
4179 opts->revs->no_walk &&
4180 !opts->revs->cmdline.rev->flags) {
4181 struct commit *cmit;
4182 if (prepare_revision_walk(opts->revs))
4183 return error(_("revision walk setup failed"));
4184 cmit = get_revision(opts->revs);
4186 return error(_("empty commit set passed"));
4187 if (get_revision(opts->revs))
4188 BUG("unexpected extra commit from walk");
4189 return single_pick(r, cmit, opts);
4193 * Start a new cherry-pick/ revert sequence; but
4194 * first, make sure that an existing one isn't in
4198 if (walk_revs_populate_todo(&todo_list, opts) ||
4199 create_seq_dir() < 0)
4201 if (get_oid("HEAD", &oid) && (opts->action == REPLAY_REVERT))
4202 return error(_("can't revert as initial commit"));
4203 if (save_head(oid_to_hex(&oid)))
4205 if (save_opts(opts))
4207 update_abort_safety_file();
4208 res = pick_commits(r, &todo_list, opts);
4209 todo_list_release(&todo_list);
4213 void append_signoff(struct strbuf *msgbuf, size_t ignore_footer, unsigned flag)
4215 unsigned no_dup_sob = flag & APPEND_SIGNOFF_DEDUP;
4216 struct strbuf sob = STRBUF_INIT;
4219 strbuf_addstr(&sob, sign_off_header);
4220 strbuf_addstr(&sob, fmt_name(WANT_COMMITTER_IDENT));
4221 strbuf_addch(&sob, '\n');
4224 strbuf_complete_line(msgbuf);
4227 * If the whole message buffer is equal to the sob, pretend that we
4228 * found a conforming footer with a matching sob
4230 if (msgbuf->len - ignore_footer == sob.len &&
4231 !strncmp(msgbuf->buf, sob.buf, sob.len))
4234 has_footer = has_conforming_footer(msgbuf, &sob, ignore_footer);
4237 const char *append_newlines = NULL;
4238 size_t len = msgbuf->len - ignore_footer;
4242 * The buffer is completely empty. Leave foom for
4243 * the title and body to be filled in by the user.
4245 append_newlines = "\n\n";
4246 } else if (len == 1) {
4248 * Buffer contains a single newline. Add another
4249 * so that we leave room for the title and body.
4251 append_newlines = "\n";
4252 } else if (msgbuf->buf[len - 2] != '\n') {
4254 * Buffer ends with a single newline. Add another
4255 * so that there is an empty line between the message
4258 append_newlines = "\n";
4259 } /* else, the buffer already ends with two newlines. */
4261 if (append_newlines)
4262 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4263 append_newlines, strlen(append_newlines));
4266 if (has_footer != 3 && (!no_dup_sob || has_footer != 2))
4267 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4270 strbuf_release(&sob);
4273 struct labels_entry {
4274 struct hashmap_entry entry;
4275 char label[FLEX_ARRAY];
4278 static int labels_cmp(const void *fndata, const struct labels_entry *a,
4279 const struct labels_entry *b, const void *key)
4281 return key ? strcmp(a->label, key) : strcmp(a->label, b->label);
4284 struct string_entry {
4285 struct oidmap_entry entry;
4286 char string[FLEX_ARRAY];
4289 struct label_state {
4290 struct oidmap commit2label;
4291 struct hashmap labels;
4295 static const char *label_oid(struct object_id *oid, const char *label,
4296 struct label_state *state)
4298 struct labels_entry *labels_entry;
4299 struct string_entry *string_entry;
4300 struct object_id dummy;
4304 string_entry = oidmap_get(&state->commit2label, oid);
4306 return string_entry->string;
4309 * For "uninteresting" commits, i.e. commits that are not to be
4310 * rebased, and which can therefore not be labeled, we use a unique
4311 * abbreviation of the commit name. This is slightly more complicated
4312 * than calling find_unique_abbrev() because we also need to make
4313 * sure that the abbreviation does not conflict with any other
4316 * We disallow "interesting" commits to be labeled by a string that
4317 * is a valid full-length hash, to ensure that we always can find an
4318 * abbreviation for any uninteresting commit's names that does not
4319 * clash with any other label.
4324 strbuf_reset(&state->buf);
4325 strbuf_grow(&state->buf, GIT_SHA1_HEXSZ);
4326 label = p = state->buf.buf;
4328 find_unique_abbrev_r(p, oid, default_abbrev);
4331 * We may need to extend the abbreviated hash so that there is
4332 * no conflicting label.
4334 if (hashmap_get_from_hash(&state->labels, strihash(p), p)) {
4335 size_t i = strlen(p) + 1;
4337 oid_to_hex_r(p, oid);
4338 for (; i < GIT_SHA1_HEXSZ; i++) {
4341 if (!hashmap_get_from_hash(&state->labels,
4347 } else if (((len = strlen(label)) == the_hash_algo->hexsz &&
4348 !get_oid_hex(label, &dummy)) ||
4349 (len == 1 && *label == '#') ||
4350 hashmap_get_from_hash(&state->labels,
4351 strihash(label), label)) {
4353 * If the label already exists, or if the label is a valid full
4354 * OID, or the label is a '#' (which we use as a separator
4355 * between merge heads and oneline), we append a dash and a
4356 * number to make it unique.
4358 struct strbuf *buf = &state->buf;
4361 strbuf_add(buf, label, len);
4363 for (i = 2; ; i++) {
4364 strbuf_setlen(buf, len);
4365 strbuf_addf(buf, "-%d", i);
4366 if (!hashmap_get_from_hash(&state->labels,
4375 FLEX_ALLOC_STR(labels_entry, label, label);
4376 hashmap_entry_init(labels_entry, strihash(label));
4377 hashmap_add(&state->labels, labels_entry);
4379 FLEX_ALLOC_STR(string_entry, string, label);
4380 oidcpy(&string_entry->entry.oid, oid);
4381 oidmap_put(&state->commit2label, string_entry);
4383 return string_entry->string;
4386 static int make_script_with_merges(struct pretty_print_context *pp,
4387 struct rev_info *revs, struct strbuf *out,
4390 int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4391 int rebase_cousins = flags & TODO_LIST_REBASE_COUSINS;
4392 struct strbuf buf = STRBUF_INIT, oneline = STRBUF_INIT;
4393 struct strbuf label = STRBUF_INIT;
4394 struct commit_list *commits = NULL, **tail = &commits, *iter;
4395 struct commit_list *tips = NULL, **tips_tail = &tips;
4396 struct commit *commit;
4397 struct oidmap commit2todo = OIDMAP_INIT;
4398 struct string_entry *entry;
4399 struct oidset interesting = OIDSET_INIT, child_seen = OIDSET_INIT,
4400 shown = OIDSET_INIT;
4401 struct label_state state = { OIDMAP_INIT, { NULL }, STRBUF_INIT };
4403 int abbr = flags & TODO_LIST_ABBREVIATE_CMDS;
4404 const char *cmd_pick = abbr ? "p" : "pick",
4405 *cmd_label = abbr ? "l" : "label",
4406 *cmd_reset = abbr ? "t" : "reset",
4407 *cmd_merge = abbr ? "m" : "merge";
4409 oidmap_init(&commit2todo, 0);
4410 oidmap_init(&state.commit2label, 0);
4411 hashmap_init(&state.labels, (hashmap_cmp_fn) labels_cmp, NULL, 0);
4412 strbuf_init(&state.buf, 32);
4414 if (revs->cmdline.nr && (revs->cmdline.rev[0].flags & BOTTOM)) {
4415 struct object_id *oid = &revs->cmdline.rev[0].item->oid;
4416 FLEX_ALLOC_STR(entry, string, "onto");
4417 oidcpy(&entry->entry.oid, oid);
4418 oidmap_put(&state.commit2label, entry);
4423 * - get onelines for all commits
4424 * - gather all branch tips (i.e. 2nd or later parents of merges)
4425 * - label all branch tips
4427 while ((commit = get_revision(revs))) {
4428 struct commit_list *to_merge;
4429 const char *p1, *p2;
4430 struct object_id *oid;
4433 tail = &commit_list_insert(commit, tail)->next;
4434 oidset_insert(&interesting, &commit->object.oid);
4436 is_empty = is_original_commit_empty(commit);
4437 if (!is_empty && (commit->object.flags & PATCHSAME))
4440 strbuf_reset(&oneline);
4441 pretty_print_commit(pp, commit, &oneline);
4443 to_merge = commit->parents ? commit->parents->next : NULL;
4445 /* non-merge commit: easy case */
4447 if (!keep_empty && is_empty)
4448 strbuf_addf(&buf, "%c ", comment_line_char);
4449 strbuf_addf(&buf, "%s %s %s", cmd_pick,
4450 oid_to_hex(&commit->object.oid),
4453 FLEX_ALLOC_STR(entry, string, buf.buf);
4454 oidcpy(&entry->entry.oid, &commit->object.oid);
4455 oidmap_put(&commit2todo, entry);
4460 /* Create a label */
4461 strbuf_reset(&label);
4462 if (skip_prefix(oneline.buf, "Merge ", &p1) &&
4463 (p1 = strchr(p1, '\'')) &&
4464 (p2 = strchr(++p1, '\'')))
4465 strbuf_add(&label, p1, p2 - p1);
4466 else if (skip_prefix(oneline.buf, "Merge pull request ",
4468 (p1 = strstr(p1, " from ")))
4469 strbuf_addstr(&label, p1 + strlen(" from "));
4471 strbuf_addbuf(&label, &oneline);
4473 for (p1 = label.buf; *p1; p1++)
4478 strbuf_addf(&buf, "%s -C %s",
4479 cmd_merge, oid_to_hex(&commit->object.oid));
4481 /* label the tips of merged branches */
4482 for (; to_merge; to_merge = to_merge->next) {
4483 oid = &to_merge->item->object.oid;
4484 strbuf_addch(&buf, ' ');
4486 if (!oidset_contains(&interesting, oid)) {
4487 strbuf_addstr(&buf, label_oid(oid, NULL,
4492 tips_tail = &commit_list_insert(to_merge->item,
4495 strbuf_addstr(&buf, label_oid(oid, label.buf, &state));
4497 strbuf_addf(&buf, " # %s", oneline.buf);
4499 FLEX_ALLOC_STR(entry, string, buf.buf);
4500 oidcpy(&entry->entry.oid, &commit->object.oid);
4501 oidmap_put(&commit2todo, entry);
4506 * - label branch points
4507 * - add HEAD to the branch tips
4509 for (iter = commits; iter; iter = iter->next) {
4510 struct commit_list *parent = iter->item->parents;
4511 for (; parent; parent = parent->next) {
4512 struct object_id *oid = &parent->item->object.oid;
4513 if (!oidset_contains(&interesting, oid))
4515 if (oidset_insert(&child_seen, oid))
4516 label_oid(oid, "branch-point", &state);
4519 /* Add HEAD as implict "tip of branch" */
4521 tips_tail = &commit_list_insert(iter->item,
4526 * Third phase: output the todo list. This is a bit tricky, as we
4527 * want to avoid jumping back and forth between revisions. To
4528 * accomplish that goal, we walk backwards from the branch tips,
4529 * gathering commits not yet shown, reversing the list on the fly,
4530 * then outputting that list (labeling revisions as needed).
4532 strbuf_addf(out, "%s onto\n", cmd_label);
4533 for (iter = tips; iter; iter = iter->next) {
4534 struct commit_list *list = NULL, *iter2;
4536 commit = iter->item;
4537 if (oidset_contains(&shown, &commit->object.oid))
4539 entry = oidmap_get(&state.commit2label, &commit->object.oid);
4542 strbuf_addf(out, "\n%c Branch %s\n", comment_line_char, entry->string);
4544 strbuf_addch(out, '\n');
4546 while (oidset_contains(&interesting, &commit->object.oid) &&
4547 !oidset_contains(&shown, &commit->object.oid)) {
4548 commit_list_insert(commit, &list);
4549 if (!commit->parents) {
4553 commit = commit->parents->item;
4557 strbuf_addf(out, "%s %s\n", cmd_reset,
4558 rebase_cousins ? "onto" : "[new root]");
4560 const char *to = NULL;
4562 entry = oidmap_get(&state.commit2label,
4563 &commit->object.oid);
4566 else if (!rebase_cousins)
4567 to = label_oid(&commit->object.oid, NULL,
4570 if (!to || !strcmp(to, "onto"))
4571 strbuf_addf(out, "%s onto\n", cmd_reset);
4573 strbuf_reset(&oneline);
4574 pretty_print_commit(pp, commit, &oneline);
4575 strbuf_addf(out, "%s %s # %s\n",
4576 cmd_reset, to, oneline.buf);
4580 for (iter2 = list; iter2; iter2 = iter2->next) {
4581 struct object_id *oid = &iter2->item->object.oid;
4582 entry = oidmap_get(&commit2todo, oid);
4583 /* only show if not already upstream */
4585 strbuf_addf(out, "%s\n", entry->string);
4586 entry = oidmap_get(&state.commit2label, oid);
4588 strbuf_addf(out, "%s %s\n",
4589 cmd_label, entry->string);
4590 oidset_insert(&shown, oid);
4593 free_commit_list(list);
4596 free_commit_list(commits);
4597 free_commit_list(tips);
4599 strbuf_release(&label);
4600 strbuf_release(&oneline);
4601 strbuf_release(&buf);
4603 oidmap_free(&commit2todo, 1);
4604 oidmap_free(&state.commit2label, 1);
4605 hashmap_free(&state.labels, 1);
4606 strbuf_release(&state.buf);
4611 int sequencer_make_script(struct repository *r, struct strbuf *out, int argc,
4612 const char **argv, unsigned flags)
4614 char *format = NULL;
4615 struct pretty_print_context pp = {0};
4616 struct rev_info revs;
4617 struct commit *commit;
4618 int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4619 const char *insn = flags & TODO_LIST_ABBREVIATE_CMDS ? "p" : "pick";
4620 int rebase_merges = flags & TODO_LIST_REBASE_MERGES;
4622 repo_init_revisions(r, &revs, NULL);
4623 revs.verbose_header = 1;
4625 revs.max_parents = 1;
4626 revs.cherry_mark = 1;
4629 revs.right_only = 1;
4630 revs.sort_order = REV_SORT_IN_GRAPH_ORDER;
4631 revs.topo_order = 1;
4633 revs.pretty_given = 1;
4634 git_config_get_string("rebase.instructionFormat", &format);
4635 if (!format || !*format) {
4637 format = xstrdup("%s");
4639 get_commit_format(format, &revs);
4641 pp.fmt = revs.commit_format;
4642 pp.output_encoding = get_log_output_encoding();
4644 if (setup_revisions(argc, argv, &revs, NULL) > 1)
4645 return error(_("make_script: unhandled options"));
4647 if (prepare_revision_walk(&revs) < 0)
4648 return error(_("make_script: error preparing revisions"));
4651 return make_script_with_merges(&pp, &revs, out, flags);
4653 while ((commit = get_revision(&revs))) {
4654 int is_empty = is_original_commit_empty(commit);
4656 if (!is_empty && (commit->object.flags & PATCHSAME))
4658 if (!keep_empty && is_empty)
4659 strbuf_addf(out, "%c ", comment_line_char);
4660 strbuf_addf(out, "%s %s ", insn,
4661 oid_to_hex(&commit->object.oid));
4662 pretty_print_commit(&pp, commit, out);
4663 strbuf_addch(out, '\n');
4669 * Add commands after pick and (series of) squash/fixup commands
4672 void todo_list_add_exec_commands(struct todo_list *todo_list,
4673 struct string_list *commands)
4675 struct strbuf *buf = &todo_list->buf;
4676 size_t base_offset = buf->len;
4677 int i, insert, nr = 0, alloc = 0;
4678 struct todo_item *items = NULL, *base_items = NULL;
4680 base_items = xcalloc(commands->nr, sizeof(struct todo_item));
4681 for (i = 0; i < commands->nr; i++) {
4682 size_t command_len = strlen(commands->items[i].string);
4684 strbuf_addstr(buf, commands->items[i].string);
4685 strbuf_addch(buf, '\n');
4687 base_items[i].command = TODO_EXEC;
4688 base_items[i].offset_in_buf = base_offset;
4689 base_items[i].arg_offset = base_offset + strlen("exec ");
4690 base_items[i].arg_len = command_len - strlen("exec ");
4692 base_offset += command_len + 1;
4696 * Insert <commands> after every pick. Here, fixup/squash chains
4697 * are considered part of the pick, so we insert the commands *after*
4698 * those chains if there are any.
4700 * As we insert the exec commands immediatly after rearranging
4701 * any fixups and before the user edits the list, a fixup chain
4702 * can never contain comments (any comments are empty picks that
4703 * have been commented out because the user did not specify
4704 * --keep-empty). So, it is safe to insert an exec command
4705 * without looking at the command following a comment.
4708 for (i = 0; i < todo_list->nr; i++) {
4709 enum todo_command command = todo_list->items[i].command;
4710 if (insert && !is_fixup(command)) {
4711 ALLOC_GROW(items, nr + commands->nr, alloc);
4712 COPY_ARRAY(items + nr, base_items, commands->nr);
4718 ALLOC_GROW(items, nr + 1, alloc);
4719 items[nr++] = todo_list->items[i];
4721 if (command == TODO_PICK || command == TODO_MERGE)
4725 /* insert or append final <commands> */
4726 if (insert || nr == todo_list->nr) {
4727 ALLOC_GROW(items, nr + commands->nr, alloc);
4728 COPY_ARRAY(items + nr, base_items, commands->nr);
4733 FREE_AND_NULL(todo_list->items);
4734 todo_list->items = items;
4736 todo_list->alloc = alloc;
4739 static void todo_list_to_strbuf(struct repository *r, struct todo_list *todo_list,
4740 struct strbuf *buf, int num, unsigned flags)
4742 struct todo_item *item;
4743 int i, max = todo_list->nr;
4745 if (num > 0 && num < max)
4748 for (item = todo_list->items, i = 0; i < max; i++, item++) {
4749 /* if the item is not a command write it and continue */
4750 if (item->command >= TODO_COMMENT) {
4751 strbuf_addf(buf, "%.*s\n", item->arg_len,
4752 todo_item_get_arg(todo_list, item));
4756 /* add command to the buffer */
4757 if (flags & TODO_LIST_ABBREVIATE_CMDS)
4758 strbuf_addch(buf, command_to_char(item->command));
4760 strbuf_addstr(buf, command_to_string(item->command));
4764 const char *oid = flags & TODO_LIST_SHORTEN_IDS ?
4765 short_commit_name(item->commit) :
4766 oid_to_hex(&item->commit->object.oid);
4768 if (item->command == TODO_MERGE) {
4769 if (item->flags & TODO_EDIT_MERGE_MSG)
4770 strbuf_addstr(buf, " -c");
4772 strbuf_addstr(buf, " -C");
4775 strbuf_addf(buf, " %s", oid);
4778 /* add all the rest */
4780 strbuf_addch(buf, '\n');
4782 strbuf_addf(buf, " %.*s\n", item->arg_len,
4783 todo_item_get_arg(todo_list, item));
4787 int todo_list_write_to_file(struct repository *r, struct todo_list *todo_list,
4788 const char *file, const char *shortrevisions,
4789 const char *shortonto, int num, unsigned flags)
4792 struct strbuf buf = STRBUF_INIT;
4794 todo_list_to_strbuf(r, todo_list, &buf, num, flags);
4795 if (flags & TODO_LIST_APPEND_TODO_HELP)
4796 append_todo_help(flags & TODO_LIST_KEEP_EMPTY, count_commands(todo_list),
4797 shortrevisions, shortonto, &buf);
4799 res = write_message(buf.buf, buf.len, file, 0);
4800 strbuf_release(&buf);
4805 static const char edit_todo_list_advice[] =
4806 N_("You can fix this with 'git rebase --edit-todo' "
4807 "and then run 'git rebase --continue'.\n"
4808 "Or you can abort the rebase with 'git rebase"
4811 int check_todo_list_from_file(struct repository *r)
4813 struct todo_list old_todo = TODO_LIST_INIT, new_todo = TODO_LIST_INIT;
4816 if (strbuf_read_file_or_whine(&new_todo.buf, rebase_path_todo()) < 0) {
4821 if (strbuf_read_file_or_whine(&old_todo.buf, rebase_path_todo_backup()) < 0) {
4826 res = todo_list_parse_insn_buffer(r, old_todo.buf.buf, &old_todo);
4828 res = todo_list_parse_insn_buffer(r, new_todo.buf.buf, &new_todo);
4830 res = todo_list_check(&old_todo, &new_todo);
4832 fprintf(stderr, _(edit_todo_list_advice));
4834 todo_list_release(&old_todo);
4835 todo_list_release(&new_todo);
4840 /* skip picking commits whose parents are unchanged */
4841 static int skip_unnecessary_picks(struct repository *r,
4842 struct todo_list *todo_list,
4843 struct object_id *base_oid)
4845 struct object_id *parent_oid;
4848 for (i = 0; i < todo_list->nr; i++) {
4849 struct todo_item *item = todo_list->items + i;
4851 if (item->command >= TODO_NOOP)
4853 if (item->command != TODO_PICK)
4855 if (parse_commit(item->commit)) {
4856 return error(_("could not parse commit '%s'"),
4857 oid_to_hex(&item->commit->object.oid));
4859 if (!item->commit->parents)
4860 break; /* root commit */
4861 if (item->commit->parents->next)
4862 break; /* merge commit */
4863 parent_oid = &item->commit->parents->item->object.oid;
4864 if (!oideq(parent_oid, base_oid))
4866 oidcpy(base_oid, &item->commit->object.oid);
4869 const char *done_path = rebase_path_done();
4871 if (todo_list_write_to_file(r, todo_list, done_path, NULL, NULL, i, 0)) {
4872 error_errno(_("could not write to '%s'"), done_path);
4876 MOVE_ARRAY(todo_list->items, todo_list->items + i, todo_list->nr - i);
4878 todo_list->current = 0;
4880 if (is_fixup(peek_command(todo_list, 0)))
4881 record_in_rewritten(base_oid, peek_command(todo_list, 0));
4887 int complete_action(struct repository *r, struct replay_opts *opts, unsigned flags,
4888 const char *shortrevisions, const char *onto_name,
4889 struct commit *onto, const char *orig_head,
4890 struct string_list *commands, unsigned autosquash,
4891 struct todo_list *todo_list)
4893 const char *shortonto, *todo_file = rebase_path_todo();
4894 struct todo_list new_todo = TODO_LIST_INIT;
4895 struct strbuf *buf = &todo_list->buf;
4896 struct object_id oid = onto->object.oid;
4899 shortonto = find_unique_abbrev(&oid, DEFAULT_ABBREV);
4901 if (buf->len == 0) {
4902 struct todo_item *item = append_new_todo(todo_list);
4903 item->command = TODO_NOOP;
4904 item->commit = NULL;
4905 item->arg_len = item->arg_offset = item->flags = item->offset_in_buf = 0;
4908 if (autosquash && todo_list_rearrange_squash(todo_list))
4912 todo_list_add_exec_commands(todo_list, commands);
4914 if (count_commands(todo_list) == 0) {
4915 apply_autostash(opts);
4916 sequencer_remove_state(opts);
4918 return error(_("nothing to do"));
4921 res = edit_todo_list(r, todo_list, &new_todo, shortrevisions,
4925 else if (res == -2) {
4926 apply_autostash(opts);
4927 sequencer_remove_state(opts);
4930 } else if (res == -3) {
4931 apply_autostash(opts);
4932 sequencer_remove_state(opts);
4933 todo_list_release(&new_todo);
4935 return error(_("nothing to do"));
4938 if (todo_list_parse_insn_buffer(r, new_todo.buf.buf, &new_todo) ||
4939 todo_list_check(todo_list, &new_todo)) {
4940 fprintf(stderr, _(edit_todo_list_advice));
4941 checkout_onto(r, opts, onto_name, &onto->object.oid, orig_head);
4942 todo_list_release(&new_todo);
4947 if (opts->allow_ff && skip_unnecessary_picks(r, &new_todo, &oid)) {
4948 todo_list_release(&new_todo);
4949 return error(_("could not skip unnecessary pick commands"));
4952 if (todo_list_write_to_file(r, &new_todo, todo_file, NULL, NULL, -1,
4953 flags & ~(TODO_LIST_SHORTEN_IDS))) {
4954 todo_list_release(&new_todo);
4955 return error_errno(_("could not write '%s'"), todo_file);
4958 todo_list_release(&new_todo);
4960 if (checkout_onto(r, opts, onto_name, &oid, orig_head))
4963 if (require_clean_work_tree(r, "rebase", "", 1, 1))
4966 return sequencer_continue(r, opts);
4969 struct subject2item_entry {
4970 struct hashmap_entry entry;
4972 char subject[FLEX_ARRAY];
4975 static int subject2item_cmp(const void *fndata,
4976 const struct subject2item_entry *a,
4977 const struct subject2item_entry *b, const void *key)
4979 return key ? strcmp(a->subject, key) : strcmp(a->subject, b->subject);
4982 define_commit_slab(commit_todo_item, struct todo_item *);
4985 * Rearrange the todo list that has both "pick commit-id msg" and "pick
4986 * commit-id fixup!/squash! msg" in it so that the latter is put immediately
4987 * after the former, and change "pick" to "fixup"/"squash".
4989 * Note that if the config has specified a custom instruction format, each log
4990 * message will have to be retrieved from the commit (as the oneline in the
4991 * script cannot be trusted) in order to normalize the autosquash arrangement.
4993 int todo_list_rearrange_squash(struct todo_list *todo_list)
4995 struct hashmap subject2item;
4996 int rearranged = 0, *next, *tail, i, nr = 0, alloc = 0;
4998 struct commit_todo_item commit_todo;
4999 struct todo_item *items = NULL;
5001 init_commit_todo_item(&commit_todo);
5003 * The hashmap maps onelines to the respective todo list index.
5005 * If any items need to be rearranged, the next[i] value will indicate
5006 * which item was moved directly after the i'th.
5008 * In that case, last[i] will indicate the index of the latest item to
5009 * be moved to appear after the i'th.
5011 hashmap_init(&subject2item, (hashmap_cmp_fn) subject2item_cmp,
5012 NULL, todo_list->nr);
5013 ALLOC_ARRAY(next, todo_list->nr);
5014 ALLOC_ARRAY(tail, todo_list->nr);
5015 ALLOC_ARRAY(subjects, todo_list->nr);
5016 for (i = 0; i < todo_list->nr; i++) {
5017 struct strbuf buf = STRBUF_INIT;
5018 struct todo_item *item = todo_list->items + i;
5019 const char *commit_buffer, *subject, *p;
5022 struct subject2item_entry *entry;
5024 next[i] = tail[i] = -1;
5025 if (!item->commit || item->command == TODO_DROP) {
5030 if (is_fixup(item->command)) {
5031 clear_commit_todo_item(&commit_todo);
5032 return error(_("the script was already rearranged."));
5035 *commit_todo_item_at(&commit_todo, item->commit) = item;
5037 parse_commit(item->commit);
5038 commit_buffer = get_commit_buffer(item->commit, NULL);
5039 find_commit_subject(commit_buffer, &subject);
5040 format_subject(&buf, subject, " ");
5041 subject = subjects[i] = strbuf_detach(&buf, &subject_len);
5042 unuse_commit_buffer(item->commit, commit_buffer);
5043 if ((skip_prefix(subject, "fixup! ", &p) ||
5044 skip_prefix(subject, "squash! ", &p))) {
5045 struct commit *commit2;
5050 if (!skip_prefix(p, "fixup! ", &p) &&
5051 !skip_prefix(p, "squash! ", &p))
5055 if ((entry = hashmap_get_from_hash(&subject2item,
5057 /* found by title */
5059 else if (!strchr(p, ' ') &&
5061 lookup_commit_reference_by_name(p)) &&
5062 *commit_todo_item_at(&commit_todo, commit2))
5063 /* found by commit name */
5064 i2 = *commit_todo_item_at(&commit_todo, commit2)
5067 /* copy can be a prefix of the commit subject */
5068 for (i2 = 0; i2 < i; i2++)
5070 starts_with(subjects[i2], p))
5078 todo_list->items[i].command =
5079 starts_with(subject, "fixup!") ?
5080 TODO_FIXUP : TODO_SQUASH;
5086 } else if (!hashmap_get_from_hash(&subject2item,
5087 strhash(subject), subject)) {
5088 FLEX_ALLOC_MEM(entry, subject, subject, subject_len);
5090 hashmap_entry_init(entry, strhash(entry->subject));
5091 hashmap_put(&subject2item, entry);
5096 for (i = 0; i < todo_list->nr; i++) {
5097 enum todo_command command = todo_list->items[i].command;
5101 * Initially, all commands are 'pick's. If it is a
5102 * fixup or a squash now, we have rearranged it.
5104 if (is_fixup(command))
5108 ALLOC_GROW(items, nr + 1, alloc);
5109 items[nr++] = todo_list->items[cur];
5114 FREE_AND_NULL(todo_list->items);
5115 todo_list->items = items;
5117 todo_list->alloc = alloc;
5122 for (i = 0; i < todo_list->nr; i++)
5125 hashmap_free(&subject2item, 1);
5127 clear_commit_todo_item(&commit_todo);