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 static 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 containing 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 *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);
617 if (is_rebase_i(opts) && clean <= 0)
618 fputs(o.obuf.buf, stdout);
619 strbuf_release(&o.obuf);
621 rollback_lock_file(&index_lock);
625 if (write_locked_index(r->index, &index_lock,
626 COMMIT_LOCK | SKIP_IF_UNCHANGED))
628 * TRANSLATORS: %s will be "revert", "cherry-pick" or
631 return error(_("%s: Unable to write new index file"),
632 _(action_name(opts)));
635 append_conflicts_hint(r->index, msgbuf,
636 opts->default_msg_cleanup);
641 static struct object_id *get_cache_tree_oid(struct index_state *istate)
643 if (!istate->cache_tree)
644 istate->cache_tree = cache_tree();
646 if (!cache_tree_fully_valid(istate->cache_tree))
647 if (cache_tree_update(istate, 0)) {
648 error(_("unable to update cache tree"));
652 return &istate->cache_tree->oid;
655 static int is_index_unchanged(struct repository *r)
657 struct object_id head_oid, *cache_tree_oid;
658 struct commit *head_commit;
659 struct index_state *istate = r->index;
661 if (!resolve_ref_unsafe("HEAD", RESOLVE_REF_READING, &head_oid, NULL))
662 return error(_("could not resolve HEAD commit"));
664 head_commit = lookup_commit(r, &head_oid);
667 * If head_commit is NULL, check_commit, called from
668 * lookup_commit, would have indicated that head_commit is not
669 * a commit object already. parse_commit() will return failure
670 * without further complaints in such a case. Otherwise, if
671 * the commit is invalid, parse_commit() will complain. So
672 * there is nothing for us to say here. Just return failure.
674 if (parse_commit(head_commit))
677 if (!(cache_tree_oid = get_cache_tree_oid(istate)))
680 return oideq(cache_tree_oid, get_commit_tree_oid(head_commit));
683 static int write_author_script(const char *message)
685 struct strbuf buf = STRBUF_INIT;
690 if (!*message || starts_with(message, "\n")) {
692 /* Missing 'author' line? */
693 unlink(rebase_path_author_script());
695 } else if (skip_prefix(message, "author ", &message))
697 else if ((eol = strchr(message, '\n')))
702 strbuf_addstr(&buf, "GIT_AUTHOR_NAME='");
703 while (*message && *message != '\n' && *message != '\r')
704 if (skip_prefix(message, " <", &message))
706 else if (*message != '\'')
707 strbuf_addch(&buf, *(message++));
709 strbuf_addf(&buf, "'\\%c'", *(message++));
710 strbuf_addstr(&buf, "'\nGIT_AUTHOR_EMAIL='");
711 while (*message && *message != '\n' && *message != '\r')
712 if (skip_prefix(message, "> ", &message))
714 else if (*message != '\'')
715 strbuf_addch(&buf, *(message++));
717 strbuf_addf(&buf, "'\\%c'", *(message++));
718 strbuf_addstr(&buf, "'\nGIT_AUTHOR_DATE='@");
719 while (*message && *message != '\n' && *message != '\r')
720 if (*message != '\'')
721 strbuf_addch(&buf, *(message++));
723 strbuf_addf(&buf, "'\\%c'", *(message++));
724 strbuf_addch(&buf, '\'');
725 res = write_message(buf.buf, buf.len, rebase_path_author_script(), 1);
726 strbuf_release(&buf);
731 * Take a series of KEY='VALUE' lines where VALUE part is
732 * sq-quoted, and append <KEY, VALUE> at the end of the string list
734 static int parse_key_value_squoted(char *buf, struct string_list *list)
737 struct string_list_item *item;
739 char *cp = strchr(buf, '=');
741 np = strchrnul(buf, '\n');
742 return error(_("no key present in '%.*s'"),
743 (int) (np - buf), buf);
745 np = strchrnul(cp, '\n');
747 item = string_list_append(list, buf);
749 buf = np + (*np == '\n');
753 return error(_("unable to dequote value of '%s'"),
755 item->util = xstrdup(cp);
761 * Reads and parses the state directory's "author-script" file, and sets name,
762 * email and date accordingly.
763 * Returns 0 on success, -1 if the file could not be parsed.
765 * The author script is of the format:
767 * GIT_AUTHOR_NAME='$author_name'
768 * GIT_AUTHOR_EMAIL='$author_email'
769 * GIT_AUTHOR_DATE='$author_date'
771 * where $author_name, $author_email and $author_date are quoted. We are strict
772 * with our parsing, as the file was meant to be eval'd in the now-removed
773 * git-am.sh/git-rebase--interactive.sh scripts, and thus if the file differs
774 * from what this function expects, it is better to bail out than to do
775 * something that the user does not expect.
777 int read_author_script(const char *path, char **name, char **email, char **date,
780 struct strbuf buf = STRBUF_INIT;
781 struct string_list kv = STRING_LIST_INIT_DUP;
782 int retval = -1; /* assume failure */
783 int i, name_i = -2, email_i = -2, date_i = -2, err = 0;
785 if (strbuf_read_file(&buf, path, 256) <= 0) {
786 strbuf_release(&buf);
787 if (errno == ENOENT && allow_missing)
790 return error_errno(_("could not open '%s' for reading"),
794 if (parse_key_value_squoted(buf.buf, &kv))
797 for (i = 0; i < kv.nr; i++) {
798 if (!strcmp(kv.items[i].string, "GIT_AUTHOR_NAME")) {
800 name_i = error(_("'GIT_AUTHOR_NAME' already given"));
803 } else if (!strcmp(kv.items[i].string, "GIT_AUTHOR_EMAIL")) {
805 email_i = error(_("'GIT_AUTHOR_EMAIL' already given"));
808 } else if (!strcmp(kv.items[i].string, "GIT_AUTHOR_DATE")) {
810 date_i = error(_("'GIT_AUTHOR_DATE' already given"));
814 err = error(_("unknown variable '%s'"),
819 error(_("missing 'GIT_AUTHOR_NAME'"));
821 error(_("missing 'GIT_AUTHOR_EMAIL'"));
823 error(_("missing 'GIT_AUTHOR_DATE'"));
824 if (date_i < 0 || email_i < 0 || date_i < 0 || err)
826 *name = kv.items[name_i].util;
827 *email = kv.items[email_i].util;
828 *date = kv.items[date_i].util;
831 string_list_clear(&kv, !!retval);
832 strbuf_release(&buf);
837 * Read a GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL AND GIT_AUTHOR_DATE from a
838 * file with shell quoting into struct argv_array. Returns -1 on
839 * error, 0 otherwise.
841 static int read_env_script(struct argv_array *env)
843 char *name, *email, *date;
845 if (read_author_script(rebase_path_author_script(),
846 &name, &email, &date, 0))
849 argv_array_pushf(env, "GIT_AUTHOR_NAME=%s", name);
850 argv_array_pushf(env, "GIT_AUTHOR_EMAIL=%s", email);
851 argv_array_pushf(env, "GIT_AUTHOR_DATE=%s", date);
859 static char *get_author(const char *message)
864 a = find_commit_header(message, "author", &len);
866 return xmemdupz(a, len);
871 static const char staged_changes_advice[] =
872 N_("you have staged changes in your working tree\n"
873 "If these changes are meant to be squashed into the previous commit, run:\n"
875 " git commit --amend %s\n"
877 "If they are meant to go into a new commit, run:\n"
881 "In both cases, once you're done, continue with:\n"
883 " git rebase --continue\n");
885 #define ALLOW_EMPTY (1<<0)
886 #define EDIT_MSG (1<<1)
887 #define AMEND_MSG (1<<2)
888 #define CLEANUP_MSG (1<<3)
889 #define VERIFY_MSG (1<<4)
890 #define CREATE_ROOT_COMMIT (1<<5)
892 static int run_command_silent_on_success(struct child_process *cmd)
894 struct strbuf buf = STRBUF_INIT;
897 cmd->stdout_to_stderr = 1;
898 rc = pipe_command(cmd,
904 fputs(buf.buf, stderr);
905 strbuf_release(&buf);
910 * If we are cherry-pick, and if the merge did not result in
911 * hand-editing, we will hit this commit and inherit the original
912 * author date and name.
914 * If we are revert, or if our cherry-pick results in a hand merge,
915 * we had better say that the current user is responsible for that.
917 * An exception is when run_git_commit() is called during an
918 * interactive rebase: in that case, we will want to retain the
921 static int run_git_commit(struct repository *r,
923 struct replay_opts *opts,
926 struct child_process cmd = CHILD_PROCESS_INIT;
930 if (is_rebase_i(opts) && read_env_script(&cmd.env_array)) {
931 const char *gpg_opt = gpg_sign_opt_quoted(opts);
933 return error(_(staged_changes_advice),
937 argv_array_push(&cmd.args, "commit");
939 if (!(flags & VERIFY_MSG))
940 argv_array_push(&cmd.args, "-n");
941 if ((flags & AMEND_MSG))
942 argv_array_push(&cmd.args, "--amend");
944 argv_array_pushf(&cmd.args, "-S%s", opts->gpg_sign);
946 argv_array_pushl(&cmd.args, "-F", defmsg, NULL);
947 else if (!(flags & EDIT_MSG))
948 argv_array_pushl(&cmd.args, "-C", "HEAD", NULL);
949 if ((flags & CLEANUP_MSG))
950 argv_array_push(&cmd.args, "--cleanup=strip");
951 if ((flags & EDIT_MSG))
952 argv_array_push(&cmd.args, "-e");
953 else if (!(flags & CLEANUP_MSG) &&
954 !opts->signoff && !opts->record_origin &&
955 !opts->explicit_cleanup)
956 argv_array_push(&cmd.args, "--cleanup=verbatim");
958 if ((flags & ALLOW_EMPTY))
959 argv_array_push(&cmd.args, "--allow-empty");
961 if (!(flags & EDIT_MSG))
962 argv_array_push(&cmd.args, "--allow-empty-message");
964 if (is_rebase_i(opts) && !(flags & EDIT_MSG))
965 return run_command_silent_on_success(&cmd);
967 return run_command(&cmd);
970 static int rest_is_empty(const struct strbuf *sb, int start)
975 /* Check if the rest is just whitespace and Signed-off-by's. */
976 for (i = start; i < sb->len; i++) {
977 nl = memchr(sb->buf + i, '\n', sb->len - i);
983 if (strlen(sign_off_header) <= eol - i &&
984 starts_with(sb->buf + i, sign_off_header)) {
989 if (!isspace(sb->buf[i++]))
996 void cleanup_message(struct strbuf *msgbuf,
997 enum commit_msg_cleanup_mode cleanup_mode, int verbose)
999 if (verbose || /* Truncate the message just before the diff, if any. */
1000 cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS)
1001 strbuf_setlen(msgbuf, wt_status_locate_end(msgbuf->buf, msgbuf->len));
1002 if (cleanup_mode != COMMIT_MSG_CLEANUP_NONE)
1003 strbuf_stripspace(msgbuf, cleanup_mode == COMMIT_MSG_CLEANUP_ALL);
1007 * Find out if the message in the strbuf contains only whitespace and
1008 * Signed-off-by lines.
1010 int message_is_empty(const struct strbuf *sb,
1011 enum commit_msg_cleanup_mode cleanup_mode)
1013 if (cleanup_mode == COMMIT_MSG_CLEANUP_NONE && sb->len)
1015 return rest_is_empty(sb, 0);
1019 * See if the user edited the message in the editor or left what
1020 * was in the template intact
1022 int template_untouched(const struct strbuf *sb, const char *template_file,
1023 enum commit_msg_cleanup_mode cleanup_mode)
1025 struct strbuf tmpl = STRBUF_INIT;
1028 if (cleanup_mode == COMMIT_MSG_CLEANUP_NONE && sb->len)
1031 if (!template_file || strbuf_read_file(&tmpl, template_file, 0) <= 0)
1034 strbuf_stripspace(&tmpl, cleanup_mode == COMMIT_MSG_CLEANUP_ALL);
1035 if (!skip_prefix(sb->buf, tmpl.buf, &start))
1037 strbuf_release(&tmpl);
1038 return rest_is_empty(sb, start - sb->buf);
1041 int update_head_with_reflog(const struct commit *old_head,
1042 const struct object_id *new_head,
1043 const char *action, const struct strbuf *msg,
1046 struct ref_transaction *transaction;
1047 struct strbuf sb = STRBUF_INIT;
1052 strbuf_addstr(&sb, action);
1053 strbuf_addstr(&sb, ": ");
1056 nl = strchr(msg->buf, '\n');
1058 strbuf_add(&sb, msg->buf, nl + 1 - msg->buf);
1060 strbuf_addbuf(&sb, msg);
1061 strbuf_addch(&sb, '\n');
1064 transaction = ref_transaction_begin(err);
1066 ref_transaction_update(transaction, "HEAD", new_head,
1067 old_head ? &old_head->object.oid : &null_oid,
1069 ref_transaction_commit(transaction, err)) {
1072 ref_transaction_free(transaction);
1073 strbuf_release(&sb);
1078 static int run_rewrite_hook(const struct object_id *oldoid,
1079 const struct object_id *newoid)
1081 struct child_process proc = CHILD_PROCESS_INIT;
1082 const char *argv[3];
1084 struct strbuf sb = STRBUF_INIT;
1086 argv[0] = find_hook("post-rewrite");
1095 proc.stdout_to_stderr = 1;
1096 proc.trace2_hook_name = "post-rewrite";
1098 code = start_command(&proc);
1101 strbuf_addf(&sb, "%s %s\n", oid_to_hex(oldoid), oid_to_hex(newoid));
1102 sigchain_push(SIGPIPE, SIG_IGN);
1103 write_in_full(proc.in, sb.buf, sb.len);
1105 strbuf_release(&sb);
1106 sigchain_pop(SIGPIPE);
1107 return finish_command(&proc);
1110 void commit_post_rewrite(struct repository *r,
1111 const struct commit *old_head,
1112 const struct object_id *new_head)
1114 struct notes_rewrite_cfg *cfg;
1116 cfg = init_copy_notes_for_rewrite("amend");
1118 /* we are amending, so old_head is not NULL */
1119 copy_note_for_rewrite(cfg, &old_head->object.oid, new_head);
1120 finish_copy_notes_for_rewrite(r, cfg, "Notes added by 'git commit --amend'");
1122 run_rewrite_hook(&old_head->object.oid, new_head);
1125 static int run_prepare_commit_msg_hook(struct repository *r,
1130 const char *name, *arg1 = NULL, *arg2 = NULL;
1132 name = git_path_commit_editmsg();
1133 if (write_message(msg->buf, msg->len, name, 0))
1142 if (run_commit_hook(0, r->index_file, "prepare-commit-msg", name,
1144 ret = error(_("'prepare-commit-msg' hook failed"));
1149 static const char implicit_ident_advice_noconfig[] =
1150 N_("Your name and email address were configured automatically based\n"
1151 "on your username and hostname. Please check that they are accurate.\n"
1152 "You can suppress this message by setting them explicitly. Run the\n"
1153 "following command and follow the instructions in your editor to edit\n"
1154 "your configuration file:\n"
1156 " git config --global --edit\n"
1158 "After doing this, you may fix the identity used for this commit with:\n"
1160 " git commit --amend --reset-author\n");
1162 static const char implicit_ident_advice_config[] =
1163 N_("Your name and email address were configured automatically based\n"
1164 "on your username and hostname. Please check that they are accurate.\n"
1165 "You can suppress this message by setting them explicitly:\n"
1167 " git config --global user.name \"Your Name\"\n"
1168 " git config --global user.email you@example.com\n"
1170 "After doing this, you may fix the identity used for this commit with:\n"
1172 " git commit --amend --reset-author\n");
1174 static const char *implicit_ident_advice(void)
1176 char *user_config = expand_user_path("~/.gitconfig", 0);
1177 char *xdg_config = xdg_config_home("config");
1178 int config_exists = file_exists(user_config) || file_exists(xdg_config);
1184 return _(implicit_ident_advice_config);
1186 return _(implicit_ident_advice_noconfig);
1190 void print_commit_summary(struct repository *r,
1192 const struct object_id *oid,
1195 struct rev_info rev;
1196 struct commit *commit;
1197 struct strbuf format = STRBUF_INIT;
1199 struct pretty_print_context pctx = {0};
1200 struct strbuf author_ident = STRBUF_INIT;
1201 struct strbuf committer_ident = STRBUF_INIT;
1203 commit = lookup_commit(r, oid);
1205 die(_("couldn't look up newly created commit"));
1206 if (parse_commit(commit))
1207 die(_("could not parse newly created commit"));
1209 strbuf_addstr(&format, "format:%h] %s");
1211 format_commit_message(commit, "%an <%ae>", &author_ident, &pctx);
1212 format_commit_message(commit, "%cn <%ce>", &committer_ident, &pctx);
1213 if (strbuf_cmp(&author_ident, &committer_ident)) {
1214 strbuf_addstr(&format, "\n Author: ");
1215 strbuf_addbuf_percentquote(&format, &author_ident);
1217 if (flags & SUMMARY_SHOW_AUTHOR_DATE) {
1218 struct strbuf date = STRBUF_INIT;
1220 format_commit_message(commit, "%ad", &date, &pctx);
1221 strbuf_addstr(&format, "\n Date: ");
1222 strbuf_addbuf_percentquote(&format, &date);
1223 strbuf_release(&date);
1225 if (!committer_ident_sufficiently_given()) {
1226 strbuf_addstr(&format, "\n Committer: ");
1227 strbuf_addbuf_percentquote(&format, &committer_ident);
1228 if (advice_implicit_identity) {
1229 strbuf_addch(&format, '\n');
1230 strbuf_addstr(&format, implicit_ident_advice());
1233 strbuf_release(&author_ident);
1234 strbuf_release(&committer_ident);
1236 repo_init_revisions(r, &rev, prefix);
1237 setup_revisions(0, NULL, &rev, NULL);
1240 rev.diffopt.output_format =
1241 DIFF_FORMAT_SHORTSTAT | DIFF_FORMAT_SUMMARY;
1243 rev.verbose_header = 1;
1244 rev.show_root_diff = 1;
1245 get_commit_format(format.buf, &rev);
1246 rev.always_show_header = 0;
1247 rev.diffopt.detect_rename = DIFF_DETECT_RENAME;
1248 rev.diffopt.break_opt = 0;
1249 diff_setup_done(&rev.diffopt);
1251 head = resolve_ref_unsafe("HEAD", 0, NULL, NULL);
1253 die_errno(_("unable to resolve HEAD after creating commit"));
1254 if (!strcmp(head, "HEAD"))
1255 head = _("detached HEAD");
1257 skip_prefix(head, "refs/heads/", &head);
1258 printf("[%s%s ", head, (flags & SUMMARY_INITIAL_COMMIT) ?
1259 _(" (root-commit)") : "");
1261 if (!log_tree_commit(&rev, commit)) {
1262 rev.always_show_header = 1;
1263 rev.use_terminator = 1;
1264 log_tree_commit(&rev, commit);
1267 strbuf_release(&format);
1270 static int parse_head(struct repository *r, struct commit **head)
1272 struct commit *current_head;
1273 struct object_id oid;
1275 if (get_oid("HEAD", &oid)) {
1276 current_head = NULL;
1278 current_head = lookup_commit_reference(r, &oid);
1280 return error(_("could not parse HEAD"));
1281 if (!oideq(&oid, ¤t_head->object.oid)) {
1282 warning(_("HEAD %s is not a commit!"),
1285 if (parse_commit(current_head))
1286 return error(_("could not parse HEAD commit"));
1288 *head = current_head;
1294 * Try to commit without forking 'git commit'. In some cases we need
1295 * to run 'git commit' to display an error message
1298 * -1 - error unable to commit
1300 * 1 - run 'git commit'
1302 static int try_to_commit(struct repository *r,
1303 struct strbuf *msg, const char *author,
1304 struct replay_opts *opts, unsigned int flags,
1305 struct object_id *oid)
1307 struct object_id tree;
1308 struct commit *current_head = NULL;
1309 struct commit_list *parents = NULL;
1310 struct commit_extra_header *extra = NULL;
1311 struct strbuf err = STRBUF_INIT;
1312 struct strbuf commit_msg = STRBUF_INIT;
1313 char *amend_author = NULL;
1314 const char *hook_commit = NULL;
1315 enum commit_msg_cleanup_mode cleanup;
1318 if (parse_head(r, ¤t_head))
1321 if (flags & AMEND_MSG) {
1322 const char *exclude_gpgsig[] = { "gpgsig", NULL };
1323 const char *out_enc = get_commit_output_encoding();
1324 const char *message = logmsg_reencode(current_head, NULL,
1328 const char *orig_message = NULL;
1330 find_commit_subject(message, &orig_message);
1332 strbuf_addstr(msg, orig_message);
1333 hook_commit = "HEAD";
1335 author = amend_author = get_author(message);
1336 unuse_commit_buffer(current_head, message);
1338 res = error(_("unable to parse commit author"));
1341 parents = copy_commit_list(current_head->parents);
1342 extra = read_commit_extra_headers(current_head, exclude_gpgsig);
1343 } else if (current_head &&
1344 (!(flags & CREATE_ROOT_COMMIT) || (flags & AMEND_MSG))) {
1345 commit_list_insert(current_head, &parents);
1348 if (write_index_as_tree(&tree, r->index, r->index_file, 0, NULL)) {
1349 res = error(_("git write-tree failed to write a tree"));
1353 if (!(flags & ALLOW_EMPTY)) {
1354 struct commit *first_parent = current_head;
1356 if (flags & AMEND_MSG) {
1357 if (current_head->parents) {
1358 first_parent = current_head->parents->item;
1359 if (repo_parse_commit(r, first_parent)) {
1360 res = error(_("could not parse HEAD commit"));
1364 first_parent = NULL;
1367 if (oideq(first_parent
1368 ? get_commit_tree_oid(first_parent)
1369 : the_hash_algo->empty_tree,
1371 res = 1; /* run 'git commit' to display error message */
1376 if (find_hook("prepare-commit-msg")) {
1377 res = run_prepare_commit_msg_hook(r, msg, hook_commit);
1380 if (strbuf_read_file(&commit_msg, git_path_commit_editmsg(),
1382 res = error_errno(_("unable to read commit message "
1384 git_path_commit_editmsg());
1390 if (flags & CLEANUP_MSG)
1391 cleanup = COMMIT_MSG_CLEANUP_ALL;
1392 else if ((opts->signoff || opts->record_origin) &&
1393 !opts->explicit_cleanup)
1394 cleanup = COMMIT_MSG_CLEANUP_SPACE;
1396 cleanup = opts->default_msg_cleanup;
1398 if (cleanup != COMMIT_MSG_CLEANUP_NONE)
1399 strbuf_stripspace(msg, cleanup == COMMIT_MSG_CLEANUP_ALL);
1400 if ((flags & EDIT_MSG) && message_is_empty(msg, cleanup)) {
1401 res = 1; /* run 'git commit' to display error message */
1407 if (commit_tree_extended(msg->buf, msg->len, &tree, parents,
1408 oid, author, opts->gpg_sign, extra)) {
1409 res = error(_("failed to write commit object"));
1413 if (update_head_with_reflog(current_head, oid,
1414 getenv("GIT_REFLOG_ACTION"), msg, &err)) {
1415 res = error("%s", err.buf);
1419 run_commit_hook(0, r->index_file, "post-commit", NULL);
1420 if (flags & AMEND_MSG)
1421 commit_post_rewrite(r, current_head, oid);
1424 free_commit_extra_headers(extra);
1425 strbuf_release(&err);
1426 strbuf_release(&commit_msg);
1432 static int write_rebase_head(struct object_id *oid)
1434 if (update_ref("rebase", "REBASE_HEAD", oid,
1435 NULL, REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1436 return error(_("could not update %s"), "REBASE_HEAD");
1441 static int do_commit(struct repository *r,
1442 const char *msg_file, const char *author,
1443 struct replay_opts *opts, unsigned int flags,
1444 struct object_id *oid)
1448 if (!(flags & EDIT_MSG) && !(flags & VERIFY_MSG)) {
1449 struct object_id oid;
1450 struct strbuf sb = STRBUF_INIT;
1452 if (msg_file && strbuf_read_file(&sb, msg_file, 2048) < 0)
1453 return error_errno(_("unable to read commit message "
1457 res = try_to_commit(r, msg_file ? &sb : NULL,
1458 author, opts, flags, &oid);
1459 strbuf_release(&sb);
1461 unlink(git_path_cherry_pick_head(r));
1462 unlink(git_path_merge_msg(r));
1463 if (!is_rebase_i(opts))
1464 print_commit_summary(r, NULL, &oid,
1465 SUMMARY_SHOW_AUTHOR_DATE);
1470 if (is_rebase_i(opts) && oid)
1471 if (write_rebase_head(oid))
1473 return run_git_commit(r, msg_file, opts, flags);
1479 static int is_original_commit_empty(struct commit *commit)
1481 const struct object_id *ptree_oid;
1483 if (parse_commit(commit))
1484 return error(_("could not parse commit %s"),
1485 oid_to_hex(&commit->object.oid));
1486 if (commit->parents) {
1487 struct commit *parent = commit->parents->item;
1488 if (parse_commit(parent))
1489 return error(_("could not parse parent commit %s"),
1490 oid_to_hex(&parent->object.oid));
1491 ptree_oid = get_commit_tree_oid(parent);
1493 ptree_oid = the_hash_algo->empty_tree; /* commit is root */
1496 return oideq(ptree_oid, get_commit_tree_oid(commit));
1500 * Do we run "git commit" with "--allow-empty"?
1502 static int allow_empty(struct repository *r,
1503 struct replay_opts *opts,
1504 struct commit *commit)
1506 int index_unchanged, empty_commit;
1511 * (1) we do not allow empty at all and error out.
1513 * (2) we allow ones that were initially empty, but
1514 * forbid the ones that become empty;
1516 * (3) we allow both.
1518 if (!opts->allow_empty)
1519 return 0; /* let "git commit" barf as necessary */
1521 index_unchanged = is_index_unchanged(r);
1522 if (index_unchanged < 0)
1523 return index_unchanged;
1524 if (!index_unchanged)
1525 return 0; /* we do not have to say --allow-empty */
1527 if (opts->keep_redundant_commits)
1530 empty_commit = is_original_commit_empty(commit);
1531 if (empty_commit < 0)
1532 return empty_commit;
1542 } todo_command_info[] = {
1559 static const char *command_to_string(const enum todo_command command)
1561 if (command < TODO_COMMENT)
1562 return todo_command_info[command].str;
1563 die(_("unknown command: %d"), command);
1566 static char command_to_char(const enum todo_command command)
1568 if (command < TODO_COMMENT && todo_command_info[command].c)
1569 return todo_command_info[command].c;
1570 return comment_line_char;
1573 static int is_noop(const enum todo_command command)
1575 return TODO_NOOP <= command;
1578 static int is_fixup(enum todo_command command)
1580 return command == TODO_FIXUP || command == TODO_SQUASH;
1583 /* Does this command create a (non-merge) commit? */
1584 static int is_pick_or_similar(enum todo_command command)
1599 static int update_squash_messages(struct repository *r,
1600 enum todo_command command,
1601 struct commit *commit,
1602 struct replay_opts *opts)
1604 struct strbuf buf = STRBUF_INIT;
1606 const char *message, *body;
1607 const char *encoding = get_commit_output_encoding();
1609 if (opts->current_fixup_count > 0) {
1610 struct strbuf header = STRBUF_INIT;
1613 if (strbuf_read_file(&buf, rebase_path_squash_msg(), 9) <= 0)
1614 return error(_("could not read '%s'"),
1615 rebase_path_squash_msg());
1617 eol = buf.buf[0] != comment_line_char ?
1618 buf.buf : strchrnul(buf.buf, '\n');
1620 strbuf_addf(&header, "%c ", comment_line_char);
1621 strbuf_addf(&header, _("This is a combination of %d commits."),
1622 opts->current_fixup_count + 2);
1623 strbuf_splice(&buf, 0, eol - buf.buf, header.buf, header.len);
1624 strbuf_release(&header);
1626 struct object_id head;
1627 struct commit *head_commit;
1628 const char *head_message, *body;
1630 if (get_oid("HEAD", &head))
1631 return error(_("need a HEAD to fixup"));
1632 if (!(head_commit = lookup_commit_reference(r, &head)))
1633 return error(_("could not read HEAD"));
1634 if (!(head_message = logmsg_reencode(head_commit, NULL, encoding)))
1635 return error(_("could not read HEAD's commit message"));
1637 find_commit_subject(head_message, &body);
1638 if (write_message(body, strlen(body),
1639 rebase_path_fixup_msg(), 0)) {
1640 unuse_commit_buffer(head_commit, head_message);
1641 return error(_("cannot write '%s'"),
1642 rebase_path_fixup_msg());
1645 strbuf_addf(&buf, "%c ", comment_line_char);
1646 strbuf_addf(&buf, _("This is a combination of %d commits."), 2);
1647 strbuf_addf(&buf, "\n%c ", comment_line_char);
1648 strbuf_addstr(&buf, _("This is the 1st commit message:"));
1649 strbuf_addstr(&buf, "\n\n");
1650 strbuf_addstr(&buf, body);
1652 unuse_commit_buffer(head_commit, head_message);
1655 if (!(message = logmsg_reencode(commit, NULL, encoding)))
1656 return error(_("could not read commit message of %s"),
1657 oid_to_hex(&commit->object.oid));
1658 find_commit_subject(message, &body);
1660 if (command == TODO_SQUASH) {
1661 unlink(rebase_path_fixup_msg());
1662 strbuf_addf(&buf, "\n%c ", comment_line_char);
1663 strbuf_addf(&buf, _("This is the commit message #%d:"),
1664 ++opts->current_fixup_count + 1);
1665 strbuf_addstr(&buf, "\n\n");
1666 strbuf_addstr(&buf, body);
1667 } else if (command == TODO_FIXUP) {
1668 strbuf_addf(&buf, "\n%c ", comment_line_char);
1669 strbuf_addf(&buf, _("The commit message #%d will be skipped:"),
1670 ++opts->current_fixup_count + 1);
1671 strbuf_addstr(&buf, "\n\n");
1672 strbuf_add_commented_lines(&buf, body, strlen(body));
1674 return error(_("unknown command: %d"), command);
1675 unuse_commit_buffer(commit, message);
1677 res = write_message(buf.buf, buf.len, rebase_path_squash_msg(), 0);
1678 strbuf_release(&buf);
1681 strbuf_addf(&opts->current_fixups, "%s%s %s",
1682 opts->current_fixups.len ? "\n" : "",
1683 command_to_string(command),
1684 oid_to_hex(&commit->object.oid));
1685 res = write_message(opts->current_fixups.buf,
1686 opts->current_fixups.len,
1687 rebase_path_current_fixups(), 0);
1693 static void flush_rewritten_pending(void)
1695 struct strbuf buf = STRBUF_INIT;
1696 struct object_id newoid;
1699 if (strbuf_read_file(&buf, rebase_path_rewritten_pending(), (GIT_MAX_HEXSZ + 1) * 2) > 0 &&
1700 !get_oid("HEAD", &newoid) &&
1701 (out = fopen_or_warn(rebase_path_rewritten_list(), "a"))) {
1702 char *bol = buf.buf, *eol;
1705 eol = strchrnul(bol, '\n');
1706 fprintf(out, "%.*s %s\n", (int)(eol - bol),
1707 bol, oid_to_hex(&newoid));
1713 unlink(rebase_path_rewritten_pending());
1715 strbuf_release(&buf);
1718 static void record_in_rewritten(struct object_id *oid,
1719 enum todo_command next_command)
1721 FILE *out = fopen_or_warn(rebase_path_rewritten_pending(), "a");
1726 fprintf(out, "%s\n", oid_to_hex(oid));
1729 if (!is_fixup(next_command))
1730 flush_rewritten_pending();
1733 static int do_pick_commit(struct repository *r,
1734 enum todo_command command,
1735 struct commit *commit,
1736 struct replay_opts *opts,
1737 int final_fixup, int *check_todo)
1739 unsigned int flags = opts->edit ? EDIT_MSG : 0;
1740 const char *msg_file = opts->edit ? NULL : git_path_merge_msg(r);
1741 struct object_id head;
1742 struct commit *base, *next, *parent;
1743 const char *base_label, *next_label;
1744 char *author = NULL;
1745 struct commit_message msg = { NULL, NULL, NULL, NULL };
1746 struct strbuf msgbuf = STRBUF_INIT;
1747 int res, unborn = 0, reword = 0, allow;
1749 if (opts->no_commit) {
1751 * We do not intend to commit immediately. We just want to
1752 * merge the differences in, so let's compute the tree
1753 * that represents the "current" state for merge-recursive
1756 if (write_index_as_tree(&head, r->index, r->index_file, 0, NULL))
1757 return error(_("your index file is unmerged."));
1759 unborn = get_oid("HEAD", &head);
1760 /* Do we want to generate a root commit? */
1761 if (is_pick_or_similar(command) && opts->have_squash_onto &&
1762 oideq(&head, &opts->squash_onto)) {
1763 if (is_fixup(command))
1764 return error(_("cannot fixup root commit"));
1765 flags |= CREATE_ROOT_COMMIT;
1768 oidcpy(&head, the_hash_algo->empty_tree);
1769 if (index_differs_from(r, unborn ? empty_tree_oid_hex() : "HEAD",
1771 return error_dirty_index(r, opts);
1773 discard_index(r->index);
1775 if (!commit->parents)
1777 else if (commit->parents->next) {
1778 /* Reverting or cherry-picking a merge commit */
1780 struct commit_list *p;
1782 if (!opts->mainline)
1783 return error(_("commit %s is a merge but no -m option was given."),
1784 oid_to_hex(&commit->object.oid));
1786 for (cnt = 1, p = commit->parents;
1787 cnt != opts->mainline && p;
1790 if (cnt != opts->mainline || !p)
1791 return error(_("commit %s does not have parent %d"),
1792 oid_to_hex(&commit->object.oid), opts->mainline);
1794 } else if (1 < opts->mainline)
1796 * Non-first parent explicitly specified as mainline for
1799 return error(_("commit %s does not have parent %d"),
1800 oid_to_hex(&commit->object.oid), opts->mainline);
1802 parent = commit->parents->item;
1804 if (get_message(commit, &msg) != 0)
1805 return error(_("cannot get commit message for %s"),
1806 oid_to_hex(&commit->object.oid));
1808 if (opts->allow_ff && !is_fixup(command) &&
1809 ((parent && oideq(&parent->object.oid, &head)) ||
1810 (!parent && unborn))) {
1811 if (is_rebase_i(opts))
1812 write_author_script(msg.message);
1813 res = fast_forward_to(r, &commit->object.oid, &head, unborn,
1815 if (res || command != TODO_REWORD)
1819 goto fast_forward_edit;
1821 if (parent && parse_commit(parent) < 0)
1822 /* TRANSLATORS: The first %s will be a "todo" command like
1823 "revert" or "pick", the second %s a SHA1. */
1824 return error(_("%s: cannot parse parent commit %s"),
1825 command_to_string(command),
1826 oid_to_hex(&parent->object.oid));
1829 * "commit" is an existing commit. We would want to apply
1830 * the difference it introduces since its first parent "prev"
1831 * on top of the current HEAD if we are cherry-pick. Or the
1832 * reverse of it if we are revert.
1835 if (command == TODO_REVERT) {
1837 base_label = msg.label;
1839 next_label = msg.parent_label;
1840 strbuf_addstr(&msgbuf, "Revert \"");
1841 strbuf_addstr(&msgbuf, msg.subject);
1842 strbuf_addstr(&msgbuf, "\"\n\nThis reverts commit ");
1843 strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1845 if (commit->parents && commit->parents->next) {
1846 strbuf_addstr(&msgbuf, ", reversing\nchanges made to ");
1847 strbuf_addstr(&msgbuf, oid_to_hex(&parent->object.oid));
1849 strbuf_addstr(&msgbuf, ".\n");
1854 base_label = msg.parent_label;
1856 next_label = msg.label;
1858 /* Append the commit log message to msgbuf. */
1859 if (find_commit_subject(msg.message, &p))
1860 strbuf_addstr(&msgbuf, p);
1862 if (opts->record_origin) {
1863 strbuf_complete_line(&msgbuf);
1864 if (!has_conforming_footer(&msgbuf, NULL, 0))
1865 strbuf_addch(&msgbuf, '\n');
1866 strbuf_addstr(&msgbuf, cherry_picked_prefix);
1867 strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1868 strbuf_addstr(&msgbuf, ")\n");
1870 if (!is_fixup(command))
1871 author = get_author(msg.message);
1874 if (command == TODO_REWORD)
1876 else if (is_fixup(command)) {
1877 if (update_squash_messages(r, command, commit, opts))
1881 msg_file = rebase_path_squash_msg();
1882 else if (file_exists(rebase_path_fixup_msg())) {
1883 flags |= CLEANUP_MSG;
1884 msg_file = rebase_path_fixup_msg();
1886 const char *dest = git_path_squash_msg(r);
1888 if (copy_file(dest, rebase_path_squash_msg(), 0666))
1889 return error(_("could not rename '%s' to '%s'"),
1890 rebase_path_squash_msg(), dest);
1891 unlink(git_path_merge_msg(r));
1897 if (opts->signoff && !is_fixup(command))
1898 append_signoff(&msgbuf, 0, 0);
1900 if (is_rebase_i(opts) && write_author_script(msg.message) < 0)
1902 else if (!opts->strategy || !strcmp(opts->strategy, "recursive") || command == TODO_REVERT) {
1903 res = do_recursive_merge(r, base, next, base_label, next_label,
1904 &head, &msgbuf, opts);
1908 res |= write_message(msgbuf.buf, msgbuf.len,
1909 git_path_merge_msg(r), 0);
1911 struct commit_list *common = NULL;
1912 struct commit_list *remotes = NULL;
1914 res = write_message(msgbuf.buf, msgbuf.len,
1915 git_path_merge_msg(r), 0);
1917 commit_list_insert(base, &common);
1918 commit_list_insert(next, &remotes);
1919 res |= try_merge_command(r, opts->strategy,
1920 opts->xopts_nr, (const char **)opts->xopts,
1921 common, oid_to_hex(&head), remotes);
1922 free_commit_list(common);
1923 free_commit_list(remotes);
1925 strbuf_release(&msgbuf);
1928 * If the merge was clean or if it failed due to conflict, we write
1929 * CHERRY_PICK_HEAD for the subsequent invocation of commit to use.
1930 * However, if the merge did not even start, then we don't want to
1933 if ((command == TODO_PICK || command == TODO_REWORD ||
1934 command == TODO_EDIT) && !opts->no_commit &&
1935 (res == 0 || res == 1) &&
1936 update_ref(NULL, "CHERRY_PICK_HEAD", &commit->object.oid, NULL,
1937 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1939 if (command == TODO_REVERT && ((opts->no_commit && res == 0) || res == 1) &&
1940 update_ref(NULL, "REVERT_HEAD", &commit->object.oid, NULL,
1941 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1945 error(command == TODO_REVERT
1946 ? _("could not revert %s... %s")
1947 : _("could not apply %s... %s"),
1948 short_commit_name(commit), msg.subject);
1949 print_advice(r, res == 1, opts);
1950 repo_rerere(r, opts->allow_rerere_auto);
1954 allow = allow_empty(r, opts, commit);
1959 flags |= ALLOW_EMPTY;
1960 if (!opts->no_commit) {
1961 if (author || command == TODO_REVERT || (flags & AMEND_MSG))
1962 res = do_commit(r, msg_file, author, opts, flags,
1963 commit? &commit->object.oid : NULL);
1965 res = error(_("unable to parse commit author"));
1966 *check_todo = !!(flags & EDIT_MSG);
1967 if (!res && reword) {
1969 res = run_git_commit(r, NULL, opts, EDIT_MSG |
1970 VERIFY_MSG | AMEND_MSG |
1971 (flags & ALLOW_EMPTY));
1977 if (!res && final_fixup) {
1978 unlink(rebase_path_fixup_msg());
1979 unlink(rebase_path_squash_msg());
1980 unlink(rebase_path_current_fixups());
1981 strbuf_reset(&opts->current_fixups);
1982 opts->current_fixup_count = 0;
1986 free_message(commit, &msg);
1988 update_abort_safety_file();
1993 static int prepare_revs(struct replay_opts *opts)
1996 * picking (but not reverting) ranges (but not individual revisions)
1997 * should be done in reverse
1999 if (opts->action == REPLAY_PICK && !opts->revs->no_walk)
2000 opts->revs->reverse ^= 1;
2002 if (prepare_revision_walk(opts->revs))
2003 return error(_("revision walk setup failed"));
2008 static int read_and_refresh_cache(struct repository *r,
2009 struct replay_opts *opts)
2011 struct lock_file index_lock = LOCK_INIT;
2012 int index_fd = repo_hold_locked_index(r, &index_lock, 0);
2013 if (repo_read_index(r) < 0) {
2014 rollback_lock_file(&index_lock);
2015 return error(_("git %s: failed to read the index"),
2016 _(action_name(opts)));
2018 refresh_index(r->index, REFRESH_QUIET|REFRESH_UNMERGED, NULL, NULL, NULL);
2019 if (index_fd >= 0) {
2020 if (write_locked_index(r->index, &index_lock,
2021 COMMIT_LOCK | SKIP_IF_UNCHANGED)) {
2022 return error(_("git %s: failed to refresh the index"),
2023 _(action_name(opts)));
2029 enum todo_item_flags {
2030 TODO_EDIT_MERGE_MSG = 1
2033 void todo_list_release(struct todo_list *todo_list)
2035 strbuf_release(&todo_list->buf);
2036 FREE_AND_NULL(todo_list->items);
2037 todo_list->nr = todo_list->alloc = 0;
2040 static struct todo_item *append_new_todo(struct todo_list *todo_list)
2042 ALLOC_GROW(todo_list->items, todo_list->nr + 1, todo_list->alloc);
2043 return todo_list->items + todo_list->nr++;
2046 const char *todo_item_get_arg(struct todo_list *todo_list,
2047 struct todo_item *item)
2049 return todo_list->buf.buf + item->arg_offset;
2052 static int is_command(enum todo_command command, const char **bol)
2054 const char *str = todo_command_info[command].str;
2055 const char nick = todo_command_info[command].c;
2056 const char *p = *bol + 1;
2058 return skip_prefix(*bol, str, bol) ||
2059 ((nick && **bol == nick) &&
2060 (*p == ' ' || *p == '\t' || *p == '\n' || *p == '\r' || !*p) &&
2064 static int parse_insn_line(struct repository *r, struct todo_item *item,
2065 const char *buf, const char *bol, char *eol)
2067 struct object_id commit_oid;
2068 char *end_of_object_name;
2069 int i, saved, status, padding;
2074 bol += strspn(bol, " \t");
2076 if (bol == eol || *bol == '\r' || *bol == comment_line_char) {
2077 item->command = TODO_COMMENT;
2078 item->commit = NULL;
2079 item->arg_offset = bol - buf;
2080 item->arg_len = eol - bol;
2084 for (i = 0; i < TODO_COMMENT; i++)
2085 if (is_command(i, &bol)) {
2089 if (i >= TODO_COMMENT)
2092 /* Eat up extra spaces/ tabs before object name */
2093 padding = strspn(bol, " \t");
2096 if (item->command == TODO_NOOP || item->command == TODO_BREAK) {
2098 return error(_("%s does not accept arguments: '%s'"),
2099 command_to_string(item->command), bol);
2100 item->commit = NULL;
2101 item->arg_offset = bol - buf;
2102 item->arg_len = eol - bol;
2107 return error(_("missing arguments for %s"),
2108 command_to_string(item->command));
2110 if (item->command == TODO_EXEC || item->command == TODO_LABEL ||
2111 item->command == TODO_RESET) {
2112 item->commit = NULL;
2113 item->arg_offset = bol - buf;
2114 item->arg_len = (int)(eol - bol);
2118 if (item->command == TODO_MERGE) {
2119 if (skip_prefix(bol, "-C", &bol))
2120 bol += strspn(bol, " \t");
2121 else if (skip_prefix(bol, "-c", &bol)) {
2122 bol += strspn(bol, " \t");
2123 item->flags |= TODO_EDIT_MERGE_MSG;
2125 item->flags |= TODO_EDIT_MERGE_MSG;
2126 item->commit = NULL;
2127 item->arg_offset = bol - buf;
2128 item->arg_len = (int)(eol - bol);
2133 end_of_object_name = (char *) bol + strcspn(bol, " \t\n");
2134 saved = *end_of_object_name;
2135 *end_of_object_name = '\0';
2136 status = get_oid(bol, &commit_oid);
2137 *end_of_object_name = saved;
2139 bol = end_of_object_name + strspn(end_of_object_name, " \t");
2140 item->arg_offset = bol - buf;
2141 item->arg_len = (int)(eol - bol);
2144 return error(_("could not parse '%.*s'"),
2145 (int)(end_of_object_name - bol), bol);
2147 item->commit = lookup_commit_reference(r, &commit_oid);
2148 return !item->commit;
2151 int sequencer_get_last_command(struct repository *r, enum replay_action *action)
2153 const char *todo_file, *bol;
2154 struct strbuf buf = STRBUF_INIT;
2157 todo_file = git_path_todo_file();
2158 if (strbuf_read_file(&buf, todo_file, 0) < 0) {
2159 if (errno == ENOENT || errno == ENOTDIR)
2162 return error_errno("unable to open '%s'", todo_file);
2164 bol = buf.buf + strspn(buf.buf, " \t\r\n");
2165 if (is_command(TODO_PICK, &bol) && (*bol == ' ' || *bol == '\t'))
2166 *action = REPLAY_PICK;
2167 else if (is_command(TODO_REVERT, &bol) &&
2168 (*bol == ' ' || *bol == '\t'))
2169 *action = REPLAY_REVERT;
2173 strbuf_release(&buf);
2178 int todo_list_parse_insn_buffer(struct repository *r, char *buf,
2179 struct todo_list *todo_list)
2181 struct todo_item *item;
2182 char *p = buf, *next_p;
2183 int i, res = 0, fixup_okay = file_exists(rebase_path_done());
2185 todo_list->current = todo_list->nr = 0;
2187 for (i = 1; *p; i++, p = next_p) {
2188 char *eol = strchrnul(p, '\n');
2190 next_p = *eol ? eol + 1 /* skip LF */ : eol;
2192 if (p != eol && eol[-1] == '\r')
2193 eol--; /* strip Carriage Return */
2195 item = append_new_todo(todo_list);
2196 item->offset_in_buf = p - todo_list->buf.buf;
2197 if (parse_insn_line(r, item, buf, p, eol)) {
2198 res = error(_("invalid line %d: %.*s"),
2199 i, (int)(eol - p), p);
2200 item->command = TODO_COMMENT + 1;
2201 item->arg_offset = p - buf;
2202 item->arg_len = (int)(eol - p);
2203 item->commit = NULL;
2208 else if (is_fixup(item->command))
2209 return error(_("cannot '%s' without a previous commit"),
2210 command_to_string(item->command));
2211 else if (!is_noop(item->command))
2218 static int count_commands(struct todo_list *todo_list)
2222 for (i = 0; i < todo_list->nr; i++)
2223 if (todo_list->items[i].command != TODO_COMMENT)
2229 static int get_item_line_offset(struct todo_list *todo_list, int index)
2231 return index < todo_list->nr ?
2232 todo_list->items[index].offset_in_buf : todo_list->buf.len;
2235 static const char *get_item_line(struct todo_list *todo_list, int index)
2237 return todo_list->buf.buf + get_item_line_offset(todo_list, index);
2240 static int get_item_line_length(struct todo_list *todo_list, int index)
2242 return get_item_line_offset(todo_list, index + 1)
2243 - get_item_line_offset(todo_list, index);
2246 static ssize_t strbuf_read_file_or_whine(struct strbuf *sb, const char *path)
2251 fd = open(path, O_RDONLY);
2253 return error_errno(_("could not open '%s'"), path);
2254 len = strbuf_read(sb, fd, 0);
2257 return error(_("could not read '%s'."), path);
2261 static int have_finished_the_last_pick(void)
2263 struct strbuf buf = STRBUF_INIT;
2265 const char *todo_path = git_path_todo_file();
2268 if (strbuf_read_file(&buf, todo_path, 0) < 0) {
2269 if (errno == ENOENT) {
2272 error_errno("unable to open '%s'", todo_path);
2276 /* If there is only one line then we are done */
2277 eol = strchr(buf.buf, '\n');
2278 if (!eol || !eol[1])
2281 strbuf_release(&buf);
2286 void sequencer_post_commit_cleanup(struct repository *r, int verbose)
2288 struct replay_opts opts = REPLAY_OPTS_INIT;
2289 int need_cleanup = 0;
2291 if (file_exists(git_path_cherry_pick_head(r))) {
2292 if (!unlink(git_path_cherry_pick_head(r)) && verbose)
2293 warning(_("cancelling a cherry picking in progress"));
2294 opts.action = REPLAY_PICK;
2298 if (file_exists(git_path_revert_head(r))) {
2299 if (!unlink(git_path_revert_head(r)) && verbose)
2300 warning(_("cancelling a revert in progress"));
2301 opts.action = REPLAY_REVERT;
2308 if (!have_finished_the_last_pick())
2311 sequencer_remove_state(&opts);
2314 static int read_populate_todo(struct repository *r,
2315 struct todo_list *todo_list,
2316 struct replay_opts *opts)
2319 const char *todo_file = get_todo_path(opts);
2322 strbuf_reset(&todo_list->buf);
2323 if (strbuf_read_file_or_whine(&todo_list->buf, todo_file) < 0)
2326 res = stat(todo_file, &st);
2328 return error(_("could not stat '%s'"), todo_file);
2329 fill_stat_data(&todo_list->stat, &st);
2331 res = todo_list_parse_insn_buffer(r, todo_list->buf.buf, todo_list);
2333 if (is_rebase_i(opts))
2334 return error(_("please fix this using "
2335 "'git rebase --edit-todo'."));
2336 return error(_("unusable instruction sheet: '%s'"), todo_file);
2339 if (!todo_list->nr &&
2340 (!is_rebase_i(opts) || !file_exists(rebase_path_done())))
2341 return error(_("no commits parsed."));
2343 if (!is_rebase_i(opts)) {
2344 enum todo_command valid =
2345 opts->action == REPLAY_PICK ? TODO_PICK : TODO_REVERT;
2348 for (i = 0; i < todo_list->nr; i++)
2349 if (valid == todo_list->items[i].command)
2351 else if (valid == TODO_PICK)
2352 return error(_("cannot cherry-pick during a revert."));
2354 return error(_("cannot revert during a cherry-pick."));
2357 if (is_rebase_i(opts)) {
2358 struct todo_list done = TODO_LIST_INIT;
2359 FILE *f = fopen_or_warn(rebase_path_msgtotal(), "w");
2361 if (strbuf_read_file(&done.buf, rebase_path_done(), 0) > 0 &&
2362 !todo_list_parse_insn_buffer(r, done.buf.buf, &done))
2363 todo_list->done_nr = count_commands(&done);
2365 todo_list->done_nr = 0;
2367 todo_list->total_nr = todo_list->done_nr
2368 + count_commands(todo_list);
2369 todo_list_release(&done);
2372 fprintf(f, "%d\n", todo_list->total_nr);
2380 static int git_config_string_dup(char **dest,
2381 const char *var, const char *value)
2384 return config_error_nonbool(var);
2386 *dest = xstrdup(value);
2390 static int populate_opts_cb(const char *key, const char *value, void *data)
2392 struct replay_opts *opts = data;
2397 else if (!strcmp(key, "options.no-commit"))
2398 opts->no_commit = git_config_bool_or_int(key, value, &error_flag);
2399 else if (!strcmp(key, "options.edit"))
2400 opts->edit = git_config_bool_or_int(key, value, &error_flag);
2401 else if (!strcmp(key, "options.allow-empty"))
2403 git_config_bool_or_int(key, value, &error_flag);
2404 else if (!strcmp(key, "options.allow-empty-message"))
2405 opts->allow_empty_message =
2406 git_config_bool_or_int(key, value, &error_flag);
2407 else if (!strcmp(key, "options.keep-redundant-commits"))
2408 opts->keep_redundant_commits =
2409 git_config_bool_or_int(key, value, &error_flag);
2410 else if (!strcmp(key, "options.signoff"))
2411 opts->signoff = git_config_bool_or_int(key, value, &error_flag);
2412 else if (!strcmp(key, "options.record-origin"))
2413 opts->record_origin = git_config_bool_or_int(key, value, &error_flag);
2414 else if (!strcmp(key, "options.allow-ff"))
2415 opts->allow_ff = git_config_bool_or_int(key, value, &error_flag);
2416 else if (!strcmp(key, "options.mainline"))
2417 opts->mainline = git_config_int(key, value);
2418 else if (!strcmp(key, "options.strategy"))
2419 git_config_string_dup(&opts->strategy, key, value);
2420 else if (!strcmp(key, "options.gpg-sign"))
2421 git_config_string_dup(&opts->gpg_sign, key, value);
2422 else if (!strcmp(key, "options.strategy-option")) {
2423 ALLOC_GROW(opts->xopts, opts->xopts_nr + 1, opts->xopts_alloc);
2424 opts->xopts[opts->xopts_nr++] = xstrdup(value);
2425 } else if (!strcmp(key, "options.allow-rerere-auto"))
2426 opts->allow_rerere_auto =
2427 git_config_bool_or_int(key, value, &error_flag) ?
2428 RERERE_AUTOUPDATE : RERERE_NOAUTOUPDATE;
2429 else if (!strcmp(key, "options.default-msg-cleanup")) {
2430 opts->explicit_cleanup = 1;
2431 opts->default_msg_cleanup = get_cleanup_mode(value, 1);
2433 return error(_("invalid key: %s"), key);
2436 return error(_("invalid value for %s: %s"), key, value);
2441 void parse_strategy_opts(struct replay_opts *opts, char *raw_opts)
2444 char *strategy_opts_string = raw_opts;
2446 if (*strategy_opts_string == ' ')
2447 strategy_opts_string++;
2449 opts->xopts_nr = split_cmdline(strategy_opts_string,
2450 (const char ***)&opts->xopts);
2451 for (i = 0; i < opts->xopts_nr; i++) {
2452 const char *arg = opts->xopts[i];
2454 skip_prefix(arg, "--", &arg);
2455 opts->xopts[i] = xstrdup(arg);
2459 static void read_strategy_opts(struct replay_opts *opts, struct strbuf *buf)
2462 if (!read_oneliner(buf, rebase_path_strategy(), 0))
2464 opts->strategy = strbuf_detach(buf, NULL);
2465 if (!read_oneliner(buf, rebase_path_strategy_opts(), 0))
2468 parse_strategy_opts(opts, buf->buf);
2471 static int read_populate_opts(struct replay_opts *opts)
2473 if (is_rebase_i(opts)) {
2474 struct strbuf buf = STRBUF_INIT;
2476 if (read_oneliner(&buf, rebase_path_gpg_sign_opt(), 1)) {
2477 if (!starts_with(buf.buf, "-S"))
2480 free(opts->gpg_sign);
2481 opts->gpg_sign = xstrdup(buf.buf + 2);
2486 if (read_oneliner(&buf, rebase_path_allow_rerere_autoupdate(), 1)) {
2487 if (!strcmp(buf.buf, "--rerere-autoupdate"))
2488 opts->allow_rerere_auto = RERERE_AUTOUPDATE;
2489 else if (!strcmp(buf.buf, "--no-rerere-autoupdate"))
2490 opts->allow_rerere_auto = RERERE_NOAUTOUPDATE;
2494 if (file_exists(rebase_path_verbose()))
2497 if (file_exists(rebase_path_quiet()))
2500 if (file_exists(rebase_path_signoff())) {
2505 if (file_exists(rebase_path_reschedule_failed_exec()))
2506 opts->reschedule_failed_exec = 1;
2508 read_strategy_opts(opts, &buf);
2509 strbuf_release(&buf);
2511 if (read_oneliner(&opts->current_fixups,
2512 rebase_path_current_fixups(), 1)) {
2513 const char *p = opts->current_fixups.buf;
2514 opts->current_fixup_count = 1;
2515 while ((p = strchr(p, '\n'))) {
2516 opts->current_fixup_count++;
2521 if (read_oneliner(&buf, rebase_path_squash_onto(), 0)) {
2522 if (get_oid_hex(buf.buf, &opts->squash_onto) < 0)
2523 return error(_("unusable squash-onto"));
2524 opts->have_squash_onto = 1;
2530 if (!file_exists(git_path_opts_file()))
2533 * The function git_parse_source(), called from git_config_from_file(),
2534 * may die() in case of a syntactically incorrect file. We do not care
2535 * about this case, though, because we wrote that file ourselves, so we
2536 * are pretty certain that it is syntactically correct.
2538 if (git_config_from_file(populate_opts_cb, git_path_opts_file(), opts) < 0)
2539 return error(_("malformed options sheet: '%s'"),
2540 git_path_opts_file());
2544 static void write_strategy_opts(struct replay_opts *opts)
2547 struct strbuf buf = STRBUF_INIT;
2549 for (i = 0; i < opts->xopts_nr; ++i)
2550 strbuf_addf(&buf, " --%s", opts->xopts[i]);
2552 write_file(rebase_path_strategy_opts(), "%s\n", buf.buf);
2553 strbuf_release(&buf);
2556 int write_basic_state(struct replay_opts *opts, const char *head_name,
2557 struct commit *onto, const char *orig_head)
2559 const char *quiet = getenv("GIT_QUIET");
2562 write_file(rebase_path_head_name(), "%s\n", head_name);
2564 write_file(rebase_path_onto(), "%s\n",
2565 oid_to_hex(&onto->object.oid));
2567 write_file(rebase_path_orig_head(), "%s\n", orig_head);
2570 write_file(rebase_path_quiet(), "%s\n", quiet);
2572 write_file(rebase_path_verbose(), "%s", "");
2574 write_file(rebase_path_strategy(), "%s\n", opts->strategy);
2575 if (opts->xopts_nr > 0)
2576 write_strategy_opts(opts);
2578 if (opts->allow_rerere_auto == RERERE_AUTOUPDATE)
2579 write_file(rebase_path_allow_rerere_autoupdate(), "--rerere-autoupdate\n");
2580 else if (opts->allow_rerere_auto == RERERE_NOAUTOUPDATE)
2581 write_file(rebase_path_allow_rerere_autoupdate(), "--no-rerere-autoupdate\n");
2584 write_file(rebase_path_gpg_sign_opt(), "-S%s\n", opts->gpg_sign);
2586 write_file(rebase_path_signoff(), "--signoff\n");
2587 if (opts->reschedule_failed_exec)
2588 write_file(rebase_path_reschedule_failed_exec(), "%s", "");
2593 static int walk_revs_populate_todo(struct todo_list *todo_list,
2594 struct replay_opts *opts)
2596 enum todo_command command = opts->action == REPLAY_PICK ?
2597 TODO_PICK : TODO_REVERT;
2598 const char *command_string = todo_command_info[command].str;
2599 const char *encoding;
2600 struct commit *commit;
2602 if (prepare_revs(opts))
2605 encoding = get_log_output_encoding();
2607 while ((commit = get_revision(opts->revs))) {
2608 struct todo_item *item = append_new_todo(todo_list);
2609 const char *commit_buffer = logmsg_reencode(commit, NULL, encoding);
2610 const char *subject;
2613 item->command = command;
2614 item->commit = commit;
2615 item->arg_offset = 0;
2617 item->offset_in_buf = todo_list->buf.len;
2618 subject_len = find_commit_subject(commit_buffer, &subject);
2619 strbuf_addf(&todo_list->buf, "%s %s %.*s\n", command_string,
2620 short_commit_name(commit), subject_len, subject);
2621 unuse_commit_buffer(commit, commit_buffer);
2625 return error(_("empty commit set passed"));
2630 static int create_seq_dir(struct repository *r)
2632 enum replay_action action;
2633 const char *in_progress_error = NULL;
2634 const char *in_progress_advice = NULL;
2635 unsigned int advise_skip = file_exists(git_path_revert_head(r)) ||
2636 file_exists(git_path_cherry_pick_head(r));
2638 if (!sequencer_get_last_command(r, &action)) {
2641 in_progress_error = _("revert is already in progress");
2642 in_progress_advice =
2643 _("try \"git revert (--continue | %s--abort | --quit)\"");
2646 in_progress_error = _("cherry-pick is already in progress");
2647 in_progress_advice =
2648 _("try \"git cherry-pick (--continue | %s--abort | --quit)\"");
2651 BUG("unexpected action in create_seq_dir");
2654 if (in_progress_error) {
2655 error("%s", in_progress_error);
2656 if (advice_sequencer_in_use)
2657 advise(in_progress_advice,
2658 advise_skip ? "--skip | " : "");
2661 if (mkdir(git_path_seq_dir(), 0777) < 0)
2662 return error_errno(_("could not create sequencer directory '%s'"),
2663 git_path_seq_dir());
2668 static int save_head(const char *head)
2670 struct lock_file head_lock = LOCK_INIT;
2671 struct strbuf buf = STRBUF_INIT;
2675 fd = hold_lock_file_for_update(&head_lock, git_path_head_file(), 0);
2677 return error_errno(_("could not lock HEAD"));
2678 strbuf_addf(&buf, "%s\n", head);
2679 written = write_in_full(fd, buf.buf, buf.len);
2680 strbuf_release(&buf);
2682 error_errno(_("could not write to '%s'"), git_path_head_file());
2683 rollback_lock_file(&head_lock);
2686 if (commit_lock_file(&head_lock) < 0)
2687 return error(_("failed to finalize '%s'"), git_path_head_file());
2691 static int rollback_is_safe(void)
2693 struct strbuf sb = STRBUF_INIT;
2694 struct object_id expected_head, actual_head;
2696 if (strbuf_read_file(&sb, git_path_abort_safety_file(), 0) >= 0) {
2698 if (get_oid_hex(sb.buf, &expected_head)) {
2699 strbuf_release(&sb);
2700 die(_("could not parse %s"), git_path_abort_safety_file());
2702 strbuf_release(&sb);
2704 else if (errno == ENOENT)
2705 oidclr(&expected_head);
2707 die_errno(_("could not read '%s'"), git_path_abort_safety_file());
2709 if (get_oid("HEAD", &actual_head))
2710 oidclr(&actual_head);
2712 return oideq(&actual_head, &expected_head);
2715 static int reset_merge(const struct object_id *oid)
2718 struct argv_array argv = ARGV_ARRAY_INIT;
2720 argv_array_pushl(&argv, "reset", "--merge", NULL);
2722 if (!is_null_oid(oid))
2723 argv_array_push(&argv, oid_to_hex(oid));
2725 ret = run_command_v_opt(argv.argv, RUN_GIT_CMD);
2726 argv_array_clear(&argv);
2731 static int rollback_single_pick(struct repository *r)
2733 struct object_id head_oid;
2735 if (!file_exists(git_path_cherry_pick_head(r)) &&
2736 !file_exists(git_path_revert_head(r)))
2737 return error(_("no cherry-pick or revert in progress"));
2738 if (read_ref_full("HEAD", 0, &head_oid, NULL))
2739 return error(_("cannot resolve HEAD"));
2740 if (is_null_oid(&head_oid))
2741 return error(_("cannot abort from a branch yet to be born"));
2742 return reset_merge(&head_oid);
2745 static int skip_single_pick(void)
2747 struct object_id head;
2749 if (read_ref_full("HEAD", 0, &head, NULL))
2750 return error(_("cannot resolve HEAD"));
2751 return reset_merge(&head);
2754 int sequencer_rollback(struct repository *r, struct replay_opts *opts)
2757 struct object_id oid;
2758 struct strbuf buf = STRBUF_INIT;
2761 f = fopen(git_path_head_file(), "r");
2762 if (!f && errno == ENOENT) {
2764 * There is no multiple-cherry-pick in progress.
2765 * If CHERRY_PICK_HEAD or REVERT_HEAD indicates
2766 * a single-cherry-pick in progress, abort that.
2768 return rollback_single_pick(r);
2771 return error_errno(_("cannot open '%s'"), git_path_head_file());
2772 if (strbuf_getline_lf(&buf, f)) {
2773 error(_("cannot read '%s': %s"), git_path_head_file(),
2774 ferror(f) ? strerror(errno) : _("unexpected end of file"));
2779 if (parse_oid_hex(buf.buf, &oid, &p) || *p != '\0') {
2780 error(_("stored pre-cherry-pick HEAD file '%s' is corrupt"),
2781 git_path_head_file());
2784 if (is_null_oid(&oid)) {
2785 error(_("cannot abort from a branch yet to be born"));
2789 if (!rollback_is_safe()) {
2790 /* Do not error, just do not rollback */
2791 warning(_("You seem to have moved HEAD. "
2792 "Not rewinding, check your HEAD!"));
2794 if (reset_merge(&oid))
2796 strbuf_release(&buf);
2797 return sequencer_remove_state(opts);
2799 strbuf_release(&buf);
2803 int sequencer_skip(struct repository *r, struct replay_opts *opts)
2805 enum replay_action action = -1;
2806 sequencer_get_last_command(r, &action);
2809 * Check whether the subcommand requested to skip the commit is actually
2810 * in progress and that it's safe to skip the commit.
2812 * opts->action tells us which subcommand requested to skip the commit.
2813 * If the corresponding .git/<ACTION>_HEAD exists, we know that the
2814 * action is in progress and we can skip the commit.
2816 * Otherwise we check that the last instruction was related to the
2817 * particular subcommand we're trying to execute and barf if that's not
2820 * Finally we check that the rollback is "safe", i.e., has the HEAD
2821 * moved? In this case, it doesn't make sense to "reset the merge" and
2822 * "skip the commit" as the user already handled this by committing. But
2823 * we'd not want to barf here, instead give advice on how to proceed. We
2824 * only need to check that when .git/<ACTION>_HEAD doesn't exist because
2825 * it gets removed when the user commits, so if it still exists we're
2826 * sure the user can't have committed before.
2828 switch (opts->action) {
2830 if (!file_exists(git_path_revert_head(r))) {
2831 if (action != REPLAY_REVERT)
2832 return error(_("no revert in progress"));
2833 if (!rollback_is_safe())
2838 if (!file_exists(git_path_cherry_pick_head(r))) {
2839 if (action != REPLAY_PICK)
2840 return error(_("no cherry-pick in progress"));
2841 if (!rollback_is_safe())
2846 BUG("unexpected action in sequencer_skip");
2849 if (skip_single_pick())
2850 return error(_("failed to skip the commit"));
2851 if (!is_directory(git_path_seq_dir()))
2854 return sequencer_continue(r, opts);
2857 error(_("there is nothing to skip"));
2859 if (advice_resolve_conflict) {
2860 advise(_("have you committed already?\n"
2861 "try \"git %s --continue\""),
2862 action == REPLAY_REVERT ? "revert" : "cherry-pick");
2867 static int save_todo(struct todo_list *todo_list, struct replay_opts *opts)
2869 struct lock_file todo_lock = LOCK_INIT;
2870 const char *todo_path = get_todo_path(opts);
2871 int next = todo_list->current, offset, fd;
2874 * rebase -i writes "git-rebase-todo" without the currently executing
2875 * command, appending it to "done" instead.
2877 if (is_rebase_i(opts))
2880 fd = hold_lock_file_for_update(&todo_lock, todo_path, 0);
2882 return error_errno(_("could not lock '%s'"), todo_path);
2883 offset = get_item_line_offset(todo_list, next);
2884 if (write_in_full(fd, todo_list->buf.buf + offset,
2885 todo_list->buf.len - offset) < 0)
2886 return error_errno(_("could not write to '%s'"), todo_path);
2887 if (commit_lock_file(&todo_lock) < 0)
2888 return error(_("failed to finalize '%s'"), todo_path);
2890 if (is_rebase_i(opts) && next > 0) {
2891 const char *done = rebase_path_done();
2892 int fd = open(done, O_CREAT | O_WRONLY | O_APPEND, 0666);
2897 if (write_in_full(fd, get_item_line(todo_list, next - 1),
2898 get_item_line_length(todo_list, next - 1))
2900 ret = error_errno(_("could not write to '%s'"), done);
2902 ret = error_errno(_("failed to finalize '%s'"), done);
2908 static int save_opts(struct replay_opts *opts)
2910 const char *opts_file = git_path_opts_file();
2913 if (opts->no_commit)
2914 res |= git_config_set_in_file_gently(opts_file,
2915 "options.no-commit", "true");
2917 res |= git_config_set_in_file_gently(opts_file,
2918 "options.edit", "true");
2919 if (opts->allow_empty)
2920 res |= git_config_set_in_file_gently(opts_file,
2921 "options.allow-empty", "true");
2922 if (opts->allow_empty_message)
2923 res |= git_config_set_in_file_gently(opts_file,
2924 "options.allow-empty-message", "true");
2925 if (opts->keep_redundant_commits)
2926 res |= git_config_set_in_file_gently(opts_file,
2927 "options.keep-redundant-commits", "true");
2929 res |= git_config_set_in_file_gently(opts_file,
2930 "options.signoff", "true");
2931 if (opts->record_origin)
2932 res |= git_config_set_in_file_gently(opts_file,
2933 "options.record-origin", "true");
2935 res |= git_config_set_in_file_gently(opts_file,
2936 "options.allow-ff", "true");
2937 if (opts->mainline) {
2938 struct strbuf buf = STRBUF_INIT;
2939 strbuf_addf(&buf, "%d", opts->mainline);
2940 res |= git_config_set_in_file_gently(opts_file,
2941 "options.mainline", buf.buf);
2942 strbuf_release(&buf);
2945 res |= git_config_set_in_file_gently(opts_file,
2946 "options.strategy", opts->strategy);
2948 res |= git_config_set_in_file_gently(opts_file,
2949 "options.gpg-sign", opts->gpg_sign);
2952 for (i = 0; i < opts->xopts_nr; i++)
2953 res |= git_config_set_multivar_in_file_gently(opts_file,
2954 "options.strategy-option",
2955 opts->xopts[i], "^$", 0);
2957 if (opts->allow_rerere_auto)
2958 res |= git_config_set_in_file_gently(opts_file,
2959 "options.allow-rerere-auto",
2960 opts->allow_rerere_auto == RERERE_AUTOUPDATE ?
2963 if (opts->explicit_cleanup)
2964 res |= git_config_set_in_file_gently(opts_file,
2965 "options.default-msg-cleanup",
2966 describe_cleanup_mode(opts->default_msg_cleanup));
2970 static int make_patch(struct repository *r,
2971 struct commit *commit,
2972 struct replay_opts *opts)
2974 struct strbuf buf = STRBUF_INIT;
2975 struct rev_info log_tree_opt;
2976 const char *subject, *p;
2979 p = short_commit_name(commit);
2980 if (write_message(p, strlen(p), rebase_path_stopped_sha(), 1) < 0)
2982 res |= write_rebase_head(&commit->object.oid);
2984 strbuf_addf(&buf, "%s/patch", get_dir(opts));
2985 memset(&log_tree_opt, 0, sizeof(log_tree_opt));
2986 repo_init_revisions(r, &log_tree_opt, NULL);
2987 log_tree_opt.abbrev = 0;
2988 log_tree_opt.diff = 1;
2989 log_tree_opt.diffopt.output_format = DIFF_FORMAT_PATCH;
2990 log_tree_opt.disable_stdin = 1;
2991 log_tree_opt.no_commit_id = 1;
2992 log_tree_opt.diffopt.file = fopen(buf.buf, "w");
2993 log_tree_opt.diffopt.use_color = GIT_COLOR_NEVER;
2994 if (!log_tree_opt.diffopt.file)
2995 res |= error_errno(_("could not open '%s'"), buf.buf);
2997 res |= log_tree_commit(&log_tree_opt, commit);
2998 fclose(log_tree_opt.diffopt.file);
3002 strbuf_addf(&buf, "%s/message", get_dir(opts));
3003 if (!file_exists(buf.buf)) {
3004 const char *encoding = get_commit_output_encoding();
3005 const char *commit_buffer = logmsg_reencode(commit, NULL, encoding);
3006 find_commit_subject(commit_buffer, &subject);
3007 res |= write_message(subject, strlen(subject), buf.buf, 1);
3008 unuse_commit_buffer(commit, commit_buffer);
3010 strbuf_release(&buf);
3015 static int intend_to_amend(void)
3017 struct object_id head;
3020 if (get_oid("HEAD", &head))
3021 return error(_("cannot read HEAD"));
3023 p = oid_to_hex(&head);
3024 return write_message(p, strlen(p), rebase_path_amend(), 1);
3027 static int error_with_patch(struct repository *r,
3028 struct commit *commit,
3029 const char *subject, int subject_len,
3030 struct replay_opts *opts,
3031 int exit_code, int to_amend)
3034 if (make_patch(r, commit, opts))
3036 } else if (copy_file(rebase_path_message(),
3037 git_path_merge_msg(r), 0666))
3038 return error(_("unable to copy '%s' to '%s'"),
3039 git_path_merge_msg(r), rebase_path_message());
3042 if (intend_to_amend())
3046 _("You can amend the commit now, with\n"
3048 " git commit --amend %s\n"
3050 "Once you are satisfied with your changes, run\n"
3052 " git rebase --continue\n"),
3053 gpg_sign_opt_quoted(opts));
3054 } else if (exit_code) {
3056 fprintf_ln(stderr, _("Could not apply %s... %.*s"),
3057 short_commit_name(commit), subject_len, subject);
3060 * We don't have the hash of the parent so
3061 * just print the line from the todo file.
3063 fprintf_ln(stderr, _("Could not merge %.*s"),
3064 subject_len, subject);
3070 static int error_failed_squash(struct repository *r,
3071 struct commit *commit,
3072 struct replay_opts *opts,
3074 const char *subject)
3076 if (copy_file(rebase_path_message(), rebase_path_squash_msg(), 0666))
3077 return error(_("could not copy '%s' to '%s'"),
3078 rebase_path_squash_msg(), rebase_path_message());
3079 unlink(git_path_merge_msg(r));
3080 if (copy_file(git_path_merge_msg(r), rebase_path_message(), 0666))
3081 return error(_("could not copy '%s' to '%s'"),
3082 rebase_path_message(),
3083 git_path_merge_msg(r));
3084 return error_with_patch(r, commit, subject, subject_len, opts, 1, 0);
3087 static int do_exec(struct repository *r, const char *command_line)
3089 struct argv_array child_env = ARGV_ARRAY_INIT;
3090 const char *child_argv[] = { NULL, NULL };
3093 fprintf(stderr, "Executing: %s\n", command_line);
3094 child_argv[0] = command_line;
3095 argv_array_pushf(&child_env, "GIT_DIR=%s", absolute_path(get_git_dir()));
3096 argv_array_pushf(&child_env, "GIT_WORK_TREE=%s",
3097 absolute_path(get_git_work_tree()));
3098 status = run_command_v_opt_cd_env(child_argv, RUN_USING_SHELL, NULL,
3101 /* force re-reading of the cache */
3102 if (discard_index(r->index) < 0 || repo_read_index(r) < 0)
3103 return error(_("could not read index"));
3105 dirty = require_clean_work_tree(r, "rebase", NULL, 1, 1);
3108 warning(_("execution failed: %s\n%s"
3109 "You can fix the problem, and then run\n"
3111 " git rebase --continue\n"
3114 dirty ? N_("and made changes to the index and/or the "
3115 "working tree\n") : "");
3117 /* command not found */
3120 warning(_("execution succeeded: %s\nbut "
3121 "left changes to the index and/or the working tree\n"
3122 "Commit or stash your changes, and then run\n"
3124 " git rebase --continue\n"
3125 "\n"), command_line);
3129 argv_array_clear(&child_env);
3134 static int safe_append(const char *filename, const char *fmt, ...)
3137 struct lock_file lock = LOCK_INIT;
3138 int fd = hold_lock_file_for_update(&lock, filename,
3139 LOCK_REPORT_ON_ERROR);
3140 struct strbuf buf = STRBUF_INIT;
3145 if (strbuf_read_file(&buf, filename, 0) < 0 && errno != ENOENT) {
3146 error_errno(_("could not read '%s'"), filename);
3147 rollback_lock_file(&lock);
3150 strbuf_complete(&buf, '\n');
3152 strbuf_vaddf(&buf, fmt, ap);
3155 if (write_in_full(fd, buf.buf, buf.len) < 0) {
3156 error_errno(_("could not write to '%s'"), filename);
3157 strbuf_release(&buf);
3158 rollback_lock_file(&lock);
3161 if (commit_lock_file(&lock) < 0) {
3162 strbuf_release(&buf);
3163 rollback_lock_file(&lock);
3164 return error(_("failed to finalize '%s'"), filename);
3167 strbuf_release(&buf);
3171 static int do_label(struct repository *r, const char *name, int len)
3173 struct ref_store *refs = get_main_ref_store(r);
3174 struct ref_transaction *transaction;
3175 struct strbuf ref_name = STRBUF_INIT, err = STRBUF_INIT;
3176 struct strbuf msg = STRBUF_INIT;
3178 struct object_id head_oid;
3180 if (len == 1 && *name == '#')
3181 return error(_("illegal label name: '%.*s'"), len, name);
3183 strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
3184 strbuf_addf(&msg, "rebase -i (label) '%.*s'", len, name);
3186 transaction = ref_store_transaction_begin(refs, &err);
3188 error("%s", err.buf);
3190 } else if (get_oid("HEAD", &head_oid)) {
3191 error(_("could not read HEAD"));
3193 } else if (ref_transaction_update(transaction, ref_name.buf, &head_oid,
3194 NULL, 0, msg.buf, &err) < 0 ||
3195 ref_transaction_commit(transaction, &err)) {
3196 error("%s", err.buf);
3199 ref_transaction_free(transaction);
3200 strbuf_release(&err);
3201 strbuf_release(&msg);
3204 ret = safe_append(rebase_path_refs_to_delete(),
3205 "%s\n", ref_name.buf);
3206 strbuf_release(&ref_name);
3211 static const char *reflog_message(struct replay_opts *opts,
3212 const char *sub_action, const char *fmt, ...);
3214 static int do_reset(struct repository *r,
3215 const char *name, int len,
3216 struct replay_opts *opts)
3218 struct strbuf ref_name = STRBUF_INIT;
3219 struct object_id oid;
3220 struct lock_file lock = LOCK_INIT;
3221 struct tree_desc desc;
3223 struct unpack_trees_options unpack_tree_opts;
3226 if (repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0)
3229 if (len == 10 && !strncmp("[new root]", name, len)) {
3230 if (!opts->have_squash_onto) {
3232 if (commit_tree("", 0, the_hash_algo->empty_tree,
3233 NULL, &opts->squash_onto,
3235 return error(_("writing fake root commit"));
3236 opts->have_squash_onto = 1;
3237 hex = oid_to_hex(&opts->squash_onto);
3238 if (write_message(hex, strlen(hex),
3239 rebase_path_squash_onto(), 0))
3240 return error(_("writing squash-onto"));
3242 oidcpy(&oid, &opts->squash_onto);
3246 /* Determine the length of the label */
3247 for (i = 0; i < len; i++)
3248 if (isspace(name[i]))
3252 strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
3253 if (get_oid(ref_name.buf, &oid) &&
3254 get_oid(ref_name.buf + strlen("refs/rewritten/"), &oid)) {
3255 error(_("could not read '%s'"), ref_name.buf);
3256 rollback_lock_file(&lock);
3257 strbuf_release(&ref_name);
3262 memset(&unpack_tree_opts, 0, sizeof(unpack_tree_opts));
3263 setup_unpack_trees_porcelain(&unpack_tree_opts, "reset");
3264 unpack_tree_opts.head_idx = 1;
3265 unpack_tree_opts.src_index = r->index;
3266 unpack_tree_opts.dst_index = r->index;
3267 unpack_tree_opts.fn = oneway_merge;
3268 unpack_tree_opts.merge = 1;
3269 unpack_tree_opts.update = 1;
3271 if (repo_read_index_unmerged(r)) {
3272 rollback_lock_file(&lock);
3273 strbuf_release(&ref_name);
3274 return error_resolve_conflict(_(action_name(opts)));
3277 if (!fill_tree_descriptor(r, &desc, &oid)) {
3278 error(_("failed to find tree of %s"), oid_to_hex(&oid));
3279 rollback_lock_file(&lock);
3280 free((void *)desc.buffer);
3281 strbuf_release(&ref_name);
3285 if (unpack_trees(1, &desc, &unpack_tree_opts)) {
3286 rollback_lock_file(&lock);
3287 free((void *)desc.buffer);
3288 strbuf_release(&ref_name);
3292 tree = parse_tree_indirect(&oid);
3293 prime_cache_tree(r, r->index, tree);
3295 if (write_locked_index(r->index, &lock, COMMIT_LOCK) < 0)
3296 ret = error(_("could not write index"));
3297 free((void *)desc.buffer);
3300 ret = update_ref(reflog_message(opts, "reset", "'%.*s'",
3301 len, name), "HEAD", &oid,
3302 NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3304 strbuf_release(&ref_name);
3308 static struct commit *lookup_label(const char *label, int len,
3311 struct commit *commit;
3314 strbuf_addf(buf, "refs/rewritten/%.*s", len, label);
3315 commit = lookup_commit_reference_by_name(buf->buf);
3317 /* fall back to non-rewritten ref or commit */
3318 strbuf_splice(buf, 0, strlen("refs/rewritten/"), "", 0);
3319 commit = lookup_commit_reference_by_name(buf->buf);
3323 error(_("could not resolve '%s'"), buf->buf);
3328 static int do_merge(struct repository *r,
3329 struct commit *commit,
3330 const char *arg, int arg_len,
3331 int flags, struct replay_opts *opts)
3333 int run_commit_flags = (flags & TODO_EDIT_MERGE_MSG) ?
3334 EDIT_MSG | VERIFY_MSG : 0;
3335 struct strbuf ref_name = STRBUF_INIT;
3336 struct commit *head_commit, *merge_commit, *i;
3337 struct commit_list *bases, *j, *reversed = NULL;
3338 struct commit_list *to_merge = NULL, **tail = &to_merge;
3339 const char *strategy = !opts->xopts_nr &&
3340 (!opts->strategy || !strcmp(opts->strategy, "recursive")) ?
3341 NULL : opts->strategy;
3342 struct merge_options o;
3343 int merge_arg_len, oneline_offset, can_fast_forward, ret, k;
3344 static struct lock_file lock;
3347 if (repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0) {
3352 head_commit = lookup_commit_reference_by_name("HEAD");
3354 ret = error(_("cannot merge without a current revision"));
3359 * For octopus merges, the arg starts with the list of revisions to be
3360 * merged. The list is optionally followed by '#' and the oneline.
3362 merge_arg_len = oneline_offset = arg_len;
3363 for (p = arg; p - arg < arg_len; p += strspn(p, " \t\n")) {
3366 if (*p == '#' && (!p[1] || isspace(p[1]))) {
3367 p += 1 + strspn(p + 1, " \t\n");
3368 oneline_offset = p - arg;
3371 k = strcspn(p, " \t\n");
3374 merge_commit = lookup_label(p, k, &ref_name);
3375 if (!merge_commit) {
3376 ret = error(_("unable to parse '%.*s'"), k, p);
3379 tail = &commit_list_insert(merge_commit, tail)->next;
3381 merge_arg_len = p - arg;
3385 ret = error(_("nothing to merge: '%.*s'"), arg_len, arg);
3389 if (opts->have_squash_onto &&
3390 oideq(&head_commit->object.oid, &opts->squash_onto)) {
3392 * When the user tells us to "merge" something into a
3393 * "[new root]", let's simply fast-forward to the merge head.
3395 rollback_lock_file(&lock);
3397 ret = error(_("octopus merge cannot be executed on "
3398 "top of a [new root]"));
3400 ret = fast_forward_to(r, &to_merge->item->object.oid,
3401 &head_commit->object.oid, 0,
3407 const char *encoding = get_commit_output_encoding();
3408 const char *message = logmsg_reencode(commit, NULL, encoding);
3413 ret = error(_("could not get commit message of '%s'"),
3414 oid_to_hex(&commit->object.oid));
3417 write_author_script(message);
3418 find_commit_subject(message, &body);
3420 ret = write_message(body, len, git_path_merge_msg(r), 0);
3421 unuse_commit_buffer(commit, message);
3423 error_errno(_("could not write '%s'"),
3424 git_path_merge_msg(r));
3428 struct strbuf buf = STRBUF_INIT;
3431 strbuf_addf(&buf, "author %s", git_author_info(0));
3432 write_author_script(buf.buf);
3435 if (oneline_offset < arg_len) {
3436 p = arg + oneline_offset;
3437 len = arg_len - oneline_offset;
3439 strbuf_addf(&buf, "Merge %s '%.*s'",
3440 to_merge->next ? "branches" : "branch",
3441 merge_arg_len, arg);
3446 ret = write_message(p, len, git_path_merge_msg(r), 0);
3447 strbuf_release(&buf);
3449 error_errno(_("could not write '%s'"),
3450 git_path_merge_msg(r));
3456 * If HEAD is not identical to the first parent of the original merge
3457 * commit, we cannot fast-forward.
3459 can_fast_forward = opts->allow_ff && commit && commit->parents &&
3460 oideq(&commit->parents->item->object.oid,
3461 &head_commit->object.oid);
3464 * If any merge head is different from the original one, we cannot
3467 if (can_fast_forward) {
3468 struct commit_list *p = commit->parents->next;
3470 for (j = to_merge; j && p; j = j->next, p = p->next)
3471 if (!oideq(&j->item->object.oid,
3472 &p->item->object.oid)) {
3473 can_fast_forward = 0;
3477 * If the number of merge heads differs from the original merge
3478 * commit, we cannot fast-forward.
3481 can_fast_forward = 0;
3484 if (can_fast_forward) {
3485 rollback_lock_file(&lock);
3486 ret = fast_forward_to(r, &commit->object.oid,
3487 &head_commit->object.oid, 0, opts);
3488 if (flags & TODO_EDIT_MERGE_MSG) {
3489 run_commit_flags |= AMEND_MSG;
3490 goto fast_forward_edit;
3495 if (strategy || to_merge->next) {
3497 struct child_process cmd = CHILD_PROCESS_INIT;
3499 if (read_env_script(&cmd.env_array)) {
3500 const char *gpg_opt = gpg_sign_opt_quoted(opts);
3502 ret = error(_(staged_changes_advice), gpg_opt, gpg_opt);
3507 argv_array_push(&cmd.args, "merge");
3508 argv_array_push(&cmd.args, "-s");
3510 argv_array_push(&cmd.args, "octopus");
3512 argv_array_push(&cmd.args, strategy);
3513 for (k = 0; k < opts->xopts_nr; k++)
3514 argv_array_pushf(&cmd.args,
3515 "-X%s", opts->xopts[k]);
3517 argv_array_push(&cmd.args, "--no-edit");
3518 argv_array_push(&cmd.args, "--no-ff");
3519 argv_array_push(&cmd.args, "--no-log");
3520 argv_array_push(&cmd.args, "--no-stat");
3521 argv_array_push(&cmd.args, "-F");
3522 argv_array_push(&cmd.args, git_path_merge_msg(r));
3524 argv_array_push(&cmd.args, opts->gpg_sign);
3526 /* Add the tips to be merged */
3527 for (j = to_merge; j; j = j->next)
3528 argv_array_push(&cmd.args,
3529 oid_to_hex(&j->item->object.oid));
3531 strbuf_release(&ref_name);
3532 unlink(git_path_cherry_pick_head(r));
3533 rollback_lock_file(&lock);
3535 rollback_lock_file(&lock);
3536 ret = run_command(&cmd);
3538 /* force re-reading of the cache */
3539 if (!ret && (discard_index(r->index) < 0 ||
3540 repo_read_index(r) < 0))
3541 ret = error(_("could not read index"));
3545 merge_commit = to_merge->item;
3546 bases = get_merge_bases(head_commit, merge_commit);
3547 if (bases && oideq(&merge_commit->object.oid,
3548 &bases->item->object.oid)) {
3550 /* skip merging an ancestor of HEAD */
3554 write_message(oid_to_hex(&merge_commit->object.oid), the_hash_algo->hexsz,
3555 git_path_merge_head(r), 0);
3556 write_message("no-ff", 5, git_path_merge_mode(r), 0);
3558 for (j = bases; j; j = j->next)
3559 commit_list_insert(j->item, &reversed);
3560 free_commit_list(bases);
3563 init_merge_options(&o, r);
3565 o.branch2 = ref_name.buf;
3566 o.buffer_output = 2;
3568 ret = merge_recursive(&o, head_commit, merge_commit, reversed, &i);
3570 fputs(o.obuf.buf, stdout);
3571 strbuf_release(&o.obuf);
3573 error(_("could not even attempt to merge '%.*s'"),
3574 merge_arg_len, arg);
3578 * The return value of merge_recursive() is 1 on clean, and 0 on
3581 * Let's reverse that, so that do_merge() returns 0 upon success and
3582 * 1 upon failed merge (keeping the return value -1 for the cases where
3583 * we will want to reschedule the `merge` command).
3587 if (r->index->cache_changed &&
3588 write_locked_index(r->index, &lock, COMMIT_LOCK)) {
3589 ret = error(_("merge: Unable to write new index file"));
3593 rollback_lock_file(&lock);
3595 repo_rerere(r, opts->allow_rerere_auto);
3598 * In case of problems, we now want to return a positive
3599 * value (a negative one would indicate that the `merge`
3600 * command needs to be rescheduled).
3603 ret = !!run_git_commit(r, git_path_merge_msg(r), opts,
3607 strbuf_release(&ref_name);
3608 rollback_lock_file(&lock);
3609 free_commit_list(to_merge);
3613 static int is_final_fixup(struct todo_list *todo_list)
3615 int i = todo_list->current;
3617 if (!is_fixup(todo_list->items[i].command))
3620 while (++i < todo_list->nr)
3621 if (is_fixup(todo_list->items[i].command))
3623 else if (!is_noop(todo_list->items[i].command))
3628 static enum todo_command peek_command(struct todo_list *todo_list, int offset)
3632 for (i = todo_list->current + offset; i < todo_list->nr; i++)
3633 if (!is_noop(todo_list->items[i].command))
3634 return todo_list->items[i].command;
3639 static int apply_autostash(struct replay_opts *opts)
3641 struct strbuf stash_sha1 = STRBUF_INIT;
3642 struct child_process child = CHILD_PROCESS_INIT;
3645 if (!read_oneliner(&stash_sha1, rebase_path_autostash(), 1)) {
3646 strbuf_release(&stash_sha1);
3649 strbuf_trim(&stash_sha1);
3652 child.no_stdout = 1;
3653 child.no_stderr = 1;
3654 argv_array_push(&child.args, "stash");
3655 argv_array_push(&child.args, "apply");
3656 argv_array_push(&child.args, stash_sha1.buf);
3657 if (!run_command(&child))
3658 fprintf(stderr, _("Applied autostash.\n"));
3660 struct child_process store = CHILD_PROCESS_INIT;
3663 argv_array_push(&store.args, "stash");
3664 argv_array_push(&store.args, "store");
3665 argv_array_push(&store.args, "-m");
3666 argv_array_push(&store.args, "autostash");
3667 argv_array_push(&store.args, "-q");
3668 argv_array_push(&store.args, stash_sha1.buf);
3669 if (run_command(&store))
3670 ret = error(_("cannot store %s"), stash_sha1.buf);
3673 _("Applying autostash resulted in conflicts.\n"
3674 "Your changes are safe in the stash.\n"
3675 "You can run \"git stash pop\" or"
3676 " \"git stash drop\" at any time.\n"));
3679 strbuf_release(&stash_sha1);
3683 static const char *reflog_message(struct replay_opts *opts,
3684 const char *sub_action, const char *fmt, ...)
3687 static struct strbuf buf = STRBUF_INIT;
3691 strbuf_addstr(&buf, action_name(opts));
3693 strbuf_addf(&buf, " (%s)", sub_action);
3695 strbuf_addstr(&buf, ": ");
3696 strbuf_vaddf(&buf, fmt, ap);
3703 static int run_git_checkout(struct repository *r, struct replay_opts *opts,
3704 const char *commit, const char *action)
3706 struct child_process cmd = CHILD_PROCESS_INIT;
3711 argv_array_push(&cmd.args, "checkout");
3712 argv_array_push(&cmd.args, commit);
3713 argv_array_pushf(&cmd.env_array, GIT_REFLOG_ACTION "=%s", action);
3716 ret = run_command(&cmd);
3718 ret = run_command_silent_on_success(&cmd);
3721 discard_index(r->index);
3726 int prepare_branch_to_be_rebased(struct repository *r, struct replay_opts *opts,
3731 if (commit && *commit) {
3732 action = reflog_message(opts, "start", "checkout %s", commit);
3733 if (run_git_checkout(r, opts, commit, action))
3734 return error(_("could not checkout %s"), commit);
3740 static int checkout_onto(struct repository *r, struct replay_opts *opts,
3741 const char *onto_name, const struct object_id *onto,
3742 const char *orig_head)
3744 struct object_id oid;
3745 const char *action = reflog_message(opts, "start", "checkout %s", onto_name);
3747 if (get_oid(orig_head, &oid))
3748 return error(_("%s: not a valid OID"), orig_head);
3750 if (run_git_checkout(r, opts, oid_to_hex(onto), action)) {
3751 apply_autostash(opts);
3752 sequencer_remove_state(opts);
3753 return error(_("could not detach HEAD"));
3756 return update_ref(NULL, "ORIG_HEAD", &oid, NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3759 static int stopped_at_head(struct repository *r)
3761 struct object_id head;
3762 struct commit *commit;
3763 struct commit_message message;
3765 if (get_oid("HEAD", &head) ||
3766 !(commit = lookup_commit(r, &head)) ||
3767 parse_commit(commit) || get_message(commit, &message))
3768 fprintf(stderr, _("Stopped at HEAD\n"));
3770 fprintf(stderr, _("Stopped at %s\n"), message.label);
3771 free_message(commit, &message);
3777 static const char rescheduled_advice[] =
3778 N_("Could not execute the todo command\n"
3782 "It has been rescheduled; To edit the command before continuing, please\n"
3783 "edit the todo list first:\n"
3785 " git rebase --edit-todo\n"
3786 " git rebase --continue\n");
3788 static int pick_commits(struct repository *r,
3789 struct todo_list *todo_list,
3790 struct replay_opts *opts)
3792 int res = 0, reschedule = 0;
3794 setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
3796 assert(!(opts->signoff || opts->no_commit ||
3797 opts->record_origin || opts->edit));
3798 if (read_and_refresh_cache(r, opts))
3801 while (todo_list->current < todo_list->nr) {
3802 struct todo_item *item = todo_list->items + todo_list->current;
3803 const char *arg = todo_item_get_arg(todo_list, item);
3806 if (save_todo(todo_list, opts))
3808 if (is_rebase_i(opts)) {
3809 if (item->command != TODO_COMMENT) {
3810 FILE *f = fopen(rebase_path_msgnum(), "w");
3812 todo_list->done_nr++;
3815 fprintf(f, "%d\n", todo_list->done_nr);
3819 fprintf(stderr, "Rebasing (%d/%d)%s",
3821 todo_list->total_nr,
3822 opts->verbose ? "\n" : "\r");
3824 unlink(rebase_path_message());
3825 unlink(rebase_path_author_script());
3826 unlink(rebase_path_stopped_sha());
3827 unlink(rebase_path_amend());
3828 unlink(git_path_merge_head(r));
3829 delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
3831 if (item->command == TODO_BREAK) {
3834 return stopped_at_head(r);
3837 if (item->command <= TODO_SQUASH) {
3838 if (is_rebase_i(opts))
3839 setenv("GIT_REFLOG_ACTION", reflog_message(opts,
3840 command_to_string(item->command), NULL),
3842 res = do_pick_commit(r, item->command, item->commit,
3843 opts, is_final_fixup(todo_list),
3845 if (is_rebase_i(opts) && res < 0) {
3847 advise(_(rescheduled_advice),
3848 get_item_line_length(todo_list,
3849 todo_list->current),
3850 get_item_line(todo_list,
3851 todo_list->current));
3852 todo_list->current--;
3853 if (save_todo(todo_list, opts))
3856 if (item->command == TODO_EDIT) {
3857 struct commit *commit = item->commit;
3862 _("Stopped at %s... %.*s\n"),
3863 short_commit_name(commit),
3864 item->arg_len, arg);
3866 return error_with_patch(r, commit,
3867 arg, item->arg_len, opts, res, !res);
3869 if (is_rebase_i(opts) && !res)
3870 record_in_rewritten(&item->commit->object.oid,
3871 peek_command(todo_list, 1));
3872 if (res && is_fixup(item->command)) {
3875 return error_failed_squash(r, item->commit, opts,
3876 item->arg_len, arg);
3877 } else if (res && is_rebase_i(opts) && item->commit) {
3879 struct object_id oid;
3882 * If we are rewording and have either
3883 * fast-forwarded already, or are about to
3884 * create a new root commit, we want to amend,
3885 * otherwise we do not.
3887 if (item->command == TODO_REWORD &&
3888 !get_oid("HEAD", &oid) &&
3889 (oideq(&item->commit->object.oid, &oid) ||
3890 (opts->have_squash_onto &&
3891 oideq(&opts->squash_onto, &oid))))
3894 return res | error_with_patch(r, item->commit,
3895 arg, item->arg_len, opts,
3898 } else if (item->command == TODO_EXEC) {
3899 char *end_of_arg = (char *)(arg + item->arg_len);
3900 int saved = *end_of_arg;
3905 res = do_exec(r, arg);
3906 *end_of_arg = saved;
3909 if (opts->reschedule_failed_exec)
3913 } else if (item->command == TODO_LABEL) {
3914 if ((res = do_label(r, arg, item->arg_len)))
3916 } else if (item->command == TODO_RESET) {
3917 if ((res = do_reset(r, arg, item->arg_len, opts)))
3919 } else if (item->command == TODO_MERGE) {
3920 if ((res = do_merge(r, item->commit,
3922 item->flags, opts)) < 0)
3924 else if (item->commit)
3925 record_in_rewritten(&item->commit->object.oid,
3926 peek_command(todo_list, 1));
3928 /* failed with merge conflicts */
3929 return error_with_patch(r, item->commit,
3932 } else if (!is_noop(item->command))
3933 return error(_("unknown command %d"), item->command);
3936 advise(_(rescheduled_advice),
3937 get_item_line_length(todo_list,
3938 todo_list->current),
3939 get_item_line(todo_list, todo_list->current));
3940 todo_list->current--;
3941 if (save_todo(todo_list, opts))
3944 return error_with_patch(r,
3948 } else if (check_todo && !res) {
3951 if (stat(get_todo_path(opts), &st)) {
3952 res = error_errno(_("could not stat '%s'"),
3953 get_todo_path(opts));
3954 } else if (match_stat_data(&todo_list->stat, &st)) {
3955 /* Reread the todo file if it has changed. */
3956 todo_list_release(todo_list);
3957 if (read_populate_todo(r, todo_list, opts))
3958 res = -1; /* message was printed */
3959 /* `current` will be incremented below */
3960 todo_list->current = -1;
3964 todo_list->current++;
3969 if (is_rebase_i(opts)) {
3970 struct strbuf head_ref = STRBUF_INIT, buf = STRBUF_INIT;
3973 /* Stopped in the middle, as planned? */
3974 if (todo_list->current < todo_list->nr)
3977 if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
3978 starts_with(head_ref.buf, "refs/")) {
3980 struct object_id head, orig;
3983 if (get_oid("HEAD", &head)) {
3984 res = error(_("cannot read HEAD"));
3986 strbuf_release(&head_ref);
3987 strbuf_release(&buf);
3990 if (!read_oneliner(&buf, rebase_path_orig_head(), 0) ||
3991 get_oid_hex(buf.buf, &orig)) {
3992 res = error(_("could not read orig-head"));
3993 goto cleanup_head_ref;
3996 if (!read_oneliner(&buf, rebase_path_onto(), 0)) {
3997 res = error(_("could not read 'onto'"));
3998 goto cleanup_head_ref;
4000 msg = reflog_message(opts, "finish", "%s onto %s",
4001 head_ref.buf, buf.buf);
4002 if (update_ref(msg, head_ref.buf, &head, &orig,
4003 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR)) {
4004 res = error(_("could not update %s"),
4006 goto cleanup_head_ref;
4008 msg = reflog_message(opts, "finish", "returning to %s",
4010 if (create_symref("HEAD", head_ref.buf, msg)) {
4011 res = error(_("could not update HEAD to %s"),
4013 goto cleanup_head_ref;
4018 if (opts->verbose) {
4019 struct rev_info log_tree_opt;
4020 struct object_id orig, head;
4022 memset(&log_tree_opt, 0, sizeof(log_tree_opt));
4023 repo_init_revisions(r, &log_tree_opt, NULL);
4024 log_tree_opt.diff = 1;
4025 log_tree_opt.diffopt.output_format =
4026 DIFF_FORMAT_DIFFSTAT;
4027 log_tree_opt.disable_stdin = 1;
4029 if (read_oneliner(&buf, rebase_path_orig_head(), 0) &&
4030 !get_oid(buf.buf, &orig) &&
4031 !get_oid("HEAD", &head)) {
4032 diff_tree_oid(&orig, &head, "",
4033 &log_tree_opt.diffopt);
4034 log_tree_diff_flush(&log_tree_opt);
4037 flush_rewritten_pending();
4038 if (!stat(rebase_path_rewritten_list(), &st) &&
4040 struct child_process child = CHILD_PROCESS_INIT;
4041 const char *post_rewrite_hook =
4042 find_hook("post-rewrite");
4044 child.in = open(rebase_path_rewritten_list(), O_RDONLY);
4046 argv_array_push(&child.args, "notes");
4047 argv_array_push(&child.args, "copy");
4048 argv_array_push(&child.args, "--for-rewrite=rebase");
4049 /* we don't care if this copying failed */
4050 run_command(&child);
4052 if (post_rewrite_hook) {
4053 struct child_process hook = CHILD_PROCESS_INIT;
4055 hook.in = open(rebase_path_rewritten_list(),
4057 hook.stdout_to_stderr = 1;
4058 hook.trace2_hook_name = "post-rewrite";
4059 argv_array_push(&hook.args, post_rewrite_hook);
4060 argv_array_push(&hook.args, "rebase");
4061 /* we don't care if this hook failed */
4065 apply_autostash(opts);
4071 "Successfully rebased and updated %s.\n",
4075 strbuf_release(&buf);
4076 strbuf_release(&head_ref);
4080 * Sequence of picks finished successfully; cleanup by
4081 * removing the .git/sequencer directory
4083 return sequencer_remove_state(opts);
4086 static int continue_single_pick(struct repository *r)
4088 const char *argv[] = { "commit", NULL };
4090 if (!file_exists(git_path_cherry_pick_head(r)) &&
4091 !file_exists(git_path_revert_head(r)))
4092 return error(_("no cherry-pick or revert in progress"));
4093 return run_command_v_opt(argv, RUN_GIT_CMD);
4096 static int commit_staged_changes(struct repository *r,
4097 struct replay_opts *opts,
4098 struct todo_list *todo_list)
4100 unsigned int flags = ALLOW_EMPTY | EDIT_MSG;
4101 unsigned int final_fixup = 0, is_clean;
4103 if (has_unstaged_changes(r, 1))
4104 return error(_("cannot rebase: You have unstaged changes."));
4106 is_clean = !has_uncommitted_changes(r, 0);
4108 if (file_exists(rebase_path_amend())) {
4109 struct strbuf rev = STRBUF_INIT;
4110 struct object_id head, to_amend;
4112 if (get_oid("HEAD", &head))
4113 return error(_("cannot amend non-existing commit"));
4114 if (!read_oneliner(&rev, rebase_path_amend(), 0))
4115 return error(_("invalid file: '%s'"), rebase_path_amend());
4116 if (get_oid_hex(rev.buf, &to_amend))
4117 return error(_("invalid contents: '%s'"),
4118 rebase_path_amend());
4119 if (!is_clean && !oideq(&head, &to_amend))
4120 return error(_("\nYou have uncommitted changes in your "
4121 "working tree. Please, commit them\n"
4122 "first and then run 'git rebase "
4123 "--continue' again."));
4125 * When skipping a failed fixup/squash, we need to edit the
4126 * commit message, the current fixup list and count, and if it
4127 * was the last fixup/squash in the chain, we need to clean up
4128 * the commit message and if there was a squash, let the user
4131 if (!is_clean || !opts->current_fixup_count)
4132 ; /* this is not the final fixup */
4133 else if (!oideq(&head, &to_amend) ||
4134 !file_exists(rebase_path_stopped_sha())) {
4135 /* was a final fixup or squash done manually? */
4136 if (!is_fixup(peek_command(todo_list, 0))) {
4137 unlink(rebase_path_fixup_msg());
4138 unlink(rebase_path_squash_msg());
4139 unlink(rebase_path_current_fixups());
4140 strbuf_reset(&opts->current_fixups);
4141 opts->current_fixup_count = 0;
4144 /* we are in a fixup/squash chain */
4145 const char *p = opts->current_fixups.buf;
4146 int len = opts->current_fixups.len;
4148 opts->current_fixup_count--;
4150 BUG("Incorrect current_fixups:\n%s", p);
4151 while (len && p[len - 1] != '\n')
4153 strbuf_setlen(&opts->current_fixups, len);
4154 if (write_message(p, len, rebase_path_current_fixups(),
4156 return error(_("could not write file: '%s'"),
4157 rebase_path_current_fixups());
4160 * If a fixup/squash in a fixup/squash chain failed, the
4161 * commit message is already correct, no need to commit
4164 * Only if it is the final command in the fixup/squash
4165 * chain, and only if the chain is longer than a single
4166 * fixup/squash command (which was just skipped), do we
4167 * actually need to re-commit with a cleaned up commit
4170 if (opts->current_fixup_count > 0 &&
4171 !is_fixup(peek_command(todo_list, 0))) {
4174 * If there was not a single "squash" in the
4175 * chain, we only need to clean up the commit
4176 * message, no need to bother the user with
4177 * opening the commit message in the editor.
4179 if (!starts_with(p, "squash ") &&
4180 !strstr(p, "\nsquash "))
4181 flags = (flags & ~EDIT_MSG) | CLEANUP_MSG;
4182 } else if (is_fixup(peek_command(todo_list, 0))) {
4184 * We need to update the squash message to skip
4185 * the latest commit message.
4187 struct commit *commit;
4188 const char *path = rebase_path_squash_msg();
4189 const char *encoding = get_commit_output_encoding();
4191 if (parse_head(r, &commit) ||
4192 !(p = logmsg_reencode(commit, NULL, encoding)) ||
4193 write_message(p, strlen(p), path, 0)) {
4194 unuse_commit_buffer(commit, p);
4195 return error(_("could not write file: "
4198 unuse_commit_buffer(commit, p);
4202 strbuf_release(&rev);
4207 const char *cherry_pick_head = git_path_cherry_pick_head(r);
4209 if (file_exists(cherry_pick_head) && unlink(cherry_pick_head))
4210 return error(_("could not remove CHERRY_PICK_HEAD"));
4215 if (run_git_commit(r, final_fixup ? NULL : rebase_path_message(),
4217 return error(_("could not commit staged changes."));
4218 unlink(rebase_path_amend());
4219 unlink(git_path_merge_head(r));
4221 unlink(rebase_path_fixup_msg());
4222 unlink(rebase_path_squash_msg());
4224 if (opts->current_fixup_count > 0) {
4226 * Whether final fixup or not, we just cleaned up the commit
4229 unlink(rebase_path_current_fixups());
4230 strbuf_reset(&opts->current_fixups);
4231 opts->current_fixup_count = 0;
4236 int sequencer_continue(struct repository *r, struct replay_opts *opts)
4238 struct todo_list todo_list = TODO_LIST_INIT;
4241 if (read_and_refresh_cache(r, opts))
4244 if (read_populate_opts(opts))
4246 if (is_rebase_i(opts)) {
4247 if ((res = read_populate_todo(r, &todo_list, opts)))
4248 goto release_todo_list;
4249 if (commit_staged_changes(r, opts, &todo_list))
4251 } else if (!file_exists(get_todo_path(opts)))
4252 return continue_single_pick(r);
4253 else if ((res = read_populate_todo(r, &todo_list, opts)))
4254 goto release_todo_list;
4256 if (!is_rebase_i(opts)) {
4257 /* Verify that the conflict has been resolved */
4258 if (file_exists(git_path_cherry_pick_head(r)) ||
4259 file_exists(git_path_revert_head(r))) {
4260 res = continue_single_pick(r);
4262 goto release_todo_list;
4264 if (index_differs_from(r, "HEAD", NULL, 0)) {
4265 res = error_dirty_index(r, opts);
4266 goto release_todo_list;
4268 todo_list.current++;
4269 } else if (file_exists(rebase_path_stopped_sha())) {
4270 struct strbuf buf = STRBUF_INIT;
4271 struct object_id oid;
4273 if (read_oneliner(&buf, rebase_path_stopped_sha(), 1) &&
4274 !get_oid_committish(buf.buf, &oid))
4275 record_in_rewritten(&oid, peek_command(&todo_list, 0));
4276 strbuf_release(&buf);
4279 res = pick_commits(r, &todo_list, opts);
4281 todo_list_release(&todo_list);
4285 static int single_pick(struct repository *r,
4286 struct commit *cmit,
4287 struct replay_opts *opts)
4291 setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
4292 return do_pick_commit(r, opts->action == REPLAY_PICK ?
4293 TODO_PICK : TODO_REVERT, cmit, opts, 0,
4297 int sequencer_pick_revisions(struct repository *r,
4298 struct replay_opts *opts)
4300 struct todo_list todo_list = TODO_LIST_INIT;
4301 struct object_id oid;
4305 if (read_and_refresh_cache(r, opts))
4308 for (i = 0; i < opts->revs->pending.nr; i++) {
4309 struct object_id oid;
4310 const char *name = opts->revs->pending.objects[i].name;
4312 /* This happens when using --stdin. */
4316 if (!get_oid(name, &oid)) {
4317 if (!lookup_commit_reference_gently(r, &oid, 1)) {
4318 enum object_type type = oid_object_info(r,
4321 return error(_("%s: can't cherry-pick a %s"),
4322 name, type_name(type));
4325 return error(_("%s: bad revision"), name);
4329 * If we were called as "git cherry-pick <commit>", just
4330 * cherry-pick/revert it, set CHERRY_PICK_HEAD /
4331 * REVERT_HEAD, and don't touch the sequencer state.
4332 * This means it is possible to cherry-pick in the middle
4333 * of a cherry-pick sequence.
4335 if (opts->revs->cmdline.nr == 1 &&
4336 opts->revs->cmdline.rev->whence == REV_CMD_REV &&
4337 opts->revs->no_walk &&
4338 !opts->revs->cmdline.rev->flags) {
4339 struct commit *cmit;
4340 if (prepare_revision_walk(opts->revs))
4341 return error(_("revision walk setup failed"));
4342 cmit = get_revision(opts->revs);
4344 return error(_("empty commit set passed"));
4345 if (get_revision(opts->revs))
4346 BUG("unexpected extra commit from walk");
4347 return single_pick(r, cmit, opts);
4351 * Start a new cherry-pick/ revert sequence; but
4352 * first, make sure that an existing one isn't in
4356 if (walk_revs_populate_todo(&todo_list, opts) ||
4357 create_seq_dir(r) < 0)
4359 if (get_oid("HEAD", &oid) && (opts->action == REPLAY_REVERT))
4360 return error(_("can't revert as initial commit"));
4361 if (save_head(oid_to_hex(&oid)))
4363 if (save_opts(opts))
4365 update_abort_safety_file();
4366 res = pick_commits(r, &todo_list, opts);
4367 todo_list_release(&todo_list);
4371 void append_signoff(struct strbuf *msgbuf, size_t ignore_footer, unsigned flag)
4373 unsigned no_dup_sob = flag & APPEND_SIGNOFF_DEDUP;
4374 struct strbuf sob = STRBUF_INIT;
4377 strbuf_addstr(&sob, sign_off_header);
4378 strbuf_addstr(&sob, fmt_name(WANT_COMMITTER_IDENT));
4379 strbuf_addch(&sob, '\n');
4382 strbuf_complete_line(msgbuf);
4385 * If the whole message buffer is equal to the sob, pretend that we
4386 * found a conforming footer with a matching sob
4388 if (msgbuf->len - ignore_footer == sob.len &&
4389 !strncmp(msgbuf->buf, sob.buf, sob.len))
4392 has_footer = has_conforming_footer(msgbuf, &sob, ignore_footer);
4395 const char *append_newlines = NULL;
4396 size_t len = msgbuf->len - ignore_footer;
4400 * The buffer is completely empty. Leave foom for
4401 * the title and body to be filled in by the user.
4403 append_newlines = "\n\n";
4404 } else if (len == 1) {
4406 * Buffer contains a single newline. Add another
4407 * so that we leave room for the title and body.
4409 append_newlines = "\n";
4410 } else if (msgbuf->buf[len - 2] != '\n') {
4412 * Buffer ends with a single newline. Add another
4413 * so that there is an empty line between the message
4416 append_newlines = "\n";
4417 } /* else, the buffer already ends with two newlines. */
4419 if (append_newlines)
4420 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4421 append_newlines, strlen(append_newlines));
4424 if (has_footer != 3 && (!no_dup_sob || has_footer != 2))
4425 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4428 strbuf_release(&sob);
4431 struct labels_entry {
4432 struct hashmap_entry entry;
4433 char label[FLEX_ARRAY];
4436 static int labels_cmp(const void *fndata, const struct hashmap_entry *eptr,
4437 const struct hashmap_entry *entry_or_key, const void *key)
4439 const struct labels_entry *a, *b;
4441 a = container_of(eptr, const struct labels_entry, entry);
4442 b = container_of(entry_or_key, const struct labels_entry, entry);
4444 return key ? strcmp(a->label, key) : strcmp(a->label, b->label);
4447 struct string_entry {
4448 struct oidmap_entry entry;
4449 char string[FLEX_ARRAY];
4452 struct label_state {
4453 struct oidmap commit2label;
4454 struct hashmap labels;
4458 static const char *label_oid(struct object_id *oid, const char *label,
4459 struct label_state *state)
4461 struct labels_entry *labels_entry;
4462 struct string_entry *string_entry;
4463 struct object_id dummy;
4466 string_entry = oidmap_get(&state->commit2label, oid);
4468 return string_entry->string;
4471 * For "uninteresting" commits, i.e. commits that are not to be
4472 * rebased, and which can therefore not be labeled, we use a unique
4473 * abbreviation of the commit name. This is slightly more complicated
4474 * than calling find_unique_abbrev() because we also need to make
4475 * sure that the abbreviation does not conflict with any other
4478 * We disallow "interesting" commits to be labeled by a string that
4479 * is a valid full-length hash, to ensure that we always can find an
4480 * abbreviation for any uninteresting commit's names that does not
4481 * clash with any other label.
4483 strbuf_reset(&state->buf);
4487 strbuf_grow(&state->buf, GIT_MAX_HEXSZ);
4488 label = p = state->buf.buf;
4490 find_unique_abbrev_r(p, oid, default_abbrev);
4493 * We may need to extend the abbreviated hash so that there is
4494 * no conflicting label.
4496 if (hashmap_get_from_hash(&state->labels, strihash(p), p)) {
4497 size_t i = strlen(p) + 1;
4499 oid_to_hex_r(p, oid);
4500 for (; i < the_hash_algo->hexsz; i++) {
4503 if (!hashmap_get_from_hash(&state->labels,
4510 struct strbuf *buf = &state->buf;
4513 * Sanitize labels by replacing non-alpha-numeric characters
4514 * (including white-space ones) by dashes, as they might be
4515 * illegal in file names (and hence in ref names).
4517 * Note that we retain non-ASCII UTF-8 characters (identified
4518 * via the most significant bit). They should be all acceptable
4519 * in file names. We do not validate the UTF-8 here, that's not
4520 * the job of this function.
4522 for (; *label; label++)
4523 if ((*label & 0x80) || isalnum(*label))
4524 strbuf_addch(buf, *label);
4525 /* avoid leading dash and double-dashes */
4526 else if (buf->len && buf->buf[buf->len - 1] != '-')
4527 strbuf_addch(buf, '-');
4529 strbuf_addstr(buf, "rev-");
4530 strbuf_add_unique_abbrev(buf, oid, default_abbrev);
4534 if ((buf->len == the_hash_algo->hexsz &&
4535 !get_oid_hex(label, &dummy)) ||
4536 (buf->len == 1 && *label == '#') ||
4537 hashmap_get_from_hash(&state->labels,
4538 strihash(label), label)) {
4540 * If the label already exists, or if the label is a
4541 * valid full OID, or the label is a '#' (which we use
4542 * as a separator between merge heads and oneline), we
4543 * append a dash and a number to make it unique.
4545 size_t len = buf->len;
4547 for (i = 2; ; i++) {
4548 strbuf_setlen(buf, len);
4549 strbuf_addf(buf, "-%d", i);
4550 if (!hashmap_get_from_hash(&state->labels,
4560 FLEX_ALLOC_STR(labels_entry, label, label);
4561 hashmap_entry_init(&labels_entry->entry, strihash(label));
4562 hashmap_add(&state->labels, &labels_entry->entry);
4564 FLEX_ALLOC_STR(string_entry, string, label);
4565 oidcpy(&string_entry->entry.oid, oid);
4566 oidmap_put(&state->commit2label, string_entry);
4568 return string_entry->string;
4571 static int make_script_with_merges(struct pretty_print_context *pp,
4572 struct rev_info *revs, struct strbuf *out,
4575 int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4576 int rebase_cousins = flags & TODO_LIST_REBASE_COUSINS;
4577 int root_with_onto = flags & TODO_LIST_ROOT_WITH_ONTO;
4578 struct strbuf buf = STRBUF_INIT, oneline = STRBUF_INIT;
4579 struct strbuf label = STRBUF_INIT;
4580 struct commit_list *commits = NULL, **tail = &commits, *iter;
4581 struct commit_list *tips = NULL, **tips_tail = &tips;
4582 struct commit *commit;
4583 struct oidmap commit2todo = OIDMAP_INIT;
4584 struct string_entry *entry;
4585 struct oidset interesting = OIDSET_INIT, child_seen = OIDSET_INIT,
4586 shown = OIDSET_INIT;
4587 struct label_state state = { OIDMAP_INIT, { NULL }, STRBUF_INIT };
4589 int abbr = flags & TODO_LIST_ABBREVIATE_CMDS;
4590 const char *cmd_pick = abbr ? "p" : "pick",
4591 *cmd_label = abbr ? "l" : "label",
4592 *cmd_reset = abbr ? "t" : "reset",
4593 *cmd_merge = abbr ? "m" : "merge";
4595 oidmap_init(&commit2todo, 0);
4596 oidmap_init(&state.commit2label, 0);
4597 hashmap_init(&state.labels, labels_cmp, NULL, 0);
4598 strbuf_init(&state.buf, 32);
4600 if (revs->cmdline.nr && (revs->cmdline.rev[0].flags & BOTTOM)) {
4601 struct labels_entry *onto_label_entry;
4602 struct object_id *oid = &revs->cmdline.rev[0].item->oid;
4603 FLEX_ALLOC_STR(entry, string, "onto");
4604 oidcpy(&entry->entry.oid, oid);
4605 oidmap_put(&state.commit2label, entry);
4607 FLEX_ALLOC_STR(onto_label_entry, label, "onto");
4608 hashmap_entry_init(&onto_label_entry->entry, strihash("onto"));
4609 hashmap_add(&state.labels, &onto_label_entry->entry);
4614 * - get onelines for all commits
4615 * - gather all branch tips (i.e. 2nd or later parents of merges)
4616 * - label all branch tips
4618 while ((commit = get_revision(revs))) {
4619 struct commit_list *to_merge;
4620 const char *p1, *p2;
4621 struct object_id *oid;
4624 tail = &commit_list_insert(commit, tail)->next;
4625 oidset_insert(&interesting, &commit->object.oid);
4627 is_empty = is_original_commit_empty(commit);
4628 if (!is_empty && (commit->object.flags & PATCHSAME))
4631 strbuf_reset(&oneline);
4632 pretty_print_commit(pp, commit, &oneline);
4634 to_merge = commit->parents ? commit->parents->next : NULL;
4636 /* non-merge commit: easy case */
4638 if (!keep_empty && is_empty)
4639 strbuf_addf(&buf, "%c ", comment_line_char);
4640 strbuf_addf(&buf, "%s %s %s", cmd_pick,
4641 oid_to_hex(&commit->object.oid),
4644 FLEX_ALLOC_STR(entry, string, buf.buf);
4645 oidcpy(&entry->entry.oid, &commit->object.oid);
4646 oidmap_put(&commit2todo, entry);
4651 /* Create a label */
4652 strbuf_reset(&label);
4653 if (skip_prefix(oneline.buf, "Merge ", &p1) &&
4654 (p1 = strchr(p1, '\'')) &&
4655 (p2 = strchr(++p1, '\'')))
4656 strbuf_add(&label, p1, p2 - p1);
4657 else if (skip_prefix(oneline.buf, "Merge pull request ",
4659 (p1 = strstr(p1, " from ")))
4660 strbuf_addstr(&label, p1 + strlen(" from "));
4662 strbuf_addbuf(&label, &oneline);
4665 strbuf_addf(&buf, "%s -C %s",
4666 cmd_merge, oid_to_hex(&commit->object.oid));
4668 /* label the tips of merged branches */
4669 for (; to_merge; to_merge = to_merge->next) {
4670 oid = &to_merge->item->object.oid;
4671 strbuf_addch(&buf, ' ');
4673 if (!oidset_contains(&interesting, oid)) {
4674 strbuf_addstr(&buf, label_oid(oid, NULL,
4679 tips_tail = &commit_list_insert(to_merge->item,
4682 strbuf_addstr(&buf, label_oid(oid, label.buf, &state));
4684 strbuf_addf(&buf, " # %s", oneline.buf);
4686 FLEX_ALLOC_STR(entry, string, buf.buf);
4687 oidcpy(&entry->entry.oid, &commit->object.oid);
4688 oidmap_put(&commit2todo, entry);
4693 * - label branch points
4694 * - add HEAD to the branch tips
4696 for (iter = commits; iter; iter = iter->next) {
4697 struct commit_list *parent = iter->item->parents;
4698 for (; parent; parent = parent->next) {
4699 struct object_id *oid = &parent->item->object.oid;
4700 if (!oidset_contains(&interesting, oid))
4702 if (oidset_insert(&child_seen, oid))
4703 label_oid(oid, "branch-point", &state);
4706 /* Add HEAD as implicit "tip of branch" */
4708 tips_tail = &commit_list_insert(iter->item,
4713 * Third phase: output the todo list. This is a bit tricky, as we
4714 * want to avoid jumping back and forth between revisions. To
4715 * accomplish that goal, we walk backwards from the branch tips,
4716 * gathering commits not yet shown, reversing the list on the fly,
4717 * then outputting that list (labeling revisions as needed).
4719 strbuf_addf(out, "%s onto\n", cmd_label);
4720 for (iter = tips; iter; iter = iter->next) {
4721 struct commit_list *list = NULL, *iter2;
4723 commit = iter->item;
4724 if (oidset_contains(&shown, &commit->object.oid))
4726 entry = oidmap_get(&state.commit2label, &commit->object.oid);
4729 strbuf_addf(out, "\n%c Branch %s\n", comment_line_char, entry->string);
4731 strbuf_addch(out, '\n');
4733 while (oidset_contains(&interesting, &commit->object.oid) &&
4734 !oidset_contains(&shown, &commit->object.oid)) {
4735 commit_list_insert(commit, &list);
4736 if (!commit->parents) {
4740 commit = commit->parents->item;
4744 strbuf_addf(out, "%s %s\n", cmd_reset,
4745 rebase_cousins || root_with_onto ?
4746 "onto" : "[new root]");
4748 const char *to = NULL;
4750 entry = oidmap_get(&state.commit2label,
4751 &commit->object.oid);
4754 else if (!rebase_cousins)
4755 to = label_oid(&commit->object.oid, NULL,
4758 if (!to || !strcmp(to, "onto"))
4759 strbuf_addf(out, "%s onto\n", cmd_reset);
4761 strbuf_reset(&oneline);
4762 pretty_print_commit(pp, commit, &oneline);
4763 strbuf_addf(out, "%s %s # %s\n",
4764 cmd_reset, to, oneline.buf);
4768 for (iter2 = list; iter2; iter2 = iter2->next) {
4769 struct object_id *oid = &iter2->item->object.oid;
4770 entry = oidmap_get(&commit2todo, oid);
4771 /* only show if not already upstream */
4773 strbuf_addf(out, "%s\n", entry->string);
4774 entry = oidmap_get(&state.commit2label, oid);
4776 strbuf_addf(out, "%s %s\n",
4777 cmd_label, entry->string);
4778 oidset_insert(&shown, oid);
4781 free_commit_list(list);
4784 free_commit_list(commits);
4785 free_commit_list(tips);
4787 strbuf_release(&label);
4788 strbuf_release(&oneline);
4789 strbuf_release(&buf);
4791 oidmap_free(&commit2todo, 1);
4792 oidmap_free(&state.commit2label, 1);
4793 hashmap_free_entries(&state.labels, struct labels_entry, entry);
4794 strbuf_release(&state.buf);
4799 int sequencer_make_script(struct repository *r, struct strbuf *out, int argc,
4800 const char **argv, unsigned flags)
4802 char *format = NULL;
4803 struct pretty_print_context pp = {0};
4804 struct rev_info revs;
4805 struct commit *commit;
4806 int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4807 const char *insn = flags & TODO_LIST_ABBREVIATE_CMDS ? "p" : "pick";
4808 int rebase_merges = flags & TODO_LIST_REBASE_MERGES;
4810 repo_init_revisions(r, &revs, NULL);
4811 revs.verbose_header = 1;
4813 revs.max_parents = 1;
4814 revs.cherry_mark = 1;
4817 revs.right_only = 1;
4818 revs.sort_order = REV_SORT_IN_GRAPH_ORDER;
4819 revs.topo_order = 1;
4821 revs.pretty_given = 1;
4822 git_config_get_string("rebase.instructionFormat", &format);
4823 if (!format || !*format) {
4825 format = xstrdup("%s");
4827 get_commit_format(format, &revs);
4829 pp.fmt = revs.commit_format;
4830 pp.output_encoding = get_log_output_encoding();
4832 if (setup_revisions(argc, argv, &revs, NULL) > 1)
4833 return error(_("make_script: unhandled options"));
4835 if (prepare_revision_walk(&revs) < 0)
4836 return error(_("make_script: error preparing revisions"));
4839 return make_script_with_merges(&pp, &revs, out, flags);
4841 while ((commit = get_revision(&revs))) {
4842 int is_empty = is_original_commit_empty(commit);
4844 if (!is_empty && (commit->object.flags & PATCHSAME))
4846 if (!keep_empty && is_empty)
4847 strbuf_addf(out, "%c ", comment_line_char);
4848 strbuf_addf(out, "%s %s ", insn,
4849 oid_to_hex(&commit->object.oid));
4850 pretty_print_commit(&pp, commit, out);
4851 strbuf_addch(out, '\n');
4857 * Add commands after pick and (series of) squash/fixup commands
4860 void todo_list_add_exec_commands(struct todo_list *todo_list,
4861 struct string_list *commands)
4863 struct strbuf *buf = &todo_list->buf;
4864 size_t base_offset = buf->len;
4865 int i, insert, nr = 0, alloc = 0;
4866 struct todo_item *items = NULL, *base_items = NULL;
4868 base_items = xcalloc(commands->nr, sizeof(struct todo_item));
4869 for (i = 0; i < commands->nr; i++) {
4870 size_t command_len = strlen(commands->items[i].string);
4872 strbuf_addstr(buf, commands->items[i].string);
4873 strbuf_addch(buf, '\n');
4875 base_items[i].command = TODO_EXEC;
4876 base_items[i].offset_in_buf = base_offset;
4877 base_items[i].arg_offset = base_offset + strlen("exec ");
4878 base_items[i].arg_len = command_len - strlen("exec ");
4880 base_offset += command_len + 1;
4884 * Insert <commands> after every pick. Here, fixup/squash chains
4885 * are considered part of the pick, so we insert the commands *after*
4886 * those chains if there are any.
4888 * As we insert the exec commands immediately after rearranging
4889 * any fixups and before the user edits the list, a fixup chain
4890 * can never contain comments (any comments are empty picks that
4891 * have been commented out because the user did not specify
4892 * --keep-empty). So, it is safe to insert an exec command
4893 * without looking at the command following a comment.
4896 for (i = 0; i < todo_list->nr; i++) {
4897 enum todo_command command = todo_list->items[i].command;
4898 if (insert && !is_fixup(command)) {
4899 ALLOC_GROW(items, nr + commands->nr, alloc);
4900 COPY_ARRAY(items + nr, base_items, commands->nr);
4906 ALLOC_GROW(items, nr + 1, alloc);
4907 items[nr++] = todo_list->items[i];
4909 if (command == TODO_PICK || command == TODO_MERGE)
4913 /* insert or append final <commands> */
4914 if (insert || nr == todo_list->nr) {
4915 ALLOC_GROW(items, nr + commands->nr, alloc);
4916 COPY_ARRAY(items + nr, base_items, commands->nr);
4921 FREE_AND_NULL(todo_list->items);
4922 todo_list->items = items;
4924 todo_list->alloc = alloc;
4927 static void todo_list_to_strbuf(struct repository *r, struct todo_list *todo_list,
4928 struct strbuf *buf, int num, unsigned flags)
4930 struct todo_item *item;
4931 int i, max = todo_list->nr;
4933 if (num > 0 && num < max)
4936 for (item = todo_list->items, i = 0; i < max; i++, item++) {
4937 /* if the item is not a command write it and continue */
4938 if (item->command >= TODO_COMMENT) {
4939 strbuf_addf(buf, "%.*s\n", item->arg_len,
4940 todo_item_get_arg(todo_list, item));
4944 /* add command to the buffer */
4945 if (flags & TODO_LIST_ABBREVIATE_CMDS)
4946 strbuf_addch(buf, command_to_char(item->command));
4948 strbuf_addstr(buf, command_to_string(item->command));
4952 const char *oid = flags & TODO_LIST_SHORTEN_IDS ?
4953 short_commit_name(item->commit) :
4954 oid_to_hex(&item->commit->object.oid);
4956 if (item->command == TODO_MERGE) {
4957 if (item->flags & TODO_EDIT_MERGE_MSG)
4958 strbuf_addstr(buf, " -c");
4960 strbuf_addstr(buf, " -C");
4963 strbuf_addf(buf, " %s", oid);
4966 /* add all the rest */
4968 strbuf_addch(buf, '\n');
4970 strbuf_addf(buf, " %.*s\n", item->arg_len,
4971 todo_item_get_arg(todo_list, item));
4975 int todo_list_write_to_file(struct repository *r, struct todo_list *todo_list,
4976 const char *file, const char *shortrevisions,
4977 const char *shortonto, int num, unsigned flags)
4980 struct strbuf buf = STRBUF_INIT;
4982 todo_list_to_strbuf(r, todo_list, &buf, num, flags);
4983 if (flags & TODO_LIST_APPEND_TODO_HELP)
4984 append_todo_help(flags & TODO_LIST_KEEP_EMPTY, count_commands(todo_list),
4985 shortrevisions, shortonto, &buf);
4987 res = write_message(buf.buf, buf.len, file, 0);
4988 strbuf_release(&buf);
4993 static const char edit_todo_list_advice[] =
4994 N_("You can fix this with 'git rebase --edit-todo' "
4995 "and then run 'git rebase --continue'.\n"
4996 "Or you can abort the rebase with 'git rebase"
4999 int check_todo_list_from_file(struct repository *r)
5001 struct todo_list old_todo = TODO_LIST_INIT, new_todo = TODO_LIST_INIT;
5004 if (strbuf_read_file_or_whine(&new_todo.buf, rebase_path_todo()) < 0) {
5009 if (strbuf_read_file_or_whine(&old_todo.buf, rebase_path_todo_backup()) < 0) {
5014 res = todo_list_parse_insn_buffer(r, old_todo.buf.buf, &old_todo);
5016 res = todo_list_parse_insn_buffer(r, new_todo.buf.buf, &new_todo);
5018 res = todo_list_check(&old_todo, &new_todo);
5020 fprintf(stderr, _(edit_todo_list_advice));
5022 todo_list_release(&old_todo);
5023 todo_list_release(&new_todo);
5028 /* skip picking commits whose parents are unchanged */
5029 static int skip_unnecessary_picks(struct repository *r,
5030 struct todo_list *todo_list,
5031 struct object_id *base_oid)
5033 struct object_id *parent_oid;
5036 for (i = 0; i < todo_list->nr; i++) {
5037 struct todo_item *item = todo_list->items + i;
5039 if (item->command >= TODO_NOOP)
5041 if (item->command != TODO_PICK)
5043 if (parse_commit(item->commit)) {
5044 return error(_("could not parse commit '%s'"),
5045 oid_to_hex(&item->commit->object.oid));
5047 if (!item->commit->parents)
5048 break; /* root commit */
5049 if (item->commit->parents->next)
5050 break; /* merge commit */
5051 parent_oid = &item->commit->parents->item->object.oid;
5052 if (!oideq(parent_oid, base_oid))
5054 oidcpy(base_oid, &item->commit->object.oid);
5057 const char *done_path = rebase_path_done();
5059 if (todo_list_write_to_file(r, todo_list, done_path, NULL, NULL, i, 0)) {
5060 error_errno(_("could not write to '%s'"), done_path);
5064 MOVE_ARRAY(todo_list->items, todo_list->items + i, todo_list->nr - i);
5066 todo_list->current = 0;
5068 if (is_fixup(peek_command(todo_list, 0)))
5069 record_in_rewritten(base_oid, peek_command(todo_list, 0));
5075 int complete_action(struct repository *r, struct replay_opts *opts, unsigned flags,
5076 const char *shortrevisions, const char *onto_name,
5077 struct commit *onto, const char *orig_head,
5078 struct string_list *commands, unsigned autosquash,
5079 struct todo_list *todo_list)
5081 const char *shortonto, *todo_file = rebase_path_todo();
5082 struct todo_list new_todo = TODO_LIST_INIT;
5083 struct strbuf *buf = &todo_list->buf;
5084 struct object_id oid = onto->object.oid;
5087 shortonto = find_unique_abbrev(&oid, DEFAULT_ABBREV);
5089 if (buf->len == 0) {
5090 struct todo_item *item = append_new_todo(todo_list);
5091 item->command = TODO_NOOP;
5092 item->commit = NULL;
5093 item->arg_len = item->arg_offset = item->flags = item->offset_in_buf = 0;
5096 if (autosquash && todo_list_rearrange_squash(todo_list))
5100 todo_list_add_exec_commands(todo_list, commands);
5102 if (count_commands(todo_list) == 0) {
5103 apply_autostash(opts);
5104 sequencer_remove_state(opts);
5106 return error(_("nothing to do"));
5109 res = edit_todo_list(r, todo_list, &new_todo, shortrevisions,
5113 else if (res == -2) {
5114 apply_autostash(opts);
5115 sequencer_remove_state(opts);
5118 } else if (res == -3) {
5119 apply_autostash(opts);
5120 sequencer_remove_state(opts);
5121 todo_list_release(&new_todo);
5123 return error(_("nothing to do"));
5126 if (todo_list_parse_insn_buffer(r, new_todo.buf.buf, &new_todo) ||
5127 todo_list_check(todo_list, &new_todo)) {
5128 fprintf(stderr, _(edit_todo_list_advice));
5129 checkout_onto(r, opts, onto_name, &onto->object.oid, orig_head);
5130 todo_list_release(&new_todo);
5135 if (opts->allow_ff && skip_unnecessary_picks(r, &new_todo, &oid)) {
5136 todo_list_release(&new_todo);
5137 return error(_("could not skip unnecessary pick commands"));
5140 if (todo_list_write_to_file(r, &new_todo, todo_file, NULL, NULL, -1,
5141 flags & ~(TODO_LIST_SHORTEN_IDS))) {
5142 todo_list_release(&new_todo);
5143 return error_errno(_("could not write '%s'"), todo_file);
5146 todo_list_release(&new_todo);
5148 if (checkout_onto(r, opts, onto_name, &oid, orig_head))
5151 if (require_clean_work_tree(r, "rebase", "", 1, 1))
5154 return sequencer_continue(r, opts);
5157 struct subject2item_entry {
5158 struct hashmap_entry entry;
5160 char subject[FLEX_ARRAY];
5163 static int subject2item_cmp(const void *fndata,
5164 const struct hashmap_entry *eptr,
5165 const struct hashmap_entry *entry_or_key,
5168 const struct subject2item_entry *a, *b;
5170 a = container_of(eptr, const struct subject2item_entry, entry);
5171 b = container_of(entry_or_key, const struct subject2item_entry, entry);
5173 return key ? strcmp(a->subject, key) : strcmp(a->subject, b->subject);
5176 define_commit_slab(commit_todo_item, struct todo_item *);
5179 * Rearrange the todo list that has both "pick commit-id msg" and "pick
5180 * commit-id fixup!/squash! msg" in it so that the latter is put immediately
5181 * after the former, and change "pick" to "fixup"/"squash".
5183 * Note that if the config has specified a custom instruction format, each log
5184 * message will have to be retrieved from the commit (as the oneline in the
5185 * script cannot be trusted) in order to normalize the autosquash arrangement.
5187 int todo_list_rearrange_squash(struct todo_list *todo_list)
5189 struct hashmap subject2item;
5190 int rearranged = 0, *next, *tail, i, nr = 0, alloc = 0;
5192 struct commit_todo_item commit_todo;
5193 struct todo_item *items = NULL;
5195 init_commit_todo_item(&commit_todo);
5197 * The hashmap maps onelines to the respective todo list index.
5199 * If any items need to be rearranged, the next[i] value will indicate
5200 * which item was moved directly after the i'th.
5202 * In that case, last[i] will indicate the index of the latest item to
5203 * be moved to appear after the i'th.
5205 hashmap_init(&subject2item, subject2item_cmp, NULL, todo_list->nr);
5206 ALLOC_ARRAY(next, todo_list->nr);
5207 ALLOC_ARRAY(tail, todo_list->nr);
5208 ALLOC_ARRAY(subjects, todo_list->nr);
5209 for (i = 0; i < todo_list->nr; i++) {
5210 struct strbuf buf = STRBUF_INIT;
5211 struct todo_item *item = todo_list->items + i;
5212 const char *commit_buffer, *subject, *p;
5215 struct subject2item_entry *entry;
5217 next[i] = tail[i] = -1;
5218 if (!item->commit || item->command == TODO_DROP) {
5223 if (is_fixup(item->command)) {
5224 clear_commit_todo_item(&commit_todo);
5225 return error(_("the script was already rearranged."));
5228 *commit_todo_item_at(&commit_todo, item->commit) = item;
5230 parse_commit(item->commit);
5231 commit_buffer = logmsg_reencode(item->commit, NULL, "UTF-8");
5232 find_commit_subject(commit_buffer, &subject);
5233 format_subject(&buf, subject, " ");
5234 subject = subjects[i] = strbuf_detach(&buf, &subject_len);
5235 unuse_commit_buffer(item->commit, commit_buffer);
5236 if ((skip_prefix(subject, "fixup! ", &p) ||
5237 skip_prefix(subject, "squash! ", &p))) {
5238 struct commit *commit2;
5243 if (!skip_prefix(p, "fixup! ", &p) &&
5244 !skip_prefix(p, "squash! ", &p))
5248 entry = hashmap_get_entry_from_hash(&subject2item,
5250 struct subject2item_entry,
5253 /* found by title */
5255 else if (!strchr(p, ' ') &&
5257 lookup_commit_reference_by_name(p)) &&
5258 *commit_todo_item_at(&commit_todo, commit2))
5259 /* found by commit name */
5260 i2 = *commit_todo_item_at(&commit_todo, commit2)
5263 /* copy can be a prefix of the commit subject */
5264 for (i2 = 0; i2 < i; i2++)
5266 starts_with(subjects[i2], p))
5274 todo_list->items[i].command =
5275 starts_with(subject, "fixup!") ?
5276 TODO_FIXUP : TODO_SQUASH;
5282 } else if (!hashmap_get_from_hash(&subject2item,
5283 strhash(subject), subject)) {
5284 FLEX_ALLOC_MEM(entry, subject, subject, subject_len);
5286 hashmap_entry_init(&entry->entry,
5287 strhash(entry->subject));
5288 hashmap_put(&subject2item, &entry->entry);
5293 for (i = 0; i < todo_list->nr; i++) {
5294 enum todo_command command = todo_list->items[i].command;
5298 * Initially, all commands are 'pick's. If it is a
5299 * fixup or a squash now, we have rearranged it.
5301 if (is_fixup(command))
5305 ALLOC_GROW(items, nr + 1, alloc);
5306 items[nr++] = todo_list->items[cur];
5311 FREE_AND_NULL(todo_list->items);
5312 todo_list->items = items;
5314 todo_list->alloc = alloc;
5319 for (i = 0; i < todo_list->nr; i++)
5322 hashmap_free_entries(&subject2item, struct subject2item_entry, entry);
5324 clear_commit_todo_item(&commit_todo);
5329 int sequencer_determine_whence(struct repository *r, enum commit_whence *whence)
5331 if (file_exists(git_path_cherry_pick_head(r))) {
5332 struct object_id cherry_pick_head, rebase_head;
5334 if (file_exists(git_path_seq_dir()))
5335 *whence = FROM_CHERRY_PICK_MULTI;
5336 if (file_exists(rebase_path()) &&
5337 !get_oid("REBASE_HEAD", &rebase_head) &&
5338 !get_oid("CHERRY_PICK_HEAD", &cherry_pick_head) &&
5339 oideq(&rebase_head, &cherry_pick_head))
5340 *whence = FROM_REBASE_PICK;
5342 *whence = FROM_CHERRY_PICK_SINGLE;