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)) {
1355 struct commit *first_parent = current_head;
1357 if (flags & AMEND_MSG) {
1358 if (current_head->parents) {
1359 first_parent = current_head->parents->item;
1360 if (repo_parse_commit(r, first_parent)) {
1361 res = error(_("could not parse HEAD commit"));
1365 first_parent = NULL;
1368 if (oideq(first_parent
1369 ? get_commit_tree_oid(first_parent)
1370 : the_hash_algo->empty_tree,
1372 res = 1; /* run 'git commit' to display error message */
1377 if (find_hook("prepare-commit-msg")) {
1378 res = run_prepare_commit_msg_hook(r, msg, hook_commit);
1381 if (strbuf_read_file(&commit_msg, git_path_commit_editmsg(),
1383 res = error_errno(_("unable to read commit message "
1385 git_path_commit_editmsg());
1391 if (flags & CLEANUP_MSG)
1392 cleanup = COMMIT_MSG_CLEANUP_ALL;
1393 else if ((opts->signoff || opts->record_origin) &&
1394 !opts->explicit_cleanup)
1395 cleanup = COMMIT_MSG_CLEANUP_SPACE;
1397 cleanup = opts->default_msg_cleanup;
1399 if (cleanup != COMMIT_MSG_CLEANUP_NONE)
1400 strbuf_stripspace(msg, cleanup == COMMIT_MSG_CLEANUP_ALL);
1401 if ((flags & EDIT_MSG) && message_is_empty(msg, cleanup)) {
1402 res = 1; /* run 'git commit' to display error message */
1408 if (commit_tree_extended(msg->buf, msg->len, &tree, parents,
1409 oid, author, opts->gpg_sign, extra)) {
1410 res = error(_("failed to write commit object"));
1414 if (update_head_with_reflog(current_head, oid,
1415 getenv("GIT_REFLOG_ACTION"), msg, &err)) {
1416 res = error("%s", err.buf);
1420 run_commit_hook(0, r->index_file, "post-commit", NULL);
1421 if (flags & AMEND_MSG)
1422 commit_post_rewrite(r, current_head, oid);
1425 free_commit_extra_headers(extra);
1426 strbuf_release(&err);
1427 strbuf_release(&commit_msg);
1433 static int do_commit(struct repository *r,
1434 const char *msg_file, const char *author,
1435 struct replay_opts *opts, unsigned int flags)
1439 if (!(flags & EDIT_MSG) && !(flags & VERIFY_MSG)) {
1440 struct object_id oid;
1441 struct strbuf sb = STRBUF_INIT;
1443 if (msg_file && strbuf_read_file(&sb, msg_file, 2048) < 0)
1444 return error_errno(_("unable to read commit message "
1448 res = try_to_commit(r, msg_file ? &sb : NULL,
1449 author, opts, flags, &oid);
1450 strbuf_release(&sb);
1452 unlink(git_path_cherry_pick_head(r));
1453 unlink(git_path_merge_msg(r));
1454 if (!is_rebase_i(opts))
1455 print_commit_summary(r, NULL, &oid,
1456 SUMMARY_SHOW_AUTHOR_DATE);
1461 return run_git_commit(r, msg_file, opts, flags);
1466 static int is_original_commit_empty(struct commit *commit)
1468 const struct object_id *ptree_oid;
1470 if (parse_commit(commit))
1471 return error(_("could not parse commit %s"),
1472 oid_to_hex(&commit->object.oid));
1473 if (commit->parents) {
1474 struct commit *parent = commit->parents->item;
1475 if (parse_commit(parent))
1476 return error(_("could not parse parent commit %s"),
1477 oid_to_hex(&parent->object.oid));
1478 ptree_oid = get_commit_tree_oid(parent);
1480 ptree_oid = the_hash_algo->empty_tree; /* commit is root */
1483 return oideq(ptree_oid, get_commit_tree_oid(commit));
1487 * Do we run "git commit" with "--allow-empty"?
1489 static int allow_empty(struct repository *r,
1490 struct replay_opts *opts,
1491 struct commit *commit)
1493 int index_unchanged, empty_commit;
1498 * (1) we do not allow empty at all and error out.
1500 * (2) we allow ones that were initially empty, but
1501 * forbid the ones that become empty;
1503 * (3) we allow both.
1505 if (!opts->allow_empty)
1506 return 0; /* let "git commit" barf as necessary */
1508 index_unchanged = is_index_unchanged(r);
1509 if (index_unchanged < 0)
1510 return index_unchanged;
1511 if (!index_unchanged)
1512 return 0; /* we do not have to say --allow-empty */
1514 if (opts->keep_redundant_commits)
1517 empty_commit = is_original_commit_empty(commit);
1518 if (empty_commit < 0)
1519 return empty_commit;
1529 } todo_command_info[] = {
1546 static const char *command_to_string(const enum todo_command command)
1548 if (command < TODO_COMMENT)
1549 return todo_command_info[command].str;
1550 die(_("unknown command: %d"), command);
1553 static char command_to_char(const enum todo_command command)
1555 if (command < TODO_COMMENT && todo_command_info[command].c)
1556 return todo_command_info[command].c;
1557 return comment_line_char;
1560 static int is_noop(const enum todo_command command)
1562 return TODO_NOOP <= command;
1565 static int is_fixup(enum todo_command command)
1567 return command == TODO_FIXUP || command == TODO_SQUASH;
1570 /* Does this command create a (non-merge) commit? */
1571 static int is_pick_or_similar(enum todo_command command)
1586 static int update_squash_messages(struct repository *r,
1587 enum todo_command command,
1588 struct commit *commit,
1589 struct replay_opts *opts)
1591 struct strbuf buf = STRBUF_INIT;
1593 const char *message, *body;
1595 if (opts->current_fixup_count > 0) {
1596 struct strbuf header = STRBUF_INIT;
1599 if (strbuf_read_file(&buf, rebase_path_squash_msg(), 9) <= 0)
1600 return error(_("could not read '%s'"),
1601 rebase_path_squash_msg());
1603 eol = buf.buf[0] != comment_line_char ?
1604 buf.buf : strchrnul(buf.buf, '\n');
1606 strbuf_addf(&header, "%c ", comment_line_char);
1607 strbuf_addf(&header, _("This is a combination of %d commits."),
1608 opts->current_fixup_count + 2);
1609 strbuf_splice(&buf, 0, eol - buf.buf, header.buf, header.len);
1610 strbuf_release(&header);
1612 struct object_id head;
1613 struct commit *head_commit;
1614 const char *head_message, *body;
1616 if (get_oid("HEAD", &head))
1617 return error(_("need a HEAD to fixup"));
1618 if (!(head_commit = lookup_commit_reference(r, &head)))
1619 return error(_("could not read HEAD"));
1620 if (!(head_message = get_commit_buffer(head_commit, NULL)))
1621 return error(_("could not read HEAD's commit message"));
1623 find_commit_subject(head_message, &body);
1624 if (write_message(body, strlen(body),
1625 rebase_path_fixup_msg(), 0)) {
1626 unuse_commit_buffer(head_commit, head_message);
1627 return error(_("cannot write '%s'"),
1628 rebase_path_fixup_msg());
1631 strbuf_addf(&buf, "%c ", comment_line_char);
1632 strbuf_addf(&buf, _("This is a combination of %d commits."), 2);
1633 strbuf_addf(&buf, "\n%c ", comment_line_char);
1634 strbuf_addstr(&buf, _("This is the 1st commit message:"));
1635 strbuf_addstr(&buf, "\n\n");
1636 strbuf_addstr(&buf, body);
1638 unuse_commit_buffer(head_commit, head_message);
1641 if (!(message = get_commit_buffer(commit, NULL)))
1642 return error(_("could not read commit message of %s"),
1643 oid_to_hex(&commit->object.oid));
1644 find_commit_subject(message, &body);
1646 if (command == TODO_SQUASH) {
1647 unlink(rebase_path_fixup_msg());
1648 strbuf_addf(&buf, "\n%c ", comment_line_char);
1649 strbuf_addf(&buf, _("This is the commit message #%d:"),
1650 ++opts->current_fixup_count + 1);
1651 strbuf_addstr(&buf, "\n\n");
1652 strbuf_addstr(&buf, body);
1653 } else if (command == TODO_FIXUP) {
1654 strbuf_addf(&buf, "\n%c ", comment_line_char);
1655 strbuf_addf(&buf, _("The commit message #%d will be skipped:"),
1656 ++opts->current_fixup_count + 1);
1657 strbuf_addstr(&buf, "\n\n");
1658 strbuf_add_commented_lines(&buf, body, strlen(body));
1660 return error(_("unknown command: %d"), command);
1661 unuse_commit_buffer(commit, message);
1663 res = write_message(buf.buf, buf.len, rebase_path_squash_msg(), 0);
1664 strbuf_release(&buf);
1667 strbuf_addf(&opts->current_fixups, "%s%s %s",
1668 opts->current_fixups.len ? "\n" : "",
1669 command_to_string(command),
1670 oid_to_hex(&commit->object.oid));
1671 res = write_message(opts->current_fixups.buf,
1672 opts->current_fixups.len,
1673 rebase_path_current_fixups(), 0);
1679 static void flush_rewritten_pending(void)
1681 struct strbuf buf = STRBUF_INIT;
1682 struct object_id newoid;
1685 if (strbuf_read_file(&buf, rebase_path_rewritten_pending(), (GIT_MAX_HEXSZ + 1) * 2) > 0 &&
1686 !get_oid("HEAD", &newoid) &&
1687 (out = fopen_or_warn(rebase_path_rewritten_list(), "a"))) {
1688 char *bol = buf.buf, *eol;
1691 eol = strchrnul(bol, '\n');
1692 fprintf(out, "%.*s %s\n", (int)(eol - bol),
1693 bol, oid_to_hex(&newoid));
1699 unlink(rebase_path_rewritten_pending());
1701 strbuf_release(&buf);
1704 static void record_in_rewritten(struct object_id *oid,
1705 enum todo_command next_command)
1707 FILE *out = fopen_or_warn(rebase_path_rewritten_pending(), "a");
1712 fprintf(out, "%s\n", oid_to_hex(oid));
1715 if (!is_fixup(next_command))
1716 flush_rewritten_pending();
1719 static int do_pick_commit(struct repository *r,
1720 enum todo_command command,
1721 struct commit *commit,
1722 struct replay_opts *opts,
1723 int final_fixup, int *check_todo)
1725 unsigned int flags = opts->edit ? EDIT_MSG : 0;
1726 const char *msg_file = opts->edit ? NULL : git_path_merge_msg(r);
1727 struct object_id head;
1728 struct commit *base, *next, *parent;
1729 const char *base_label, *next_label;
1730 char *author = NULL;
1731 struct commit_message msg = { NULL, NULL, NULL, NULL };
1732 struct strbuf msgbuf = STRBUF_INIT;
1733 int res, unborn = 0, reword = 0, allow;
1735 if (opts->no_commit) {
1737 * We do not intend to commit immediately. We just want to
1738 * merge the differences in, so let's compute the tree
1739 * that represents the "current" state for merge-recursive
1742 if (write_index_as_tree(&head, r->index, r->index_file, 0, NULL))
1743 return error(_("your index file is unmerged."));
1745 unborn = get_oid("HEAD", &head);
1746 /* Do we want to generate a root commit? */
1747 if (is_pick_or_similar(command) && opts->have_squash_onto &&
1748 oideq(&head, &opts->squash_onto)) {
1749 if (is_fixup(command))
1750 return error(_("cannot fixup root commit"));
1751 flags |= CREATE_ROOT_COMMIT;
1754 oidcpy(&head, the_hash_algo->empty_tree);
1755 if (index_differs_from(r, unborn ? empty_tree_oid_hex() : "HEAD",
1757 return error_dirty_index(r, opts);
1759 discard_index(r->index);
1761 if (!commit->parents)
1763 else if (commit->parents->next) {
1764 /* Reverting or cherry-picking a merge commit */
1766 struct commit_list *p;
1768 if (!opts->mainline)
1769 return error(_("commit %s is a merge but no -m option was given."),
1770 oid_to_hex(&commit->object.oid));
1772 for (cnt = 1, p = commit->parents;
1773 cnt != opts->mainline && p;
1776 if (cnt != opts->mainline || !p)
1777 return error(_("commit %s does not have parent %d"),
1778 oid_to_hex(&commit->object.oid), opts->mainline);
1780 } else if (1 < opts->mainline)
1782 * Non-first parent explicitly specified as mainline for
1785 return error(_("commit %s does not have parent %d"),
1786 oid_to_hex(&commit->object.oid), opts->mainline);
1788 parent = commit->parents->item;
1790 if (get_message(commit, &msg) != 0)
1791 return error(_("cannot get commit message for %s"),
1792 oid_to_hex(&commit->object.oid));
1794 if (opts->allow_ff && !is_fixup(command) &&
1795 ((parent && oideq(&parent->object.oid, &head)) ||
1796 (!parent && unborn))) {
1797 if (is_rebase_i(opts))
1798 write_author_script(msg.message);
1799 res = fast_forward_to(r, &commit->object.oid, &head, unborn,
1801 if (res || command != TODO_REWORD)
1805 goto fast_forward_edit;
1807 if (parent && parse_commit(parent) < 0)
1808 /* TRANSLATORS: The first %s will be a "todo" command like
1809 "revert" or "pick", the second %s a SHA1. */
1810 return error(_("%s: cannot parse parent commit %s"),
1811 command_to_string(command),
1812 oid_to_hex(&parent->object.oid));
1815 * "commit" is an existing commit. We would want to apply
1816 * the difference it introduces since its first parent "prev"
1817 * on top of the current HEAD if we are cherry-pick. Or the
1818 * reverse of it if we are revert.
1821 if (command == TODO_REVERT) {
1823 base_label = msg.label;
1825 next_label = msg.parent_label;
1826 strbuf_addstr(&msgbuf, "Revert \"");
1827 strbuf_addstr(&msgbuf, msg.subject);
1828 strbuf_addstr(&msgbuf, "\"\n\nThis reverts commit ");
1829 strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1831 if (commit->parents && commit->parents->next) {
1832 strbuf_addstr(&msgbuf, ", reversing\nchanges made to ");
1833 strbuf_addstr(&msgbuf, oid_to_hex(&parent->object.oid));
1835 strbuf_addstr(&msgbuf, ".\n");
1840 base_label = msg.parent_label;
1842 next_label = msg.label;
1844 /* Append the commit log message to msgbuf. */
1845 if (find_commit_subject(msg.message, &p))
1846 strbuf_addstr(&msgbuf, p);
1848 if (opts->record_origin) {
1849 strbuf_complete_line(&msgbuf);
1850 if (!has_conforming_footer(&msgbuf, NULL, 0))
1851 strbuf_addch(&msgbuf, '\n');
1852 strbuf_addstr(&msgbuf, cherry_picked_prefix);
1853 strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1854 strbuf_addstr(&msgbuf, ")\n");
1856 if (!is_fixup(command))
1857 author = get_author(msg.message);
1860 if (command == TODO_REWORD)
1862 else if (is_fixup(command)) {
1863 if (update_squash_messages(r, command, commit, opts))
1867 msg_file = rebase_path_squash_msg();
1868 else if (file_exists(rebase_path_fixup_msg())) {
1869 flags |= CLEANUP_MSG;
1870 msg_file = rebase_path_fixup_msg();
1872 const char *dest = git_path_squash_msg(r);
1874 if (copy_file(dest, rebase_path_squash_msg(), 0666))
1875 return error(_("could not rename '%s' to '%s'"),
1876 rebase_path_squash_msg(), dest);
1877 unlink(git_path_merge_msg(r));
1883 if (opts->signoff && !is_fixup(command))
1884 append_signoff(&msgbuf, 0, 0);
1886 if (is_rebase_i(opts) && write_author_script(msg.message) < 0)
1888 else if (!opts->strategy || !strcmp(opts->strategy, "recursive") || command == TODO_REVERT) {
1889 res = do_recursive_merge(r, base, next, base_label, next_label,
1890 &head, &msgbuf, opts);
1894 res |= write_message(msgbuf.buf, msgbuf.len,
1895 git_path_merge_msg(r), 0);
1897 struct commit_list *common = NULL;
1898 struct commit_list *remotes = NULL;
1900 res = write_message(msgbuf.buf, msgbuf.len,
1901 git_path_merge_msg(r), 0);
1903 commit_list_insert(base, &common);
1904 commit_list_insert(next, &remotes);
1905 res |= try_merge_command(r, opts->strategy,
1906 opts->xopts_nr, (const char **)opts->xopts,
1907 common, oid_to_hex(&head), remotes);
1908 free_commit_list(common);
1909 free_commit_list(remotes);
1911 strbuf_release(&msgbuf);
1914 * If the merge was clean or if it failed due to conflict, we write
1915 * CHERRY_PICK_HEAD for the subsequent invocation of commit to use.
1916 * However, if the merge did not even start, then we don't want to
1919 if (command == TODO_PICK && !opts->no_commit && (res == 0 || res == 1) &&
1920 update_ref(NULL, "CHERRY_PICK_HEAD", &commit->object.oid, NULL,
1921 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1923 if (command == TODO_REVERT && ((opts->no_commit && res == 0) || res == 1) &&
1924 update_ref(NULL, "REVERT_HEAD", &commit->object.oid, NULL,
1925 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1929 error(command == TODO_REVERT
1930 ? _("could not revert %s... %s")
1931 : _("could not apply %s... %s"),
1932 short_commit_name(commit), msg.subject);
1933 print_advice(r, res == 1, opts);
1934 repo_rerere(r, opts->allow_rerere_auto);
1938 allow = allow_empty(r, opts, commit);
1943 flags |= ALLOW_EMPTY;
1944 if (!opts->no_commit) {
1945 if (author || command == TODO_REVERT || (flags & AMEND_MSG))
1946 res = do_commit(r, msg_file, author, opts, flags);
1948 res = error(_("unable to parse commit author"));
1949 *check_todo = !!(flags & EDIT_MSG);
1950 if (!res && reword) {
1952 res = run_git_commit(r, NULL, opts, EDIT_MSG |
1953 VERIFY_MSG | AMEND_MSG |
1954 (flags & ALLOW_EMPTY));
1960 if (!res && final_fixup) {
1961 unlink(rebase_path_fixup_msg());
1962 unlink(rebase_path_squash_msg());
1963 unlink(rebase_path_current_fixups());
1964 strbuf_reset(&opts->current_fixups);
1965 opts->current_fixup_count = 0;
1969 free_message(commit, &msg);
1971 update_abort_safety_file();
1976 static int prepare_revs(struct replay_opts *opts)
1979 * picking (but not reverting) ranges (but not individual revisions)
1980 * should be done in reverse
1982 if (opts->action == REPLAY_PICK && !opts->revs->no_walk)
1983 opts->revs->reverse ^= 1;
1985 if (prepare_revision_walk(opts->revs))
1986 return error(_("revision walk setup failed"));
1991 static int read_and_refresh_cache(struct repository *r,
1992 struct replay_opts *opts)
1994 struct lock_file index_lock = LOCK_INIT;
1995 int index_fd = repo_hold_locked_index(r, &index_lock, 0);
1996 if (repo_read_index(r) < 0) {
1997 rollback_lock_file(&index_lock);
1998 return error(_("git %s: failed to read the index"),
1999 _(action_name(opts)));
2001 refresh_index(r->index, REFRESH_QUIET|REFRESH_UNMERGED, NULL, NULL, NULL);
2002 if (index_fd >= 0) {
2003 if (write_locked_index(r->index, &index_lock,
2004 COMMIT_LOCK | SKIP_IF_UNCHANGED)) {
2005 return error(_("git %s: failed to refresh the index"),
2006 _(action_name(opts)));
2012 enum todo_item_flags {
2013 TODO_EDIT_MERGE_MSG = 1
2016 void todo_list_release(struct todo_list *todo_list)
2018 strbuf_release(&todo_list->buf);
2019 FREE_AND_NULL(todo_list->items);
2020 todo_list->nr = todo_list->alloc = 0;
2023 static struct todo_item *append_new_todo(struct todo_list *todo_list)
2025 ALLOC_GROW(todo_list->items, todo_list->nr + 1, todo_list->alloc);
2026 return todo_list->items + todo_list->nr++;
2029 const char *todo_item_get_arg(struct todo_list *todo_list,
2030 struct todo_item *item)
2032 return todo_list->buf.buf + item->arg_offset;
2035 static int parse_insn_line(struct repository *r, struct todo_item *item,
2036 const char *buf, const char *bol, char *eol)
2038 struct object_id commit_oid;
2039 char *end_of_object_name;
2040 int i, saved, status, padding;
2045 bol += strspn(bol, " \t");
2047 if (bol == eol || *bol == '\r' || *bol == comment_line_char) {
2048 item->command = TODO_COMMENT;
2049 item->commit = NULL;
2050 item->arg_offset = bol - buf;
2051 item->arg_len = eol - bol;
2055 for (i = 0; i < TODO_COMMENT; i++)
2056 if (skip_prefix(bol, todo_command_info[i].str, &bol)) {
2059 } else if ((bol + 1 == eol || bol[1] == ' ') &&
2060 *bol == todo_command_info[i].c) {
2065 if (i >= TODO_COMMENT)
2068 /* Eat up extra spaces/ tabs before object name */
2069 padding = strspn(bol, " \t");
2072 if (item->command == TODO_NOOP || item->command == TODO_BREAK) {
2074 return error(_("%s does not accept arguments: '%s'"),
2075 command_to_string(item->command), bol);
2076 item->commit = NULL;
2077 item->arg_offset = bol - buf;
2078 item->arg_len = eol - bol;
2083 return error(_("missing arguments for %s"),
2084 command_to_string(item->command));
2086 if (item->command == TODO_EXEC || item->command == TODO_LABEL ||
2087 item->command == TODO_RESET) {
2088 item->commit = NULL;
2089 item->arg_offset = bol - buf;
2090 item->arg_len = (int)(eol - bol);
2094 if (item->command == TODO_MERGE) {
2095 if (skip_prefix(bol, "-C", &bol))
2096 bol += strspn(bol, " \t");
2097 else if (skip_prefix(bol, "-c", &bol)) {
2098 bol += strspn(bol, " \t");
2099 item->flags |= TODO_EDIT_MERGE_MSG;
2101 item->flags |= TODO_EDIT_MERGE_MSG;
2102 item->commit = NULL;
2103 item->arg_offset = bol - buf;
2104 item->arg_len = (int)(eol - bol);
2109 end_of_object_name = (char *) bol + strcspn(bol, " \t\n");
2110 saved = *end_of_object_name;
2111 *end_of_object_name = '\0';
2112 status = get_oid(bol, &commit_oid);
2113 *end_of_object_name = saved;
2115 bol = end_of_object_name + strspn(end_of_object_name, " \t");
2116 item->arg_offset = bol - buf;
2117 item->arg_len = (int)(eol - bol);
2120 return error(_("could not parse '%.*s'"),
2121 (int)(end_of_object_name - bol), bol);
2123 item->commit = lookup_commit_reference(r, &commit_oid);
2124 return !item->commit;
2127 int sequencer_get_last_command(struct repository *r, enum replay_action *action)
2129 struct todo_item item;
2131 const char *todo_file;
2132 struct strbuf buf = STRBUF_INIT;
2135 todo_file = git_path_todo_file();
2136 if (strbuf_read_file(&buf, todo_file, 0) < 0) {
2137 if (errno == ENOENT)
2140 return error_errno("unable to open '%s'", todo_file);
2142 eol = strchrnul(buf.buf, '\n');
2143 if (buf.buf != eol && eol[-1] == '\r')
2144 eol--; /* strip Carriage Return */
2145 if (parse_insn_line(r, &item, buf.buf, buf.buf, eol))
2147 if (item.command == TODO_PICK)
2148 *action = REPLAY_PICK;
2149 else if (item.command == TODO_REVERT)
2150 *action = REPLAY_REVERT;
2157 strbuf_release(&buf);
2162 int todo_list_parse_insn_buffer(struct repository *r, char *buf,
2163 struct todo_list *todo_list)
2165 struct todo_item *item;
2166 char *p = buf, *next_p;
2167 int i, res = 0, fixup_okay = file_exists(rebase_path_done());
2169 todo_list->current = todo_list->nr = 0;
2171 for (i = 1; *p; i++, p = next_p) {
2172 char *eol = strchrnul(p, '\n');
2174 next_p = *eol ? eol + 1 /* skip LF */ : eol;
2176 if (p != eol && eol[-1] == '\r')
2177 eol--; /* strip Carriage Return */
2179 item = append_new_todo(todo_list);
2180 item->offset_in_buf = p - todo_list->buf.buf;
2181 if (parse_insn_line(r, item, buf, p, eol)) {
2182 res = error(_("invalid line %d: %.*s"),
2183 i, (int)(eol - p), p);
2184 item->command = TODO_COMMENT + 1;
2185 item->arg_offset = p - buf;
2186 item->arg_len = (int)(eol - p);
2187 item->commit = NULL;
2192 else if (is_fixup(item->command))
2193 return error(_("cannot '%s' without a previous commit"),
2194 command_to_string(item->command));
2195 else if (!is_noop(item->command))
2202 static int count_commands(struct todo_list *todo_list)
2206 for (i = 0; i < todo_list->nr; i++)
2207 if (todo_list->items[i].command != TODO_COMMENT)
2213 static int get_item_line_offset(struct todo_list *todo_list, int index)
2215 return index < todo_list->nr ?
2216 todo_list->items[index].offset_in_buf : todo_list->buf.len;
2219 static const char *get_item_line(struct todo_list *todo_list, int index)
2221 return todo_list->buf.buf + get_item_line_offset(todo_list, index);
2224 static int get_item_line_length(struct todo_list *todo_list, int index)
2226 return get_item_line_offset(todo_list, index + 1)
2227 - get_item_line_offset(todo_list, index);
2230 static ssize_t strbuf_read_file_or_whine(struct strbuf *sb, const char *path)
2235 fd = open(path, O_RDONLY);
2237 return error_errno(_("could not open '%s'"), path);
2238 len = strbuf_read(sb, fd, 0);
2241 return error(_("could not read '%s'."), path);
2245 static int have_finished_the_last_pick(void)
2247 struct strbuf buf = STRBUF_INIT;
2249 const char *todo_path = git_path_todo_file();
2252 if (strbuf_read_file(&buf, todo_path, 0) < 0) {
2253 if (errno == ENOENT) {
2256 error_errno("unable to open '%s'", todo_path);
2260 /* If there is only one line then we are done */
2261 eol = strchr(buf.buf, '\n');
2262 if (!eol || !eol[1])
2265 strbuf_release(&buf);
2270 void sequencer_post_commit_cleanup(struct repository *r)
2272 struct replay_opts opts = REPLAY_OPTS_INIT;
2273 int need_cleanup = 0;
2275 if (file_exists(git_path_cherry_pick_head(r))) {
2276 unlink(git_path_cherry_pick_head(r));
2277 opts.action = REPLAY_PICK;
2281 if (file_exists(git_path_revert_head(r))) {
2282 unlink(git_path_revert_head(r));
2283 opts.action = REPLAY_REVERT;
2290 if (!have_finished_the_last_pick())
2293 sequencer_remove_state(&opts);
2296 static int read_populate_todo(struct repository *r,
2297 struct todo_list *todo_list,
2298 struct replay_opts *opts)
2301 const char *todo_file = get_todo_path(opts);
2304 strbuf_reset(&todo_list->buf);
2305 if (strbuf_read_file_or_whine(&todo_list->buf, todo_file) < 0)
2308 res = stat(todo_file, &st);
2310 return error(_("could not stat '%s'"), todo_file);
2311 fill_stat_data(&todo_list->stat, &st);
2313 res = todo_list_parse_insn_buffer(r, todo_list->buf.buf, todo_list);
2315 if (is_rebase_i(opts))
2316 return error(_("please fix this using "
2317 "'git rebase --edit-todo'."));
2318 return error(_("unusable instruction sheet: '%s'"), todo_file);
2321 if (!todo_list->nr &&
2322 (!is_rebase_i(opts) || !file_exists(rebase_path_done())))
2323 return error(_("no commits parsed."));
2325 if (!is_rebase_i(opts)) {
2326 enum todo_command valid =
2327 opts->action == REPLAY_PICK ? TODO_PICK : TODO_REVERT;
2330 for (i = 0; i < todo_list->nr; i++)
2331 if (valid == todo_list->items[i].command)
2333 else if (valid == TODO_PICK)
2334 return error(_("cannot cherry-pick during a revert."));
2336 return error(_("cannot revert during a cherry-pick."));
2339 if (is_rebase_i(opts)) {
2340 struct todo_list done = TODO_LIST_INIT;
2341 FILE *f = fopen_or_warn(rebase_path_msgtotal(), "w");
2343 if (strbuf_read_file(&done.buf, rebase_path_done(), 0) > 0 &&
2344 !todo_list_parse_insn_buffer(r, done.buf.buf, &done))
2345 todo_list->done_nr = count_commands(&done);
2347 todo_list->done_nr = 0;
2349 todo_list->total_nr = todo_list->done_nr
2350 + count_commands(todo_list);
2351 todo_list_release(&done);
2354 fprintf(f, "%d\n", todo_list->total_nr);
2362 static int git_config_string_dup(char **dest,
2363 const char *var, const char *value)
2366 return config_error_nonbool(var);
2368 *dest = xstrdup(value);
2372 static int populate_opts_cb(const char *key, const char *value, void *data)
2374 struct replay_opts *opts = data;
2379 else if (!strcmp(key, "options.no-commit"))
2380 opts->no_commit = git_config_bool_or_int(key, value, &error_flag);
2381 else if (!strcmp(key, "options.edit"))
2382 opts->edit = git_config_bool_or_int(key, value, &error_flag);
2383 else if (!strcmp(key, "options.allow-empty"))
2385 git_config_bool_or_int(key, value, &error_flag);
2386 else if (!strcmp(key, "options.allow-empty-message"))
2387 opts->allow_empty_message =
2388 git_config_bool_or_int(key, value, &error_flag);
2389 else if (!strcmp(key, "options.keep-redundant-commits"))
2390 opts->keep_redundant_commits =
2391 git_config_bool_or_int(key, value, &error_flag);
2392 else if (!strcmp(key, "options.signoff"))
2393 opts->signoff = git_config_bool_or_int(key, value, &error_flag);
2394 else if (!strcmp(key, "options.record-origin"))
2395 opts->record_origin = git_config_bool_or_int(key, value, &error_flag);
2396 else if (!strcmp(key, "options.allow-ff"))
2397 opts->allow_ff = git_config_bool_or_int(key, value, &error_flag);
2398 else if (!strcmp(key, "options.mainline"))
2399 opts->mainline = git_config_int(key, value);
2400 else if (!strcmp(key, "options.strategy"))
2401 git_config_string_dup(&opts->strategy, key, value);
2402 else if (!strcmp(key, "options.gpg-sign"))
2403 git_config_string_dup(&opts->gpg_sign, key, value);
2404 else if (!strcmp(key, "options.strategy-option")) {
2405 ALLOC_GROW(opts->xopts, opts->xopts_nr + 1, opts->xopts_alloc);
2406 opts->xopts[opts->xopts_nr++] = xstrdup(value);
2407 } else if (!strcmp(key, "options.allow-rerere-auto"))
2408 opts->allow_rerere_auto =
2409 git_config_bool_or_int(key, value, &error_flag) ?
2410 RERERE_AUTOUPDATE : RERERE_NOAUTOUPDATE;
2411 else if (!strcmp(key, "options.default-msg-cleanup")) {
2412 opts->explicit_cleanup = 1;
2413 opts->default_msg_cleanup = get_cleanup_mode(value, 1);
2415 return error(_("invalid key: %s"), key);
2418 return error(_("invalid value for %s: %s"), key, value);
2423 void parse_strategy_opts(struct replay_opts *opts, char *raw_opts)
2426 char *strategy_opts_string = raw_opts;
2428 if (*strategy_opts_string == ' ')
2429 strategy_opts_string++;
2431 opts->xopts_nr = split_cmdline(strategy_opts_string,
2432 (const char ***)&opts->xopts);
2433 for (i = 0; i < opts->xopts_nr; i++) {
2434 const char *arg = opts->xopts[i];
2436 skip_prefix(arg, "--", &arg);
2437 opts->xopts[i] = xstrdup(arg);
2441 static void read_strategy_opts(struct replay_opts *opts, struct strbuf *buf)
2444 if (!read_oneliner(buf, rebase_path_strategy(), 0))
2446 opts->strategy = strbuf_detach(buf, NULL);
2447 if (!read_oneliner(buf, rebase_path_strategy_opts(), 0))
2450 parse_strategy_opts(opts, buf->buf);
2453 static int read_populate_opts(struct replay_opts *opts)
2455 if (is_rebase_i(opts)) {
2456 struct strbuf buf = STRBUF_INIT;
2458 if (read_oneliner(&buf, rebase_path_gpg_sign_opt(), 1)) {
2459 if (!starts_with(buf.buf, "-S"))
2462 free(opts->gpg_sign);
2463 opts->gpg_sign = xstrdup(buf.buf + 2);
2468 if (read_oneliner(&buf, rebase_path_allow_rerere_autoupdate(), 1)) {
2469 if (!strcmp(buf.buf, "--rerere-autoupdate"))
2470 opts->allow_rerere_auto = RERERE_AUTOUPDATE;
2471 else if (!strcmp(buf.buf, "--no-rerere-autoupdate"))
2472 opts->allow_rerere_auto = RERERE_NOAUTOUPDATE;
2476 if (file_exists(rebase_path_verbose()))
2479 if (file_exists(rebase_path_quiet()))
2482 if (file_exists(rebase_path_signoff())) {
2487 if (file_exists(rebase_path_reschedule_failed_exec()))
2488 opts->reschedule_failed_exec = 1;
2490 read_strategy_opts(opts, &buf);
2491 strbuf_release(&buf);
2493 if (read_oneliner(&opts->current_fixups,
2494 rebase_path_current_fixups(), 1)) {
2495 const char *p = opts->current_fixups.buf;
2496 opts->current_fixup_count = 1;
2497 while ((p = strchr(p, '\n'))) {
2498 opts->current_fixup_count++;
2503 if (read_oneliner(&buf, rebase_path_squash_onto(), 0)) {
2504 if (get_oid_hex(buf.buf, &opts->squash_onto) < 0)
2505 return error(_("unusable squash-onto"));
2506 opts->have_squash_onto = 1;
2512 if (!file_exists(git_path_opts_file()))
2515 * The function git_parse_source(), called from git_config_from_file(),
2516 * may die() in case of a syntactically incorrect file. We do not care
2517 * about this case, though, because we wrote that file ourselves, so we
2518 * are pretty certain that it is syntactically correct.
2520 if (git_config_from_file(populate_opts_cb, git_path_opts_file(), opts) < 0)
2521 return error(_("malformed options sheet: '%s'"),
2522 git_path_opts_file());
2526 static void write_strategy_opts(struct replay_opts *opts)
2529 struct strbuf buf = STRBUF_INIT;
2531 for (i = 0; i < opts->xopts_nr; ++i)
2532 strbuf_addf(&buf, " --%s", opts->xopts[i]);
2534 write_file(rebase_path_strategy_opts(), "%s\n", buf.buf);
2535 strbuf_release(&buf);
2538 int write_basic_state(struct replay_opts *opts, const char *head_name,
2539 struct commit *onto, const char *orig_head)
2541 const char *quiet = getenv("GIT_QUIET");
2544 write_file(rebase_path_head_name(), "%s\n", head_name);
2546 write_file(rebase_path_onto(), "%s\n",
2547 oid_to_hex(&onto->object.oid));
2549 write_file(rebase_path_orig_head(), "%s\n", orig_head);
2552 write_file(rebase_path_quiet(), "%s\n", quiet);
2554 write_file(rebase_path_verbose(), "%s", "");
2556 write_file(rebase_path_strategy(), "%s\n", opts->strategy);
2557 if (opts->xopts_nr > 0)
2558 write_strategy_opts(opts);
2560 if (opts->allow_rerere_auto == RERERE_AUTOUPDATE)
2561 write_file(rebase_path_allow_rerere_autoupdate(), "--rerere-autoupdate\n");
2562 else if (opts->allow_rerere_auto == RERERE_NOAUTOUPDATE)
2563 write_file(rebase_path_allow_rerere_autoupdate(), "--no-rerere-autoupdate\n");
2566 write_file(rebase_path_gpg_sign_opt(), "-S%s\n", opts->gpg_sign);
2568 write_file(rebase_path_signoff(), "--signoff\n");
2569 if (opts->reschedule_failed_exec)
2570 write_file(rebase_path_reschedule_failed_exec(), "%s", "");
2575 static int walk_revs_populate_todo(struct todo_list *todo_list,
2576 struct replay_opts *opts)
2578 enum todo_command command = opts->action == REPLAY_PICK ?
2579 TODO_PICK : TODO_REVERT;
2580 const char *command_string = todo_command_info[command].str;
2581 struct commit *commit;
2583 if (prepare_revs(opts))
2586 while ((commit = get_revision(opts->revs))) {
2587 struct todo_item *item = append_new_todo(todo_list);
2588 const char *commit_buffer = get_commit_buffer(commit, NULL);
2589 const char *subject;
2592 item->command = command;
2593 item->commit = commit;
2594 item->arg_offset = 0;
2596 item->offset_in_buf = todo_list->buf.len;
2597 subject_len = find_commit_subject(commit_buffer, &subject);
2598 strbuf_addf(&todo_list->buf, "%s %s %.*s\n", command_string,
2599 short_commit_name(commit), subject_len, subject);
2600 unuse_commit_buffer(commit, commit_buffer);
2604 return error(_("empty commit set passed"));
2609 static int create_seq_dir(void)
2611 if (file_exists(git_path_seq_dir())) {
2612 error(_("a cherry-pick or revert is already in progress"));
2613 advise(_("try \"git cherry-pick (--continue | --quit | --abort)\""));
2615 } else if (mkdir(git_path_seq_dir(), 0777) < 0)
2616 return error_errno(_("could not create sequencer directory '%s'"),
2617 git_path_seq_dir());
2621 static int save_head(const char *head)
2623 struct lock_file head_lock = LOCK_INIT;
2624 struct strbuf buf = STRBUF_INIT;
2628 fd = hold_lock_file_for_update(&head_lock, git_path_head_file(), 0);
2630 return error_errno(_("could not lock HEAD"));
2631 strbuf_addf(&buf, "%s\n", head);
2632 written = write_in_full(fd, buf.buf, buf.len);
2633 strbuf_release(&buf);
2635 error_errno(_("could not write to '%s'"), git_path_head_file());
2636 rollback_lock_file(&head_lock);
2639 if (commit_lock_file(&head_lock) < 0)
2640 return error(_("failed to finalize '%s'"), git_path_head_file());
2644 static int rollback_is_safe(void)
2646 struct strbuf sb = STRBUF_INIT;
2647 struct object_id expected_head, actual_head;
2649 if (strbuf_read_file(&sb, git_path_abort_safety_file(), 0) >= 0) {
2651 if (get_oid_hex(sb.buf, &expected_head)) {
2652 strbuf_release(&sb);
2653 die(_("could not parse %s"), git_path_abort_safety_file());
2655 strbuf_release(&sb);
2657 else if (errno == ENOENT)
2658 oidclr(&expected_head);
2660 die_errno(_("could not read '%s'"), git_path_abort_safety_file());
2662 if (get_oid("HEAD", &actual_head))
2663 oidclr(&actual_head);
2665 return oideq(&actual_head, &expected_head);
2668 static int reset_for_rollback(const struct object_id *oid)
2670 const char *argv[4]; /* reset --merge <arg> + NULL */
2673 argv[1] = "--merge";
2674 argv[2] = oid_to_hex(oid);
2676 return run_command_v_opt(argv, RUN_GIT_CMD);
2679 static int rollback_single_pick(struct repository *r)
2681 struct object_id head_oid;
2683 if (!file_exists(git_path_cherry_pick_head(r)) &&
2684 !file_exists(git_path_revert_head(r)))
2685 return error(_("no cherry-pick or revert in progress"));
2686 if (read_ref_full("HEAD", 0, &head_oid, NULL))
2687 return error(_("cannot resolve HEAD"));
2688 if (is_null_oid(&head_oid))
2689 return error(_("cannot abort from a branch yet to be born"));
2690 return reset_for_rollback(&head_oid);
2693 int sequencer_rollback(struct repository *r, struct replay_opts *opts)
2696 struct object_id oid;
2697 struct strbuf buf = STRBUF_INIT;
2700 f = fopen(git_path_head_file(), "r");
2701 if (!f && errno == ENOENT) {
2703 * There is no multiple-cherry-pick in progress.
2704 * If CHERRY_PICK_HEAD or REVERT_HEAD indicates
2705 * a single-cherry-pick in progress, abort that.
2707 return rollback_single_pick(r);
2710 return error_errno(_("cannot open '%s'"), git_path_head_file());
2711 if (strbuf_getline_lf(&buf, f)) {
2712 error(_("cannot read '%s': %s"), git_path_head_file(),
2713 ferror(f) ? strerror(errno) : _("unexpected end of file"));
2718 if (parse_oid_hex(buf.buf, &oid, &p) || *p != '\0') {
2719 error(_("stored pre-cherry-pick HEAD file '%s' is corrupt"),
2720 git_path_head_file());
2723 if (is_null_oid(&oid)) {
2724 error(_("cannot abort from a branch yet to be born"));
2728 if (!rollback_is_safe()) {
2729 /* Do not error, just do not rollback */
2730 warning(_("You seem to have moved HEAD. "
2731 "Not rewinding, check your HEAD!"));
2733 if (reset_for_rollback(&oid))
2735 strbuf_release(&buf);
2736 return sequencer_remove_state(opts);
2738 strbuf_release(&buf);
2742 static int save_todo(struct todo_list *todo_list, struct replay_opts *opts)
2744 struct lock_file todo_lock = LOCK_INIT;
2745 const char *todo_path = get_todo_path(opts);
2746 int next = todo_list->current, offset, fd;
2749 * rebase -i writes "git-rebase-todo" without the currently executing
2750 * command, appending it to "done" instead.
2752 if (is_rebase_i(opts))
2755 fd = hold_lock_file_for_update(&todo_lock, todo_path, 0);
2757 return error_errno(_("could not lock '%s'"), todo_path);
2758 offset = get_item_line_offset(todo_list, next);
2759 if (write_in_full(fd, todo_list->buf.buf + offset,
2760 todo_list->buf.len - offset) < 0)
2761 return error_errno(_("could not write to '%s'"), todo_path);
2762 if (commit_lock_file(&todo_lock) < 0)
2763 return error(_("failed to finalize '%s'"), todo_path);
2765 if (is_rebase_i(opts) && next > 0) {
2766 const char *done = rebase_path_done();
2767 int fd = open(done, O_CREAT | O_WRONLY | O_APPEND, 0666);
2772 if (write_in_full(fd, get_item_line(todo_list, next - 1),
2773 get_item_line_length(todo_list, next - 1))
2775 ret = error_errno(_("could not write to '%s'"), done);
2777 ret = error_errno(_("failed to finalize '%s'"), done);
2783 static int save_opts(struct replay_opts *opts)
2785 const char *opts_file = git_path_opts_file();
2788 if (opts->no_commit)
2789 res |= git_config_set_in_file_gently(opts_file,
2790 "options.no-commit", "true");
2792 res |= git_config_set_in_file_gently(opts_file,
2793 "options.edit", "true");
2794 if (opts->allow_empty)
2795 res |= git_config_set_in_file_gently(opts_file,
2796 "options.allow-empty", "true");
2797 if (opts->allow_empty_message)
2798 res |= git_config_set_in_file_gently(opts_file,
2799 "options.allow-empty-message", "true");
2800 if (opts->keep_redundant_commits)
2801 res |= git_config_set_in_file_gently(opts_file,
2802 "options.keep-redundant-commits", "true");
2804 res |= git_config_set_in_file_gently(opts_file,
2805 "options.signoff", "true");
2806 if (opts->record_origin)
2807 res |= git_config_set_in_file_gently(opts_file,
2808 "options.record-origin", "true");
2810 res |= git_config_set_in_file_gently(opts_file,
2811 "options.allow-ff", "true");
2812 if (opts->mainline) {
2813 struct strbuf buf = STRBUF_INIT;
2814 strbuf_addf(&buf, "%d", opts->mainline);
2815 res |= git_config_set_in_file_gently(opts_file,
2816 "options.mainline", buf.buf);
2817 strbuf_release(&buf);
2820 res |= git_config_set_in_file_gently(opts_file,
2821 "options.strategy", opts->strategy);
2823 res |= git_config_set_in_file_gently(opts_file,
2824 "options.gpg-sign", opts->gpg_sign);
2827 for (i = 0; i < opts->xopts_nr; i++)
2828 res |= git_config_set_multivar_in_file_gently(opts_file,
2829 "options.strategy-option",
2830 opts->xopts[i], "^$", 0);
2832 if (opts->allow_rerere_auto)
2833 res |= git_config_set_in_file_gently(opts_file,
2834 "options.allow-rerere-auto",
2835 opts->allow_rerere_auto == RERERE_AUTOUPDATE ?
2838 if (opts->explicit_cleanup)
2839 res |= git_config_set_in_file_gently(opts_file,
2840 "options.default-msg-cleanup",
2841 describe_cleanup_mode(opts->default_msg_cleanup));
2845 static int make_patch(struct repository *r,
2846 struct commit *commit,
2847 struct replay_opts *opts)
2849 struct strbuf buf = STRBUF_INIT;
2850 struct rev_info log_tree_opt;
2851 const char *subject, *p;
2854 p = short_commit_name(commit);
2855 if (write_message(p, strlen(p), rebase_path_stopped_sha(), 1) < 0)
2857 if (update_ref("rebase", "REBASE_HEAD", &commit->object.oid,
2858 NULL, REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
2859 res |= error(_("could not update %s"), "REBASE_HEAD");
2861 strbuf_addf(&buf, "%s/patch", get_dir(opts));
2862 memset(&log_tree_opt, 0, sizeof(log_tree_opt));
2863 repo_init_revisions(r, &log_tree_opt, NULL);
2864 log_tree_opt.abbrev = 0;
2865 log_tree_opt.diff = 1;
2866 log_tree_opt.diffopt.output_format = DIFF_FORMAT_PATCH;
2867 log_tree_opt.disable_stdin = 1;
2868 log_tree_opt.no_commit_id = 1;
2869 log_tree_opt.diffopt.file = fopen(buf.buf, "w");
2870 log_tree_opt.diffopt.use_color = GIT_COLOR_NEVER;
2871 if (!log_tree_opt.diffopt.file)
2872 res |= error_errno(_("could not open '%s'"), buf.buf);
2874 res |= log_tree_commit(&log_tree_opt, commit);
2875 fclose(log_tree_opt.diffopt.file);
2879 strbuf_addf(&buf, "%s/message", get_dir(opts));
2880 if (!file_exists(buf.buf)) {
2881 const char *commit_buffer = get_commit_buffer(commit, NULL);
2882 find_commit_subject(commit_buffer, &subject);
2883 res |= write_message(subject, strlen(subject), buf.buf, 1);
2884 unuse_commit_buffer(commit, commit_buffer);
2886 strbuf_release(&buf);
2891 static int intend_to_amend(void)
2893 struct object_id head;
2896 if (get_oid("HEAD", &head))
2897 return error(_("cannot read HEAD"));
2899 p = oid_to_hex(&head);
2900 return write_message(p, strlen(p), rebase_path_amend(), 1);
2903 static int error_with_patch(struct repository *r,
2904 struct commit *commit,
2905 const char *subject, int subject_len,
2906 struct replay_opts *opts,
2907 int exit_code, int to_amend)
2910 if (make_patch(r, commit, opts))
2912 } else if (copy_file(rebase_path_message(),
2913 git_path_merge_msg(r), 0666))
2914 return error(_("unable to copy '%s' to '%s'"),
2915 git_path_merge_msg(r), rebase_path_message());
2918 if (intend_to_amend())
2922 _("You can amend the commit now, with\n"
2924 " git commit --amend %s\n"
2926 "Once you are satisfied with your changes, run\n"
2928 " git rebase --continue\n"),
2929 gpg_sign_opt_quoted(opts));
2930 } else if (exit_code) {
2932 fprintf_ln(stderr, _("Could not apply %s... %.*s"),
2933 short_commit_name(commit), subject_len, subject);
2936 * We don't have the hash of the parent so
2937 * just print the line from the todo file.
2939 fprintf_ln(stderr, _("Could not merge %.*s"),
2940 subject_len, subject);
2946 static int error_failed_squash(struct repository *r,
2947 struct commit *commit,
2948 struct replay_opts *opts,
2950 const char *subject)
2952 if (copy_file(rebase_path_message(), rebase_path_squash_msg(), 0666))
2953 return error(_("could not copy '%s' to '%s'"),
2954 rebase_path_squash_msg(), rebase_path_message());
2955 unlink(git_path_merge_msg(r));
2956 if (copy_file(git_path_merge_msg(r), rebase_path_message(), 0666))
2957 return error(_("could not copy '%s' to '%s'"),
2958 rebase_path_message(),
2959 git_path_merge_msg(r));
2960 return error_with_patch(r, commit, subject, subject_len, opts, 1, 0);
2963 static int do_exec(struct repository *r, const char *command_line)
2965 struct argv_array child_env = ARGV_ARRAY_INIT;
2966 const char *child_argv[] = { NULL, NULL };
2969 fprintf(stderr, "Executing: %s\n", command_line);
2970 child_argv[0] = command_line;
2971 argv_array_pushf(&child_env, "GIT_DIR=%s", absolute_path(get_git_dir()));
2972 argv_array_pushf(&child_env, "GIT_WORK_TREE=%s",
2973 absolute_path(get_git_work_tree()));
2974 status = run_command_v_opt_cd_env(child_argv, RUN_USING_SHELL, NULL,
2977 /* force re-reading of the cache */
2978 if (discard_index(r->index) < 0 || repo_read_index(r) < 0)
2979 return error(_("could not read index"));
2981 dirty = require_clean_work_tree(r, "rebase", NULL, 1, 1);
2984 warning(_("execution failed: %s\n%s"
2985 "You can fix the problem, and then run\n"
2987 " git rebase --continue\n"
2990 dirty ? N_("and made changes to the index and/or the "
2991 "working tree\n") : "");
2993 /* command not found */
2996 warning(_("execution succeeded: %s\nbut "
2997 "left changes to the index and/or the working tree\n"
2998 "Commit or stash your changes, and then run\n"
3000 " git rebase --continue\n"
3001 "\n"), command_line);
3005 argv_array_clear(&child_env);
3010 static int safe_append(const char *filename, const char *fmt, ...)
3013 struct lock_file lock = LOCK_INIT;
3014 int fd = hold_lock_file_for_update(&lock, filename,
3015 LOCK_REPORT_ON_ERROR);
3016 struct strbuf buf = STRBUF_INIT;
3021 if (strbuf_read_file(&buf, filename, 0) < 0 && errno != ENOENT) {
3022 error_errno(_("could not read '%s'"), filename);
3023 rollback_lock_file(&lock);
3026 strbuf_complete(&buf, '\n');
3028 strbuf_vaddf(&buf, fmt, ap);
3031 if (write_in_full(fd, buf.buf, buf.len) < 0) {
3032 error_errno(_("could not write to '%s'"), filename);
3033 strbuf_release(&buf);
3034 rollback_lock_file(&lock);
3037 if (commit_lock_file(&lock) < 0) {
3038 strbuf_release(&buf);
3039 rollback_lock_file(&lock);
3040 return error(_("failed to finalize '%s'"), filename);
3043 strbuf_release(&buf);
3047 static int do_label(struct repository *r, const char *name, int len)
3049 struct ref_store *refs = get_main_ref_store(r);
3050 struct ref_transaction *transaction;
3051 struct strbuf ref_name = STRBUF_INIT, err = STRBUF_INIT;
3052 struct strbuf msg = STRBUF_INIT;
3054 struct object_id head_oid;
3056 if (len == 1 && *name == '#')
3057 return error(_("illegal label name: '%.*s'"), len, name);
3059 strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
3060 strbuf_addf(&msg, "rebase -i (label) '%.*s'", len, name);
3062 transaction = ref_store_transaction_begin(refs, &err);
3064 error("%s", err.buf);
3066 } else if (get_oid("HEAD", &head_oid)) {
3067 error(_("could not read HEAD"));
3069 } else if (ref_transaction_update(transaction, ref_name.buf, &head_oid,
3070 NULL, 0, msg.buf, &err) < 0 ||
3071 ref_transaction_commit(transaction, &err)) {
3072 error("%s", err.buf);
3075 ref_transaction_free(transaction);
3076 strbuf_release(&err);
3077 strbuf_release(&msg);
3080 ret = safe_append(rebase_path_refs_to_delete(),
3081 "%s\n", ref_name.buf);
3082 strbuf_release(&ref_name);
3087 static const char *reflog_message(struct replay_opts *opts,
3088 const char *sub_action, const char *fmt, ...);
3090 static int do_reset(struct repository *r,
3091 const char *name, int len,
3092 struct replay_opts *opts)
3094 struct strbuf ref_name = STRBUF_INIT;
3095 struct object_id oid;
3096 struct lock_file lock = LOCK_INIT;
3097 struct tree_desc desc;
3099 struct unpack_trees_options unpack_tree_opts;
3102 if (repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0)
3105 if (len == 10 && !strncmp("[new root]", name, len)) {
3106 if (!opts->have_squash_onto) {
3108 if (commit_tree("", 0, the_hash_algo->empty_tree,
3109 NULL, &opts->squash_onto,
3111 return error(_("writing fake root commit"));
3112 opts->have_squash_onto = 1;
3113 hex = oid_to_hex(&opts->squash_onto);
3114 if (write_message(hex, strlen(hex),
3115 rebase_path_squash_onto(), 0))
3116 return error(_("writing squash-onto"));
3118 oidcpy(&oid, &opts->squash_onto);
3122 /* Determine the length of the label */
3123 for (i = 0; i < len; i++)
3124 if (isspace(name[i]))
3128 strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
3129 if (get_oid(ref_name.buf, &oid) &&
3130 get_oid(ref_name.buf + strlen("refs/rewritten/"), &oid)) {
3131 error(_("could not read '%s'"), ref_name.buf);
3132 rollback_lock_file(&lock);
3133 strbuf_release(&ref_name);
3138 memset(&unpack_tree_opts, 0, sizeof(unpack_tree_opts));
3139 setup_unpack_trees_porcelain(&unpack_tree_opts, "reset");
3140 unpack_tree_opts.head_idx = 1;
3141 unpack_tree_opts.src_index = r->index;
3142 unpack_tree_opts.dst_index = r->index;
3143 unpack_tree_opts.fn = oneway_merge;
3144 unpack_tree_opts.merge = 1;
3145 unpack_tree_opts.update = 1;
3147 if (repo_read_index_unmerged(r)) {
3148 rollback_lock_file(&lock);
3149 strbuf_release(&ref_name);
3150 return error_resolve_conflict(_(action_name(opts)));
3153 if (!fill_tree_descriptor(&desc, &oid)) {
3154 error(_("failed to find tree of %s"), oid_to_hex(&oid));
3155 rollback_lock_file(&lock);
3156 free((void *)desc.buffer);
3157 strbuf_release(&ref_name);
3161 if (unpack_trees(1, &desc, &unpack_tree_opts)) {
3162 rollback_lock_file(&lock);
3163 free((void *)desc.buffer);
3164 strbuf_release(&ref_name);
3168 tree = parse_tree_indirect(&oid);
3169 prime_cache_tree(r, r->index, tree);
3171 if (write_locked_index(r->index, &lock, COMMIT_LOCK) < 0)
3172 ret = error(_("could not write index"));
3173 free((void *)desc.buffer);
3176 ret = update_ref(reflog_message(opts, "reset", "'%.*s'",
3177 len, name), "HEAD", &oid,
3178 NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3180 strbuf_release(&ref_name);
3184 static struct commit *lookup_label(const char *label, int len,
3187 struct commit *commit;
3190 strbuf_addf(buf, "refs/rewritten/%.*s", len, label);
3191 commit = lookup_commit_reference_by_name(buf->buf);
3193 /* fall back to non-rewritten ref or commit */
3194 strbuf_splice(buf, 0, strlen("refs/rewritten/"), "", 0);
3195 commit = lookup_commit_reference_by_name(buf->buf);
3199 error(_("could not resolve '%s'"), buf->buf);
3204 static int do_merge(struct repository *r,
3205 struct commit *commit,
3206 const char *arg, int arg_len,
3207 int flags, struct replay_opts *opts)
3209 int run_commit_flags = (flags & TODO_EDIT_MERGE_MSG) ?
3210 EDIT_MSG | VERIFY_MSG : 0;
3211 struct strbuf ref_name = STRBUF_INIT;
3212 struct commit *head_commit, *merge_commit, *i;
3213 struct commit_list *bases, *j, *reversed = NULL;
3214 struct commit_list *to_merge = NULL, **tail = &to_merge;
3215 struct merge_options o;
3216 int merge_arg_len, oneline_offset, can_fast_forward, ret, k;
3217 static struct lock_file lock;
3220 if (repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0) {
3225 head_commit = lookup_commit_reference_by_name("HEAD");
3227 ret = error(_("cannot merge without a current revision"));
3232 * For octopus merges, the arg starts with the list of revisions to be
3233 * merged. The list is optionally followed by '#' and the oneline.
3235 merge_arg_len = oneline_offset = arg_len;
3236 for (p = arg; p - arg < arg_len; p += strspn(p, " \t\n")) {
3239 if (*p == '#' && (!p[1] || isspace(p[1]))) {
3240 p += 1 + strspn(p + 1, " \t\n");
3241 oneline_offset = p - arg;
3244 k = strcspn(p, " \t\n");
3247 merge_commit = lookup_label(p, k, &ref_name);
3248 if (!merge_commit) {
3249 ret = error(_("unable to parse '%.*s'"), k, p);
3252 tail = &commit_list_insert(merge_commit, tail)->next;
3254 merge_arg_len = p - arg;
3258 ret = error(_("nothing to merge: '%.*s'"), arg_len, arg);
3262 if (opts->have_squash_onto &&
3263 oideq(&head_commit->object.oid, &opts->squash_onto)) {
3265 * When the user tells us to "merge" something into a
3266 * "[new root]", let's simply fast-forward to the merge head.
3268 rollback_lock_file(&lock);
3270 ret = error(_("octopus merge cannot be executed on "
3271 "top of a [new root]"));
3273 ret = fast_forward_to(r, &to_merge->item->object.oid,
3274 &head_commit->object.oid, 0,
3280 const char *message = get_commit_buffer(commit, NULL);
3285 ret = error(_("could not get commit message of '%s'"),
3286 oid_to_hex(&commit->object.oid));
3289 write_author_script(message);
3290 find_commit_subject(message, &body);
3292 ret = write_message(body, len, git_path_merge_msg(r), 0);
3293 unuse_commit_buffer(commit, message);
3295 error_errno(_("could not write '%s'"),
3296 git_path_merge_msg(r));
3300 struct strbuf buf = STRBUF_INIT;
3303 strbuf_addf(&buf, "author %s", git_author_info(0));
3304 write_author_script(buf.buf);
3307 if (oneline_offset < arg_len) {
3308 p = arg + oneline_offset;
3309 len = arg_len - oneline_offset;
3311 strbuf_addf(&buf, "Merge %s '%.*s'",
3312 to_merge->next ? "branches" : "branch",
3313 merge_arg_len, arg);
3318 ret = write_message(p, len, git_path_merge_msg(r), 0);
3319 strbuf_release(&buf);
3321 error_errno(_("could not write '%s'"),
3322 git_path_merge_msg(r));
3328 * If HEAD is not identical to the first parent of the original merge
3329 * commit, we cannot fast-forward.
3331 can_fast_forward = opts->allow_ff && commit && commit->parents &&
3332 oideq(&commit->parents->item->object.oid,
3333 &head_commit->object.oid);
3336 * If any merge head is different from the original one, we cannot
3339 if (can_fast_forward) {
3340 struct commit_list *p = commit->parents->next;
3342 for (j = to_merge; j && p; j = j->next, p = p->next)
3343 if (!oideq(&j->item->object.oid,
3344 &p->item->object.oid)) {
3345 can_fast_forward = 0;
3349 * If the number of merge heads differs from the original merge
3350 * commit, we cannot fast-forward.
3353 can_fast_forward = 0;
3356 if (can_fast_forward) {
3357 rollback_lock_file(&lock);
3358 ret = fast_forward_to(r, &commit->object.oid,
3359 &head_commit->object.oid, 0, opts);
3363 if (to_merge->next) {
3365 struct child_process cmd = CHILD_PROCESS_INIT;
3367 if (read_env_script(&cmd.env_array)) {
3368 const char *gpg_opt = gpg_sign_opt_quoted(opts);
3370 ret = error(_(staged_changes_advice), gpg_opt, gpg_opt);
3375 argv_array_push(&cmd.args, "merge");
3376 argv_array_push(&cmd.args, "-s");
3377 argv_array_push(&cmd.args, "octopus");
3378 argv_array_push(&cmd.args, "--no-edit");
3379 argv_array_push(&cmd.args, "--no-ff");
3380 argv_array_push(&cmd.args, "--no-log");
3381 argv_array_push(&cmd.args, "--no-stat");
3382 argv_array_push(&cmd.args, "-F");
3383 argv_array_push(&cmd.args, git_path_merge_msg(r));
3385 argv_array_push(&cmd.args, opts->gpg_sign);
3387 /* Add the tips to be merged */
3388 for (j = to_merge; j; j = j->next)
3389 argv_array_push(&cmd.args,
3390 oid_to_hex(&j->item->object.oid));
3392 strbuf_release(&ref_name);
3393 unlink(git_path_cherry_pick_head(r));
3394 rollback_lock_file(&lock);
3396 rollback_lock_file(&lock);
3397 ret = run_command(&cmd);
3399 /* force re-reading of the cache */
3400 if (!ret && (discard_index(r->index) < 0 ||
3401 repo_read_index(r) < 0))
3402 ret = error(_("could not read index"));
3406 merge_commit = to_merge->item;
3407 bases = get_merge_bases(head_commit, merge_commit);
3408 if (bases && oideq(&merge_commit->object.oid,
3409 &bases->item->object.oid)) {
3411 /* skip merging an ancestor of HEAD */
3415 write_message(oid_to_hex(&merge_commit->object.oid), GIT_SHA1_HEXSZ,
3416 git_path_merge_head(r), 0);
3417 write_message("no-ff", 5, git_path_merge_mode(r), 0);
3419 for (j = bases; j; j = j->next)
3420 commit_list_insert(j->item, &reversed);
3421 free_commit_list(bases);
3424 init_merge_options(&o, r);
3426 o.branch2 = ref_name.buf;
3427 o.buffer_output = 2;
3429 ret = merge_recursive(&o, head_commit, merge_commit, reversed, &i);
3431 fputs(o.obuf.buf, stdout);
3432 strbuf_release(&o.obuf);
3434 error(_("could not even attempt to merge '%.*s'"),
3435 merge_arg_len, arg);
3439 * The return value of merge_recursive() is 1 on clean, and 0 on
3442 * Let's reverse that, so that do_merge() returns 0 upon success and
3443 * 1 upon failed merge (keeping the return value -1 for the cases where
3444 * we will want to reschedule the `merge` command).
3448 if (r->index->cache_changed &&
3449 write_locked_index(r->index, &lock, COMMIT_LOCK)) {
3450 ret = error(_("merge: Unable to write new index file"));
3454 rollback_lock_file(&lock);
3456 repo_rerere(r, opts->allow_rerere_auto);
3459 * In case of problems, we now want to return a positive
3460 * value (a negative one would indicate that the `merge`
3461 * command needs to be rescheduled).
3463 ret = !!run_git_commit(r, git_path_merge_msg(r), opts,
3467 strbuf_release(&ref_name);
3468 rollback_lock_file(&lock);
3469 free_commit_list(to_merge);
3473 static int is_final_fixup(struct todo_list *todo_list)
3475 int i = todo_list->current;
3477 if (!is_fixup(todo_list->items[i].command))
3480 while (++i < todo_list->nr)
3481 if (is_fixup(todo_list->items[i].command))
3483 else if (!is_noop(todo_list->items[i].command))
3488 static enum todo_command peek_command(struct todo_list *todo_list, int offset)
3492 for (i = todo_list->current + offset; i < todo_list->nr; i++)
3493 if (!is_noop(todo_list->items[i].command))
3494 return todo_list->items[i].command;
3499 static int apply_autostash(struct replay_opts *opts)
3501 struct strbuf stash_sha1 = STRBUF_INIT;
3502 struct child_process child = CHILD_PROCESS_INIT;
3505 if (!read_oneliner(&stash_sha1, rebase_path_autostash(), 1)) {
3506 strbuf_release(&stash_sha1);
3509 strbuf_trim(&stash_sha1);
3512 child.no_stdout = 1;
3513 child.no_stderr = 1;
3514 argv_array_push(&child.args, "stash");
3515 argv_array_push(&child.args, "apply");
3516 argv_array_push(&child.args, stash_sha1.buf);
3517 if (!run_command(&child))
3518 fprintf(stderr, _("Applied autostash.\n"));
3520 struct child_process store = CHILD_PROCESS_INIT;
3523 argv_array_push(&store.args, "stash");
3524 argv_array_push(&store.args, "store");
3525 argv_array_push(&store.args, "-m");
3526 argv_array_push(&store.args, "autostash");
3527 argv_array_push(&store.args, "-q");
3528 argv_array_push(&store.args, stash_sha1.buf);
3529 if (run_command(&store))
3530 ret = error(_("cannot store %s"), stash_sha1.buf);
3533 _("Applying autostash resulted in conflicts.\n"
3534 "Your changes are safe in the stash.\n"
3535 "You can run \"git stash pop\" or"
3536 " \"git stash drop\" at any time.\n"));
3539 strbuf_release(&stash_sha1);
3543 static const char *reflog_message(struct replay_opts *opts,
3544 const char *sub_action, const char *fmt, ...)
3547 static struct strbuf buf = STRBUF_INIT;
3551 strbuf_addstr(&buf, action_name(opts));
3553 strbuf_addf(&buf, " (%s)", sub_action);
3555 strbuf_addstr(&buf, ": ");
3556 strbuf_vaddf(&buf, fmt, ap);
3563 static int run_git_checkout(struct repository *r, struct replay_opts *opts,
3564 const char *commit, const char *action)
3566 struct child_process cmd = CHILD_PROCESS_INIT;
3571 argv_array_push(&cmd.args, "checkout");
3572 argv_array_push(&cmd.args, commit);
3573 argv_array_pushf(&cmd.env_array, GIT_REFLOG_ACTION "=%s", action);
3576 ret = run_command(&cmd);
3578 ret = run_command_silent_on_success(&cmd);
3581 discard_index(r->index);
3586 int prepare_branch_to_be_rebased(struct repository *r, struct replay_opts *opts,
3591 if (commit && *commit) {
3592 action = reflog_message(opts, "start", "checkout %s", commit);
3593 if (run_git_checkout(r, opts, commit, action))
3594 return error(_("could not checkout %s"), commit);
3600 static int checkout_onto(struct repository *r, struct replay_opts *opts,
3601 const char *onto_name, const struct object_id *onto,
3602 const char *orig_head)
3604 struct object_id oid;
3605 const char *action = reflog_message(opts, "start", "checkout %s", onto_name);
3607 if (get_oid(orig_head, &oid))
3608 return error(_("%s: not a valid OID"), orig_head);
3610 if (run_git_checkout(r, opts, oid_to_hex(onto), action)) {
3611 apply_autostash(opts);
3612 sequencer_remove_state(opts);
3613 return error(_("could not detach HEAD"));
3616 return update_ref(NULL, "ORIG_HEAD", &oid, NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3619 static int stopped_at_head(struct repository *r)
3621 struct object_id head;
3622 struct commit *commit;
3623 struct commit_message message;
3625 if (get_oid("HEAD", &head) ||
3626 !(commit = lookup_commit(r, &head)) ||
3627 parse_commit(commit) || get_message(commit, &message))
3628 fprintf(stderr, _("Stopped at HEAD\n"));
3630 fprintf(stderr, _("Stopped at %s\n"), message.label);
3631 free_message(commit, &message);
3637 static const char rescheduled_advice[] =
3638 N_("Could not execute the todo command\n"
3642 "It has been rescheduled; To edit the command before continuing, please\n"
3643 "edit the todo list first:\n"
3645 " git rebase --edit-todo\n"
3646 " git rebase --continue\n");
3648 static int pick_commits(struct repository *r,
3649 struct todo_list *todo_list,
3650 struct replay_opts *opts)
3652 int res = 0, reschedule = 0;
3654 setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
3656 assert(!(opts->signoff || opts->no_commit ||
3657 opts->record_origin || opts->edit));
3658 if (read_and_refresh_cache(r, opts))
3661 while (todo_list->current < todo_list->nr) {
3662 struct todo_item *item = todo_list->items + todo_list->current;
3663 const char *arg = todo_item_get_arg(todo_list, item);
3666 if (save_todo(todo_list, opts))
3668 if (is_rebase_i(opts)) {
3669 if (item->command != TODO_COMMENT) {
3670 FILE *f = fopen(rebase_path_msgnum(), "w");
3672 todo_list->done_nr++;
3675 fprintf(f, "%d\n", todo_list->done_nr);
3679 fprintf(stderr, "Rebasing (%d/%d)%s",
3681 todo_list->total_nr,
3682 opts->verbose ? "\n" : "\r");
3684 unlink(rebase_path_message());
3685 unlink(rebase_path_author_script());
3686 unlink(rebase_path_stopped_sha());
3687 unlink(rebase_path_amend());
3688 unlink(git_path_merge_head(the_repository));
3689 delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
3691 if (item->command == TODO_BREAK) {
3694 return stopped_at_head(r);
3697 if (item->command <= TODO_SQUASH) {
3698 if (is_rebase_i(opts))
3699 setenv("GIT_REFLOG_ACTION", reflog_message(opts,
3700 command_to_string(item->command), NULL),
3702 res = do_pick_commit(r, item->command, item->commit,
3703 opts, is_final_fixup(todo_list),
3705 if (is_rebase_i(opts) && res < 0) {
3707 advise(_(rescheduled_advice),
3708 get_item_line_length(todo_list,
3709 todo_list->current),
3710 get_item_line(todo_list,
3711 todo_list->current));
3712 todo_list->current--;
3713 if (save_todo(todo_list, opts))
3716 if (item->command == TODO_EDIT) {
3717 struct commit *commit = item->commit;
3722 _("Stopped at %s... %.*s\n"),
3723 short_commit_name(commit),
3724 item->arg_len, arg);
3726 return error_with_patch(r, commit,
3727 arg, item->arg_len, opts, res, !res);
3729 if (is_rebase_i(opts) && !res)
3730 record_in_rewritten(&item->commit->object.oid,
3731 peek_command(todo_list, 1));
3732 if (res && is_fixup(item->command)) {
3735 return error_failed_squash(r, item->commit, opts,
3736 item->arg_len, arg);
3737 } else if (res && is_rebase_i(opts) && item->commit) {
3739 struct object_id oid;
3742 * If we are rewording and have either
3743 * fast-forwarded already, or are about to
3744 * create a new root commit, we want to amend,
3745 * otherwise we do not.
3747 if (item->command == TODO_REWORD &&
3748 !get_oid("HEAD", &oid) &&
3749 (oideq(&item->commit->object.oid, &oid) ||
3750 (opts->have_squash_onto &&
3751 oideq(&opts->squash_onto, &oid))))
3754 return res | error_with_patch(r, item->commit,
3755 arg, item->arg_len, opts,
3758 } else if (item->command == TODO_EXEC) {
3759 char *end_of_arg = (char *)(arg + item->arg_len);
3760 int saved = *end_of_arg;
3765 res = do_exec(r, arg);
3766 *end_of_arg = saved;
3769 if (opts->reschedule_failed_exec)
3773 } else if (item->command == TODO_LABEL) {
3774 if ((res = do_label(r, arg, item->arg_len)))
3776 } else if (item->command == TODO_RESET) {
3777 if ((res = do_reset(r, arg, item->arg_len, opts)))
3779 } else if (item->command == TODO_MERGE) {
3780 if ((res = do_merge(r, item->commit,
3782 item->flags, opts)) < 0)
3784 else if (item->commit)
3785 record_in_rewritten(&item->commit->object.oid,
3786 peek_command(todo_list, 1));
3788 /* failed with merge conflicts */
3789 return error_with_patch(r, item->commit,
3792 } else if (!is_noop(item->command))
3793 return error(_("unknown command %d"), item->command);
3796 advise(_(rescheduled_advice),
3797 get_item_line_length(todo_list,
3798 todo_list->current),
3799 get_item_line(todo_list, todo_list->current));
3800 todo_list->current--;
3801 if (save_todo(todo_list, opts))
3804 return error_with_patch(r,
3808 } else if (check_todo && !res) {
3811 if (stat(get_todo_path(opts), &st)) {
3812 res = error_errno(_("could not stat '%s'"),
3813 get_todo_path(opts));
3814 } else if (match_stat_data(&todo_list->stat, &st)) {
3815 /* Reread the todo file if it has changed. */
3816 todo_list_release(todo_list);
3817 if (read_populate_todo(r, todo_list, opts))
3818 res = -1; /* message was printed */
3819 /* `current` will be incremented below */
3820 todo_list->current = -1;
3824 todo_list->current++;
3829 if (is_rebase_i(opts)) {
3830 struct strbuf head_ref = STRBUF_INIT, buf = STRBUF_INIT;
3833 /* Stopped in the middle, as planned? */
3834 if (todo_list->current < todo_list->nr)
3837 if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
3838 starts_with(head_ref.buf, "refs/")) {
3840 struct object_id head, orig;
3843 if (get_oid("HEAD", &head)) {
3844 res = error(_("cannot read HEAD"));
3846 strbuf_release(&head_ref);
3847 strbuf_release(&buf);
3850 if (!read_oneliner(&buf, rebase_path_orig_head(), 0) ||
3851 get_oid_hex(buf.buf, &orig)) {
3852 res = error(_("could not read orig-head"));
3853 goto cleanup_head_ref;
3856 if (!read_oneliner(&buf, rebase_path_onto(), 0)) {
3857 res = error(_("could not read 'onto'"));
3858 goto cleanup_head_ref;
3860 msg = reflog_message(opts, "finish", "%s onto %s",
3861 head_ref.buf, buf.buf);
3862 if (update_ref(msg, head_ref.buf, &head, &orig,
3863 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR)) {
3864 res = error(_("could not update %s"),
3866 goto cleanup_head_ref;
3868 msg = reflog_message(opts, "finish", "returning to %s",
3870 if (create_symref("HEAD", head_ref.buf, msg)) {
3871 res = error(_("could not update HEAD to %s"),
3873 goto cleanup_head_ref;
3878 if (opts->verbose) {
3879 struct rev_info log_tree_opt;
3880 struct object_id orig, head;
3882 memset(&log_tree_opt, 0, sizeof(log_tree_opt));
3883 repo_init_revisions(r, &log_tree_opt, NULL);
3884 log_tree_opt.diff = 1;
3885 log_tree_opt.diffopt.output_format =
3886 DIFF_FORMAT_DIFFSTAT;
3887 log_tree_opt.disable_stdin = 1;
3889 if (read_oneliner(&buf, rebase_path_orig_head(), 0) &&
3890 !get_oid(buf.buf, &orig) &&
3891 !get_oid("HEAD", &head)) {
3892 diff_tree_oid(&orig, &head, "",
3893 &log_tree_opt.diffopt);
3894 log_tree_diff_flush(&log_tree_opt);
3897 flush_rewritten_pending();
3898 if (!stat(rebase_path_rewritten_list(), &st) &&
3900 struct child_process child = CHILD_PROCESS_INIT;
3901 const char *post_rewrite_hook =
3902 find_hook("post-rewrite");
3904 child.in = open(rebase_path_rewritten_list(), O_RDONLY);
3906 argv_array_push(&child.args, "notes");
3907 argv_array_push(&child.args, "copy");
3908 argv_array_push(&child.args, "--for-rewrite=rebase");
3909 /* we don't care if this copying failed */
3910 run_command(&child);
3912 if (post_rewrite_hook) {
3913 struct child_process hook = CHILD_PROCESS_INIT;
3915 hook.in = open(rebase_path_rewritten_list(),
3917 hook.stdout_to_stderr = 1;
3918 hook.trace2_hook_name = "post-rewrite";
3919 argv_array_push(&hook.args, post_rewrite_hook);
3920 argv_array_push(&hook.args, "rebase");
3921 /* we don't care if this hook failed */
3925 apply_autostash(opts);
3931 "Successfully rebased and updated %s.\n",
3935 strbuf_release(&buf);
3936 strbuf_release(&head_ref);
3940 * Sequence of picks finished successfully; cleanup by
3941 * removing the .git/sequencer directory
3943 return sequencer_remove_state(opts);
3946 static int continue_single_pick(struct repository *r)
3948 const char *argv[] = { "commit", NULL };
3950 if (!file_exists(git_path_cherry_pick_head(r)) &&
3951 !file_exists(git_path_revert_head(r)))
3952 return error(_("no cherry-pick or revert in progress"));
3953 return run_command_v_opt(argv, RUN_GIT_CMD);
3956 static int commit_staged_changes(struct repository *r,
3957 struct replay_opts *opts,
3958 struct todo_list *todo_list)
3960 unsigned int flags = ALLOW_EMPTY | EDIT_MSG;
3961 unsigned int final_fixup = 0, is_clean;
3963 if (has_unstaged_changes(r, 1))
3964 return error(_("cannot rebase: You have unstaged changes."));
3966 is_clean = !has_uncommitted_changes(r, 0);
3968 if (file_exists(rebase_path_amend())) {
3969 struct strbuf rev = STRBUF_INIT;
3970 struct object_id head, to_amend;
3972 if (get_oid("HEAD", &head))
3973 return error(_("cannot amend non-existing commit"));
3974 if (!read_oneliner(&rev, rebase_path_amend(), 0))
3975 return error(_("invalid file: '%s'"), rebase_path_amend());
3976 if (get_oid_hex(rev.buf, &to_amend))
3977 return error(_("invalid contents: '%s'"),
3978 rebase_path_amend());
3979 if (!is_clean && !oideq(&head, &to_amend))
3980 return error(_("\nYou have uncommitted changes in your "
3981 "working tree. Please, commit them\n"
3982 "first and then run 'git rebase "
3983 "--continue' again."));
3985 * When skipping a failed fixup/squash, we need to edit the
3986 * commit message, the current fixup list and count, and if it
3987 * was the last fixup/squash in the chain, we need to clean up
3988 * the commit message and if there was a squash, let the user
3991 if (!is_clean || !opts->current_fixup_count)
3992 ; /* this is not the final fixup */
3993 else if (!oideq(&head, &to_amend) ||
3994 !file_exists(rebase_path_stopped_sha())) {
3995 /* was a final fixup or squash done manually? */
3996 if (!is_fixup(peek_command(todo_list, 0))) {
3997 unlink(rebase_path_fixup_msg());
3998 unlink(rebase_path_squash_msg());
3999 unlink(rebase_path_current_fixups());
4000 strbuf_reset(&opts->current_fixups);
4001 opts->current_fixup_count = 0;
4004 /* we are in a fixup/squash chain */
4005 const char *p = opts->current_fixups.buf;
4006 int len = opts->current_fixups.len;
4008 opts->current_fixup_count--;
4010 BUG("Incorrect current_fixups:\n%s", p);
4011 while (len && p[len - 1] != '\n')
4013 strbuf_setlen(&opts->current_fixups, len);
4014 if (write_message(p, len, rebase_path_current_fixups(),
4016 return error(_("could not write file: '%s'"),
4017 rebase_path_current_fixups());
4020 * If a fixup/squash in a fixup/squash chain failed, the
4021 * commit message is already correct, no need to commit
4024 * Only if it is the final command in the fixup/squash
4025 * chain, and only if the chain is longer than a single
4026 * fixup/squash command (which was just skipped), do we
4027 * actually need to re-commit with a cleaned up commit
4030 if (opts->current_fixup_count > 0 &&
4031 !is_fixup(peek_command(todo_list, 0))) {
4034 * If there was not a single "squash" in the
4035 * chain, we only need to clean up the commit
4036 * message, no need to bother the user with
4037 * opening the commit message in the editor.
4039 if (!starts_with(p, "squash ") &&
4040 !strstr(p, "\nsquash "))
4041 flags = (flags & ~EDIT_MSG) | CLEANUP_MSG;
4042 } else if (is_fixup(peek_command(todo_list, 0))) {
4044 * We need to update the squash message to skip
4045 * the latest commit message.
4047 struct commit *commit;
4048 const char *path = rebase_path_squash_msg();
4050 if (parse_head(r, &commit) ||
4051 !(p = get_commit_buffer(commit, NULL)) ||
4052 write_message(p, strlen(p), path, 0)) {
4053 unuse_commit_buffer(commit, p);
4054 return error(_("could not write file: "
4057 unuse_commit_buffer(commit, p);
4061 strbuf_release(&rev);
4066 const char *cherry_pick_head = git_path_cherry_pick_head(r);
4068 if (file_exists(cherry_pick_head) && unlink(cherry_pick_head))
4069 return error(_("could not remove CHERRY_PICK_HEAD"));
4074 if (run_git_commit(r, final_fixup ? NULL : rebase_path_message(),
4076 return error(_("could not commit staged changes."));
4077 unlink(rebase_path_amend());
4078 unlink(git_path_merge_head(the_repository));
4080 unlink(rebase_path_fixup_msg());
4081 unlink(rebase_path_squash_msg());
4083 if (opts->current_fixup_count > 0) {
4085 * Whether final fixup or not, we just cleaned up the commit
4088 unlink(rebase_path_current_fixups());
4089 strbuf_reset(&opts->current_fixups);
4090 opts->current_fixup_count = 0;
4095 int sequencer_continue(struct repository *r, struct replay_opts *opts)
4097 struct todo_list todo_list = TODO_LIST_INIT;
4100 if (read_and_refresh_cache(r, opts))
4103 if (read_populate_opts(opts))
4105 if (is_rebase_i(opts)) {
4106 if ((res = read_populate_todo(r, &todo_list, opts)))
4107 goto release_todo_list;
4108 if (commit_staged_changes(r, opts, &todo_list))
4110 } else if (!file_exists(get_todo_path(opts)))
4111 return continue_single_pick(r);
4112 else if ((res = read_populate_todo(r, &todo_list, opts)))
4113 goto release_todo_list;
4115 if (!is_rebase_i(opts)) {
4116 /* Verify that the conflict has been resolved */
4117 if (file_exists(git_path_cherry_pick_head(r)) ||
4118 file_exists(git_path_revert_head(r))) {
4119 res = continue_single_pick(r);
4121 goto release_todo_list;
4123 if (index_differs_from(r, "HEAD", NULL, 0)) {
4124 res = error_dirty_index(r, opts);
4125 goto release_todo_list;
4127 todo_list.current++;
4128 } else if (file_exists(rebase_path_stopped_sha())) {
4129 struct strbuf buf = STRBUF_INIT;
4130 struct object_id oid;
4132 if (read_oneliner(&buf, rebase_path_stopped_sha(), 1) &&
4133 !get_oid_committish(buf.buf, &oid))
4134 record_in_rewritten(&oid, peek_command(&todo_list, 0));
4135 strbuf_release(&buf);
4138 res = pick_commits(r, &todo_list, opts);
4140 todo_list_release(&todo_list);
4144 static int single_pick(struct repository *r,
4145 struct commit *cmit,
4146 struct replay_opts *opts)
4150 setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
4151 return do_pick_commit(r, opts->action == REPLAY_PICK ?
4152 TODO_PICK : TODO_REVERT, cmit, opts, 0,
4156 int sequencer_pick_revisions(struct repository *r,
4157 struct replay_opts *opts)
4159 struct todo_list todo_list = TODO_LIST_INIT;
4160 struct object_id oid;
4164 if (read_and_refresh_cache(r, opts))
4167 for (i = 0; i < opts->revs->pending.nr; i++) {
4168 struct object_id oid;
4169 const char *name = opts->revs->pending.objects[i].name;
4171 /* This happens when using --stdin. */
4175 if (!get_oid(name, &oid)) {
4176 if (!lookup_commit_reference_gently(r, &oid, 1)) {
4177 enum object_type type = oid_object_info(r,
4180 return error(_("%s: can't cherry-pick a %s"),
4181 name, type_name(type));
4184 return error(_("%s: bad revision"), name);
4188 * If we were called as "git cherry-pick <commit>", just
4189 * cherry-pick/revert it, set CHERRY_PICK_HEAD /
4190 * REVERT_HEAD, and don't touch the sequencer state.
4191 * This means it is possible to cherry-pick in the middle
4192 * of a cherry-pick sequence.
4194 if (opts->revs->cmdline.nr == 1 &&
4195 opts->revs->cmdline.rev->whence == REV_CMD_REV &&
4196 opts->revs->no_walk &&
4197 !opts->revs->cmdline.rev->flags) {
4198 struct commit *cmit;
4199 if (prepare_revision_walk(opts->revs))
4200 return error(_("revision walk setup failed"));
4201 cmit = get_revision(opts->revs);
4203 return error(_("empty commit set passed"));
4204 if (get_revision(opts->revs))
4205 BUG("unexpected extra commit from walk");
4206 return single_pick(r, cmit, opts);
4210 * Start a new cherry-pick/ revert sequence; but
4211 * first, make sure that an existing one isn't in
4215 if (walk_revs_populate_todo(&todo_list, opts) ||
4216 create_seq_dir() < 0)
4218 if (get_oid("HEAD", &oid) && (opts->action == REPLAY_REVERT))
4219 return error(_("can't revert as initial commit"));
4220 if (save_head(oid_to_hex(&oid)))
4222 if (save_opts(opts))
4224 update_abort_safety_file();
4225 res = pick_commits(r, &todo_list, opts);
4226 todo_list_release(&todo_list);
4230 void append_signoff(struct strbuf *msgbuf, size_t ignore_footer, unsigned flag)
4232 unsigned no_dup_sob = flag & APPEND_SIGNOFF_DEDUP;
4233 struct strbuf sob = STRBUF_INIT;
4236 strbuf_addstr(&sob, sign_off_header);
4237 strbuf_addstr(&sob, fmt_name(WANT_COMMITTER_IDENT));
4238 strbuf_addch(&sob, '\n');
4241 strbuf_complete_line(msgbuf);
4244 * If the whole message buffer is equal to the sob, pretend that we
4245 * found a conforming footer with a matching sob
4247 if (msgbuf->len - ignore_footer == sob.len &&
4248 !strncmp(msgbuf->buf, sob.buf, sob.len))
4251 has_footer = has_conforming_footer(msgbuf, &sob, ignore_footer);
4254 const char *append_newlines = NULL;
4255 size_t len = msgbuf->len - ignore_footer;
4259 * The buffer is completely empty. Leave foom for
4260 * the title and body to be filled in by the user.
4262 append_newlines = "\n\n";
4263 } else if (len == 1) {
4265 * Buffer contains a single newline. Add another
4266 * so that we leave room for the title and body.
4268 append_newlines = "\n";
4269 } else if (msgbuf->buf[len - 2] != '\n') {
4271 * Buffer ends with a single newline. Add another
4272 * so that there is an empty line between the message
4275 append_newlines = "\n";
4276 } /* else, the buffer already ends with two newlines. */
4278 if (append_newlines)
4279 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4280 append_newlines, strlen(append_newlines));
4283 if (has_footer != 3 && (!no_dup_sob || has_footer != 2))
4284 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4287 strbuf_release(&sob);
4290 struct labels_entry {
4291 struct hashmap_entry entry;
4292 char label[FLEX_ARRAY];
4295 static int labels_cmp(const void *fndata, const struct labels_entry *a,
4296 const struct labels_entry *b, const void *key)
4298 return key ? strcmp(a->label, key) : strcmp(a->label, b->label);
4301 struct string_entry {
4302 struct oidmap_entry entry;
4303 char string[FLEX_ARRAY];
4306 struct label_state {
4307 struct oidmap commit2label;
4308 struct hashmap labels;
4312 static const char *label_oid(struct object_id *oid, const char *label,
4313 struct label_state *state)
4315 struct labels_entry *labels_entry;
4316 struct string_entry *string_entry;
4317 struct object_id dummy;
4321 string_entry = oidmap_get(&state->commit2label, oid);
4323 return string_entry->string;
4326 * For "uninteresting" commits, i.e. commits that are not to be
4327 * rebased, and which can therefore not be labeled, we use a unique
4328 * abbreviation of the commit name. This is slightly more complicated
4329 * than calling find_unique_abbrev() because we also need to make
4330 * sure that the abbreviation does not conflict with any other
4333 * We disallow "interesting" commits to be labeled by a string that
4334 * is a valid full-length hash, to ensure that we always can find an
4335 * abbreviation for any uninteresting commit's names that does not
4336 * clash with any other label.
4341 strbuf_reset(&state->buf);
4342 strbuf_grow(&state->buf, GIT_SHA1_HEXSZ);
4343 label = p = state->buf.buf;
4345 find_unique_abbrev_r(p, oid, default_abbrev);
4348 * We may need to extend the abbreviated hash so that there is
4349 * no conflicting label.
4351 if (hashmap_get_from_hash(&state->labels, strihash(p), p)) {
4352 size_t i = strlen(p) + 1;
4354 oid_to_hex_r(p, oid);
4355 for (; i < GIT_SHA1_HEXSZ; i++) {
4358 if (!hashmap_get_from_hash(&state->labels,
4364 } else if (((len = strlen(label)) == the_hash_algo->hexsz &&
4365 !get_oid_hex(label, &dummy)) ||
4366 (len == 1 && *label == '#') ||
4367 hashmap_get_from_hash(&state->labels,
4368 strihash(label), label)) {
4370 * If the label already exists, or if the label is a valid full
4371 * OID, or the label is a '#' (which we use as a separator
4372 * between merge heads and oneline), we append a dash and a
4373 * number to make it unique.
4375 struct strbuf *buf = &state->buf;
4378 strbuf_add(buf, label, len);
4380 for (i = 2; ; i++) {
4381 strbuf_setlen(buf, len);
4382 strbuf_addf(buf, "-%d", i);
4383 if (!hashmap_get_from_hash(&state->labels,
4392 FLEX_ALLOC_STR(labels_entry, label, label);
4393 hashmap_entry_init(labels_entry, strihash(label));
4394 hashmap_add(&state->labels, labels_entry);
4396 FLEX_ALLOC_STR(string_entry, string, label);
4397 oidcpy(&string_entry->entry.oid, oid);
4398 oidmap_put(&state->commit2label, string_entry);
4400 return string_entry->string;
4403 static int make_script_with_merges(struct pretty_print_context *pp,
4404 struct rev_info *revs, struct strbuf *out,
4407 int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4408 int rebase_cousins = flags & TODO_LIST_REBASE_COUSINS;
4409 struct strbuf buf = STRBUF_INIT, oneline = STRBUF_INIT;
4410 struct strbuf label = STRBUF_INIT;
4411 struct commit_list *commits = NULL, **tail = &commits, *iter;
4412 struct commit_list *tips = NULL, **tips_tail = &tips;
4413 struct commit *commit;
4414 struct oidmap commit2todo = OIDMAP_INIT;
4415 struct string_entry *entry;
4416 struct oidset interesting = OIDSET_INIT, child_seen = OIDSET_INIT,
4417 shown = OIDSET_INIT;
4418 struct label_state state = { OIDMAP_INIT, { NULL }, STRBUF_INIT };
4420 int abbr = flags & TODO_LIST_ABBREVIATE_CMDS;
4421 const char *cmd_pick = abbr ? "p" : "pick",
4422 *cmd_label = abbr ? "l" : "label",
4423 *cmd_reset = abbr ? "t" : "reset",
4424 *cmd_merge = abbr ? "m" : "merge";
4426 oidmap_init(&commit2todo, 0);
4427 oidmap_init(&state.commit2label, 0);
4428 hashmap_init(&state.labels, (hashmap_cmp_fn) labels_cmp, NULL, 0);
4429 strbuf_init(&state.buf, 32);
4431 if (revs->cmdline.nr && (revs->cmdline.rev[0].flags & BOTTOM)) {
4432 struct object_id *oid = &revs->cmdline.rev[0].item->oid;
4433 FLEX_ALLOC_STR(entry, string, "onto");
4434 oidcpy(&entry->entry.oid, oid);
4435 oidmap_put(&state.commit2label, entry);
4440 * - get onelines for all commits
4441 * - gather all branch tips (i.e. 2nd or later parents of merges)
4442 * - label all branch tips
4444 while ((commit = get_revision(revs))) {
4445 struct commit_list *to_merge;
4446 const char *p1, *p2;
4447 struct object_id *oid;
4450 tail = &commit_list_insert(commit, tail)->next;
4451 oidset_insert(&interesting, &commit->object.oid);
4453 is_empty = is_original_commit_empty(commit);
4454 if (!is_empty && (commit->object.flags & PATCHSAME))
4457 strbuf_reset(&oneline);
4458 pretty_print_commit(pp, commit, &oneline);
4460 to_merge = commit->parents ? commit->parents->next : NULL;
4462 /* non-merge commit: easy case */
4464 if (!keep_empty && is_empty)
4465 strbuf_addf(&buf, "%c ", comment_line_char);
4466 strbuf_addf(&buf, "%s %s %s", cmd_pick,
4467 oid_to_hex(&commit->object.oid),
4470 FLEX_ALLOC_STR(entry, string, buf.buf);
4471 oidcpy(&entry->entry.oid, &commit->object.oid);
4472 oidmap_put(&commit2todo, entry);
4477 /* Create a label */
4478 strbuf_reset(&label);
4479 if (skip_prefix(oneline.buf, "Merge ", &p1) &&
4480 (p1 = strchr(p1, '\'')) &&
4481 (p2 = strchr(++p1, '\'')))
4482 strbuf_add(&label, p1, p2 - p1);
4483 else if (skip_prefix(oneline.buf, "Merge pull request ",
4485 (p1 = strstr(p1, " from ")))
4486 strbuf_addstr(&label, p1 + strlen(" from "));
4488 strbuf_addbuf(&label, &oneline);
4490 for (p1 = label.buf; *p1; p1++)
4495 strbuf_addf(&buf, "%s -C %s",
4496 cmd_merge, oid_to_hex(&commit->object.oid));
4498 /* label the tips of merged branches */
4499 for (; to_merge; to_merge = to_merge->next) {
4500 oid = &to_merge->item->object.oid;
4501 strbuf_addch(&buf, ' ');
4503 if (!oidset_contains(&interesting, oid)) {
4504 strbuf_addstr(&buf, label_oid(oid, NULL,
4509 tips_tail = &commit_list_insert(to_merge->item,
4512 strbuf_addstr(&buf, label_oid(oid, label.buf, &state));
4514 strbuf_addf(&buf, " # %s", oneline.buf);
4516 FLEX_ALLOC_STR(entry, string, buf.buf);
4517 oidcpy(&entry->entry.oid, &commit->object.oid);
4518 oidmap_put(&commit2todo, entry);
4523 * - label branch points
4524 * - add HEAD to the branch tips
4526 for (iter = commits; iter; iter = iter->next) {
4527 struct commit_list *parent = iter->item->parents;
4528 for (; parent; parent = parent->next) {
4529 struct object_id *oid = &parent->item->object.oid;
4530 if (!oidset_contains(&interesting, oid))
4532 if (oidset_insert(&child_seen, oid))
4533 label_oid(oid, "branch-point", &state);
4536 /* Add HEAD as implict "tip of branch" */
4538 tips_tail = &commit_list_insert(iter->item,
4543 * Third phase: output the todo list. This is a bit tricky, as we
4544 * want to avoid jumping back and forth between revisions. To
4545 * accomplish that goal, we walk backwards from the branch tips,
4546 * gathering commits not yet shown, reversing the list on the fly,
4547 * then outputting that list (labeling revisions as needed).
4549 strbuf_addf(out, "%s onto\n", cmd_label);
4550 for (iter = tips; iter; iter = iter->next) {
4551 struct commit_list *list = NULL, *iter2;
4553 commit = iter->item;
4554 if (oidset_contains(&shown, &commit->object.oid))
4556 entry = oidmap_get(&state.commit2label, &commit->object.oid);
4559 strbuf_addf(out, "\n%c Branch %s\n", comment_line_char, entry->string);
4561 strbuf_addch(out, '\n');
4563 while (oidset_contains(&interesting, &commit->object.oid) &&
4564 !oidset_contains(&shown, &commit->object.oid)) {
4565 commit_list_insert(commit, &list);
4566 if (!commit->parents) {
4570 commit = commit->parents->item;
4574 strbuf_addf(out, "%s %s\n", cmd_reset,
4575 rebase_cousins ? "onto" : "[new root]");
4577 const char *to = NULL;
4579 entry = oidmap_get(&state.commit2label,
4580 &commit->object.oid);
4583 else if (!rebase_cousins)
4584 to = label_oid(&commit->object.oid, NULL,
4587 if (!to || !strcmp(to, "onto"))
4588 strbuf_addf(out, "%s onto\n", cmd_reset);
4590 strbuf_reset(&oneline);
4591 pretty_print_commit(pp, commit, &oneline);
4592 strbuf_addf(out, "%s %s # %s\n",
4593 cmd_reset, to, oneline.buf);
4597 for (iter2 = list; iter2; iter2 = iter2->next) {
4598 struct object_id *oid = &iter2->item->object.oid;
4599 entry = oidmap_get(&commit2todo, oid);
4600 /* only show if not already upstream */
4602 strbuf_addf(out, "%s\n", entry->string);
4603 entry = oidmap_get(&state.commit2label, oid);
4605 strbuf_addf(out, "%s %s\n",
4606 cmd_label, entry->string);
4607 oidset_insert(&shown, oid);
4610 free_commit_list(list);
4613 free_commit_list(commits);
4614 free_commit_list(tips);
4616 strbuf_release(&label);
4617 strbuf_release(&oneline);
4618 strbuf_release(&buf);
4620 oidmap_free(&commit2todo, 1);
4621 oidmap_free(&state.commit2label, 1);
4622 hashmap_free(&state.labels, 1);
4623 strbuf_release(&state.buf);
4628 int sequencer_make_script(struct repository *r, struct strbuf *out, int argc,
4629 const char **argv, unsigned flags)
4631 char *format = NULL;
4632 struct pretty_print_context pp = {0};
4633 struct rev_info revs;
4634 struct commit *commit;
4635 int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4636 const char *insn = flags & TODO_LIST_ABBREVIATE_CMDS ? "p" : "pick";
4637 int rebase_merges = flags & TODO_LIST_REBASE_MERGES;
4639 repo_init_revisions(r, &revs, NULL);
4640 revs.verbose_header = 1;
4642 revs.max_parents = 1;
4643 revs.cherry_mark = 1;
4646 revs.right_only = 1;
4647 revs.sort_order = REV_SORT_IN_GRAPH_ORDER;
4648 revs.topo_order = 1;
4650 revs.pretty_given = 1;
4651 git_config_get_string("rebase.instructionFormat", &format);
4652 if (!format || !*format) {
4654 format = xstrdup("%s");
4656 get_commit_format(format, &revs);
4658 pp.fmt = revs.commit_format;
4659 pp.output_encoding = get_log_output_encoding();
4661 if (setup_revisions(argc, argv, &revs, NULL) > 1)
4662 return error(_("make_script: unhandled options"));
4664 if (prepare_revision_walk(&revs) < 0)
4665 return error(_("make_script: error preparing revisions"));
4668 return make_script_with_merges(&pp, &revs, out, flags);
4670 while ((commit = get_revision(&revs))) {
4671 int is_empty = is_original_commit_empty(commit);
4673 if (!is_empty && (commit->object.flags & PATCHSAME))
4675 if (!keep_empty && is_empty)
4676 strbuf_addf(out, "%c ", comment_line_char);
4677 strbuf_addf(out, "%s %s ", insn,
4678 oid_to_hex(&commit->object.oid));
4679 pretty_print_commit(&pp, commit, out);
4680 strbuf_addch(out, '\n');
4686 * Add commands after pick and (series of) squash/fixup commands
4689 void todo_list_add_exec_commands(struct todo_list *todo_list,
4690 struct string_list *commands)
4692 struct strbuf *buf = &todo_list->buf;
4693 size_t base_offset = buf->len;
4694 int i, insert, nr = 0, alloc = 0;
4695 struct todo_item *items = NULL, *base_items = NULL;
4697 base_items = xcalloc(commands->nr, sizeof(struct todo_item));
4698 for (i = 0; i < commands->nr; i++) {
4699 size_t command_len = strlen(commands->items[i].string);
4701 strbuf_addstr(buf, commands->items[i].string);
4702 strbuf_addch(buf, '\n');
4704 base_items[i].command = TODO_EXEC;
4705 base_items[i].offset_in_buf = base_offset;
4706 base_items[i].arg_offset = base_offset + strlen("exec ");
4707 base_items[i].arg_len = command_len - strlen("exec ");
4709 base_offset += command_len + 1;
4713 * Insert <commands> after every pick. Here, fixup/squash chains
4714 * are considered part of the pick, so we insert the commands *after*
4715 * those chains if there are any.
4717 * As we insert the exec commands immediatly after rearranging
4718 * any fixups and before the user edits the list, a fixup chain
4719 * can never contain comments (any comments are empty picks that
4720 * have been commented out because the user did not specify
4721 * --keep-empty). So, it is safe to insert an exec command
4722 * without looking at the command following a comment.
4725 for (i = 0; i < todo_list->nr; i++) {
4726 enum todo_command command = todo_list->items[i].command;
4727 if (insert && !is_fixup(command)) {
4728 ALLOC_GROW(items, nr + commands->nr, alloc);
4729 COPY_ARRAY(items + nr, base_items, commands->nr);
4735 ALLOC_GROW(items, nr + 1, alloc);
4736 items[nr++] = todo_list->items[i];
4738 if (command == TODO_PICK || command == TODO_MERGE)
4742 /* insert or append final <commands> */
4743 if (insert || nr == todo_list->nr) {
4744 ALLOC_GROW(items, nr + commands->nr, alloc);
4745 COPY_ARRAY(items + nr, base_items, commands->nr);
4750 FREE_AND_NULL(todo_list->items);
4751 todo_list->items = items;
4753 todo_list->alloc = alloc;
4756 static void todo_list_to_strbuf(struct repository *r, struct todo_list *todo_list,
4757 struct strbuf *buf, int num, unsigned flags)
4759 struct todo_item *item;
4760 int i, max = todo_list->nr;
4762 if (num > 0 && num < max)
4765 for (item = todo_list->items, i = 0; i < max; i++, item++) {
4766 /* if the item is not a command write it and continue */
4767 if (item->command >= TODO_COMMENT) {
4768 strbuf_addf(buf, "%.*s\n", item->arg_len,
4769 todo_item_get_arg(todo_list, item));
4773 /* add command to the buffer */
4774 if (flags & TODO_LIST_ABBREVIATE_CMDS)
4775 strbuf_addch(buf, command_to_char(item->command));
4777 strbuf_addstr(buf, command_to_string(item->command));
4781 const char *oid = flags & TODO_LIST_SHORTEN_IDS ?
4782 short_commit_name(item->commit) :
4783 oid_to_hex(&item->commit->object.oid);
4785 if (item->command == TODO_MERGE) {
4786 if (item->flags & TODO_EDIT_MERGE_MSG)
4787 strbuf_addstr(buf, " -c");
4789 strbuf_addstr(buf, " -C");
4792 strbuf_addf(buf, " %s", oid);
4795 /* add all the rest */
4797 strbuf_addch(buf, '\n');
4799 strbuf_addf(buf, " %.*s\n", item->arg_len,
4800 todo_item_get_arg(todo_list, item));
4804 int todo_list_write_to_file(struct repository *r, struct todo_list *todo_list,
4805 const char *file, const char *shortrevisions,
4806 const char *shortonto, int num, unsigned flags)
4809 struct strbuf buf = STRBUF_INIT;
4811 todo_list_to_strbuf(r, todo_list, &buf, num, flags);
4812 if (flags & TODO_LIST_APPEND_TODO_HELP)
4813 append_todo_help(flags & TODO_LIST_KEEP_EMPTY, count_commands(todo_list),
4814 shortrevisions, shortonto, &buf);
4816 res = write_message(buf.buf, buf.len, file, 0);
4817 strbuf_release(&buf);
4822 static const char edit_todo_list_advice[] =
4823 N_("You can fix this with 'git rebase --edit-todo' "
4824 "and then run 'git rebase --continue'.\n"
4825 "Or you can abort the rebase with 'git rebase"
4828 int check_todo_list_from_file(struct repository *r)
4830 struct todo_list old_todo = TODO_LIST_INIT, new_todo = TODO_LIST_INIT;
4833 if (strbuf_read_file_or_whine(&new_todo.buf, rebase_path_todo()) < 0) {
4838 if (strbuf_read_file_or_whine(&old_todo.buf, rebase_path_todo_backup()) < 0) {
4843 res = todo_list_parse_insn_buffer(r, old_todo.buf.buf, &old_todo);
4845 res = todo_list_parse_insn_buffer(r, new_todo.buf.buf, &new_todo);
4847 res = todo_list_check(&old_todo, &new_todo);
4849 fprintf(stderr, _(edit_todo_list_advice));
4851 todo_list_release(&old_todo);
4852 todo_list_release(&new_todo);
4857 /* skip picking commits whose parents are unchanged */
4858 static int skip_unnecessary_picks(struct repository *r,
4859 struct todo_list *todo_list,
4860 struct object_id *base_oid)
4862 struct object_id *parent_oid;
4865 for (i = 0; i < todo_list->nr; i++) {
4866 struct todo_item *item = todo_list->items + i;
4868 if (item->command >= TODO_NOOP)
4870 if (item->command != TODO_PICK)
4872 if (parse_commit(item->commit)) {
4873 return error(_("could not parse commit '%s'"),
4874 oid_to_hex(&item->commit->object.oid));
4876 if (!item->commit->parents)
4877 break; /* root commit */
4878 if (item->commit->parents->next)
4879 break; /* merge commit */
4880 parent_oid = &item->commit->parents->item->object.oid;
4881 if (!oideq(parent_oid, base_oid))
4883 oidcpy(base_oid, &item->commit->object.oid);
4886 const char *done_path = rebase_path_done();
4888 if (todo_list_write_to_file(r, todo_list, done_path, NULL, NULL, i, 0)) {
4889 error_errno(_("could not write to '%s'"), done_path);
4893 MOVE_ARRAY(todo_list->items, todo_list->items + i, todo_list->nr - i);
4895 todo_list->current = 0;
4897 if (is_fixup(peek_command(todo_list, 0)))
4898 record_in_rewritten(base_oid, peek_command(todo_list, 0));
4904 int complete_action(struct repository *r, struct replay_opts *opts, unsigned flags,
4905 const char *shortrevisions, const char *onto_name,
4906 struct commit *onto, const char *orig_head,
4907 struct string_list *commands, unsigned autosquash,
4908 struct todo_list *todo_list)
4910 const char *shortonto, *todo_file = rebase_path_todo();
4911 struct todo_list new_todo = TODO_LIST_INIT;
4912 struct strbuf *buf = &todo_list->buf;
4913 struct object_id oid = onto->object.oid;
4916 shortonto = find_unique_abbrev(&oid, DEFAULT_ABBREV);
4918 if (buf->len == 0) {
4919 struct todo_item *item = append_new_todo(todo_list);
4920 item->command = TODO_NOOP;
4921 item->commit = NULL;
4922 item->arg_len = item->arg_offset = item->flags = item->offset_in_buf = 0;
4925 if (autosquash && todo_list_rearrange_squash(todo_list))
4929 todo_list_add_exec_commands(todo_list, commands);
4931 if (count_commands(todo_list) == 0) {
4932 apply_autostash(opts);
4933 sequencer_remove_state(opts);
4935 return error(_("nothing to do"));
4938 res = edit_todo_list(r, todo_list, &new_todo, shortrevisions,
4942 else if (res == -2) {
4943 apply_autostash(opts);
4944 sequencer_remove_state(opts);
4947 } else if (res == -3) {
4948 apply_autostash(opts);
4949 sequencer_remove_state(opts);
4950 todo_list_release(&new_todo);
4952 return error(_("nothing to do"));
4955 if (todo_list_parse_insn_buffer(r, new_todo.buf.buf, &new_todo) ||
4956 todo_list_check(todo_list, &new_todo)) {
4957 fprintf(stderr, _(edit_todo_list_advice));
4958 checkout_onto(r, opts, onto_name, &onto->object.oid, orig_head);
4959 todo_list_release(&new_todo);
4964 if (opts->allow_ff && skip_unnecessary_picks(r, &new_todo, &oid)) {
4965 todo_list_release(&new_todo);
4966 return error(_("could not skip unnecessary pick commands"));
4969 if (todo_list_write_to_file(r, &new_todo, todo_file, NULL, NULL, -1,
4970 flags & ~(TODO_LIST_SHORTEN_IDS))) {
4971 todo_list_release(&new_todo);
4972 return error_errno(_("could not write '%s'"), todo_file);
4975 todo_list_release(&new_todo);
4977 if (checkout_onto(r, opts, onto_name, &oid, orig_head))
4980 if (require_clean_work_tree(r, "rebase", "", 1, 1))
4983 return sequencer_continue(r, opts);
4986 struct subject2item_entry {
4987 struct hashmap_entry entry;
4989 char subject[FLEX_ARRAY];
4992 static int subject2item_cmp(const void *fndata,
4993 const struct subject2item_entry *a,
4994 const struct subject2item_entry *b, const void *key)
4996 return key ? strcmp(a->subject, key) : strcmp(a->subject, b->subject);
4999 define_commit_slab(commit_todo_item, struct todo_item *);
5002 * Rearrange the todo list that has both "pick commit-id msg" and "pick
5003 * commit-id fixup!/squash! msg" in it so that the latter is put immediately
5004 * after the former, and change "pick" to "fixup"/"squash".
5006 * Note that if the config has specified a custom instruction format, each log
5007 * message will have to be retrieved from the commit (as the oneline in the
5008 * script cannot be trusted) in order to normalize the autosquash arrangement.
5010 int todo_list_rearrange_squash(struct todo_list *todo_list)
5012 struct hashmap subject2item;
5013 int rearranged = 0, *next, *tail, i, nr = 0, alloc = 0;
5015 struct commit_todo_item commit_todo;
5016 struct todo_item *items = NULL;
5018 init_commit_todo_item(&commit_todo);
5020 * The hashmap maps onelines to the respective todo list index.
5022 * If any items need to be rearranged, the next[i] value will indicate
5023 * which item was moved directly after the i'th.
5025 * In that case, last[i] will indicate the index of the latest item to
5026 * be moved to appear after the i'th.
5028 hashmap_init(&subject2item, (hashmap_cmp_fn) subject2item_cmp,
5029 NULL, todo_list->nr);
5030 ALLOC_ARRAY(next, todo_list->nr);
5031 ALLOC_ARRAY(tail, todo_list->nr);
5032 ALLOC_ARRAY(subjects, todo_list->nr);
5033 for (i = 0; i < todo_list->nr; i++) {
5034 struct strbuf buf = STRBUF_INIT;
5035 struct todo_item *item = todo_list->items + i;
5036 const char *commit_buffer, *subject, *p;
5039 struct subject2item_entry *entry;
5041 next[i] = tail[i] = -1;
5042 if (!item->commit || item->command == TODO_DROP) {
5047 if (is_fixup(item->command)) {
5048 clear_commit_todo_item(&commit_todo);
5049 return error(_("the script was already rearranged."));
5052 *commit_todo_item_at(&commit_todo, item->commit) = item;
5054 parse_commit(item->commit);
5055 commit_buffer = get_commit_buffer(item->commit, NULL);
5056 find_commit_subject(commit_buffer, &subject);
5057 format_subject(&buf, subject, " ");
5058 subject = subjects[i] = strbuf_detach(&buf, &subject_len);
5059 unuse_commit_buffer(item->commit, commit_buffer);
5060 if ((skip_prefix(subject, "fixup! ", &p) ||
5061 skip_prefix(subject, "squash! ", &p))) {
5062 struct commit *commit2;
5067 if (!skip_prefix(p, "fixup! ", &p) &&
5068 !skip_prefix(p, "squash! ", &p))
5072 if ((entry = hashmap_get_from_hash(&subject2item,
5074 /* found by title */
5076 else if (!strchr(p, ' ') &&
5078 lookup_commit_reference_by_name(p)) &&
5079 *commit_todo_item_at(&commit_todo, commit2))
5080 /* found by commit name */
5081 i2 = *commit_todo_item_at(&commit_todo, commit2)
5084 /* copy can be a prefix of the commit subject */
5085 for (i2 = 0; i2 < i; i2++)
5087 starts_with(subjects[i2], p))
5095 todo_list->items[i].command =
5096 starts_with(subject, "fixup!") ?
5097 TODO_FIXUP : TODO_SQUASH;
5103 } else if (!hashmap_get_from_hash(&subject2item,
5104 strhash(subject), subject)) {
5105 FLEX_ALLOC_MEM(entry, subject, subject, subject_len);
5107 hashmap_entry_init(entry, strhash(entry->subject));
5108 hashmap_put(&subject2item, entry);
5113 for (i = 0; i < todo_list->nr; i++) {
5114 enum todo_command command = todo_list->items[i].command;
5118 * Initially, all commands are 'pick's. If it is a
5119 * fixup or a squash now, we have rearranged it.
5121 if (is_fixup(command))
5125 ALLOC_GROW(items, nr + 1, alloc);
5126 items[nr++] = todo_list->items[cur];
5131 FREE_AND_NULL(todo_list->items);
5132 todo_list->items = items;
5134 todo_list->alloc = alloc;
5139 for (i = 0; i < todo_list->nr; i++)
5142 hashmap_free(&subject2item, 1);
5144 clear_commit_todo_item(&commit_todo);