5 #include "object-store.h"
10 #include "run-command.h"
13 #include "cache-tree.h"
17 #include "merge-recursive.h"
19 #include "argv-array.h"
23 #include "wt-status.h"
25 #include "notes-utils.h"
27 #include "unpack-trees.h"
31 #include "commit-slab.h"
33 #include "commit-reach.h"
34 #include "rebase-interactive.h"
36 #define GIT_REFLOG_ACTION "GIT_REFLOG_ACTION"
38 static const char sign_off_header[] = "Signed-off-by: ";
39 static const char cherry_picked_prefix[] = "(cherry picked from commit ";
41 GIT_PATH_FUNC(git_path_commit_editmsg, "COMMIT_EDITMSG")
43 GIT_PATH_FUNC(git_path_seq_dir, "sequencer")
45 static GIT_PATH_FUNC(git_path_todo_file, "sequencer/todo")
46 static GIT_PATH_FUNC(git_path_opts_file, "sequencer/opts")
47 static GIT_PATH_FUNC(git_path_head_file, "sequencer/head")
48 static GIT_PATH_FUNC(git_path_abort_safety_file, "sequencer/abort-safety")
50 static GIT_PATH_FUNC(rebase_path, "rebase-merge")
52 * The file containing rebase commands, comments, and empty lines.
53 * This file is created by "git rebase -i" then edited by the user. As
54 * the lines are processed, they are removed from the front of this
55 * file and written to the tail of 'done'.
57 GIT_PATH_FUNC(rebase_path_todo, "rebase-merge/git-rebase-todo")
58 GIT_PATH_FUNC(rebase_path_todo_backup, "rebase-merge/git-rebase-todo.backup")
61 * The rebase command lines that have already been processed. A line
62 * is moved here when it is first handled, before any associated user
65 static GIT_PATH_FUNC(rebase_path_done, "rebase-merge/done")
67 * The file to keep track of how many commands were already processed (e.g.
70 static GIT_PATH_FUNC(rebase_path_msgnum, "rebase-merge/msgnum")
72 * The file to keep track of how many commands are to be processed in total
73 * (e.g. for the prompt).
75 static GIT_PATH_FUNC(rebase_path_msgtotal, "rebase-merge/end")
77 * The commit message that is planned to be used for any changes that
78 * need to be committed following a user interaction.
80 static GIT_PATH_FUNC(rebase_path_message, "rebase-merge/message")
82 * The file into which is accumulated the suggested commit message for
83 * squash/fixup commands. When the first of a series of squash/fixups
84 * is seen, the file is created and the commit message from the
85 * previous commit and from the first squash/fixup commit are written
86 * to it. The commit message for each subsequent squash/fixup commit
87 * is appended to the file as it is processed.
89 static GIT_PATH_FUNC(rebase_path_squash_msg, "rebase-merge/message-squash")
91 * If the current series of squash/fixups has not yet included a squash
92 * command, then this file exists and holds the commit message of the
93 * original "pick" commit. (If the series ends without a "squash"
94 * command, then this can be used as the commit message of the combined
95 * commit without opening the editor.)
97 static GIT_PATH_FUNC(rebase_path_fixup_msg, "rebase-merge/message-fixup")
99 * This file contains the list fixup/squash commands that have been
100 * accumulated into message-fixup or message-squash so far.
102 static GIT_PATH_FUNC(rebase_path_current_fixups, "rebase-merge/current-fixups")
104 * A script to set the GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, and
105 * GIT_AUTHOR_DATE that will be used for the commit that is currently
108 static GIT_PATH_FUNC(rebase_path_author_script, "rebase-merge/author-script")
110 * When an "edit" rebase command is being processed, the SHA1 of the
111 * commit to be edited is recorded in this file. When "git rebase
112 * --continue" is executed, if there are any staged changes then they
113 * will be amended to the HEAD commit, but only provided the HEAD
114 * commit is still the commit to be edited. When any other rebase
115 * command is processed, this file is deleted.
117 static GIT_PATH_FUNC(rebase_path_amend, "rebase-merge/amend")
119 * When we stop at a given patch via the "edit" command, this file contains
120 * the abbreviated commit name of the corresponding patch.
122 static GIT_PATH_FUNC(rebase_path_stopped_sha, "rebase-merge/stopped-sha")
124 * For the post-rewrite hook, we make a list of rewritten commits and
125 * their new sha1s. The rewritten-pending list keeps the sha1s of
126 * commits that have been processed, but not committed yet,
127 * e.g. because they are waiting for a 'squash' command.
129 static GIT_PATH_FUNC(rebase_path_rewritten_list, "rebase-merge/rewritten-list")
130 static GIT_PATH_FUNC(rebase_path_rewritten_pending,
131 "rebase-merge/rewritten-pending")
134 * The path of the file containig the OID of the "squash onto" commit, i.e.
135 * the dummy commit used for `reset [new root]`.
137 static GIT_PATH_FUNC(rebase_path_squash_onto, "rebase-merge/squash-onto")
140 * The path of the file listing refs that need to be deleted after the rebase
141 * finishes. This is used by the `label` command to record the need for cleanup.
143 static GIT_PATH_FUNC(rebase_path_refs_to_delete, "rebase-merge/refs-to-delete")
146 * The following files are written by git-rebase just after parsing the
149 static GIT_PATH_FUNC(rebase_path_gpg_sign_opt, "rebase-merge/gpg_sign_opt")
150 static GIT_PATH_FUNC(rebase_path_orig_head, "rebase-merge/orig-head")
151 static GIT_PATH_FUNC(rebase_path_verbose, "rebase-merge/verbose")
152 static GIT_PATH_FUNC(rebase_path_quiet, "rebase-merge/quiet")
153 static GIT_PATH_FUNC(rebase_path_signoff, "rebase-merge/signoff")
154 static GIT_PATH_FUNC(rebase_path_head_name, "rebase-merge/head-name")
155 static GIT_PATH_FUNC(rebase_path_onto, "rebase-merge/onto")
156 static GIT_PATH_FUNC(rebase_path_autostash, "rebase-merge/autostash")
157 static GIT_PATH_FUNC(rebase_path_strategy, "rebase-merge/strategy")
158 static GIT_PATH_FUNC(rebase_path_strategy_opts, "rebase-merge/strategy_opts")
159 static GIT_PATH_FUNC(rebase_path_allow_rerere_autoupdate, "rebase-merge/allow_rerere_autoupdate")
160 static GIT_PATH_FUNC(rebase_path_reschedule_failed_exec, "rebase-merge/reschedule-failed-exec")
162 static int git_sequencer_config(const char *k, const char *v, void *cb)
164 struct replay_opts *opts = cb;
167 if (!strcmp(k, "commit.cleanup")) {
170 status = git_config_string(&s, k, v);
174 if (!strcmp(s, "verbatim")) {
175 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_NONE;
176 opts->explicit_cleanup = 1;
177 } else if (!strcmp(s, "whitespace")) {
178 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_SPACE;
179 opts->explicit_cleanup = 1;
180 } else if (!strcmp(s, "strip")) {
181 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_ALL;
182 opts->explicit_cleanup = 1;
183 } else if (!strcmp(s, "scissors")) {
184 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_SCISSORS;
185 opts->explicit_cleanup = 1;
187 warning(_("invalid commit message cleanup mode '%s'"),
195 if (!strcmp(k, "commit.gpgsign")) {
196 opts->gpg_sign = git_config_bool(k, v) ? xstrdup("") : NULL;
200 status = git_gpg_config(k, v, NULL);
204 return git_diff_basic_config(k, v, NULL);
207 void sequencer_init_config(struct replay_opts *opts)
209 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_NONE;
210 git_config(git_sequencer_config, opts);
213 static inline int is_rebase_i(const struct replay_opts *opts)
215 return opts->action == REPLAY_INTERACTIVE_REBASE;
218 static const char *get_dir(const struct replay_opts *opts)
220 if (is_rebase_i(opts))
221 return rebase_path();
222 return git_path_seq_dir();
225 static const char *get_todo_path(const struct replay_opts *opts)
227 if (is_rebase_i(opts))
228 return rebase_path_todo();
229 return git_path_todo_file();
233 * Returns 0 for non-conforming footer
234 * Returns 1 for conforming footer
235 * Returns 2 when sob exists within conforming footer
236 * Returns 3 when sob exists within conforming footer as last entry
238 static int has_conforming_footer(struct strbuf *sb, struct strbuf *sob,
239 size_t ignore_footer)
241 struct process_trailer_options opts = PROCESS_TRAILER_OPTIONS_INIT;
242 struct trailer_info info;
244 int found_sob = 0, found_sob_last = 0;
248 trailer_info_get(&info, sb->buf, &opts);
250 if (info.trailer_start == info.trailer_end)
253 for (i = 0; i < info.trailer_nr; i++)
254 if (sob && !strncmp(info.trailers[i], sob->buf, sob->len)) {
256 if (i == info.trailer_nr - 1)
260 trailer_info_release(&info);
269 static const char *gpg_sign_opt_quoted(struct replay_opts *opts)
271 static struct strbuf buf = STRBUF_INIT;
275 sq_quotef(&buf, "-S%s", opts->gpg_sign);
279 int sequencer_remove_state(struct replay_opts *opts)
281 struct strbuf buf = STRBUF_INIT;
284 if (is_rebase_i(opts) &&
285 strbuf_read_file(&buf, rebase_path_refs_to_delete(), 0) > 0) {
288 char *eol = strchr(p, '\n');
291 if (delete_ref("(rebase -i) cleanup", p, NULL, 0) < 0) {
292 warning(_("could not delete '%s'"), p);
301 free(opts->gpg_sign);
302 free(opts->strategy);
303 for (i = 0; i < opts->xopts_nr; i++)
304 free(opts->xopts[i]);
306 strbuf_release(&opts->current_fixups);
309 strbuf_addstr(&buf, get_dir(opts));
310 if (remove_dir_recursively(&buf, 0))
311 ret = error(_("could not remove '%s'"), buf.buf);
312 strbuf_release(&buf);
317 static const char *action_name(const struct replay_opts *opts)
319 switch (opts->action) {
323 return N_("cherry-pick");
324 case REPLAY_INTERACTIVE_REBASE:
325 return N_("rebase -i");
327 die(_("unknown action: %d"), opts->action);
330 struct commit_message {
337 static const char *short_commit_name(struct commit *commit)
339 return find_unique_abbrev(&commit->object.oid, DEFAULT_ABBREV);
342 static int get_message(struct commit *commit, struct commit_message *out)
344 const char *abbrev, *subject;
347 out->message = logmsg_reencode(commit, NULL, get_commit_output_encoding());
348 abbrev = short_commit_name(commit);
350 subject_len = find_commit_subject(out->message, &subject);
352 out->subject = xmemdupz(subject, subject_len);
353 out->label = xstrfmt("%s... %s", abbrev, out->subject);
354 out->parent_label = xstrfmt("parent of %s", out->label);
359 static void free_message(struct commit *commit, struct commit_message *msg)
361 free(msg->parent_label);
364 unuse_commit_buffer(commit, msg->message);
367 static void print_advice(struct repository *r, int show_hint,
368 struct replay_opts *opts)
370 char *msg = getenv("GIT_CHERRY_PICK_HELP");
373 fprintf(stderr, "%s\n", msg);
375 * A conflict has occurred but the porcelain
376 * (typically rebase --interactive) wants to take care
377 * of the commit itself so remove CHERRY_PICK_HEAD
379 unlink(git_path_cherry_pick_head(r));
385 advise(_("after resolving the conflicts, mark the corrected paths\n"
386 "with 'git add <paths>' or 'git rm <paths>'"));
388 advise(_("after resolving the conflicts, mark the corrected paths\n"
389 "with 'git add <paths>' or 'git rm <paths>'\n"
390 "and commit the result with 'git commit'"));
394 static int write_message(const void *buf, size_t len, const char *filename,
397 struct lock_file msg_file = LOCK_INIT;
399 int msg_fd = hold_lock_file_for_update(&msg_file, filename, 0);
401 return error_errno(_("could not lock '%s'"), filename);
402 if (write_in_full(msg_fd, buf, len) < 0) {
403 error_errno(_("could not write to '%s'"), filename);
404 rollback_lock_file(&msg_file);
407 if (append_eol && write(msg_fd, "\n", 1) < 0) {
408 error_errno(_("could not write eol to '%s'"), filename);
409 rollback_lock_file(&msg_file);
412 if (commit_lock_file(&msg_file) < 0)
413 return error(_("failed to finalize '%s'"), filename);
419 * Reads a file that was presumably written by a shell script, i.e. with an
420 * end-of-line marker that needs to be stripped.
422 * Note that only the last end-of-line marker is stripped, consistent with the
423 * behavior of "$(cat path)" in a shell script.
425 * Returns 1 if the file was read, 0 if it could not be read or does not exist.
427 static int read_oneliner(struct strbuf *buf,
428 const char *path, int skip_if_empty)
430 int orig_len = buf->len;
432 if (!file_exists(path))
435 if (strbuf_read_file(buf, path, 0) < 0) {
436 warning_errno(_("could not read '%s'"), path);
440 if (buf->len > orig_len && buf->buf[buf->len - 1] == '\n') {
441 if (--buf->len > orig_len && buf->buf[buf->len - 1] == '\r')
443 buf->buf[buf->len] = '\0';
446 if (skip_if_empty && buf->len == orig_len)
452 static struct tree *empty_tree(struct repository *r)
454 return lookup_tree(r, the_hash_algo->empty_tree);
457 static int error_dirty_index(struct repository *repo, struct replay_opts *opts)
459 if (repo_read_index_unmerged(repo))
460 return error_resolve_conflict(_(action_name(opts)));
462 error(_("your local changes would be overwritten by %s."),
463 _(action_name(opts)));
465 if (advice_commit_before_merge)
466 advise(_("commit your changes or stash them to proceed."));
470 static void update_abort_safety_file(void)
472 struct object_id head;
474 /* Do nothing on a single-pick */
475 if (!file_exists(git_path_seq_dir()))
478 if (!get_oid("HEAD", &head))
479 write_file(git_path_abort_safety_file(), "%s", oid_to_hex(&head));
481 write_file(git_path_abort_safety_file(), "%s", "");
484 static int fast_forward_to(struct repository *r,
485 const struct object_id *to,
486 const struct object_id *from,
488 struct replay_opts *opts)
490 struct ref_transaction *transaction;
491 struct strbuf sb = STRBUF_INIT;
492 struct strbuf err = STRBUF_INIT;
495 if (checkout_fast_forward(r, from, to, 1))
496 return -1; /* the callee should have complained already */
498 strbuf_addf(&sb, _("%s: fast-forward"), _(action_name(opts)));
500 transaction = ref_transaction_begin(&err);
502 ref_transaction_update(transaction, "HEAD",
503 to, unborn && !is_rebase_i(opts) ?
506 ref_transaction_commit(transaction, &err)) {
507 ref_transaction_free(transaction);
508 error("%s", err.buf);
510 strbuf_release(&err);
515 strbuf_release(&err);
516 ref_transaction_free(transaction);
517 update_abort_safety_file();
521 enum commit_msg_cleanup_mode get_cleanup_mode(const char *cleanup_arg,
524 if (!cleanup_arg || !strcmp(cleanup_arg, "default"))
525 return use_editor ? COMMIT_MSG_CLEANUP_ALL :
526 COMMIT_MSG_CLEANUP_SPACE;
527 else if (!strcmp(cleanup_arg, "verbatim"))
528 return COMMIT_MSG_CLEANUP_NONE;
529 else if (!strcmp(cleanup_arg, "whitespace"))
530 return COMMIT_MSG_CLEANUP_SPACE;
531 else if (!strcmp(cleanup_arg, "strip"))
532 return COMMIT_MSG_CLEANUP_ALL;
533 else if (!strcmp(cleanup_arg, "scissors"))
534 return use_editor ? COMMIT_MSG_CLEANUP_SCISSORS :
535 COMMIT_MSG_CLEANUP_SPACE;
537 die(_("Invalid cleanup mode %s"), cleanup_arg);
541 * NB using int rather than enum cleanup_mode to stop clang's
542 * -Wtautological-constant-out-of-range-compare complaining that the comparison
545 static const char *describe_cleanup_mode(int cleanup_mode)
547 static const char *modes[] = { "whitespace",
552 if (cleanup_mode < ARRAY_SIZE(modes))
553 return modes[cleanup_mode];
555 BUG("invalid cleanup_mode provided (%d)", cleanup_mode);
558 void append_conflicts_hint(struct index_state *istate,
559 struct strbuf *msgbuf, enum commit_msg_cleanup_mode cleanup_mode)
563 if (cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS) {
564 strbuf_addch(msgbuf, '\n');
565 wt_status_append_cut_line(msgbuf);
566 strbuf_addch(msgbuf, comment_line_char);
569 strbuf_addch(msgbuf, '\n');
570 strbuf_commented_addf(msgbuf, "Conflicts:\n");
571 for (i = 0; i < istate->cache_nr;) {
572 const struct cache_entry *ce = istate->cache[i++];
574 strbuf_commented_addf(msgbuf, "\t%s\n", ce->name);
575 while (i < istate->cache_nr &&
576 !strcmp(ce->name, istate->cache[i]->name))
582 static int do_recursive_merge(struct repository *r,
583 struct commit *base, struct commit *next,
584 const char *base_label, const char *next_label,
585 struct object_id *head, struct strbuf *msgbuf,
586 struct replay_opts *opts)
588 struct merge_options o;
589 struct tree *result, *next_tree, *base_tree, *head_tree;
592 struct lock_file index_lock = LOCK_INIT;
594 if (repo_hold_locked_index(r, &index_lock, LOCK_REPORT_ON_ERROR) < 0)
599 init_merge_options(&o, r);
600 o.ancestor = base ? base_label : "(empty tree)";
602 o.branch2 = next ? next_label : "(empty tree)";
603 if (is_rebase_i(opts))
605 o.show_rename_progress = 1;
607 head_tree = parse_tree_indirect(head);
608 next_tree = next ? get_commit_tree(next) : empty_tree(r);
609 base_tree = base ? get_commit_tree(base) : empty_tree(r);
611 for (xopt = opts->xopts; xopt != opts->xopts + opts->xopts_nr; xopt++)
612 parse_merge_opt(&o, *xopt);
614 clean = merge_trees(&o,
616 next_tree, base_tree, &result);
617 if (is_rebase_i(opts) && clean <= 0)
618 fputs(o.obuf.buf, stdout);
619 strbuf_release(&o.obuf);
620 diff_warn_rename_limit("merge.renamelimit", o.needed_rename_limit, 0);
622 rollback_lock_file(&index_lock);
626 if (write_locked_index(r->index, &index_lock,
627 COMMIT_LOCK | SKIP_IF_UNCHANGED))
629 * TRANSLATORS: %s will be "revert", "cherry-pick" or
632 return error(_("%s: Unable to write new index file"),
633 _(action_name(opts)));
636 append_conflicts_hint(r->index, msgbuf,
637 opts->default_msg_cleanup);
642 static struct object_id *get_cache_tree_oid(struct index_state *istate)
644 if (!istate->cache_tree)
645 istate->cache_tree = cache_tree();
647 if (!cache_tree_fully_valid(istate->cache_tree))
648 if (cache_tree_update(istate, 0)) {
649 error(_("unable to update cache tree"));
653 return &istate->cache_tree->oid;
656 static int is_index_unchanged(struct repository *r)
658 struct object_id head_oid, *cache_tree_oid;
659 struct commit *head_commit;
660 struct index_state *istate = r->index;
662 if (!resolve_ref_unsafe("HEAD", RESOLVE_REF_READING, &head_oid, NULL))
663 return error(_("could not resolve HEAD commit"));
665 head_commit = lookup_commit(r, &head_oid);
668 * If head_commit is NULL, check_commit, called from
669 * lookup_commit, would have indicated that head_commit is not
670 * a commit object already. parse_commit() will return failure
671 * without further complaints in such a case. Otherwise, if
672 * the commit is invalid, parse_commit() will complain. So
673 * there is nothing for us to say here. Just return failure.
675 if (parse_commit(head_commit))
678 if (!(cache_tree_oid = get_cache_tree_oid(istate)))
681 return oideq(cache_tree_oid, get_commit_tree_oid(head_commit));
684 static int write_author_script(const char *message)
686 struct strbuf buf = STRBUF_INIT;
691 if (!*message || starts_with(message, "\n")) {
693 /* Missing 'author' line? */
694 unlink(rebase_path_author_script());
696 } else if (skip_prefix(message, "author ", &message))
698 else if ((eol = strchr(message, '\n')))
703 strbuf_addstr(&buf, "GIT_AUTHOR_NAME='");
704 while (*message && *message != '\n' && *message != '\r')
705 if (skip_prefix(message, " <", &message))
707 else if (*message != '\'')
708 strbuf_addch(&buf, *(message++));
710 strbuf_addf(&buf, "'\\%c'", *(message++));
711 strbuf_addstr(&buf, "'\nGIT_AUTHOR_EMAIL='");
712 while (*message && *message != '\n' && *message != '\r')
713 if (skip_prefix(message, "> ", &message))
715 else if (*message != '\'')
716 strbuf_addch(&buf, *(message++));
718 strbuf_addf(&buf, "'\\%c'", *(message++));
719 strbuf_addstr(&buf, "'\nGIT_AUTHOR_DATE='@");
720 while (*message && *message != '\n' && *message != '\r')
721 if (*message != '\'')
722 strbuf_addch(&buf, *(message++));
724 strbuf_addf(&buf, "'\\%c'", *(message++));
725 strbuf_addch(&buf, '\'');
726 res = write_message(buf.buf, buf.len, rebase_path_author_script(), 1);
727 strbuf_release(&buf);
732 * Take a series of KEY='VALUE' lines where VALUE part is
733 * sq-quoted, and append <KEY, VALUE> at the end of the string list
735 static int parse_key_value_squoted(char *buf, struct string_list *list)
738 struct string_list_item *item;
740 char *cp = strchr(buf, '=');
742 np = strchrnul(buf, '\n');
743 return error(_("no key present in '%.*s'"),
744 (int) (np - buf), buf);
746 np = strchrnul(cp, '\n');
748 item = string_list_append(list, buf);
750 buf = np + (*np == '\n');
754 return error(_("unable to dequote value of '%s'"),
756 item->util = xstrdup(cp);
762 * Reads and parses the state directory's "author-script" file, and sets name,
763 * email and date accordingly.
764 * Returns 0 on success, -1 if the file could not be parsed.
766 * The author script is of the format:
768 * GIT_AUTHOR_NAME='$author_name'
769 * GIT_AUTHOR_EMAIL='$author_email'
770 * GIT_AUTHOR_DATE='$author_date'
772 * where $author_name, $author_email and $author_date are quoted. We are strict
773 * with our parsing, as the file was meant to be eval'd in the old
774 * git-am.sh/git-rebase--interactive.sh scripts, and thus if the file differs
775 * from what this function expects, it is better to bail out than to do
776 * something that the user does not expect.
778 int read_author_script(const char *path, char **name, char **email, char **date,
781 struct strbuf buf = STRBUF_INIT;
782 struct string_list kv = STRING_LIST_INIT_DUP;
783 int retval = -1; /* assume failure */
784 int i, name_i = -2, email_i = -2, date_i = -2, err = 0;
786 if (strbuf_read_file(&buf, path, 256) <= 0) {
787 strbuf_release(&buf);
788 if (errno == ENOENT && allow_missing)
791 return error_errno(_("could not open '%s' for reading"),
795 if (parse_key_value_squoted(buf.buf, &kv))
798 for (i = 0; i < kv.nr; i++) {
799 if (!strcmp(kv.items[i].string, "GIT_AUTHOR_NAME")) {
801 name_i = error(_("'GIT_AUTHOR_NAME' already given"));
804 } else if (!strcmp(kv.items[i].string, "GIT_AUTHOR_EMAIL")) {
806 email_i = error(_("'GIT_AUTHOR_EMAIL' already given"));
809 } else if (!strcmp(kv.items[i].string, "GIT_AUTHOR_DATE")) {
811 date_i = error(_("'GIT_AUTHOR_DATE' already given"));
815 err = error(_("unknown variable '%s'"),
820 error(_("missing 'GIT_AUTHOR_NAME'"));
822 error(_("missing 'GIT_AUTHOR_EMAIL'"));
824 error(_("missing 'GIT_AUTHOR_DATE'"));
825 if (date_i < 0 || email_i < 0 || date_i < 0 || err)
827 *name = kv.items[name_i].util;
828 *email = kv.items[email_i].util;
829 *date = kv.items[date_i].util;
832 string_list_clear(&kv, !!retval);
833 strbuf_release(&buf);
838 * Read a GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL AND GIT_AUTHOR_DATE from a
839 * file with shell quoting into struct argv_array. Returns -1 on
840 * error, 0 otherwise.
842 static int read_env_script(struct argv_array *env)
844 char *name, *email, *date;
846 if (read_author_script(rebase_path_author_script(),
847 &name, &email, &date, 0))
850 argv_array_pushf(env, "GIT_AUTHOR_NAME=%s", name);
851 argv_array_pushf(env, "GIT_AUTHOR_EMAIL=%s", email);
852 argv_array_pushf(env, "GIT_AUTHOR_DATE=%s", date);
860 static char *get_author(const char *message)
865 a = find_commit_header(message, "author", &len);
867 return xmemdupz(a, len);
872 static const char staged_changes_advice[] =
873 N_("you have staged changes in your working tree\n"
874 "If these changes are meant to be squashed into the previous commit, run:\n"
876 " git commit --amend %s\n"
878 "If they are meant to go into a new commit, run:\n"
882 "In both cases, once you're done, continue with:\n"
884 " git rebase --continue\n");
886 #define ALLOW_EMPTY (1<<0)
887 #define EDIT_MSG (1<<1)
888 #define AMEND_MSG (1<<2)
889 #define CLEANUP_MSG (1<<3)
890 #define VERIFY_MSG (1<<4)
891 #define CREATE_ROOT_COMMIT (1<<5)
893 static int run_command_silent_on_success(struct child_process *cmd)
895 struct strbuf buf = STRBUF_INIT;
898 cmd->stdout_to_stderr = 1;
899 rc = pipe_command(cmd,
905 fputs(buf.buf, stderr);
906 strbuf_release(&buf);
911 * If we are cherry-pick, and if the merge did not result in
912 * hand-editing, we will hit this commit and inherit the original
913 * author date and name.
915 * If we are revert, or if our cherry-pick results in a hand merge,
916 * we had better say that the current user is responsible for that.
918 * An exception is when run_git_commit() is called during an
919 * interactive rebase: in that case, we will want to retain the
922 static int run_git_commit(struct repository *r,
924 struct replay_opts *opts,
927 struct child_process cmd = CHILD_PROCESS_INIT;
931 if (is_rebase_i(opts) && read_env_script(&cmd.env_array)) {
932 const char *gpg_opt = gpg_sign_opt_quoted(opts);
934 return error(_(staged_changes_advice),
938 argv_array_push(&cmd.args, "commit");
940 if (!(flags & VERIFY_MSG))
941 argv_array_push(&cmd.args, "-n");
942 if ((flags & AMEND_MSG))
943 argv_array_push(&cmd.args, "--amend");
945 argv_array_pushf(&cmd.args, "-S%s", opts->gpg_sign);
947 argv_array_pushl(&cmd.args, "-F", defmsg, NULL);
948 else if (!(flags & EDIT_MSG))
949 argv_array_pushl(&cmd.args, "-C", "HEAD", NULL);
950 if ((flags & CLEANUP_MSG))
951 argv_array_push(&cmd.args, "--cleanup=strip");
952 if ((flags & EDIT_MSG))
953 argv_array_push(&cmd.args, "-e");
954 else if (!(flags & CLEANUP_MSG) &&
955 !opts->signoff && !opts->record_origin &&
956 !opts->explicit_cleanup)
957 argv_array_push(&cmd.args, "--cleanup=verbatim");
959 if ((flags & ALLOW_EMPTY))
960 argv_array_push(&cmd.args, "--allow-empty");
962 if (!(flags & EDIT_MSG))
963 argv_array_push(&cmd.args, "--allow-empty-message");
965 if (is_rebase_i(opts) && !(flags & EDIT_MSG))
966 return run_command_silent_on_success(&cmd);
968 return run_command(&cmd);
971 static int rest_is_empty(const struct strbuf *sb, int start)
976 /* Check if the rest is just whitespace and Signed-off-by's. */
977 for (i = start; i < sb->len; i++) {
978 nl = memchr(sb->buf + i, '\n', sb->len - i);
984 if (strlen(sign_off_header) <= eol - i &&
985 starts_with(sb->buf + i, sign_off_header)) {
990 if (!isspace(sb->buf[i++]))
997 void cleanup_message(struct strbuf *msgbuf,
998 enum commit_msg_cleanup_mode cleanup_mode, int verbose)
1000 if (verbose || /* Truncate the message just before the diff, if any. */
1001 cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS)
1002 strbuf_setlen(msgbuf, wt_status_locate_end(msgbuf->buf, msgbuf->len));
1003 if (cleanup_mode != COMMIT_MSG_CLEANUP_NONE)
1004 strbuf_stripspace(msgbuf, cleanup_mode == COMMIT_MSG_CLEANUP_ALL);
1008 * Find out if the message in the strbuf contains only whitespace and
1009 * Signed-off-by lines.
1011 int message_is_empty(const struct strbuf *sb,
1012 enum commit_msg_cleanup_mode cleanup_mode)
1014 if (cleanup_mode == COMMIT_MSG_CLEANUP_NONE && sb->len)
1016 return rest_is_empty(sb, 0);
1020 * See if the user edited the message in the editor or left what
1021 * was in the template intact
1023 int template_untouched(const struct strbuf *sb, const char *template_file,
1024 enum commit_msg_cleanup_mode cleanup_mode)
1026 struct strbuf tmpl = STRBUF_INIT;
1029 if (cleanup_mode == COMMIT_MSG_CLEANUP_NONE && sb->len)
1032 if (!template_file || strbuf_read_file(&tmpl, template_file, 0) <= 0)
1035 strbuf_stripspace(&tmpl, cleanup_mode == COMMIT_MSG_CLEANUP_ALL);
1036 if (!skip_prefix(sb->buf, tmpl.buf, &start))
1038 strbuf_release(&tmpl);
1039 return rest_is_empty(sb, start - sb->buf);
1042 int update_head_with_reflog(const struct commit *old_head,
1043 const struct object_id *new_head,
1044 const char *action, const struct strbuf *msg,
1047 struct ref_transaction *transaction;
1048 struct strbuf sb = STRBUF_INIT;
1053 strbuf_addstr(&sb, action);
1054 strbuf_addstr(&sb, ": ");
1057 nl = strchr(msg->buf, '\n');
1059 strbuf_add(&sb, msg->buf, nl + 1 - msg->buf);
1061 strbuf_addbuf(&sb, msg);
1062 strbuf_addch(&sb, '\n');
1065 transaction = ref_transaction_begin(err);
1067 ref_transaction_update(transaction, "HEAD", new_head,
1068 old_head ? &old_head->object.oid : &null_oid,
1070 ref_transaction_commit(transaction, err)) {
1073 ref_transaction_free(transaction);
1074 strbuf_release(&sb);
1079 static int run_rewrite_hook(const struct object_id *oldoid,
1080 const struct object_id *newoid)
1082 struct child_process proc = CHILD_PROCESS_INIT;
1083 const char *argv[3];
1085 struct strbuf sb = STRBUF_INIT;
1087 argv[0] = find_hook("post-rewrite");
1096 proc.stdout_to_stderr = 1;
1097 proc.trace2_hook_name = "post-rewrite";
1099 code = start_command(&proc);
1102 strbuf_addf(&sb, "%s %s\n", oid_to_hex(oldoid), oid_to_hex(newoid));
1103 sigchain_push(SIGPIPE, SIG_IGN);
1104 write_in_full(proc.in, sb.buf, sb.len);
1106 strbuf_release(&sb);
1107 sigchain_pop(SIGPIPE);
1108 return finish_command(&proc);
1111 void commit_post_rewrite(struct repository *r,
1112 const struct commit *old_head,
1113 const struct object_id *new_head)
1115 struct notes_rewrite_cfg *cfg;
1117 cfg = init_copy_notes_for_rewrite("amend");
1119 /* we are amending, so old_head is not NULL */
1120 copy_note_for_rewrite(cfg, &old_head->object.oid, new_head);
1121 finish_copy_notes_for_rewrite(r, cfg, "Notes added by 'git commit --amend'");
1123 run_rewrite_hook(&old_head->object.oid, new_head);
1126 static int run_prepare_commit_msg_hook(struct repository *r,
1131 const char *name, *arg1 = NULL, *arg2 = NULL;
1133 name = git_path_commit_editmsg();
1134 if (write_message(msg->buf, msg->len, name, 0))
1143 if (run_commit_hook(0, r->index_file, "prepare-commit-msg", name,
1145 ret = error(_("'prepare-commit-msg' hook failed"));
1150 static const char implicit_ident_advice_noconfig[] =
1151 N_("Your name and email address were configured automatically based\n"
1152 "on your username and hostname. Please check that they are accurate.\n"
1153 "You can suppress this message by setting them explicitly. Run the\n"
1154 "following command and follow the instructions in your editor to edit\n"
1155 "your configuration file:\n"
1157 " git config --global --edit\n"
1159 "After doing this, you may fix the identity used for this commit with:\n"
1161 " git commit --amend --reset-author\n");
1163 static const char implicit_ident_advice_config[] =
1164 N_("Your name and email address were configured automatically based\n"
1165 "on your username and hostname. Please check that they are accurate.\n"
1166 "You can suppress this message by setting them explicitly:\n"
1168 " git config --global user.name \"Your Name\"\n"
1169 " git config --global user.email you@example.com\n"
1171 "After doing this, you may fix the identity used for this commit with:\n"
1173 " git commit --amend --reset-author\n");
1175 static const char *implicit_ident_advice(void)
1177 char *user_config = expand_user_path("~/.gitconfig", 0);
1178 char *xdg_config = xdg_config_home("config");
1179 int config_exists = file_exists(user_config) || file_exists(xdg_config);
1185 return _(implicit_ident_advice_config);
1187 return _(implicit_ident_advice_noconfig);
1191 void print_commit_summary(struct repository *r,
1193 const struct object_id *oid,
1196 struct rev_info rev;
1197 struct commit *commit;
1198 struct strbuf format = STRBUF_INIT;
1200 struct pretty_print_context pctx = {0};
1201 struct strbuf author_ident = STRBUF_INIT;
1202 struct strbuf committer_ident = STRBUF_INIT;
1204 commit = lookup_commit(r, oid);
1206 die(_("couldn't look up newly created commit"));
1207 if (parse_commit(commit))
1208 die(_("could not parse newly created commit"));
1210 strbuf_addstr(&format, "format:%h] %s");
1212 format_commit_message(commit, "%an <%ae>", &author_ident, &pctx);
1213 format_commit_message(commit, "%cn <%ce>", &committer_ident, &pctx);
1214 if (strbuf_cmp(&author_ident, &committer_ident)) {
1215 strbuf_addstr(&format, "\n Author: ");
1216 strbuf_addbuf_percentquote(&format, &author_ident);
1218 if (flags & SUMMARY_SHOW_AUTHOR_DATE) {
1219 struct strbuf date = STRBUF_INIT;
1221 format_commit_message(commit, "%ad", &date, &pctx);
1222 strbuf_addstr(&format, "\n Date: ");
1223 strbuf_addbuf_percentquote(&format, &date);
1224 strbuf_release(&date);
1226 if (!committer_ident_sufficiently_given()) {
1227 strbuf_addstr(&format, "\n Committer: ");
1228 strbuf_addbuf_percentquote(&format, &committer_ident);
1229 if (advice_implicit_identity) {
1230 strbuf_addch(&format, '\n');
1231 strbuf_addstr(&format, implicit_ident_advice());
1234 strbuf_release(&author_ident);
1235 strbuf_release(&committer_ident);
1237 repo_init_revisions(r, &rev, prefix);
1238 setup_revisions(0, NULL, &rev, NULL);
1241 rev.diffopt.output_format =
1242 DIFF_FORMAT_SHORTSTAT | DIFF_FORMAT_SUMMARY;
1244 rev.verbose_header = 1;
1245 rev.show_root_diff = 1;
1246 get_commit_format(format.buf, &rev);
1247 rev.always_show_header = 0;
1248 rev.diffopt.detect_rename = DIFF_DETECT_RENAME;
1249 rev.diffopt.break_opt = 0;
1250 diff_setup_done(&rev.diffopt);
1252 head = resolve_ref_unsafe("HEAD", 0, NULL, NULL);
1254 die_errno(_("unable to resolve HEAD after creating commit"));
1255 if (!strcmp(head, "HEAD"))
1256 head = _("detached HEAD");
1258 skip_prefix(head, "refs/heads/", &head);
1259 printf("[%s%s ", head, (flags & SUMMARY_INITIAL_COMMIT) ?
1260 _(" (root-commit)") : "");
1262 if (!log_tree_commit(&rev, commit)) {
1263 rev.always_show_header = 1;
1264 rev.use_terminator = 1;
1265 log_tree_commit(&rev, commit);
1268 strbuf_release(&format);
1271 static int parse_head(struct repository *r, struct commit **head)
1273 struct commit *current_head;
1274 struct object_id oid;
1276 if (get_oid("HEAD", &oid)) {
1277 current_head = NULL;
1279 current_head = lookup_commit_reference(r, &oid);
1281 return error(_("could not parse HEAD"));
1282 if (!oideq(&oid, ¤t_head->object.oid)) {
1283 warning(_("HEAD %s is not a commit!"),
1286 if (parse_commit(current_head))
1287 return error(_("could not parse HEAD commit"));
1289 *head = current_head;
1295 * Try to commit without forking 'git commit'. In some cases we need
1296 * to run 'git commit' to display an error message
1299 * -1 - error unable to commit
1301 * 1 - run 'git commit'
1303 static int try_to_commit(struct repository *r,
1304 struct strbuf *msg, const char *author,
1305 struct replay_opts *opts, unsigned int flags,
1306 struct object_id *oid)
1308 struct object_id tree;
1309 struct commit *current_head = NULL;
1310 struct commit_list *parents = NULL;
1311 struct commit_extra_header *extra = NULL;
1312 struct strbuf err = STRBUF_INIT;
1313 struct strbuf commit_msg = STRBUF_INIT;
1314 char *amend_author = NULL;
1315 const char *hook_commit = NULL;
1316 enum commit_msg_cleanup_mode cleanup;
1319 if (parse_head(r, ¤t_head))
1322 if (flags & AMEND_MSG) {
1323 const char *exclude_gpgsig[] = { "gpgsig", NULL };
1324 const char *out_enc = get_commit_output_encoding();
1325 const char *message = logmsg_reencode(current_head, NULL,
1329 const char *orig_message = NULL;
1331 find_commit_subject(message, &orig_message);
1333 strbuf_addstr(msg, orig_message);
1334 hook_commit = "HEAD";
1336 author = amend_author = get_author(message);
1337 unuse_commit_buffer(current_head, message);
1339 res = error(_("unable to parse commit author"));
1342 parents = copy_commit_list(current_head->parents);
1343 extra = read_commit_extra_headers(current_head, exclude_gpgsig);
1344 } else if (current_head &&
1345 (!(flags & CREATE_ROOT_COMMIT) || (flags & AMEND_MSG))) {
1346 commit_list_insert(current_head, &parents);
1349 if (write_index_as_tree(&tree, r->index, r->index_file, 0, NULL)) {
1350 res = error(_("git write-tree failed to write a tree"));
1354 if (!(flags & ALLOW_EMPTY) && oideq(current_head ?
1355 get_commit_tree_oid(current_head) :
1356 the_hash_algo->empty_tree, &tree)) {
1357 res = 1; /* run 'git commit' to display error message */
1361 if (find_hook("prepare-commit-msg")) {
1362 res = run_prepare_commit_msg_hook(r, msg, hook_commit);
1365 if (strbuf_read_file(&commit_msg, git_path_commit_editmsg(),
1367 res = error_errno(_("unable to read commit message "
1369 git_path_commit_editmsg());
1375 if (flags & CLEANUP_MSG)
1376 cleanup = COMMIT_MSG_CLEANUP_ALL;
1377 else if ((opts->signoff || opts->record_origin) &&
1378 !opts->explicit_cleanup)
1379 cleanup = COMMIT_MSG_CLEANUP_SPACE;
1381 cleanup = opts->default_msg_cleanup;
1383 if (cleanup != COMMIT_MSG_CLEANUP_NONE)
1384 strbuf_stripspace(msg, cleanup == COMMIT_MSG_CLEANUP_ALL);
1385 if ((flags & EDIT_MSG) && message_is_empty(msg, cleanup)) {
1386 res = 1; /* run 'git commit' to display error message */
1392 if (commit_tree_extended(msg->buf, msg->len, &tree, parents,
1393 oid, author, opts->gpg_sign, extra)) {
1394 res = error(_("failed to write commit object"));
1398 if (update_head_with_reflog(current_head, oid,
1399 getenv("GIT_REFLOG_ACTION"), msg, &err)) {
1400 res = error("%s", err.buf);
1404 run_commit_hook(0, r->index_file, "post-commit", NULL);
1405 if (flags & AMEND_MSG)
1406 commit_post_rewrite(r, current_head, oid);
1409 free_commit_extra_headers(extra);
1410 strbuf_release(&err);
1411 strbuf_release(&commit_msg);
1417 static int do_commit(struct repository *r,
1418 const char *msg_file, const char *author,
1419 struct replay_opts *opts, unsigned int flags)
1423 if (!(flags & EDIT_MSG) && !(flags & VERIFY_MSG)) {
1424 struct object_id oid;
1425 struct strbuf sb = STRBUF_INIT;
1427 if (msg_file && strbuf_read_file(&sb, msg_file, 2048) < 0)
1428 return error_errno(_("unable to read commit message "
1432 res = try_to_commit(r, msg_file ? &sb : NULL,
1433 author, opts, flags, &oid);
1434 strbuf_release(&sb);
1436 unlink(git_path_cherry_pick_head(r));
1437 unlink(git_path_merge_msg(r));
1438 if (!is_rebase_i(opts))
1439 print_commit_summary(r, NULL, &oid,
1440 SUMMARY_SHOW_AUTHOR_DATE);
1445 return run_git_commit(r, msg_file, opts, flags);
1450 static int is_original_commit_empty(struct commit *commit)
1452 const struct object_id *ptree_oid;
1454 if (parse_commit(commit))
1455 return error(_("could not parse commit %s"),
1456 oid_to_hex(&commit->object.oid));
1457 if (commit->parents) {
1458 struct commit *parent = commit->parents->item;
1459 if (parse_commit(parent))
1460 return error(_("could not parse parent commit %s"),
1461 oid_to_hex(&parent->object.oid));
1462 ptree_oid = get_commit_tree_oid(parent);
1464 ptree_oid = the_hash_algo->empty_tree; /* commit is root */
1467 return oideq(ptree_oid, get_commit_tree_oid(commit));
1471 * Do we run "git commit" with "--allow-empty"?
1473 static int allow_empty(struct repository *r,
1474 struct replay_opts *opts,
1475 struct commit *commit)
1477 int index_unchanged, empty_commit;
1482 * (1) we do not allow empty at all and error out.
1484 * (2) we allow ones that were initially empty, but
1485 * forbid the ones that become empty;
1487 * (3) we allow both.
1489 if (!opts->allow_empty)
1490 return 0; /* let "git commit" barf as necessary */
1492 index_unchanged = is_index_unchanged(r);
1493 if (index_unchanged < 0)
1494 return index_unchanged;
1495 if (!index_unchanged)
1496 return 0; /* we do not have to say --allow-empty */
1498 if (opts->keep_redundant_commits)
1501 empty_commit = is_original_commit_empty(commit);
1502 if (empty_commit < 0)
1503 return empty_commit;
1513 } todo_command_info[] = {
1530 static const char *command_to_string(const enum todo_command command)
1532 if (command < TODO_COMMENT)
1533 return todo_command_info[command].str;
1534 die(_("unknown command: %d"), command);
1537 static char command_to_char(const enum todo_command command)
1539 if (command < TODO_COMMENT && todo_command_info[command].c)
1540 return todo_command_info[command].c;
1541 return comment_line_char;
1544 static int is_noop(const enum todo_command command)
1546 return TODO_NOOP <= command;
1549 static int is_fixup(enum todo_command command)
1551 return command == TODO_FIXUP || command == TODO_SQUASH;
1554 /* Does this command create a (non-merge) commit? */
1555 static int is_pick_or_similar(enum todo_command command)
1570 static int update_squash_messages(struct repository *r,
1571 enum todo_command command,
1572 struct commit *commit,
1573 struct replay_opts *opts)
1575 struct strbuf buf = STRBUF_INIT;
1577 const char *message, *body;
1579 if (opts->current_fixup_count > 0) {
1580 struct strbuf header = STRBUF_INIT;
1583 if (strbuf_read_file(&buf, rebase_path_squash_msg(), 9) <= 0)
1584 return error(_("could not read '%s'"),
1585 rebase_path_squash_msg());
1587 eol = buf.buf[0] != comment_line_char ?
1588 buf.buf : strchrnul(buf.buf, '\n');
1590 strbuf_addf(&header, "%c ", comment_line_char);
1591 strbuf_addf(&header, _("This is a combination of %d commits."),
1592 opts->current_fixup_count + 2);
1593 strbuf_splice(&buf, 0, eol - buf.buf, header.buf, header.len);
1594 strbuf_release(&header);
1596 struct object_id head;
1597 struct commit *head_commit;
1598 const char *head_message, *body;
1600 if (get_oid("HEAD", &head))
1601 return error(_("need a HEAD to fixup"));
1602 if (!(head_commit = lookup_commit_reference(r, &head)))
1603 return error(_("could not read HEAD"));
1604 if (!(head_message = get_commit_buffer(head_commit, NULL)))
1605 return error(_("could not read HEAD's commit message"));
1607 find_commit_subject(head_message, &body);
1608 if (write_message(body, strlen(body),
1609 rebase_path_fixup_msg(), 0)) {
1610 unuse_commit_buffer(head_commit, head_message);
1611 return error(_("cannot write '%s'"),
1612 rebase_path_fixup_msg());
1615 strbuf_addf(&buf, "%c ", comment_line_char);
1616 strbuf_addf(&buf, _("This is a combination of %d commits."), 2);
1617 strbuf_addf(&buf, "\n%c ", comment_line_char);
1618 strbuf_addstr(&buf, _("This is the 1st commit message:"));
1619 strbuf_addstr(&buf, "\n\n");
1620 strbuf_addstr(&buf, body);
1622 unuse_commit_buffer(head_commit, head_message);
1625 if (!(message = get_commit_buffer(commit, NULL)))
1626 return error(_("could not read commit message of %s"),
1627 oid_to_hex(&commit->object.oid));
1628 find_commit_subject(message, &body);
1630 if (command == TODO_SQUASH) {
1631 unlink(rebase_path_fixup_msg());
1632 strbuf_addf(&buf, "\n%c ", comment_line_char);
1633 strbuf_addf(&buf, _("This is the commit message #%d:"),
1634 ++opts->current_fixup_count + 1);
1635 strbuf_addstr(&buf, "\n\n");
1636 strbuf_addstr(&buf, body);
1637 } else if (command == TODO_FIXUP) {
1638 strbuf_addf(&buf, "\n%c ", comment_line_char);
1639 strbuf_addf(&buf, _("The commit message #%d will be skipped:"),
1640 ++opts->current_fixup_count + 1);
1641 strbuf_addstr(&buf, "\n\n");
1642 strbuf_add_commented_lines(&buf, body, strlen(body));
1644 return error(_("unknown command: %d"), command);
1645 unuse_commit_buffer(commit, message);
1647 res = write_message(buf.buf, buf.len, rebase_path_squash_msg(), 0);
1648 strbuf_release(&buf);
1651 strbuf_addf(&opts->current_fixups, "%s%s %s",
1652 opts->current_fixups.len ? "\n" : "",
1653 command_to_string(command),
1654 oid_to_hex(&commit->object.oid));
1655 res = write_message(opts->current_fixups.buf,
1656 opts->current_fixups.len,
1657 rebase_path_current_fixups(), 0);
1663 static void flush_rewritten_pending(void)
1665 struct strbuf buf = STRBUF_INIT;
1666 struct object_id newoid;
1669 if (strbuf_read_file(&buf, rebase_path_rewritten_pending(), (GIT_MAX_HEXSZ + 1) * 2) > 0 &&
1670 !get_oid("HEAD", &newoid) &&
1671 (out = fopen_or_warn(rebase_path_rewritten_list(), "a"))) {
1672 char *bol = buf.buf, *eol;
1675 eol = strchrnul(bol, '\n');
1676 fprintf(out, "%.*s %s\n", (int)(eol - bol),
1677 bol, oid_to_hex(&newoid));
1683 unlink(rebase_path_rewritten_pending());
1685 strbuf_release(&buf);
1688 static void record_in_rewritten(struct object_id *oid,
1689 enum todo_command next_command)
1691 FILE *out = fopen_or_warn(rebase_path_rewritten_pending(), "a");
1696 fprintf(out, "%s\n", oid_to_hex(oid));
1699 if (!is_fixup(next_command))
1700 flush_rewritten_pending();
1703 static int do_pick_commit(struct repository *r,
1704 enum todo_command command,
1705 struct commit *commit,
1706 struct replay_opts *opts,
1707 int final_fixup, int *check_todo)
1709 unsigned int flags = opts->edit ? EDIT_MSG : 0;
1710 const char *msg_file = opts->edit ? NULL : git_path_merge_msg(r);
1711 struct object_id head;
1712 struct commit *base, *next, *parent;
1713 const char *base_label, *next_label;
1714 char *author = NULL;
1715 struct commit_message msg = { NULL, NULL, NULL, NULL };
1716 struct strbuf msgbuf = STRBUF_INIT;
1717 int res, unborn = 0, reword = 0, allow;
1719 if (opts->no_commit) {
1721 * We do not intend to commit immediately. We just want to
1722 * merge the differences in, so let's compute the tree
1723 * that represents the "current" state for merge-recursive
1726 if (write_index_as_tree(&head, r->index, r->index_file, 0, NULL))
1727 return error(_("your index file is unmerged."));
1729 unborn = get_oid("HEAD", &head);
1730 /* Do we want to generate a root commit? */
1731 if (is_pick_or_similar(command) && opts->have_squash_onto &&
1732 oideq(&head, &opts->squash_onto)) {
1733 if (is_fixup(command))
1734 return error(_("cannot fixup root commit"));
1735 flags |= CREATE_ROOT_COMMIT;
1738 oidcpy(&head, the_hash_algo->empty_tree);
1739 if (index_differs_from(r, unborn ? empty_tree_oid_hex() : "HEAD",
1741 return error_dirty_index(r, opts);
1743 discard_index(r->index);
1745 if (!commit->parents)
1747 else if (commit->parents->next) {
1748 /* Reverting or cherry-picking a merge commit */
1750 struct commit_list *p;
1752 if (!opts->mainline)
1753 return error(_("commit %s is a merge but no -m option was given."),
1754 oid_to_hex(&commit->object.oid));
1756 for (cnt = 1, p = commit->parents;
1757 cnt != opts->mainline && p;
1760 if (cnt != opts->mainline || !p)
1761 return error(_("commit %s does not have parent %d"),
1762 oid_to_hex(&commit->object.oid), opts->mainline);
1764 } else if (1 < opts->mainline)
1766 * Non-first parent explicitly specified as mainline for
1769 return error(_("commit %s does not have parent %d"),
1770 oid_to_hex(&commit->object.oid), opts->mainline);
1772 parent = commit->parents->item;
1774 if (get_message(commit, &msg) != 0)
1775 return error(_("cannot get commit message for %s"),
1776 oid_to_hex(&commit->object.oid));
1778 if (opts->allow_ff && !is_fixup(command) &&
1779 ((parent && oideq(&parent->object.oid, &head)) ||
1780 (!parent && unborn))) {
1781 if (is_rebase_i(opts))
1782 write_author_script(msg.message);
1783 res = fast_forward_to(r, &commit->object.oid, &head, unborn,
1785 if (res || command != TODO_REWORD)
1789 goto fast_forward_edit;
1791 if (parent && parse_commit(parent) < 0)
1792 /* TRANSLATORS: The first %s will be a "todo" command like
1793 "revert" or "pick", the second %s a SHA1. */
1794 return error(_("%s: cannot parse parent commit %s"),
1795 command_to_string(command),
1796 oid_to_hex(&parent->object.oid));
1799 * "commit" is an existing commit. We would want to apply
1800 * the difference it introduces since its first parent "prev"
1801 * on top of the current HEAD if we are cherry-pick. Or the
1802 * reverse of it if we are revert.
1805 if (command == TODO_REVERT) {
1807 base_label = msg.label;
1809 next_label = msg.parent_label;
1810 strbuf_addstr(&msgbuf, "Revert \"");
1811 strbuf_addstr(&msgbuf, msg.subject);
1812 strbuf_addstr(&msgbuf, "\"\n\nThis reverts commit ");
1813 strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1815 if (commit->parents && commit->parents->next) {
1816 strbuf_addstr(&msgbuf, ", reversing\nchanges made to ");
1817 strbuf_addstr(&msgbuf, oid_to_hex(&parent->object.oid));
1819 strbuf_addstr(&msgbuf, ".\n");
1824 base_label = msg.parent_label;
1826 next_label = msg.label;
1828 /* Append the commit log message to msgbuf. */
1829 if (find_commit_subject(msg.message, &p))
1830 strbuf_addstr(&msgbuf, p);
1832 if (opts->record_origin) {
1833 strbuf_complete_line(&msgbuf);
1834 if (!has_conforming_footer(&msgbuf, NULL, 0))
1835 strbuf_addch(&msgbuf, '\n');
1836 strbuf_addstr(&msgbuf, cherry_picked_prefix);
1837 strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1838 strbuf_addstr(&msgbuf, ")\n");
1840 if (!is_fixup(command))
1841 author = get_author(msg.message);
1844 if (command == TODO_REWORD)
1846 else if (is_fixup(command)) {
1847 if (update_squash_messages(r, command, commit, opts))
1851 msg_file = rebase_path_squash_msg();
1852 else if (file_exists(rebase_path_fixup_msg())) {
1853 flags |= CLEANUP_MSG;
1854 msg_file = rebase_path_fixup_msg();
1856 const char *dest = git_path_squash_msg(r);
1858 if (copy_file(dest, rebase_path_squash_msg(), 0666))
1859 return error(_("could not rename '%s' to '%s'"),
1860 rebase_path_squash_msg(), dest);
1861 unlink(git_path_merge_msg(r));
1867 if (opts->signoff && !is_fixup(command))
1868 append_signoff(&msgbuf, 0, 0);
1870 if (is_rebase_i(opts) && write_author_script(msg.message) < 0)
1872 else if (!opts->strategy || !strcmp(opts->strategy, "recursive") || command == TODO_REVERT) {
1873 res = do_recursive_merge(r, base, next, base_label, next_label,
1874 &head, &msgbuf, opts);
1878 res |= write_message(msgbuf.buf, msgbuf.len,
1879 git_path_merge_msg(r), 0);
1881 struct commit_list *common = NULL;
1882 struct commit_list *remotes = NULL;
1884 res = write_message(msgbuf.buf, msgbuf.len,
1885 git_path_merge_msg(r), 0);
1887 commit_list_insert(base, &common);
1888 commit_list_insert(next, &remotes);
1889 res |= try_merge_command(r, opts->strategy,
1890 opts->xopts_nr, (const char **)opts->xopts,
1891 common, oid_to_hex(&head), remotes);
1892 free_commit_list(common);
1893 free_commit_list(remotes);
1895 strbuf_release(&msgbuf);
1898 * If the merge was clean or if it failed due to conflict, we write
1899 * CHERRY_PICK_HEAD for the subsequent invocation of commit to use.
1900 * However, if the merge did not even start, then we don't want to
1903 if (command == TODO_PICK && !opts->no_commit && (res == 0 || res == 1) &&
1904 update_ref(NULL, "CHERRY_PICK_HEAD", &commit->object.oid, NULL,
1905 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1907 if (command == TODO_REVERT && ((opts->no_commit && res == 0) || res == 1) &&
1908 update_ref(NULL, "REVERT_HEAD", &commit->object.oid, NULL,
1909 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1913 error(command == TODO_REVERT
1914 ? _("could not revert %s... %s")
1915 : _("could not apply %s... %s"),
1916 short_commit_name(commit), msg.subject);
1917 print_advice(r, res == 1, opts);
1918 repo_rerere(r, opts->allow_rerere_auto);
1922 allow = allow_empty(r, opts, commit);
1927 flags |= ALLOW_EMPTY;
1928 if (!opts->no_commit) {
1929 if (author || command == TODO_REVERT || (flags & AMEND_MSG))
1930 res = do_commit(r, msg_file, author, opts, flags);
1932 res = error(_("unable to parse commit author"));
1933 *check_todo = !!(flags & EDIT_MSG);
1934 if (!res && reword) {
1936 res = run_git_commit(r, NULL, opts, EDIT_MSG |
1937 VERIFY_MSG | AMEND_MSG |
1938 (flags & ALLOW_EMPTY));
1944 if (!res && final_fixup) {
1945 unlink(rebase_path_fixup_msg());
1946 unlink(rebase_path_squash_msg());
1947 unlink(rebase_path_current_fixups());
1948 strbuf_reset(&opts->current_fixups);
1949 opts->current_fixup_count = 0;
1953 free_message(commit, &msg);
1955 update_abort_safety_file();
1960 static int prepare_revs(struct replay_opts *opts)
1963 * picking (but not reverting) ranges (but not individual revisions)
1964 * should be done in reverse
1966 if (opts->action == REPLAY_PICK && !opts->revs->no_walk)
1967 opts->revs->reverse ^= 1;
1969 if (prepare_revision_walk(opts->revs))
1970 return error(_("revision walk setup failed"));
1975 static int read_and_refresh_cache(struct repository *r,
1976 struct replay_opts *opts)
1978 struct lock_file index_lock = LOCK_INIT;
1979 int index_fd = repo_hold_locked_index(r, &index_lock, 0);
1980 if (repo_read_index(r) < 0) {
1981 rollback_lock_file(&index_lock);
1982 return error(_("git %s: failed to read the index"),
1983 _(action_name(opts)));
1985 refresh_index(r->index, REFRESH_QUIET|REFRESH_UNMERGED, NULL, NULL, NULL);
1986 if (index_fd >= 0) {
1987 if (write_locked_index(r->index, &index_lock,
1988 COMMIT_LOCK | SKIP_IF_UNCHANGED)) {
1989 return error(_("git %s: failed to refresh the index"),
1990 _(action_name(opts)));
1996 enum todo_item_flags {
1997 TODO_EDIT_MERGE_MSG = 1
2000 void todo_list_release(struct todo_list *todo_list)
2002 strbuf_release(&todo_list->buf);
2003 FREE_AND_NULL(todo_list->items);
2004 todo_list->nr = todo_list->alloc = 0;
2007 static struct todo_item *append_new_todo(struct todo_list *todo_list)
2009 ALLOC_GROW(todo_list->items, todo_list->nr + 1, todo_list->alloc);
2010 return todo_list->items + todo_list->nr++;
2013 const char *todo_item_get_arg(struct todo_list *todo_list,
2014 struct todo_item *item)
2016 return todo_list->buf.buf + item->arg_offset;
2019 static int parse_insn_line(struct repository *r, struct todo_item *item,
2020 const char *buf, const char *bol, char *eol)
2022 struct object_id commit_oid;
2023 char *end_of_object_name;
2024 int i, saved, status, padding;
2029 bol += strspn(bol, " \t");
2031 if (bol == eol || *bol == '\r' || *bol == comment_line_char) {
2032 item->command = TODO_COMMENT;
2033 item->commit = NULL;
2034 item->arg_offset = bol - buf;
2035 item->arg_len = eol - bol;
2039 for (i = 0; i < TODO_COMMENT; i++)
2040 if (skip_prefix(bol, todo_command_info[i].str, &bol)) {
2043 } else if ((bol + 1 == eol || bol[1] == ' ') &&
2044 *bol == todo_command_info[i].c) {
2049 if (i >= TODO_COMMENT)
2052 /* Eat up extra spaces/ tabs before object name */
2053 padding = strspn(bol, " \t");
2056 if (item->command == TODO_NOOP || item->command == TODO_BREAK) {
2058 return error(_("%s does not accept arguments: '%s'"),
2059 command_to_string(item->command), bol);
2060 item->commit = NULL;
2061 item->arg_offset = bol - buf;
2062 item->arg_len = eol - bol;
2067 return error(_("missing arguments for %s"),
2068 command_to_string(item->command));
2070 if (item->command == TODO_EXEC || item->command == TODO_LABEL ||
2071 item->command == TODO_RESET) {
2072 item->commit = NULL;
2073 item->arg_offset = bol - buf;
2074 item->arg_len = (int)(eol - bol);
2078 if (item->command == TODO_MERGE) {
2079 if (skip_prefix(bol, "-C", &bol))
2080 bol += strspn(bol, " \t");
2081 else if (skip_prefix(bol, "-c", &bol)) {
2082 bol += strspn(bol, " \t");
2083 item->flags |= TODO_EDIT_MERGE_MSG;
2085 item->flags |= TODO_EDIT_MERGE_MSG;
2086 item->commit = NULL;
2087 item->arg_offset = bol - buf;
2088 item->arg_len = (int)(eol - bol);
2093 end_of_object_name = (char *) bol + strcspn(bol, " \t\n");
2094 saved = *end_of_object_name;
2095 *end_of_object_name = '\0';
2096 status = get_oid(bol, &commit_oid);
2097 *end_of_object_name = saved;
2099 bol = end_of_object_name + strspn(end_of_object_name, " \t");
2100 item->arg_offset = bol - buf;
2101 item->arg_len = (int)(eol - bol);
2104 return error(_("could not parse '%.*s'"),
2105 (int)(end_of_object_name - bol), bol);
2107 item->commit = lookup_commit_reference(r, &commit_oid);
2108 return !item->commit;
2111 int sequencer_get_last_command(struct repository *r, enum replay_action *action)
2113 struct todo_item item;
2115 const char *todo_file;
2116 struct strbuf buf = STRBUF_INIT;
2119 todo_file = git_path_todo_file();
2120 if (strbuf_read_file(&buf, todo_file, 0) < 0) {
2121 if (errno == ENOENT)
2124 return error_errno("unable to open '%s'", todo_file);
2126 eol = strchrnul(buf.buf, '\n');
2127 if (buf.buf != eol && eol[-1] == '\r')
2128 eol--; /* strip Carriage Return */
2129 if (parse_insn_line(r, &item, buf.buf, buf.buf, eol))
2131 if (item.command == TODO_PICK)
2132 *action = REPLAY_PICK;
2133 else if (item.command == TODO_REVERT)
2134 *action = REPLAY_REVERT;
2141 strbuf_release(&buf);
2146 int todo_list_parse_insn_buffer(struct repository *r, char *buf,
2147 struct todo_list *todo_list)
2149 struct todo_item *item;
2150 char *p = buf, *next_p;
2151 int i, res = 0, fixup_okay = file_exists(rebase_path_done());
2153 todo_list->current = todo_list->nr = 0;
2155 for (i = 1; *p; i++, p = next_p) {
2156 char *eol = strchrnul(p, '\n');
2158 next_p = *eol ? eol + 1 /* skip LF */ : eol;
2160 if (p != eol && eol[-1] == '\r')
2161 eol--; /* strip Carriage Return */
2163 item = append_new_todo(todo_list);
2164 item->offset_in_buf = p - todo_list->buf.buf;
2165 if (parse_insn_line(r, item, buf, p, eol)) {
2166 res = error(_("invalid line %d: %.*s"),
2167 i, (int)(eol - p), p);
2168 item->command = TODO_COMMENT + 1;
2169 item->arg_offset = p - buf;
2170 item->arg_len = (int)(eol - p);
2171 item->commit = NULL;
2176 else if (is_fixup(item->command))
2177 return error(_("cannot '%s' without a previous commit"),
2178 command_to_string(item->command));
2179 else if (!is_noop(item->command))
2186 static int count_commands(struct todo_list *todo_list)
2190 for (i = 0; i < todo_list->nr; i++)
2191 if (todo_list->items[i].command != TODO_COMMENT)
2197 static int get_item_line_offset(struct todo_list *todo_list, int index)
2199 return index < todo_list->nr ?
2200 todo_list->items[index].offset_in_buf : todo_list->buf.len;
2203 static const char *get_item_line(struct todo_list *todo_list, int index)
2205 return todo_list->buf.buf + get_item_line_offset(todo_list, index);
2208 static int get_item_line_length(struct todo_list *todo_list, int index)
2210 return get_item_line_offset(todo_list, index + 1)
2211 - get_item_line_offset(todo_list, index);
2214 static ssize_t strbuf_read_file_or_whine(struct strbuf *sb, const char *path)
2219 fd = open(path, O_RDONLY);
2221 return error_errno(_("could not open '%s'"), path);
2222 len = strbuf_read(sb, fd, 0);
2225 return error(_("could not read '%s'."), path);
2229 static int have_finished_the_last_pick(void)
2231 struct strbuf buf = STRBUF_INIT;
2233 const char *todo_path = git_path_todo_file();
2236 if (strbuf_read_file(&buf, todo_path, 0) < 0) {
2237 if (errno == ENOENT) {
2240 error_errno("unable to open '%s'", todo_path);
2244 /* If there is only one line then we are done */
2245 eol = strchr(buf.buf, '\n');
2246 if (!eol || !eol[1])
2249 strbuf_release(&buf);
2254 void sequencer_post_commit_cleanup(struct repository *r)
2256 struct replay_opts opts = REPLAY_OPTS_INIT;
2257 int need_cleanup = 0;
2259 if (file_exists(git_path_cherry_pick_head(r))) {
2260 unlink(git_path_cherry_pick_head(r));
2261 opts.action = REPLAY_PICK;
2265 if (file_exists(git_path_revert_head(r))) {
2266 unlink(git_path_revert_head(r));
2267 opts.action = REPLAY_REVERT;
2274 if (!have_finished_the_last_pick())
2277 sequencer_remove_state(&opts);
2280 static int read_populate_todo(struct repository *r,
2281 struct todo_list *todo_list,
2282 struct replay_opts *opts)
2285 const char *todo_file = get_todo_path(opts);
2288 strbuf_reset(&todo_list->buf);
2289 if (strbuf_read_file_or_whine(&todo_list->buf, todo_file) < 0)
2292 res = stat(todo_file, &st);
2294 return error(_("could not stat '%s'"), todo_file);
2295 fill_stat_data(&todo_list->stat, &st);
2297 res = todo_list_parse_insn_buffer(r, todo_list->buf.buf, todo_list);
2299 if (is_rebase_i(opts))
2300 return error(_("please fix this using "
2301 "'git rebase --edit-todo'."));
2302 return error(_("unusable instruction sheet: '%s'"), todo_file);
2305 if (!todo_list->nr &&
2306 (!is_rebase_i(opts) || !file_exists(rebase_path_done())))
2307 return error(_("no commits parsed."));
2309 if (!is_rebase_i(opts)) {
2310 enum todo_command valid =
2311 opts->action == REPLAY_PICK ? TODO_PICK : TODO_REVERT;
2314 for (i = 0; i < todo_list->nr; i++)
2315 if (valid == todo_list->items[i].command)
2317 else if (valid == TODO_PICK)
2318 return error(_("cannot cherry-pick during a revert."));
2320 return error(_("cannot revert during a cherry-pick."));
2323 if (is_rebase_i(opts)) {
2324 struct todo_list done = TODO_LIST_INIT;
2325 FILE *f = fopen_or_warn(rebase_path_msgtotal(), "w");
2327 if (strbuf_read_file(&done.buf, rebase_path_done(), 0) > 0 &&
2328 !todo_list_parse_insn_buffer(r, done.buf.buf, &done))
2329 todo_list->done_nr = count_commands(&done);
2331 todo_list->done_nr = 0;
2333 todo_list->total_nr = todo_list->done_nr
2334 + count_commands(todo_list);
2335 todo_list_release(&done);
2338 fprintf(f, "%d\n", todo_list->total_nr);
2346 static int git_config_string_dup(char **dest,
2347 const char *var, const char *value)
2350 return config_error_nonbool(var);
2352 *dest = xstrdup(value);
2356 static int populate_opts_cb(const char *key, const char *value, void *data)
2358 struct replay_opts *opts = data;
2363 else if (!strcmp(key, "options.no-commit"))
2364 opts->no_commit = git_config_bool_or_int(key, value, &error_flag);
2365 else if (!strcmp(key, "options.edit"))
2366 opts->edit = git_config_bool_or_int(key, value, &error_flag);
2367 else if (!strcmp(key, "options.allow-empty"))
2369 git_config_bool_or_int(key, value, &error_flag);
2370 else if (!strcmp(key, "options.allow-empty-message"))
2371 opts->allow_empty_message =
2372 git_config_bool_or_int(key, value, &error_flag);
2373 else if (!strcmp(key, "options.keep-redundant-commits"))
2374 opts->keep_redundant_commits =
2375 git_config_bool_or_int(key, value, &error_flag);
2376 else if (!strcmp(key, "options.signoff"))
2377 opts->signoff = git_config_bool_or_int(key, value, &error_flag);
2378 else if (!strcmp(key, "options.record-origin"))
2379 opts->record_origin = git_config_bool_or_int(key, value, &error_flag);
2380 else if (!strcmp(key, "options.allow-ff"))
2381 opts->allow_ff = git_config_bool_or_int(key, value, &error_flag);
2382 else if (!strcmp(key, "options.mainline"))
2383 opts->mainline = git_config_int(key, value);
2384 else if (!strcmp(key, "options.strategy"))
2385 git_config_string_dup(&opts->strategy, key, value);
2386 else if (!strcmp(key, "options.gpg-sign"))
2387 git_config_string_dup(&opts->gpg_sign, key, value);
2388 else if (!strcmp(key, "options.strategy-option")) {
2389 ALLOC_GROW(opts->xopts, opts->xopts_nr + 1, opts->xopts_alloc);
2390 opts->xopts[opts->xopts_nr++] = xstrdup(value);
2391 } else if (!strcmp(key, "options.allow-rerere-auto"))
2392 opts->allow_rerere_auto =
2393 git_config_bool_or_int(key, value, &error_flag) ?
2394 RERERE_AUTOUPDATE : RERERE_NOAUTOUPDATE;
2395 else if (!strcmp(key, "options.default-msg-cleanup")) {
2396 opts->explicit_cleanup = 1;
2397 opts->default_msg_cleanup = get_cleanup_mode(value, 1);
2399 return error(_("invalid key: %s"), key);
2402 return error(_("invalid value for %s: %s"), key, value);
2407 void parse_strategy_opts(struct replay_opts *opts, char *raw_opts)
2410 char *strategy_opts_string = raw_opts;
2412 if (*strategy_opts_string == ' ')
2413 strategy_opts_string++;
2415 opts->xopts_nr = split_cmdline(strategy_opts_string,
2416 (const char ***)&opts->xopts);
2417 for (i = 0; i < opts->xopts_nr; i++) {
2418 const char *arg = opts->xopts[i];
2420 skip_prefix(arg, "--", &arg);
2421 opts->xopts[i] = xstrdup(arg);
2425 static void read_strategy_opts(struct replay_opts *opts, struct strbuf *buf)
2428 if (!read_oneliner(buf, rebase_path_strategy(), 0))
2430 opts->strategy = strbuf_detach(buf, NULL);
2431 if (!read_oneliner(buf, rebase_path_strategy_opts(), 0))
2434 parse_strategy_opts(opts, buf->buf);
2437 static int read_populate_opts(struct replay_opts *opts)
2439 if (is_rebase_i(opts)) {
2440 struct strbuf buf = STRBUF_INIT;
2442 if (read_oneliner(&buf, rebase_path_gpg_sign_opt(), 1)) {
2443 if (!starts_with(buf.buf, "-S"))
2446 free(opts->gpg_sign);
2447 opts->gpg_sign = xstrdup(buf.buf + 2);
2452 if (read_oneliner(&buf, rebase_path_allow_rerere_autoupdate(), 1)) {
2453 if (!strcmp(buf.buf, "--rerere-autoupdate"))
2454 opts->allow_rerere_auto = RERERE_AUTOUPDATE;
2455 else if (!strcmp(buf.buf, "--no-rerere-autoupdate"))
2456 opts->allow_rerere_auto = RERERE_NOAUTOUPDATE;
2460 if (file_exists(rebase_path_verbose()))
2463 if (file_exists(rebase_path_quiet()))
2466 if (file_exists(rebase_path_signoff())) {
2471 if (file_exists(rebase_path_reschedule_failed_exec()))
2472 opts->reschedule_failed_exec = 1;
2474 read_strategy_opts(opts, &buf);
2475 strbuf_release(&buf);
2477 if (read_oneliner(&opts->current_fixups,
2478 rebase_path_current_fixups(), 1)) {
2479 const char *p = opts->current_fixups.buf;
2480 opts->current_fixup_count = 1;
2481 while ((p = strchr(p, '\n'))) {
2482 opts->current_fixup_count++;
2487 if (read_oneliner(&buf, rebase_path_squash_onto(), 0)) {
2488 if (get_oid_hex(buf.buf, &opts->squash_onto) < 0)
2489 return error(_("unusable squash-onto"));
2490 opts->have_squash_onto = 1;
2496 if (!file_exists(git_path_opts_file()))
2499 * The function git_parse_source(), called from git_config_from_file(),
2500 * may die() in case of a syntactically incorrect file. We do not care
2501 * about this case, though, because we wrote that file ourselves, so we
2502 * are pretty certain that it is syntactically correct.
2504 if (git_config_from_file(populate_opts_cb, git_path_opts_file(), opts) < 0)
2505 return error(_("malformed options sheet: '%s'"),
2506 git_path_opts_file());
2510 static void write_strategy_opts(struct replay_opts *opts)
2513 struct strbuf buf = STRBUF_INIT;
2515 for (i = 0; i < opts->xopts_nr; ++i)
2516 strbuf_addf(&buf, " --%s", opts->xopts[i]);
2518 write_file(rebase_path_strategy_opts(), "%s\n", buf.buf);
2519 strbuf_release(&buf);
2522 int write_basic_state(struct replay_opts *opts, const char *head_name,
2523 struct commit *onto, const char *orig_head)
2525 const char *quiet = getenv("GIT_QUIET");
2528 write_file(rebase_path_head_name(), "%s\n", head_name);
2530 write_file(rebase_path_onto(), "%s\n",
2531 oid_to_hex(&onto->object.oid));
2533 write_file(rebase_path_orig_head(), "%s\n", orig_head);
2536 write_file(rebase_path_quiet(), "%s\n", quiet);
2538 write_file(rebase_path_verbose(), "%s", "");
2540 write_file(rebase_path_strategy(), "%s\n", opts->strategy);
2541 if (opts->xopts_nr > 0)
2542 write_strategy_opts(opts);
2544 if (opts->allow_rerere_auto == RERERE_AUTOUPDATE)
2545 write_file(rebase_path_allow_rerere_autoupdate(), "--rerere-autoupdate\n");
2546 else if (opts->allow_rerere_auto == RERERE_NOAUTOUPDATE)
2547 write_file(rebase_path_allow_rerere_autoupdate(), "--no-rerere-autoupdate\n");
2550 write_file(rebase_path_gpg_sign_opt(), "-S%s\n", opts->gpg_sign);
2552 write_file(rebase_path_signoff(), "--signoff\n");
2553 if (opts->reschedule_failed_exec)
2554 write_file(rebase_path_reschedule_failed_exec(), "%s", "");
2559 static int walk_revs_populate_todo(struct todo_list *todo_list,
2560 struct replay_opts *opts)
2562 enum todo_command command = opts->action == REPLAY_PICK ?
2563 TODO_PICK : TODO_REVERT;
2564 const char *command_string = todo_command_info[command].str;
2565 struct commit *commit;
2567 if (prepare_revs(opts))
2570 while ((commit = get_revision(opts->revs))) {
2571 struct todo_item *item = append_new_todo(todo_list);
2572 const char *commit_buffer = get_commit_buffer(commit, NULL);
2573 const char *subject;
2576 item->command = command;
2577 item->commit = commit;
2578 item->arg_offset = 0;
2580 item->offset_in_buf = todo_list->buf.len;
2581 subject_len = find_commit_subject(commit_buffer, &subject);
2582 strbuf_addf(&todo_list->buf, "%s %s %.*s\n", command_string,
2583 short_commit_name(commit), subject_len, subject);
2584 unuse_commit_buffer(commit, commit_buffer);
2588 return error(_("empty commit set passed"));
2593 static int create_seq_dir(void)
2595 if (file_exists(git_path_seq_dir())) {
2596 error(_("a cherry-pick or revert is already in progress"));
2597 advise(_("try \"git cherry-pick (--continue | --quit | --abort)\""));
2599 } else if (mkdir(git_path_seq_dir(), 0777) < 0)
2600 return error_errno(_("could not create sequencer directory '%s'"),
2601 git_path_seq_dir());
2605 static int save_head(const char *head)
2607 struct lock_file head_lock = LOCK_INIT;
2608 struct strbuf buf = STRBUF_INIT;
2612 fd = hold_lock_file_for_update(&head_lock, git_path_head_file(), 0);
2614 return error_errno(_("could not lock HEAD"));
2615 strbuf_addf(&buf, "%s\n", head);
2616 written = write_in_full(fd, buf.buf, buf.len);
2617 strbuf_release(&buf);
2619 error_errno(_("could not write to '%s'"), git_path_head_file());
2620 rollback_lock_file(&head_lock);
2623 if (commit_lock_file(&head_lock) < 0)
2624 return error(_("failed to finalize '%s'"), git_path_head_file());
2628 static int rollback_is_safe(void)
2630 struct strbuf sb = STRBUF_INIT;
2631 struct object_id expected_head, actual_head;
2633 if (strbuf_read_file(&sb, git_path_abort_safety_file(), 0) >= 0) {
2635 if (get_oid_hex(sb.buf, &expected_head)) {
2636 strbuf_release(&sb);
2637 die(_("could not parse %s"), git_path_abort_safety_file());
2639 strbuf_release(&sb);
2641 else if (errno == ENOENT)
2642 oidclr(&expected_head);
2644 die_errno(_("could not read '%s'"), git_path_abort_safety_file());
2646 if (get_oid("HEAD", &actual_head))
2647 oidclr(&actual_head);
2649 return oideq(&actual_head, &expected_head);
2652 static int reset_for_rollback(const struct object_id *oid)
2654 const char *argv[4]; /* reset --merge <arg> + NULL */
2657 argv[1] = "--merge";
2658 argv[2] = oid_to_hex(oid);
2660 return run_command_v_opt(argv, RUN_GIT_CMD);
2663 static int rollback_single_pick(struct repository *r)
2665 struct object_id head_oid;
2667 if (!file_exists(git_path_cherry_pick_head(r)) &&
2668 !file_exists(git_path_revert_head(r)))
2669 return error(_("no cherry-pick or revert in progress"));
2670 if (read_ref_full("HEAD", 0, &head_oid, NULL))
2671 return error(_("cannot resolve HEAD"));
2672 if (is_null_oid(&head_oid))
2673 return error(_("cannot abort from a branch yet to be born"));
2674 return reset_for_rollback(&head_oid);
2677 int sequencer_rollback(struct repository *r, struct replay_opts *opts)
2680 struct object_id oid;
2681 struct strbuf buf = STRBUF_INIT;
2684 f = fopen(git_path_head_file(), "r");
2685 if (!f && errno == ENOENT) {
2687 * There is no multiple-cherry-pick in progress.
2688 * If CHERRY_PICK_HEAD or REVERT_HEAD indicates
2689 * a single-cherry-pick in progress, abort that.
2691 return rollback_single_pick(r);
2694 return error_errno(_("cannot open '%s'"), git_path_head_file());
2695 if (strbuf_getline_lf(&buf, f)) {
2696 error(_("cannot read '%s': %s"), git_path_head_file(),
2697 ferror(f) ? strerror(errno) : _("unexpected end of file"));
2702 if (parse_oid_hex(buf.buf, &oid, &p) || *p != '\0') {
2703 error(_("stored pre-cherry-pick HEAD file '%s' is corrupt"),
2704 git_path_head_file());
2707 if (is_null_oid(&oid)) {
2708 error(_("cannot abort from a branch yet to be born"));
2712 if (!rollback_is_safe()) {
2713 /* Do not error, just do not rollback */
2714 warning(_("You seem to have moved HEAD. "
2715 "Not rewinding, check your HEAD!"));
2717 if (reset_for_rollback(&oid))
2719 strbuf_release(&buf);
2720 return sequencer_remove_state(opts);
2722 strbuf_release(&buf);
2726 static int save_todo(struct todo_list *todo_list, struct replay_opts *opts)
2728 struct lock_file todo_lock = LOCK_INIT;
2729 const char *todo_path = get_todo_path(opts);
2730 int next = todo_list->current, offset, fd;
2733 * rebase -i writes "git-rebase-todo" without the currently executing
2734 * command, appending it to "done" instead.
2736 if (is_rebase_i(opts))
2739 fd = hold_lock_file_for_update(&todo_lock, todo_path, 0);
2741 return error_errno(_("could not lock '%s'"), todo_path);
2742 offset = get_item_line_offset(todo_list, next);
2743 if (write_in_full(fd, todo_list->buf.buf + offset,
2744 todo_list->buf.len - offset) < 0)
2745 return error_errno(_("could not write to '%s'"), todo_path);
2746 if (commit_lock_file(&todo_lock) < 0)
2747 return error(_("failed to finalize '%s'"), todo_path);
2749 if (is_rebase_i(opts) && next > 0) {
2750 const char *done = rebase_path_done();
2751 int fd = open(done, O_CREAT | O_WRONLY | O_APPEND, 0666);
2756 if (write_in_full(fd, get_item_line(todo_list, next - 1),
2757 get_item_line_length(todo_list, next - 1))
2759 ret = error_errno(_("could not write to '%s'"), done);
2761 ret = error_errno(_("failed to finalize '%s'"), done);
2767 static int save_opts(struct replay_opts *opts)
2769 const char *opts_file = git_path_opts_file();
2772 if (opts->no_commit)
2773 res |= git_config_set_in_file_gently(opts_file,
2774 "options.no-commit", "true");
2776 res |= git_config_set_in_file_gently(opts_file,
2777 "options.edit", "true");
2778 if (opts->allow_empty)
2779 res |= git_config_set_in_file_gently(opts_file,
2780 "options.allow-empty", "true");
2781 if (opts->allow_empty_message)
2782 res |= git_config_set_in_file_gently(opts_file,
2783 "options.allow-empty-message", "true");
2784 if (opts->keep_redundant_commits)
2785 res |= git_config_set_in_file_gently(opts_file,
2786 "options.keep-redundant-commits", "true");
2788 res |= git_config_set_in_file_gently(opts_file,
2789 "options.signoff", "true");
2790 if (opts->record_origin)
2791 res |= git_config_set_in_file_gently(opts_file,
2792 "options.record-origin", "true");
2794 res |= git_config_set_in_file_gently(opts_file,
2795 "options.allow-ff", "true");
2796 if (opts->mainline) {
2797 struct strbuf buf = STRBUF_INIT;
2798 strbuf_addf(&buf, "%d", opts->mainline);
2799 res |= git_config_set_in_file_gently(opts_file,
2800 "options.mainline", buf.buf);
2801 strbuf_release(&buf);
2804 res |= git_config_set_in_file_gently(opts_file,
2805 "options.strategy", opts->strategy);
2807 res |= git_config_set_in_file_gently(opts_file,
2808 "options.gpg-sign", opts->gpg_sign);
2811 for (i = 0; i < opts->xopts_nr; i++)
2812 res |= git_config_set_multivar_in_file_gently(opts_file,
2813 "options.strategy-option",
2814 opts->xopts[i], "^$", 0);
2816 if (opts->allow_rerere_auto)
2817 res |= git_config_set_in_file_gently(opts_file,
2818 "options.allow-rerere-auto",
2819 opts->allow_rerere_auto == RERERE_AUTOUPDATE ?
2822 if (opts->explicit_cleanup)
2823 res |= git_config_set_in_file_gently(opts_file,
2824 "options.default-msg-cleanup",
2825 describe_cleanup_mode(opts->default_msg_cleanup));
2829 static int make_patch(struct repository *r,
2830 struct commit *commit,
2831 struct replay_opts *opts)
2833 struct strbuf buf = STRBUF_INIT;
2834 struct rev_info log_tree_opt;
2835 const char *subject, *p;
2838 p = short_commit_name(commit);
2839 if (write_message(p, strlen(p), rebase_path_stopped_sha(), 1) < 0)
2841 if (update_ref("rebase", "REBASE_HEAD", &commit->object.oid,
2842 NULL, REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
2843 res |= error(_("could not update %s"), "REBASE_HEAD");
2845 strbuf_addf(&buf, "%s/patch", get_dir(opts));
2846 memset(&log_tree_opt, 0, sizeof(log_tree_opt));
2847 repo_init_revisions(r, &log_tree_opt, NULL);
2848 log_tree_opt.abbrev = 0;
2849 log_tree_opt.diff = 1;
2850 log_tree_opt.diffopt.output_format = DIFF_FORMAT_PATCH;
2851 log_tree_opt.disable_stdin = 1;
2852 log_tree_opt.no_commit_id = 1;
2853 log_tree_opt.diffopt.file = fopen(buf.buf, "w");
2854 log_tree_opt.diffopt.use_color = GIT_COLOR_NEVER;
2855 if (!log_tree_opt.diffopt.file)
2856 res |= error_errno(_("could not open '%s'"), buf.buf);
2858 res |= log_tree_commit(&log_tree_opt, commit);
2859 fclose(log_tree_opt.diffopt.file);
2863 strbuf_addf(&buf, "%s/message", get_dir(opts));
2864 if (!file_exists(buf.buf)) {
2865 const char *commit_buffer = get_commit_buffer(commit, NULL);
2866 find_commit_subject(commit_buffer, &subject);
2867 res |= write_message(subject, strlen(subject), buf.buf, 1);
2868 unuse_commit_buffer(commit, commit_buffer);
2870 strbuf_release(&buf);
2875 static int intend_to_amend(void)
2877 struct object_id head;
2880 if (get_oid("HEAD", &head))
2881 return error(_("cannot read HEAD"));
2883 p = oid_to_hex(&head);
2884 return write_message(p, strlen(p), rebase_path_amend(), 1);
2887 static int error_with_patch(struct repository *r,
2888 struct commit *commit,
2889 const char *subject, int subject_len,
2890 struct replay_opts *opts,
2891 int exit_code, int to_amend)
2894 if (make_patch(r, commit, opts))
2896 } else if (copy_file(rebase_path_message(),
2897 git_path_merge_msg(r), 0666))
2898 return error(_("unable to copy '%s' to '%s'"),
2899 git_path_merge_msg(r), rebase_path_message());
2902 if (intend_to_amend())
2906 _("You can amend the commit now, with\n"
2908 " git commit --amend %s\n"
2910 "Once you are satisfied with your changes, run\n"
2912 " git rebase --continue\n"),
2913 gpg_sign_opt_quoted(opts));
2914 } else if (exit_code) {
2916 fprintf_ln(stderr, _("Could not apply %s... %.*s"),
2917 short_commit_name(commit), subject_len, subject);
2920 * We don't have the hash of the parent so
2921 * just print the line from the todo file.
2923 fprintf_ln(stderr, _("Could not merge %.*s"),
2924 subject_len, subject);
2930 static int error_failed_squash(struct repository *r,
2931 struct commit *commit,
2932 struct replay_opts *opts,
2934 const char *subject)
2936 if (copy_file(rebase_path_message(), rebase_path_squash_msg(), 0666))
2937 return error(_("could not copy '%s' to '%s'"),
2938 rebase_path_squash_msg(), rebase_path_message());
2939 unlink(git_path_merge_msg(r));
2940 if (copy_file(git_path_merge_msg(r), rebase_path_message(), 0666))
2941 return error(_("could not copy '%s' to '%s'"),
2942 rebase_path_message(),
2943 git_path_merge_msg(r));
2944 return error_with_patch(r, commit, subject, subject_len, opts, 1, 0);
2947 static int do_exec(struct repository *r, const char *command_line)
2949 struct argv_array child_env = ARGV_ARRAY_INIT;
2950 const char *child_argv[] = { NULL, NULL };
2953 fprintf(stderr, "Executing: %s\n", command_line);
2954 child_argv[0] = command_line;
2955 argv_array_pushf(&child_env, "GIT_DIR=%s", absolute_path(get_git_dir()));
2956 argv_array_pushf(&child_env, "GIT_WORK_TREE=%s",
2957 absolute_path(get_git_work_tree()));
2958 status = run_command_v_opt_cd_env(child_argv, RUN_USING_SHELL, NULL,
2961 /* force re-reading of the cache */
2962 if (discard_index(r->index) < 0 || repo_read_index(r) < 0)
2963 return error(_("could not read index"));
2965 dirty = require_clean_work_tree(r, "rebase", NULL, 1, 1);
2968 warning(_("execution failed: %s\n%s"
2969 "You can fix the problem, and then run\n"
2971 " git rebase --continue\n"
2974 dirty ? N_("and made changes to the index and/or the "
2975 "working tree\n") : "");
2977 /* command not found */
2980 warning(_("execution succeeded: %s\nbut "
2981 "left changes to the index and/or the working tree\n"
2982 "Commit or stash your changes, and then run\n"
2984 " git rebase --continue\n"
2985 "\n"), command_line);
2989 argv_array_clear(&child_env);
2994 static int safe_append(const char *filename, const char *fmt, ...)
2997 struct lock_file lock = LOCK_INIT;
2998 int fd = hold_lock_file_for_update(&lock, filename,
2999 LOCK_REPORT_ON_ERROR);
3000 struct strbuf buf = STRBUF_INIT;
3005 if (strbuf_read_file(&buf, filename, 0) < 0 && errno != ENOENT) {
3006 error_errno(_("could not read '%s'"), filename);
3007 rollback_lock_file(&lock);
3010 strbuf_complete(&buf, '\n');
3012 strbuf_vaddf(&buf, fmt, ap);
3015 if (write_in_full(fd, buf.buf, buf.len) < 0) {
3016 error_errno(_("could not write to '%s'"), filename);
3017 strbuf_release(&buf);
3018 rollback_lock_file(&lock);
3021 if (commit_lock_file(&lock) < 0) {
3022 strbuf_release(&buf);
3023 rollback_lock_file(&lock);
3024 return error(_("failed to finalize '%s'"), filename);
3027 strbuf_release(&buf);
3031 static int do_label(struct repository *r, const char *name, int len)
3033 struct ref_store *refs = get_main_ref_store(r);
3034 struct ref_transaction *transaction;
3035 struct strbuf ref_name = STRBUF_INIT, err = STRBUF_INIT;
3036 struct strbuf msg = STRBUF_INIT;
3038 struct object_id head_oid;
3040 if (len == 1 && *name == '#')
3041 return error(_("illegal label name: '%.*s'"), len, name);
3043 strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
3044 strbuf_addf(&msg, "rebase -i (label) '%.*s'", len, name);
3046 transaction = ref_store_transaction_begin(refs, &err);
3048 error("%s", err.buf);
3050 } else if (get_oid("HEAD", &head_oid)) {
3051 error(_("could not read HEAD"));
3053 } else if (ref_transaction_update(transaction, ref_name.buf, &head_oid,
3054 NULL, 0, msg.buf, &err) < 0 ||
3055 ref_transaction_commit(transaction, &err)) {
3056 error("%s", err.buf);
3059 ref_transaction_free(transaction);
3060 strbuf_release(&err);
3061 strbuf_release(&msg);
3064 ret = safe_append(rebase_path_refs_to_delete(),
3065 "%s\n", ref_name.buf);
3066 strbuf_release(&ref_name);
3071 static const char *reflog_message(struct replay_opts *opts,
3072 const char *sub_action, const char *fmt, ...);
3074 static int do_reset(struct repository *r,
3075 const char *name, int len,
3076 struct replay_opts *opts)
3078 struct strbuf ref_name = STRBUF_INIT;
3079 struct object_id oid;
3080 struct lock_file lock = LOCK_INIT;
3081 struct tree_desc desc;
3083 struct unpack_trees_options unpack_tree_opts;
3086 if (repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0)
3089 if (len == 10 && !strncmp("[new root]", name, len)) {
3090 if (!opts->have_squash_onto) {
3092 if (commit_tree("", 0, the_hash_algo->empty_tree,
3093 NULL, &opts->squash_onto,
3095 return error(_("writing fake root commit"));
3096 opts->have_squash_onto = 1;
3097 hex = oid_to_hex(&opts->squash_onto);
3098 if (write_message(hex, strlen(hex),
3099 rebase_path_squash_onto(), 0))
3100 return error(_("writing squash-onto"));
3102 oidcpy(&oid, &opts->squash_onto);
3106 /* Determine the length of the label */
3107 for (i = 0; i < len; i++)
3108 if (isspace(name[i]))
3112 strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
3113 if (get_oid(ref_name.buf, &oid) &&
3114 get_oid(ref_name.buf + strlen("refs/rewritten/"), &oid)) {
3115 error(_("could not read '%s'"), ref_name.buf);
3116 rollback_lock_file(&lock);
3117 strbuf_release(&ref_name);
3122 memset(&unpack_tree_opts, 0, sizeof(unpack_tree_opts));
3123 setup_unpack_trees_porcelain(&unpack_tree_opts, "reset");
3124 unpack_tree_opts.head_idx = 1;
3125 unpack_tree_opts.src_index = r->index;
3126 unpack_tree_opts.dst_index = r->index;
3127 unpack_tree_opts.fn = oneway_merge;
3128 unpack_tree_opts.merge = 1;
3129 unpack_tree_opts.update = 1;
3131 if (repo_read_index_unmerged(r)) {
3132 rollback_lock_file(&lock);
3133 strbuf_release(&ref_name);
3134 return error_resolve_conflict(_(action_name(opts)));
3137 if (!fill_tree_descriptor(&desc, &oid)) {
3138 error(_("failed to find tree of %s"), oid_to_hex(&oid));
3139 rollback_lock_file(&lock);
3140 free((void *)desc.buffer);
3141 strbuf_release(&ref_name);
3145 if (unpack_trees(1, &desc, &unpack_tree_opts)) {
3146 rollback_lock_file(&lock);
3147 free((void *)desc.buffer);
3148 strbuf_release(&ref_name);
3152 tree = parse_tree_indirect(&oid);
3153 prime_cache_tree(r, r->index, tree);
3155 if (write_locked_index(r->index, &lock, COMMIT_LOCK) < 0)
3156 ret = error(_("could not write index"));
3157 free((void *)desc.buffer);
3160 ret = update_ref(reflog_message(opts, "reset", "'%.*s'",
3161 len, name), "HEAD", &oid,
3162 NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3164 strbuf_release(&ref_name);
3168 static struct commit *lookup_label(const char *label, int len,
3171 struct commit *commit;
3174 strbuf_addf(buf, "refs/rewritten/%.*s", len, label);
3175 commit = lookup_commit_reference_by_name(buf->buf);
3177 /* fall back to non-rewritten ref or commit */
3178 strbuf_splice(buf, 0, strlen("refs/rewritten/"), "", 0);
3179 commit = lookup_commit_reference_by_name(buf->buf);
3183 error(_("could not resolve '%s'"), buf->buf);
3188 static int do_merge(struct repository *r,
3189 struct commit *commit,
3190 const char *arg, int arg_len,
3191 int flags, struct replay_opts *opts)
3193 int run_commit_flags = (flags & TODO_EDIT_MERGE_MSG) ?
3194 EDIT_MSG | VERIFY_MSG : 0;
3195 struct strbuf ref_name = STRBUF_INIT;
3196 struct commit *head_commit, *merge_commit, *i;
3197 struct commit_list *bases, *j, *reversed = NULL;
3198 struct commit_list *to_merge = NULL, **tail = &to_merge;
3199 struct merge_options o;
3200 int merge_arg_len, oneline_offset, can_fast_forward, ret, k;
3201 static struct lock_file lock;
3204 if (repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0) {
3209 head_commit = lookup_commit_reference_by_name("HEAD");
3211 ret = error(_("cannot merge without a current revision"));
3216 * For octopus merges, the arg starts with the list of revisions to be
3217 * merged. The list is optionally followed by '#' and the oneline.
3219 merge_arg_len = oneline_offset = arg_len;
3220 for (p = arg; p - arg < arg_len; p += strspn(p, " \t\n")) {
3223 if (*p == '#' && (!p[1] || isspace(p[1]))) {
3224 p += 1 + strspn(p + 1, " \t\n");
3225 oneline_offset = p - arg;
3228 k = strcspn(p, " \t\n");
3231 merge_commit = lookup_label(p, k, &ref_name);
3232 if (!merge_commit) {
3233 ret = error(_("unable to parse '%.*s'"), k, p);
3236 tail = &commit_list_insert(merge_commit, tail)->next;
3238 merge_arg_len = p - arg;
3242 ret = error(_("nothing to merge: '%.*s'"), arg_len, arg);
3246 if (opts->have_squash_onto &&
3247 oideq(&head_commit->object.oid, &opts->squash_onto)) {
3249 * When the user tells us to "merge" something into a
3250 * "[new root]", let's simply fast-forward to the merge head.
3252 rollback_lock_file(&lock);
3254 ret = error(_("octopus merge cannot be executed on "
3255 "top of a [new root]"));
3257 ret = fast_forward_to(r, &to_merge->item->object.oid,
3258 &head_commit->object.oid, 0,
3264 const char *message = get_commit_buffer(commit, NULL);
3269 ret = error(_("could not get commit message of '%s'"),
3270 oid_to_hex(&commit->object.oid));
3273 write_author_script(message);
3274 find_commit_subject(message, &body);
3276 ret = write_message(body, len, git_path_merge_msg(r), 0);
3277 unuse_commit_buffer(commit, message);
3279 error_errno(_("could not write '%s'"),
3280 git_path_merge_msg(r));
3284 struct strbuf buf = STRBUF_INIT;
3287 strbuf_addf(&buf, "author %s", git_author_info(0));
3288 write_author_script(buf.buf);
3291 if (oneline_offset < arg_len) {
3292 p = arg + oneline_offset;
3293 len = arg_len - oneline_offset;
3295 strbuf_addf(&buf, "Merge %s '%.*s'",
3296 to_merge->next ? "branches" : "branch",
3297 merge_arg_len, arg);
3302 ret = write_message(p, len, git_path_merge_msg(r), 0);
3303 strbuf_release(&buf);
3305 error_errno(_("could not write '%s'"),
3306 git_path_merge_msg(r));
3312 * If HEAD is not identical to the first parent of the original merge
3313 * commit, we cannot fast-forward.
3315 can_fast_forward = opts->allow_ff && commit && commit->parents &&
3316 oideq(&commit->parents->item->object.oid,
3317 &head_commit->object.oid);
3320 * If any merge head is different from the original one, we cannot
3323 if (can_fast_forward) {
3324 struct commit_list *p = commit->parents->next;
3326 for (j = to_merge; j && p; j = j->next, p = p->next)
3327 if (!oideq(&j->item->object.oid,
3328 &p->item->object.oid)) {
3329 can_fast_forward = 0;
3333 * If the number of merge heads differs from the original merge
3334 * commit, we cannot fast-forward.
3337 can_fast_forward = 0;
3340 if (can_fast_forward) {
3341 rollback_lock_file(&lock);
3342 ret = fast_forward_to(r, &commit->object.oid,
3343 &head_commit->object.oid, 0, opts);
3347 if (to_merge->next) {
3349 struct child_process cmd = CHILD_PROCESS_INIT;
3351 if (read_env_script(&cmd.env_array)) {
3352 const char *gpg_opt = gpg_sign_opt_quoted(opts);
3354 ret = error(_(staged_changes_advice), gpg_opt, gpg_opt);
3359 argv_array_push(&cmd.args, "merge");
3360 argv_array_push(&cmd.args, "-s");
3361 argv_array_push(&cmd.args, "octopus");
3362 argv_array_push(&cmd.args, "--no-edit");
3363 argv_array_push(&cmd.args, "--no-ff");
3364 argv_array_push(&cmd.args, "--no-log");
3365 argv_array_push(&cmd.args, "--no-stat");
3366 argv_array_push(&cmd.args, "-F");
3367 argv_array_push(&cmd.args, git_path_merge_msg(r));
3369 argv_array_push(&cmd.args, opts->gpg_sign);
3371 /* Add the tips to be merged */
3372 for (j = to_merge; j; j = j->next)
3373 argv_array_push(&cmd.args,
3374 oid_to_hex(&j->item->object.oid));
3376 strbuf_release(&ref_name);
3377 unlink(git_path_cherry_pick_head(r));
3378 rollback_lock_file(&lock);
3380 rollback_lock_file(&lock);
3381 ret = run_command(&cmd);
3383 /* force re-reading of the cache */
3384 if (!ret && (discard_index(r->index) < 0 ||
3385 repo_read_index(r) < 0))
3386 ret = error(_("could not read index"));
3390 merge_commit = to_merge->item;
3391 bases = get_merge_bases(head_commit, merge_commit);
3392 if (bases && oideq(&merge_commit->object.oid,
3393 &bases->item->object.oid)) {
3395 /* skip merging an ancestor of HEAD */
3399 write_message(oid_to_hex(&merge_commit->object.oid), GIT_SHA1_HEXSZ,
3400 git_path_merge_head(r), 0);
3401 write_message("no-ff", 5, git_path_merge_mode(r), 0);
3403 for (j = bases; j; j = j->next)
3404 commit_list_insert(j->item, &reversed);
3405 free_commit_list(bases);
3408 init_merge_options(&o, r);
3410 o.branch2 = ref_name.buf;
3411 o.buffer_output = 2;
3413 ret = merge_recursive(&o, head_commit, merge_commit, reversed, &i);
3415 fputs(o.obuf.buf, stdout);
3416 strbuf_release(&o.obuf);
3418 error(_("could not even attempt to merge '%.*s'"),
3419 merge_arg_len, arg);
3423 * The return value of merge_recursive() is 1 on clean, and 0 on
3426 * Let's reverse that, so that do_merge() returns 0 upon success and
3427 * 1 upon failed merge (keeping the return value -1 for the cases where
3428 * we will want to reschedule the `merge` command).
3432 if (r->index->cache_changed &&
3433 write_locked_index(r->index, &lock, COMMIT_LOCK)) {
3434 ret = error(_("merge: Unable to write new index file"));
3438 rollback_lock_file(&lock);
3440 repo_rerere(r, opts->allow_rerere_auto);
3443 * In case of problems, we now want to return a positive
3444 * value (a negative one would indicate that the `merge`
3445 * command needs to be rescheduled).
3447 ret = !!run_git_commit(r, git_path_merge_msg(r), opts,
3451 strbuf_release(&ref_name);
3452 rollback_lock_file(&lock);
3453 free_commit_list(to_merge);
3457 static int is_final_fixup(struct todo_list *todo_list)
3459 int i = todo_list->current;
3461 if (!is_fixup(todo_list->items[i].command))
3464 while (++i < todo_list->nr)
3465 if (is_fixup(todo_list->items[i].command))
3467 else if (!is_noop(todo_list->items[i].command))
3472 static enum todo_command peek_command(struct todo_list *todo_list, int offset)
3476 for (i = todo_list->current + offset; i < todo_list->nr; i++)
3477 if (!is_noop(todo_list->items[i].command))
3478 return todo_list->items[i].command;
3483 static int apply_autostash(struct replay_opts *opts)
3485 struct strbuf stash_sha1 = STRBUF_INIT;
3486 struct child_process child = CHILD_PROCESS_INIT;
3489 if (!read_oneliner(&stash_sha1, rebase_path_autostash(), 1)) {
3490 strbuf_release(&stash_sha1);
3493 strbuf_trim(&stash_sha1);
3496 child.no_stdout = 1;
3497 child.no_stderr = 1;
3498 argv_array_push(&child.args, "stash");
3499 argv_array_push(&child.args, "apply");
3500 argv_array_push(&child.args, stash_sha1.buf);
3501 if (!run_command(&child))
3502 fprintf(stderr, _("Applied autostash.\n"));
3504 struct child_process store = CHILD_PROCESS_INIT;
3507 argv_array_push(&store.args, "stash");
3508 argv_array_push(&store.args, "store");
3509 argv_array_push(&store.args, "-m");
3510 argv_array_push(&store.args, "autostash");
3511 argv_array_push(&store.args, "-q");
3512 argv_array_push(&store.args, stash_sha1.buf);
3513 if (run_command(&store))
3514 ret = error(_("cannot store %s"), stash_sha1.buf);
3517 _("Applying autostash resulted in conflicts.\n"
3518 "Your changes are safe in the stash.\n"
3519 "You can run \"git stash pop\" or"
3520 " \"git stash drop\" at any time.\n"));
3523 strbuf_release(&stash_sha1);
3527 static const char *reflog_message(struct replay_opts *opts,
3528 const char *sub_action, const char *fmt, ...)
3531 static struct strbuf buf = STRBUF_INIT;
3535 strbuf_addstr(&buf, action_name(opts));
3537 strbuf_addf(&buf, " (%s)", sub_action);
3539 strbuf_addstr(&buf, ": ");
3540 strbuf_vaddf(&buf, fmt, ap);
3547 static int run_git_checkout(struct repository *r, struct replay_opts *opts,
3548 const char *commit, const char *action)
3550 struct child_process cmd = CHILD_PROCESS_INIT;
3555 argv_array_push(&cmd.args, "checkout");
3556 argv_array_push(&cmd.args, commit);
3557 argv_array_pushf(&cmd.env_array, GIT_REFLOG_ACTION "=%s", action);
3560 ret = run_command(&cmd);
3562 ret = run_command_silent_on_success(&cmd);
3565 discard_index(r->index);
3570 int prepare_branch_to_be_rebased(struct repository *r, struct replay_opts *opts,
3575 if (commit && *commit) {
3576 action = reflog_message(opts, "start", "checkout %s", commit);
3577 if (run_git_checkout(r, opts, commit, action))
3578 return error(_("could not checkout %s"), commit);
3584 static int checkout_onto(struct repository *r, struct replay_opts *opts,
3585 const char *onto_name, const struct object_id *onto,
3586 const char *orig_head)
3588 struct object_id oid;
3589 const char *action = reflog_message(opts, "start", "checkout %s", onto_name);
3591 if (get_oid(orig_head, &oid))
3592 return error(_("%s: not a valid OID"), orig_head);
3594 if (run_git_checkout(r, opts, oid_to_hex(onto), action)) {
3595 apply_autostash(opts);
3596 sequencer_remove_state(opts);
3597 return error(_("could not detach HEAD"));
3600 return update_ref(NULL, "ORIG_HEAD", &oid, NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3603 static int stopped_at_head(struct repository *r)
3605 struct object_id head;
3606 struct commit *commit;
3607 struct commit_message message;
3609 if (get_oid("HEAD", &head) ||
3610 !(commit = lookup_commit(r, &head)) ||
3611 parse_commit(commit) || get_message(commit, &message))
3612 fprintf(stderr, _("Stopped at HEAD\n"));
3614 fprintf(stderr, _("Stopped at %s\n"), message.label);
3615 free_message(commit, &message);
3621 static const char rescheduled_advice[] =
3622 N_("Could not execute the todo command\n"
3626 "It has been rescheduled; To edit the command before continuing, please\n"
3627 "edit the todo list first:\n"
3629 " git rebase --edit-todo\n"
3630 " git rebase --continue\n");
3632 static int pick_commits(struct repository *r,
3633 struct todo_list *todo_list,
3634 struct replay_opts *opts)
3636 int res = 0, reschedule = 0;
3638 setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
3640 assert(!(opts->signoff || opts->no_commit ||
3641 opts->record_origin || opts->edit));
3642 if (read_and_refresh_cache(r, opts))
3645 while (todo_list->current < todo_list->nr) {
3646 struct todo_item *item = todo_list->items + todo_list->current;
3647 const char *arg = todo_item_get_arg(todo_list, item);
3650 if (save_todo(todo_list, opts))
3652 if (is_rebase_i(opts)) {
3653 if (item->command != TODO_COMMENT) {
3654 FILE *f = fopen(rebase_path_msgnum(), "w");
3656 todo_list->done_nr++;
3659 fprintf(f, "%d\n", todo_list->done_nr);
3663 fprintf(stderr, "Rebasing (%d/%d)%s",
3665 todo_list->total_nr,
3666 opts->verbose ? "\n" : "\r");
3668 unlink(rebase_path_message());
3669 unlink(rebase_path_author_script());
3670 unlink(rebase_path_stopped_sha());
3671 unlink(rebase_path_amend());
3672 unlink(git_path_merge_head(the_repository));
3673 delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
3675 if (item->command == TODO_BREAK) {
3678 return stopped_at_head(r);
3681 if (item->command <= TODO_SQUASH) {
3682 if (is_rebase_i(opts))
3683 setenv("GIT_REFLOG_ACTION", reflog_message(opts,
3684 command_to_string(item->command), NULL),
3686 res = do_pick_commit(r, item->command, item->commit,
3687 opts, is_final_fixup(todo_list),
3689 if (is_rebase_i(opts) && res < 0) {
3691 advise(_(rescheduled_advice),
3692 get_item_line_length(todo_list,
3693 todo_list->current),
3694 get_item_line(todo_list,
3695 todo_list->current));
3696 todo_list->current--;
3697 if (save_todo(todo_list, opts))
3700 if (item->command == TODO_EDIT) {
3701 struct commit *commit = item->commit;
3706 _("Stopped at %s... %.*s\n"),
3707 short_commit_name(commit),
3708 item->arg_len, arg);
3710 return error_with_patch(r, commit,
3711 arg, item->arg_len, opts, res, !res);
3713 if (is_rebase_i(opts) && !res)
3714 record_in_rewritten(&item->commit->object.oid,
3715 peek_command(todo_list, 1));
3716 if (res && is_fixup(item->command)) {
3719 return error_failed_squash(r, item->commit, opts,
3720 item->arg_len, arg);
3721 } else if (res && is_rebase_i(opts) && item->commit) {
3723 struct object_id oid;
3726 * If we are rewording and have either
3727 * fast-forwarded already, or are about to
3728 * create a new root commit, we want to amend,
3729 * otherwise we do not.
3731 if (item->command == TODO_REWORD &&
3732 !get_oid("HEAD", &oid) &&
3733 (oideq(&item->commit->object.oid, &oid) ||
3734 (opts->have_squash_onto &&
3735 oideq(&opts->squash_onto, &oid))))
3738 return res | error_with_patch(r, item->commit,
3739 arg, item->arg_len, opts,
3742 } else if (item->command == TODO_EXEC) {
3743 char *end_of_arg = (char *)(arg + item->arg_len);
3744 int saved = *end_of_arg;
3749 res = do_exec(r, arg);
3750 *end_of_arg = saved;
3753 if (opts->reschedule_failed_exec)
3757 } else if (item->command == TODO_LABEL) {
3758 if ((res = do_label(r, arg, item->arg_len)))
3760 } else if (item->command == TODO_RESET) {
3761 if ((res = do_reset(r, arg, item->arg_len, opts)))
3763 } else if (item->command == TODO_MERGE) {
3764 if ((res = do_merge(r, item->commit,
3766 item->flags, opts)) < 0)
3768 else if (item->commit)
3769 record_in_rewritten(&item->commit->object.oid,
3770 peek_command(todo_list, 1));
3772 /* failed with merge conflicts */
3773 return error_with_patch(r, item->commit,
3776 } else if (!is_noop(item->command))
3777 return error(_("unknown command %d"), item->command);
3780 advise(_(rescheduled_advice),
3781 get_item_line_length(todo_list,
3782 todo_list->current),
3783 get_item_line(todo_list, todo_list->current));
3784 todo_list->current--;
3785 if (save_todo(todo_list, opts))
3788 return error_with_patch(r,
3792 } else if (check_todo && !res) {
3795 if (stat(get_todo_path(opts), &st)) {
3796 res = error_errno(_("could not stat '%s'"),
3797 get_todo_path(opts));
3798 } else if (match_stat_data(&todo_list->stat, &st)) {
3799 /* Reread the todo file if it has changed. */
3800 todo_list_release(todo_list);
3801 if (read_populate_todo(r, todo_list, opts))
3802 res = -1; /* message was printed */
3803 /* `current` will be incremented below */
3804 todo_list->current = -1;
3808 todo_list->current++;
3813 if (is_rebase_i(opts)) {
3814 struct strbuf head_ref = STRBUF_INIT, buf = STRBUF_INIT;
3817 /* Stopped in the middle, as planned? */
3818 if (todo_list->current < todo_list->nr)
3821 if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
3822 starts_with(head_ref.buf, "refs/")) {
3824 struct object_id head, orig;
3827 if (get_oid("HEAD", &head)) {
3828 res = error(_("cannot read HEAD"));
3830 strbuf_release(&head_ref);
3831 strbuf_release(&buf);
3834 if (!read_oneliner(&buf, rebase_path_orig_head(), 0) ||
3835 get_oid_hex(buf.buf, &orig)) {
3836 res = error(_("could not read orig-head"));
3837 goto cleanup_head_ref;
3840 if (!read_oneliner(&buf, rebase_path_onto(), 0)) {
3841 res = error(_("could not read 'onto'"));
3842 goto cleanup_head_ref;
3844 msg = reflog_message(opts, "finish", "%s onto %s",
3845 head_ref.buf, buf.buf);
3846 if (update_ref(msg, head_ref.buf, &head, &orig,
3847 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR)) {
3848 res = error(_("could not update %s"),
3850 goto cleanup_head_ref;
3852 msg = reflog_message(opts, "finish", "returning to %s",
3854 if (create_symref("HEAD", head_ref.buf, msg)) {
3855 res = error(_("could not update HEAD to %s"),
3857 goto cleanup_head_ref;
3862 if (opts->verbose) {
3863 struct rev_info log_tree_opt;
3864 struct object_id orig, head;
3866 memset(&log_tree_opt, 0, sizeof(log_tree_opt));
3867 repo_init_revisions(r, &log_tree_opt, NULL);
3868 log_tree_opt.diff = 1;
3869 log_tree_opt.diffopt.output_format =
3870 DIFF_FORMAT_DIFFSTAT;
3871 log_tree_opt.disable_stdin = 1;
3873 if (read_oneliner(&buf, rebase_path_orig_head(), 0) &&
3874 !get_oid(buf.buf, &orig) &&
3875 !get_oid("HEAD", &head)) {
3876 diff_tree_oid(&orig, &head, "",
3877 &log_tree_opt.diffopt);
3878 log_tree_diff_flush(&log_tree_opt);
3881 flush_rewritten_pending();
3882 if (!stat(rebase_path_rewritten_list(), &st) &&
3884 struct child_process child = CHILD_PROCESS_INIT;
3885 const char *post_rewrite_hook =
3886 find_hook("post-rewrite");
3888 child.in = open(rebase_path_rewritten_list(), O_RDONLY);
3890 argv_array_push(&child.args, "notes");
3891 argv_array_push(&child.args, "copy");
3892 argv_array_push(&child.args, "--for-rewrite=rebase");
3893 /* we don't care if this copying failed */
3894 run_command(&child);
3896 if (post_rewrite_hook) {
3897 struct child_process hook = CHILD_PROCESS_INIT;
3899 hook.in = open(rebase_path_rewritten_list(),
3901 hook.stdout_to_stderr = 1;
3902 hook.trace2_hook_name = "post-rewrite";
3903 argv_array_push(&hook.args, post_rewrite_hook);
3904 argv_array_push(&hook.args, "rebase");
3905 /* we don't care if this hook failed */
3909 apply_autostash(opts);
3915 "Successfully rebased and updated %s.\n",
3919 strbuf_release(&buf);
3920 strbuf_release(&head_ref);
3924 * Sequence of picks finished successfully; cleanup by
3925 * removing the .git/sequencer directory
3927 return sequencer_remove_state(opts);
3930 static int continue_single_pick(struct repository *r)
3932 const char *argv[] = { "commit", NULL };
3934 if (!file_exists(git_path_cherry_pick_head(r)) &&
3935 !file_exists(git_path_revert_head(r)))
3936 return error(_("no cherry-pick or revert in progress"));
3937 return run_command_v_opt(argv, RUN_GIT_CMD);
3940 static int commit_staged_changes(struct repository *r,
3941 struct replay_opts *opts,
3942 struct todo_list *todo_list)
3944 unsigned int flags = ALLOW_EMPTY | EDIT_MSG;
3945 unsigned int final_fixup = 0, is_clean;
3947 if (has_unstaged_changes(r, 1))
3948 return error(_("cannot rebase: You have unstaged changes."));
3950 is_clean = !has_uncommitted_changes(r, 0);
3952 if (file_exists(rebase_path_amend())) {
3953 struct strbuf rev = STRBUF_INIT;
3954 struct object_id head, to_amend;
3956 if (get_oid("HEAD", &head))
3957 return error(_("cannot amend non-existing commit"));
3958 if (!read_oneliner(&rev, rebase_path_amend(), 0))
3959 return error(_("invalid file: '%s'"), rebase_path_amend());
3960 if (get_oid_hex(rev.buf, &to_amend))
3961 return error(_("invalid contents: '%s'"),
3962 rebase_path_amend());
3963 if (!is_clean && !oideq(&head, &to_amend))
3964 return error(_("\nYou have uncommitted changes in your "
3965 "working tree. Please, commit them\n"
3966 "first and then run 'git rebase "
3967 "--continue' again."));
3969 * When skipping a failed fixup/squash, we need to edit the
3970 * commit message, the current fixup list and count, and if it
3971 * was the last fixup/squash in the chain, we need to clean up
3972 * the commit message and if there was a squash, let the user
3975 if (!is_clean || !opts->current_fixup_count)
3976 ; /* this is not the final fixup */
3977 else if (!oideq(&head, &to_amend) ||
3978 !file_exists(rebase_path_stopped_sha())) {
3979 /* was a final fixup or squash done manually? */
3980 if (!is_fixup(peek_command(todo_list, 0))) {
3981 unlink(rebase_path_fixup_msg());
3982 unlink(rebase_path_squash_msg());
3983 unlink(rebase_path_current_fixups());
3984 strbuf_reset(&opts->current_fixups);
3985 opts->current_fixup_count = 0;
3988 /* we are in a fixup/squash chain */
3989 const char *p = opts->current_fixups.buf;
3990 int len = opts->current_fixups.len;
3992 opts->current_fixup_count--;
3994 BUG("Incorrect current_fixups:\n%s", p);
3995 while (len && p[len - 1] != '\n')
3997 strbuf_setlen(&opts->current_fixups, len);
3998 if (write_message(p, len, rebase_path_current_fixups(),
4000 return error(_("could not write file: '%s'"),
4001 rebase_path_current_fixups());
4004 * If a fixup/squash in a fixup/squash chain failed, the
4005 * commit message is already correct, no need to commit
4008 * Only if it is the final command in the fixup/squash
4009 * chain, and only if the chain is longer than a single
4010 * fixup/squash command (which was just skipped), do we
4011 * actually need to re-commit with a cleaned up commit
4014 if (opts->current_fixup_count > 0 &&
4015 !is_fixup(peek_command(todo_list, 0))) {
4018 * If there was not a single "squash" in the
4019 * chain, we only need to clean up the commit
4020 * message, no need to bother the user with
4021 * opening the commit message in the editor.
4023 if (!starts_with(p, "squash ") &&
4024 !strstr(p, "\nsquash "))
4025 flags = (flags & ~EDIT_MSG) | CLEANUP_MSG;
4026 } else if (is_fixup(peek_command(todo_list, 0))) {
4028 * We need to update the squash message to skip
4029 * the latest commit message.
4031 struct commit *commit;
4032 const char *path = rebase_path_squash_msg();
4034 if (parse_head(r, &commit) ||
4035 !(p = get_commit_buffer(commit, NULL)) ||
4036 write_message(p, strlen(p), path, 0)) {
4037 unuse_commit_buffer(commit, p);
4038 return error(_("could not write file: "
4041 unuse_commit_buffer(commit, p);
4045 strbuf_release(&rev);
4050 const char *cherry_pick_head = git_path_cherry_pick_head(r);
4052 if (file_exists(cherry_pick_head) && unlink(cherry_pick_head))
4053 return error(_("could not remove CHERRY_PICK_HEAD"));
4058 if (run_git_commit(r, final_fixup ? NULL : rebase_path_message(),
4060 return error(_("could not commit staged changes."));
4061 unlink(rebase_path_amend());
4062 unlink(git_path_merge_head(the_repository));
4064 unlink(rebase_path_fixup_msg());
4065 unlink(rebase_path_squash_msg());
4067 if (opts->current_fixup_count > 0) {
4069 * Whether final fixup or not, we just cleaned up the commit
4072 unlink(rebase_path_current_fixups());
4073 strbuf_reset(&opts->current_fixups);
4074 opts->current_fixup_count = 0;
4079 int sequencer_continue(struct repository *r, struct replay_opts *opts)
4081 struct todo_list todo_list = TODO_LIST_INIT;
4084 if (read_and_refresh_cache(r, opts))
4087 if (read_populate_opts(opts))
4089 if (is_rebase_i(opts)) {
4090 if ((res = read_populate_todo(r, &todo_list, opts)))
4091 goto release_todo_list;
4092 if (commit_staged_changes(r, opts, &todo_list))
4094 } else if (!file_exists(get_todo_path(opts)))
4095 return continue_single_pick(r);
4096 else if ((res = read_populate_todo(r, &todo_list, opts)))
4097 goto release_todo_list;
4099 if (!is_rebase_i(opts)) {
4100 /* Verify that the conflict has been resolved */
4101 if (file_exists(git_path_cherry_pick_head(r)) ||
4102 file_exists(git_path_revert_head(r))) {
4103 res = continue_single_pick(r);
4105 goto release_todo_list;
4107 if (index_differs_from(r, "HEAD", NULL, 0)) {
4108 res = error_dirty_index(r, opts);
4109 goto release_todo_list;
4111 todo_list.current++;
4112 } else if (file_exists(rebase_path_stopped_sha())) {
4113 struct strbuf buf = STRBUF_INIT;
4114 struct object_id oid;
4116 if (read_oneliner(&buf, rebase_path_stopped_sha(), 1) &&
4117 !get_oid_committish(buf.buf, &oid))
4118 record_in_rewritten(&oid, peek_command(&todo_list, 0));
4119 strbuf_release(&buf);
4122 res = pick_commits(r, &todo_list, opts);
4124 todo_list_release(&todo_list);
4128 static int single_pick(struct repository *r,
4129 struct commit *cmit,
4130 struct replay_opts *opts)
4134 setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
4135 return do_pick_commit(r, opts->action == REPLAY_PICK ?
4136 TODO_PICK : TODO_REVERT, cmit, opts, 0,
4140 int sequencer_pick_revisions(struct repository *r,
4141 struct replay_opts *opts)
4143 struct todo_list todo_list = TODO_LIST_INIT;
4144 struct object_id oid;
4148 if (read_and_refresh_cache(r, opts))
4151 for (i = 0; i < opts->revs->pending.nr; i++) {
4152 struct object_id oid;
4153 const char *name = opts->revs->pending.objects[i].name;
4155 /* This happens when using --stdin. */
4159 if (!get_oid(name, &oid)) {
4160 if (!lookup_commit_reference_gently(r, &oid, 1)) {
4161 enum object_type type = oid_object_info(r,
4164 return error(_("%s: can't cherry-pick a %s"),
4165 name, type_name(type));
4168 return error(_("%s: bad revision"), name);
4172 * If we were called as "git cherry-pick <commit>", just
4173 * cherry-pick/revert it, set CHERRY_PICK_HEAD /
4174 * REVERT_HEAD, and don't touch the sequencer state.
4175 * This means it is possible to cherry-pick in the middle
4176 * of a cherry-pick sequence.
4178 if (opts->revs->cmdline.nr == 1 &&
4179 opts->revs->cmdline.rev->whence == REV_CMD_REV &&
4180 opts->revs->no_walk &&
4181 !opts->revs->cmdline.rev->flags) {
4182 struct commit *cmit;
4183 if (prepare_revision_walk(opts->revs))
4184 return error(_("revision walk setup failed"));
4185 cmit = get_revision(opts->revs);
4187 return error(_("empty commit set passed"));
4188 if (get_revision(opts->revs))
4189 BUG("unexpected extra commit from walk");
4190 return single_pick(r, cmit, opts);
4194 * Start a new cherry-pick/ revert sequence; but
4195 * first, make sure that an existing one isn't in
4199 if (walk_revs_populate_todo(&todo_list, opts) ||
4200 create_seq_dir() < 0)
4202 if (get_oid("HEAD", &oid) && (opts->action == REPLAY_REVERT))
4203 return error(_("can't revert as initial commit"));
4204 if (save_head(oid_to_hex(&oid)))
4206 if (save_opts(opts))
4208 update_abort_safety_file();
4209 res = pick_commits(r, &todo_list, opts);
4210 todo_list_release(&todo_list);
4214 void append_signoff(struct strbuf *msgbuf, size_t ignore_footer, unsigned flag)
4216 unsigned no_dup_sob = flag & APPEND_SIGNOFF_DEDUP;
4217 struct strbuf sob = STRBUF_INIT;
4220 strbuf_addstr(&sob, sign_off_header);
4221 strbuf_addstr(&sob, fmt_name(WANT_COMMITTER_IDENT));
4222 strbuf_addch(&sob, '\n');
4225 strbuf_complete_line(msgbuf);
4228 * If the whole message buffer is equal to the sob, pretend that we
4229 * found a conforming footer with a matching sob
4231 if (msgbuf->len - ignore_footer == sob.len &&
4232 !strncmp(msgbuf->buf, sob.buf, sob.len))
4235 has_footer = has_conforming_footer(msgbuf, &sob, ignore_footer);
4238 const char *append_newlines = NULL;
4239 size_t len = msgbuf->len - ignore_footer;
4243 * The buffer is completely empty. Leave foom for
4244 * the title and body to be filled in by the user.
4246 append_newlines = "\n\n";
4247 } else if (len == 1) {
4249 * Buffer contains a single newline. Add another
4250 * so that we leave room for the title and body.
4252 append_newlines = "\n";
4253 } else if (msgbuf->buf[len - 2] != '\n') {
4255 * Buffer ends with a single newline. Add another
4256 * so that there is an empty line between the message
4259 append_newlines = "\n";
4260 } /* else, the buffer already ends with two newlines. */
4262 if (append_newlines)
4263 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4264 append_newlines, strlen(append_newlines));
4267 if (has_footer != 3 && (!no_dup_sob || has_footer != 2))
4268 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4271 strbuf_release(&sob);
4274 struct labels_entry {
4275 struct hashmap_entry entry;
4276 char label[FLEX_ARRAY];
4279 static int labels_cmp(const void *fndata, const struct labels_entry *a,
4280 const struct labels_entry *b, const void *key)
4282 return key ? strcmp(a->label, key) : strcmp(a->label, b->label);
4285 struct string_entry {
4286 struct oidmap_entry entry;
4287 char string[FLEX_ARRAY];
4290 struct label_state {
4291 struct oidmap commit2label;
4292 struct hashmap labels;
4296 static const char *label_oid(struct object_id *oid, const char *label,
4297 struct label_state *state)
4299 struct labels_entry *labels_entry;
4300 struct string_entry *string_entry;
4301 struct object_id dummy;
4305 string_entry = oidmap_get(&state->commit2label, oid);
4307 return string_entry->string;
4310 * For "uninteresting" commits, i.e. commits that are not to be
4311 * rebased, and which can therefore not be labeled, we use a unique
4312 * abbreviation of the commit name. This is slightly more complicated
4313 * than calling find_unique_abbrev() because we also need to make
4314 * sure that the abbreviation does not conflict with any other
4317 * We disallow "interesting" commits to be labeled by a string that
4318 * is a valid full-length hash, to ensure that we always can find an
4319 * abbreviation for any uninteresting commit's names that does not
4320 * clash with any other label.
4325 strbuf_reset(&state->buf);
4326 strbuf_grow(&state->buf, GIT_SHA1_HEXSZ);
4327 label = p = state->buf.buf;
4329 find_unique_abbrev_r(p, oid, default_abbrev);
4332 * We may need to extend the abbreviated hash so that there is
4333 * no conflicting label.
4335 if (hashmap_get_from_hash(&state->labels, strihash(p), p)) {
4336 size_t i = strlen(p) + 1;
4338 oid_to_hex_r(p, oid);
4339 for (; i < GIT_SHA1_HEXSZ; i++) {
4342 if (!hashmap_get_from_hash(&state->labels,
4348 } else if (((len = strlen(label)) == the_hash_algo->hexsz &&
4349 !get_oid_hex(label, &dummy)) ||
4350 (len == 1 && *label == '#') ||
4351 hashmap_get_from_hash(&state->labels,
4352 strihash(label), label)) {
4354 * If the label already exists, or if the label is a valid full
4355 * OID, or the label is a '#' (which we use as a separator
4356 * between merge heads and oneline), we append a dash and a
4357 * number to make it unique.
4359 struct strbuf *buf = &state->buf;
4362 strbuf_add(buf, label, len);
4364 for (i = 2; ; i++) {
4365 strbuf_setlen(buf, len);
4366 strbuf_addf(buf, "-%d", i);
4367 if (!hashmap_get_from_hash(&state->labels,
4376 FLEX_ALLOC_STR(labels_entry, label, label);
4377 hashmap_entry_init(labels_entry, strihash(label));
4378 hashmap_add(&state->labels, labels_entry);
4380 FLEX_ALLOC_STR(string_entry, string, label);
4381 oidcpy(&string_entry->entry.oid, oid);
4382 oidmap_put(&state->commit2label, string_entry);
4384 return string_entry->string;
4387 static int make_script_with_merges(struct pretty_print_context *pp,
4388 struct rev_info *revs, struct strbuf *out,
4391 int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4392 int rebase_cousins = flags & TODO_LIST_REBASE_COUSINS;
4393 struct strbuf buf = STRBUF_INIT, oneline = STRBUF_INIT;
4394 struct strbuf label = STRBUF_INIT;
4395 struct commit_list *commits = NULL, **tail = &commits, *iter;
4396 struct commit_list *tips = NULL, **tips_tail = &tips;
4397 struct commit *commit;
4398 struct oidmap commit2todo = OIDMAP_INIT;
4399 struct string_entry *entry;
4400 struct oidset interesting = OIDSET_INIT, child_seen = OIDSET_INIT,
4401 shown = OIDSET_INIT;
4402 struct label_state state = { OIDMAP_INIT, { NULL }, STRBUF_INIT };
4404 int abbr = flags & TODO_LIST_ABBREVIATE_CMDS;
4405 const char *cmd_pick = abbr ? "p" : "pick",
4406 *cmd_label = abbr ? "l" : "label",
4407 *cmd_reset = abbr ? "t" : "reset",
4408 *cmd_merge = abbr ? "m" : "merge";
4410 oidmap_init(&commit2todo, 0);
4411 oidmap_init(&state.commit2label, 0);
4412 hashmap_init(&state.labels, (hashmap_cmp_fn) labels_cmp, NULL, 0);
4413 strbuf_init(&state.buf, 32);
4415 if (revs->cmdline.nr && (revs->cmdline.rev[0].flags & BOTTOM)) {
4416 struct object_id *oid = &revs->cmdline.rev[0].item->oid;
4417 FLEX_ALLOC_STR(entry, string, "onto");
4418 oidcpy(&entry->entry.oid, oid);
4419 oidmap_put(&state.commit2label, entry);
4424 * - get onelines for all commits
4425 * - gather all branch tips (i.e. 2nd or later parents of merges)
4426 * - label all branch tips
4428 while ((commit = get_revision(revs))) {
4429 struct commit_list *to_merge;
4430 const char *p1, *p2;
4431 struct object_id *oid;
4434 tail = &commit_list_insert(commit, tail)->next;
4435 oidset_insert(&interesting, &commit->object.oid);
4437 is_empty = is_original_commit_empty(commit);
4438 if (!is_empty && (commit->object.flags & PATCHSAME))
4441 strbuf_reset(&oneline);
4442 pretty_print_commit(pp, commit, &oneline);
4444 to_merge = commit->parents ? commit->parents->next : NULL;
4446 /* non-merge commit: easy case */
4448 if (!keep_empty && is_empty)
4449 strbuf_addf(&buf, "%c ", comment_line_char);
4450 strbuf_addf(&buf, "%s %s %s", cmd_pick,
4451 oid_to_hex(&commit->object.oid),
4454 FLEX_ALLOC_STR(entry, string, buf.buf);
4455 oidcpy(&entry->entry.oid, &commit->object.oid);
4456 oidmap_put(&commit2todo, entry);
4461 /* Create a label */
4462 strbuf_reset(&label);
4463 if (skip_prefix(oneline.buf, "Merge ", &p1) &&
4464 (p1 = strchr(p1, '\'')) &&
4465 (p2 = strchr(++p1, '\'')))
4466 strbuf_add(&label, p1, p2 - p1);
4467 else if (skip_prefix(oneline.buf, "Merge pull request ",
4469 (p1 = strstr(p1, " from ")))
4470 strbuf_addstr(&label, p1 + strlen(" from "));
4472 strbuf_addbuf(&label, &oneline);
4474 for (p1 = label.buf; *p1; p1++)
4479 strbuf_addf(&buf, "%s -C %s",
4480 cmd_merge, oid_to_hex(&commit->object.oid));
4482 /* label the tips of merged branches */
4483 for (; to_merge; to_merge = to_merge->next) {
4484 oid = &to_merge->item->object.oid;
4485 strbuf_addch(&buf, ' ');
4487 if (!oidset_contains(&interesting, oid)) {
4488 strbuf_addstr(&buf, label_oid(oid, NULL,
4493 tips_tail = &commit_list_insert(to_merge->item,
4496 strbuf_addstr(&buf, label_oid(oid, label.buf, &state));
4498 strbuf_addf(&buf, " # %s", oneline.buf);
4500 FLEX_ALLOC_STR(entry, string, buf.buf);
4501 oidcpy(&entry->entry.oid, &commit->object.oid);
4502 oidmap_put(&commit2todo, entry);
4507 * - label branch points
4508 * - add HEAD to the branch tips
4510 for (iter = commits; iter; iter = iter->next) {
4511 struct commit_list *parent = iter->item->parents;
4512 for (; parent; parent = parent->next) {
4513 struct object_id *oid = &parent->item->object.oid;
4514 if (!oidset_contains(&interesting, oid))
4516 if (oidset_insert(&child_seen, oid))
4517 label_oid(oid, "branch-point", &state);
4520 /* Add HEAD as implict "tip of branch" */
4522 tips_tail = &commit_list_insert(iter->item,
4527 * Third phase: output the todo list. This is a bit tricky, as we
4528 * want to avoid jumping back and forth between revisions. To
4529 * accomplish that goal, we walk backwards from the branch tips,
4530 * gathering commits not yet shown, reversing the list on the fly,
4531 * then outputting that list (labeling revisions as needed).
4533 strbuf_addf(out, "%s onto\n", cmd_label);
4534 for (iter = tips; iter; iter = iter->next) {
4535 struct commit_list *list = NULL, *iter2;
4537 commit = iter->item;
4538 if (oidset_contains(&shown, &commit->object.oid))
4540 entry = oidmap_get(&state.commit2label, &commit->object.oid);
4543 strbuf_addf(out, "\n%c Branch %s\n", comment_line_char, entry->string);
4545 strbuf_addch(out, '\n');
4547 while (oidset_contains(&interesting, &commit->object.oid) &&
4548 !oidset_contains(&shown, &commit->object.oid)) {
4549 commit_list_insert(commit, &list);
4550 if (!commit->parents) {
4554 commit = commit->parents->item;
4558 strbuf_addf(out, "%s %s\n", cmd_reset,
4559 rebase_cousins ? "onto" : "[new root]");
4561 const char *to = NULL;
4563 entry = oidmap_get(&state.commit2label,
4564 &commit->object.oid);
4567 else if (!rebase_cousins)
4568 to = label_oid(&commit->object.oid, NULL,
4571 if (!to || !strcmp(to, "onto"))
4572 strbuf_addf(out, "%s onto\n", cmd_reset);
4574 strbuf_reset(&oneline);
4575 pretty_print_commit(pp, commit, &oneline);
4576 strbuf_addf(out, "%s %s # %s\n",
4577 cmd_reset, to, oneline.buf);
4581 for (iter2 = list; iter2; iter2 = iter2->next) {
4582 struct object_id *oid = &iter2->item->object.oid;
4583 entry = oidmap_get(&commit2todo, oid);
4584 /* only show if not already upstream */
4586 strbuf_addf(out, "%s\n", entry->string);
4587 entry = oidmap_get(&state.commit2label, oid);
4589 strbuf_addf(out, "%s %s\n",
4590 cmd_label, entry->string);
4591 oidset_insert(&shown, oid);
4594 free_commit_list(list);
4597 free_commit_list(commits);
4598 free_commit_list(tips);
4600 strbuf_release(&label);
4601 strbuf_release(&oneline);
4602 strbuf_release(&buf);
4604 oidmap_free(&commit2todo, 1);
4605 oidmap_free(&state.commit2label, 1);
4606 hashmap_free(&state.labels, 1);
4607 strbuf_release(&state.buf);
4612 int sequencer_make_script(struct repository *r, struct strbuf *out, int argc,
4613 const char **argv, unsigned flags)
4615 char *format = NULL;
4616 struct pretty_print_context pp = {0};
4617 struct rev_info revs;
4618 struct commit *commit;
4619 int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4620 const char *insn = flags & TODO_LIST_ABBREVIATE_CMDS ? "p" : "pick";
4621 int rebase_merges = flags & TODO_LIST_REBASE_MERGES;
4623 repo_init_revisions(r, &revs, NULL);
4624 revs.verbose_header = 1;
4626 revs.max_parents = 1;
4627 revs.cherry_mark = 1;
4630 revs.right_only = 1;
4631 revs.sort_order = REV_SORT_IN_GRAPH_ORDER;
4632 revs.topo_order = 1;
4634 revs.pretty_given = 1;
4635 git_config_get_string("rebase.instructionFormat", &format);
4636 if (!format || !*format) {
4638 format = xstrdup("%s");
4640 get_commit_format(format, &revs);
4642 pp.fmt = revs.commit_format;
4643 pp.output_encoding = get_log_output_encoding();
4645 if (setup_revisions(argc, argv, &revs, NULL) > 1)
4646 return error(_("make_script: unhandled options"));
4648 if (prepare_revision_walk(&revs) < 0)
4649 return error(_("make_script: error preparing revisions"));
4652 return make_script_with_merges(&pp, &revs, out, flags);
4654 while ((commit = get_revision(&revs))) {
4655 int is_empty = is_original_commit_empty(commit);
4657 if (!is_empty && (commit->object.flags & PATCHSAME))
4659 if (!keep_empty && is_empty)
4660 strbuf_addf(out, "%c ", comment_line_char);
4661 strbuf_addf(out, "%s %s ", insn,
4662 oid_to_hex(&commit->object.oid));
4663 pretty_print_commit(&pp, commit, out);
4664 strbuf_addch(out, '\n');
4670 * Add commands after pick and (series of) squash/fixup commands
4673 void todo_list_add_exec_commands(struct todo_list *todo_list,
4674 struct string_list *commands)
4676 struct strbuf *buf = &todo_list->buf;
4677 size_t base_offset = buf->len;
4678 int i, insert, nr = 0, alloc = 0;
4679 struct todo_item *items = NULL, *base_items = NULL;
4681 base_items = xcalloc(commands->nr, sizeof(struct todo_item));
4682 for (i = 0; i < commands->nr; i++) {
4683 size_t command_len = strlen(commands->items[i].string);
4685 strbuf_addstr(buf, commands->items[i].string);
4686 strbuf_addch(buf, '\n');
4688 base_items[i].command = TODO_EXEC;
4689 base_items[i].offset_in_buf = base_offset;
4690 base_items[i].arg_offset = base_offset + strlen("exec ");
4691 base_items[i].arg_len = command_len - strlen("exec ");
4693 base_offset += command_len + 1;
4697 * Insert <commands> after every pick. Here, fixup/squash chains
4698 * are considered part of the pick, so we insert the commands *after*
4699 * those chains if there are any.
4701 * As we insert the exec commands immediatly after rearranging
4702 * any fixups and before the user edits the list, a fixup chain
4703 * can never contain comments (any comments are empty picks that
4704 * have been commented out because the user did not specify
4705 * --keep-empty). So, it is safe to insert an exec command
4706 * without looking at the command following a comment.
4709 for (i = 0; i < todo_list->nr; i++) {
4710 enum todo_command command = todo_list->items[i].command;
4711 if (insert && !is_fixup(command)) {
4712 ALLOC_GROW(items, nr + commands->nr, alloc);
4713 COPY_ARRAY(items + nr, base_items, commands->nr);
4719 ALLOC_GROW(items, nr + 1, alloc);
4720 items[nr++] = todo_list->items[i];
4722 if (command == TODO_PICK || command == TODO_MERGE)
4726 /* insert or append final <commands> */
4727 if (insert || nr == todo_list->nr) {
4728 ALLOC_GROW(items, nr + commands->nr, alloc);
4729 COPY_ARRAY(items + nr, base_items, commands->nr);
4734 FREE_AND_NULL(todo_list->items);
4735 todo_list->items = items;
4737 todo_list->alloc = alloc;
4740 static void todo_list_to_strbuf(struct repository *r, struct todo_list *todo_list,
4741 struct strbuf *buf, int num, unsigned flags)
4743 struct todo_item *item;
4744 int i, max = todo_list->nr;
4746 if (num > 0 && num < max)
4749 for (item = todo_list->items, i = 0; i < max; i++, item++) {
4750 /* if the item is not a command write it and continue */
4751 if (item->command >= TODO_COMMENT) {
4752 strbuf_addf(buf, "%.*s\n", item->arg_len,
4753 todo_item_get_arg(todo_list, item));
4757 /* add command to the buffer */
4758 if (flags & TODO_LIST_ABBREVIATE_CMDS)
4759 strbuf_addch(buf, command_to_char(item->command));
4761 strbuf_addstr(buf, command_to_string(item->command));
4765 const char *oid = flags & TODO_LIST_SHORTEN_IDS ?
4766 short_commit_name(item->commit) :
4767 oid_to_hex(&item->commit->object.oid);
4769 if (item->command == TODO_MERGE) {
4770 if (item->flags & TODO_EDIT_MERGE_MSG)
4771 strbuf_addstr(buf, " -c");
4773 strbuf_addstr(buf, " -C");
4776 strbuf_addf(buf, " %s", oid);
4779 /* add all the rest */
4781 strbuf_addch(buf, '\n');
4783 strbuf_addf(buf, " %.*s\n", item->arg_len,
4784 todo_item_get_arg(todo_list, item));
4788 int todo_list_write_to_file(struct repository *r, struct todo_list *todo_list,
4789 const char *file, const char *shortrevisions,
4790 const char *shortonto, int num, unsigned flags)
4793 struct strbuf buf = STRBUF_INIT;
4795 todo_list_to_strbuf(r, todo_list, &buf, num, flags);
4796 if (flags & TODO_LIST_APPEND_TODO_HELP)
4797 append_todo_help(flags & TODO_LIST_KEEP_EMPTY, count_commands(todo_list),
4798 shortrevisions, shortonto, &buf);
4800 res = write_message(buf.buf, buf.len, file, 0);
4801 strbuf_release(&buf);
4806 static const char edit_todo_list_advice[] =
4807 N_("You can fix this with 'git rebase --edit-todo' "
4808 "and then run 'git rebase --continue'.\n"
4809 "Or you can abort the rebase with 'git rebase"
4812 int check_todo_list_from_file(struct repository *r)
4814 struct todo_list old_todo = TODO_LIST_INIT, new_todo = TODO_LIST_INIT;
4817 if (strbuf_read_file_or_whine(&new_todo.buf, rebase_path_todo()) < 0) {
4822 if (strbuf_read_file_or_whine(&old_todo.buf, rebase_path_todo_backup()) < 0) {
4827 res = todo_list_parse_insn_buffer(r, old_todo.buf.buf, &old_todo);
4829 res = todo_list_parse_insn_buffer(r, new_todo.buf.buf, &new_todo);
4831 res = todo_list_check(&old_todo, &new_todo);
4833 fprintf(stderr, _(edit_todo_list_advice));
4835 todo_list_release(&old_todo);
4836 todo_list_release(&new_todo);
4841 /* skip picking commits whose parents are unchanged */
4842 static int skip_unnecessary_picks(struct repository *r,
4843 struct todo_list *todo_list,
4844 struct object_id *base_oid)
4846 struct object_id *parent_oid;
4849 for (i = 0; i < todo_list->nr; i++) {
4850 struct todo_item *item = todo_list->items + i;
4852 if (item->command >= TODO_NOOP)
4854 if (item->command != TODO_PICK)
4856 if (parse_commit(item->commit)) {
4857 return error(_("could not parse commit '%s'"),
4858 oid_to_hex(&item->commit->object.oid));
4860 if (!item->commit->parents)
4861 break; /* root commit */
4862 if (item->commit->parents->next)
4863 break; /* merge commit */
4864 parent_oid = &item->commit->parents->item->object.oid;
4865 if (!oideq(parent_oid, base_oid))
4867 oidcpy(base_oid, &item->commit->object.oid);
4870 const char *done_path = rebase_path_done();
4872 if (todo_list_write_to_file(r, todo_list, done_path, NULL, NULL, i, 0)) {
4873 error_errno(_("could not write to '%s'"), done_path);
4877 MOVE_ARRAY(todo_list->items, todo_list->items + i, todo_list->nr - i);
4879 todo_list->current = 0;
4881 if (is_fixup(peek_command(todo_list, 0)))
4882 record_in_rewritten(base_oid, peek_command(todo_list, 0));
4888 int complete_action(struct repository *r, struct replay_opts *opts, unsigned flags,
4889 const char *shortrevisions, const char *onto_name,
4890 struct commit *onto, const char *orig_head,
4891 struct string_list *commands, unsigned autosquash,
4892 struct todo_list *todo_list)
4894 const char *shortonto, *todo_file = rebase_path_todo();
4895 struct todo_list new_todo = TODO_LIST_INIT;
4896 struct strbuf *buf = &todo_list->buf;
4897 struct object_id oid = onto->object.oid;
4900 shortonto = find_unique_abbrev(&oid, DEFAULT_ABBREV);
4902 if (buf->len == 0) {
4903 struct todo_item *item = append_new_todo(todo_list);
4904 item->command = TODO_NOOP;
4905 item->commit = NULL;
4906 item->arg_len = item->arg_offset = item->flags = item->offset_in_buf = 0;
4909 if (autosquash && todo_list_rearrange_squash(todo_list))
4913 todo_list_add_exec_commands(todo_list, commands);
4915 if (count_commands(todo_list) == 0) {
4916 apply_autostash(opts);
4917 sequencer_remove_state(opts);
4919 return error(_("nothing to do"));
4922 res = edit_todo_list(r, todo_list, &new_todo, shortrevisions,
4926 else if (res == -2) {
4927 apply_autostash(opts);
4928 sequencer_remove_state(opts);
4931 } else if (res == -3) {
4932 apply_autostash(opts);
4933 sequencer_remove_state(opts);
4934 todo_list_release(&new_todo);
4936 return error(_("nothing to do"));
4939 if (todo_list_parse_insn_buffer(r, new_todo.buf.buf, &new_todo) ||
4940 todo_list_check(todo_list, &new_todo)) {
4941 fprintf(stderr, _(edit_todo_list_advice));
4942 checkout_onto(r, opts, onto_name, &onto->object.oid, orig_head);
4943 todo_list_release(&new_todo);
4948 if (opts->allow_ff && skip_unnecessary_picks(r, &new_todo, &oid)) {
4949 todo_list_release(&new_todo);
4950 return error(_("could not skip unnecessary pick commands"));
4953 if (todo_list_write_to_file(r, &new_todo, todo_file, NULL, NULL, -1,
4954 flags & ~(TODO_LIST_SHORTEN_IDS))) {
4955 todo_list_release(&new_todo);
4956 return error_errno(_("could not write '%s'"), todo_file);
4959 todo_list_release(&new_todo);
4961 if (checkout_onto(r, opts, onto_name, &oid, orig_head))
4964 if (require_clean_work_tree(r, "rebase", "", 1, 1))
4967 return sequencer_continue(r, opts);
4970 struct subject2item_entry {
4971 struct hashmap_entry entry;
4973 char subject[FLEX_ARRAY];
4976 static int subject2item_cmp(const void *fndata,
4977 const struct subject2item_entry *a,
4978 const struct subject2item_entry *b, const void *key)
4980 return key ? strcmp(a->subject, key) : strcmp(a->subject, b->subject);
4983 define_commit_slab(commit_todo_item, struct todo_item *);
4986 * Rearrange the todo list that has both "pick commit-id msg" and "pick
4987 * commit-id fixup!/squash! msg" in it so that the latter is put immediately
4988 * after the former, and change "pick" to "fixup"/"squash".
4990 * Note that if the config has specified a custom instruction format, each log
4991 * message will have to be retrieved from the commit (as the oneline in the
4992 * script cannot be trusted) in order to normalize the autosquash arrangement.
4994 int todo_list_rearrange_squash(struct todo_list *todo_list)
4996 struct hashmap subject2item;
4997 int rearranged = 0, *next, *tail, i, nr = 0, alloc = 0;
4999 struct commit_todo_item commit_todo;
5000 struct todo_item *items = NULL;
5002 init_commit_todo_item(&commit_todo);
5004 * The hashmap maps onelines to the respective todo list index.
5006 * If any items need to be rearranged, the next[i] value will indicate
5007 * which item was moved directly after the i'th.
5009 * In that case, last[i] will indicate the index of the latest item to
5010 * be moved to appear after the i'th.
5012 hashmap_init(&subject2item, (hashmap_cmp_fn) subject2item_cmp,
5013 NULL, todo_list->nr);
5014 ALLOC_ARRAY(next, todo_list->nr);
5015 ALLOC_ARRAY(tail, todo_list->nr);
5016 ALLOC_ARRAY(subjects, todo_list->nr);
5017 for (i = 0; i < todo_list->nr; i++) {
5018 struct strbuf buf = STRBUF_INIT;
5019 struct todo_item *item = todo_list->items + i;
5020 const char *commit_buffer, *subject, *p;
5023 struct subject2item_entry *entry;
5025 next[i] = tail[i] = -1;
5026 if (!item->commit || item->command == TODO_DROP) {
5031 if (is_fixup(item->command)) {
5032 clear_commit_todo_item(&commit_todo);
5033 return error(_("the script was already rearranged."));
5036 *commit_todo_item_at(&commit_todo, item->commit) = item;
5038 parse_commit(item->commit);
5039 commit_buffer = get_commit_buffer(item->commit, NULL);
5040 find_commit_subject(commit_buffer, &subject);
5041 format_subject(&buf, subject, " ");
5042 subject = subjects[i] = strbuf_detach(&buf, &subject_len);
5043 unuse_commit_buffer(item->commit, commit_buffer);
5044 if ((skip_prefix(subject, "fixup! ", &p) ||
5045 skip_prefix(subject, "squash! ", &p))) {
5046 struct commit *commit2;
5051 if (!skip_prefix(p, "fixup! ", &p) &&
5052 !skip_prefix(p, "squash! ", &p))
5056 if ((entry = hashmap_get_from_hash(&subject2item,
5058 /* found by title */
5060 else if (!strchr(p, ' ') &&
5062 lookup_commit_reference_by_name(p)) &&
5063 *commit_todo_item_at(&commit_todo, commit2))
5064 /* found by commit name */
5065 i2 = *commit_todo_item_at(&commit_todo, commit2)
5068 /* copy can be a prefix of the commit subject */
5069 for (i2 = 0; i2 < i; i2++)
5071 starts_with(subjects[i2], p))
5079 todo_list->items[i].command =
5080 starts_with(subject, "fixup!") ?
5081 TODO_FIXUP : TODO_SQUASH;
5087 } else if (!hashmap_get_from_hash(&subject2item,
5088 strhash(subject), subject)) {
5089 FLEX_ALLOC_MEM(entry, subject, subject, subject_len);
5091 hashmap_entry_init(entry, strhash(entry->subject));
5092 hashmap_put(&subject2item, entry);
5097 for (i = 0; i < todo_list->nr; i++) {
5098 enum todo_command command = todo_list->items[i].command;
5102 * Initially, all commands are 'pick's. If it is a
5103 * fixup or a squash now, we have rearranged it.
5105 if (is_fixup(command))
5109 ALLOC_GROW(items, nr + 1, alloc);
5110 items[nr++] = todo_list->items[cur];
5115 FREE_AND_NULL(todo_list->items);
5116 todo_list->items = items;
5118 todo_list->alloc = alloc;
5123 for (i = 0; i < todo_list->nr; i++)
5126 hashmap_free(&subject2item, 1);
5128 clear_commit_todo_item(&commit_todo);