5 #include "object-store.h"
10 #include "run-command.h"
13 #include "cache-tree.h"
17 #include "merge-recursive.h"
19 #include "argv-array.h"
23 #include "wt-status.h"
25 #include "notes-utils.h"
27 #include "unpack-trees.h"
31 #include "commit-slab.h"
33 #include "commit-reach.h"
34 #include "rebase-interactive.h"
36 #define GIT_REFLOG_ACTION "GIT_REFLOG_ACTION"
38 static const char sign_off_header[] = "Signed-off-by: ";
39 static const char cherry_picked_prefix[] = "(cherry picked from commit ";
41 GIT_PATH_FUNC(git_path_commit_editmsg, "COMMIT_EDITMSG")
43 GIT_PATH_FUNC(git_path_seq_dir, "sequencer")
45 static GIT_PATH_FUNC(git_path_todo_file, "sequencer/todo")
46 static GIT_PATH_FUNC(git_path_opts_file, "sequencer/opts")
47 static GIT_PATH_FUNC(git_path_head_file, "sequencer/head")
48 static GIT_PATH_FUNC(git_path_abort_safety_file, "sequencer/abort-safety")
50 static GIT_PATH_FUNC(rebase_path, "rebase-merge")
52 * The file containing rebase commands, comments, and empty lines.
53 * This file is created by "git rebase -i" then edited by the user. As
54 * the lines are processed, they are removed from the front of this
55 * file and written to the tail of 'done'.
57 GIT_PATH_FUNC(rebase_path_todo, "rebase-merge/git-rebase-todo")
58 GIT_PATH_FUNC(rebase_path_todo_backup, "rebase-merge/git-rebase-todo.backup")
61 * The rebase command lines that have already been processed. A line
62 * is moved here when it is first handled, before any associated user
65 static GIT_PATH_FUNC(rebase_path_done, "rebase-merge/done")
67 * The file to keep track of how many commands were already processed (e.g.
70 static GIT_PATH_FUNC(rebase_path_msgnum, "rebase-merge/msgnum")
72 * The file to keep track of how many commands are to be processed in total
73 * (e.g. for the prompt).
75 static GIT_PATH_FUNC(rebase_path_msgtotal, "rebase-merge/end")
77 * The commit message that is planned to be used for any changes that
78 * need to be committed following a user interaction.
80 static GIT_PATH_FUNC(rebase_path_message, "rebase-merge/message")
82 * The file into which is accumulated the suggested commit message for
83 * squash/fixup commands. When the first of a series of squash/fixups
84 * is seen, the file is created and the commit message from the
85 * previous commit and from the first squash/fixup commit are written
86 * to it. The commit message for each subsequent squash/fixup commit
87 * is appended to the file as it is processed.
89 static GIT_PATH_FUNC(rebase_path_squash_msg, "rebase-merge/message-squash")
91 * If the current series of squash/fixups has not yet included a squash
92 * command, then this file exists and holds the commit message of the
93 * original "pick" commit. (If the series ends without a "squash"
94 * command, then this can be used as the commit message of the combined
95 * commit without opening the editor.)
97 static GIT_PATH_FUNC(rebase_path_fixup_msg, "rebase-merge/message-fixup")
99 * This file contains the list fixup/squash commands that have been
100 * accumulated into message-fixup or message-squash so far.
102 static GIT_PATH_FUNC(rebase_path_current_fixups, "rebase-merge/current-fixups")
104 * A script to set the GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, and
105 * GIT_AUTHOR_DATE that will be used for the commit that is currently
108 static GIT_PATH_FUNC(rebase_path_author_script, "rebase-merge/author-script")
110 * When an "edit" rebase command is being processed, the SHA1 of the
111 * commit to be edited is recorded in this file. When "git rebase
112 * --continue" is executed, if there are any staged changes then they
113 * will be amended to the HEAD commit, but only provided the HEAD
114 * commit is still the commit to be edited. When any other rebase
115 * command is processed, this file is deleted.
117 static GIT_PATH_FUNC(rebase_path_amend, "rebase-merge/amend")
119 * When we stop at a given patch via the "edit" command, this file contains
120 * the abbreviated commit name of the corresponding patch.
122 static GIT_PATH_FUNC(rebase_path_stopped_sha, "rebase-merge/stopped-sha")
124 * For the post-rewrite hook, we make a list of rewritten commits and
125 * their new sha1s. The rewritten-pending list keeps the sha1s of
126 * commits that have been processed, but not committed yet,
127 * e.g. because they are waiting for a 'squash' command.
129 static GIT_PATH_FUNC(rebase_path_rewritten_list, "rebase-merge/rewritten-list")
130 static GIT_PATH_FUNC(rebase_path_rewritten_pending,
131 "rebase-merge/rewritten-pending")
134 * The path of the file containig the OID of the "squash onto" commit, i.e.
135 * the dummy commit used for `reset [new root]`.
137 static GIT_PATH_FUNC(rebase_path_squash_onto, "rebase-merge/squash-onto")
140 * The path of the file listing refs that need to be deleted after the rebase
141 * finishes. This is used by the `label` command to record the need for cleanup.
143 static GIT_PATH_FUNC(rebase_path_refs_to_delete, "rebase-merge/refs-to-delete")
146 * The following files are written by git-rebase just after parsing the
149 static GIT_PATH_FUNC(rebase_path_gpg_sign_opt, "rebase-merge/gpg_sign_opt")
150 static GIT_PATH_FUNC(rebase_path_cdate_is_adate, "rebase-merge/cdate_is_adate")
151 static GIT_PATH_FUNC(rebase_path_orig_head, "rebase-merge/orig-head")
152 static GIT_PATH_FUNC(rebase_path_verbose, "rebase-merge/verbose")
153 static GIT_PATH_FUNC(rebase_path_quiet, "rebase-merge/quiet")
154 static GIT_PATH_FUNC(rebase_path_signoff, "rebase-merge/signoff")
155 static GIT_PATH_FUNC(rebase_path_head_name, "rebase-merge/head-name")
156 static GIT_PATH_FUNC(rebase_path_onto, "rebase-merge/onto")
157 static GIT_PATH_FUNC(rebase_path_autostash, "rebase-merge/autostash")
158 static GIT_PATH_FUNC(rebase_path_strategy, "rebase-merge/strategy")
159 static GIT_PATH_FUNC(rebase_path_strategy_opts, "rebase-merge/strategy_opts")
160 static GIT_PATH_FUNC(rebase_path_allow_rerere_autoupdate, "rebase-merge/allow_rerere_autoupdate")
161 static GIT_PATH_FUNC(rebase_path_reschedule_failed_exec, "rebase-merge/reschedule-failed-exec")
163 static int git_sequencer_config(const char *k, const char *v, void *cb)
165 struct replay_opts *opts = cb;
168 if (!strcmp(k, "commit.cleanup")) {
171 status = git_config_string(&s, k, v);
175 if (!strcmp(s, "verbatim")) {
176 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_NONE;
177 opts->explicit_cleanup = 1;
178 } else if (!strcmp(s, "whitespace")) {
179 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_SPACE;
180 opts->explicit_cleanup = 1;
181 } else if (!strcmp(s, "strip")) {
182 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_ALL;
183 opts->explicit_cleanup = 1;
184 } else if (!strcmp(s, "scissors")) {
185 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_SCISSORS;
186 opts->explicit_cleanup = 1;
188 warning(_("invalid commit message cleanup mode '%s'"),
196 if (!strcmp(k, "commit.gpgsign")) {
197 opts->gpg_sign = git_config_bool(k, v) ? xstrdup("") : NULL;
201 status = git_gpg_config(k, v, NULL);
205 return git_diff_basic_config(k, v, NULL);
208 void sequencer_init_config(struct replay_opts *opts)
210 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_NONE;
211 git_config(git_sequencer_config, opts);
214 static inline int is_rebase_i(const struct replay_opts *opts)
216 return opts->action == REPLAY_INTERACTIVE_REBASE;
219 static const char *get_dir(const struct replay_opts *opts)
221 if (is_rebase_i(opts))
222 return rebase_path();
223 return git_path_seq_dir();
226 static const char *get_todo_path(const struct replay_opts *opts)
228 if (is_rebase_i(opts))
229 return rebase_path_todo();
230 return git_path_todo_file();
234 * Returns 0 for non-conforming footer
235 * Returns 1 for conforming footer
236 * Returns 2 when sob exists within conforming footer
237 * Returns 3 when sob exists within conforming footer as last entry
239 static int has_conforming_footer(struct strbuf *sb, struct strbuf *sob,
240 size_t ignore_footer)
242 struct process_trailer_options opts = PROCESS_TRAILER_OPTIONS_INIT;
243 struct trailer_info info;
245 int found_sob = 0, found_sob_last = 0;
249 trailer_info_get(&info, sb->buf, &opts);
251 if (info.trailer_start == info.trailer_end)
254 for (i = 0; i < info.trailer_nr; i++)
255 if (sob && !strncmp(info.trailers[i], sob->buf, sob->len)) {
257 if (i == info.trailer_nr - 1)
261 trailer_info_release(&info);
270 static const char *gpg_sign_opt_quoted(struct replay_opts *opts)
272 static struct strbuf buf = STRBUF_INIT;
276 sq_quotef(&buf, "-S%s", opts->gpg_sign);
280 int sequencer_remove_state(struct replay_opts *opts)
282 struct strbuf buf = STRBUF_INIT;
285 if (is_rebase_i(opts) &&
286 strbuf_read_file(&buf, rebase_path_refs_to_delete(), 0) > 0) {
289 char *eol = strchr(p, '\n');
292 if (delete_ref("(rebase -i) cleanup", p, NULL, 0) < 0) {
293 warning(_("could not delete '%s'"), p);
302 free(opts->gpg_sign);
303 free(opts->strategy);
304 for (i = 0; i < opts->xopts_nr; i++)
305 free(opts->xopts[i]);
307 strbuf_release(&opts->current_fixups);
310 strbuf_addstr(&buf, get_dir(opts));
311 if (remove_dir_recursively(&buf, 0))
312 ret = error(_("could not remove '%s'"), buf.buf);
313 strbuf_release(&buf);
318 static const char *action_name(const struct replay_opts *opts)
320 switch (opts->action) {
324 return N_("cherry-pick");
325 case REPLAY_INTERACTIVE_REBASE:
326 return N_("rebase -i");
328 die(_("unknown action: %d"), opts->action);
331 struct commit_message {
338 static const char *short_commit_name(struct commit *commit)
340 return find_unique_abbrev(&commit->object.oid, DEFAULT_ABBREV);
343 static int get_message(struct commit *commit, struct commit_message *out)
345 const char *abbrev, *subject;
348 out->message = logmsg_reencode(commit, NULL, get_commit_output_encoding());
349 abbrev = short_commit_name(commit);
351 subject_len = find_commit_subject(out->message, &subject);
353 out->subject = xmemdupz(subject, subject_len);
354 out->label = xstrfmt("%s... %s", abbrev, out->subject);
355 out->parent_label = xstrfmt("parent of %s", out->label);
360 static void free_message(struct commit *commit, struct commit_message *msg)
362 free(msg->parent_label);
365 unuse_commit_buffer(commit, msg->message);
368 static void print_advice(struct repository *r, int show_hint,
369 struct replay_opts *opts)
371 char *msg = getenv("GIT_CHERRY_PICK_HELP");
374 fprintf(stderr, "%s\n", msg);
376 * A conflict has occurred but the porcelain
377 * (typically rebase --interactive) wants to take care
378 * of the commit itself so remove CHERRY_PICK_HEAD
380 unlink(git_path_cherry_pick_head(r));
386 advise(_("after resolving the conflicts, mark the corrected paths\n"
387 "with 'git add <paths>' or 'git rm <paths>'"));
389 advise(_("after resolving the conflicts, mark the corrected paths\n"
390 "with 'git add <paths>' or 'git rm <paths>'\n"
391 "and commit the result with 'git commit'"));
395 static int write_message(const void *buf, size_t len, const char *filename,
398 struct lock_file msg_file = LOCK_INIT;
400 int msg_fd = hold_lock_file_for_update(&msg_file, filename, 0);
402 return error_errno(_("could not lock '%s'"), filename);
403 if (write_in_full(msg_fd, buf, len) < 0) {
404 error_errno(_("could not write to '%s'"), filename);
405 rollback_lock_file(&msg_file);
408 if (append_eol && write(msg_fd, "\n", 1) < 0) {
409 error_errno(_("could not write eol to '%s'"), filename);
410 rollback_lock_file(&msg_file);
413 if (commit_lock_file(&msg_file) < 0)
414 return error(_("failed to finalize '%s'"), filename);
420 * Reads a file that was presumably written by a shell script, i.e. with an
421 * end-of-line marker that needs to be stripped.
423 * Note that only the last end-of-line marker is stripped, consistent with the
424 * behavior of "$(cat path)" in a shell script.
426 * Returns 1 if the file was read, 0 if it could not be read or does not exist.
428 static int read_oneliner(struct strbuf *buf,
429 const char *path, int skip_if_empty)
431 int orig_len = buf->len;
433 if (!file_exists(path))
436 if (strbuf_read_file(buf, path, 0) < 0) {
437 warning_errno(_("could not read '%s'"), path);
441 if (buf->len > orig_len && buf->buf[buf->len - 1] == '\n') {
442 if (--buf->len > orig_len && buf->buf[buf->len - 1] == '\r')
444 buf->buf[buf->len] = '\0';
447 if (skip_if_empty && buf->len == orig_len)
453 static struct tree *empty_tree(struct repository *r)
455 return lookup_tree(r, the_hash_algo->empty_tree);
458 static int error_dirty_index(struct repository *repo, struct replay_opts *opts)
460 if (repo_read_index_unmerged(repo))
461 return error_resolve_conflict(_(action_name(opts)));
463 error(_("your local changes would be overwritten by %s."),
464 _(action_name(opts)));
466 if (advice_commit_before_merge)
467 advise(_("commit your changes or stash them to proceed."));
471 static void update_abort_safety_file(void)
473 struct object_id head;
475 /* Do nothing on a single-pick */
476 if (!file_exists(git_path_seq_dir()))
479 if (!get_oid("HEAD", &head))
480 write_file(git_path_abort_safety_file(), "%s", oid_to_hex(&head));
482 write_file(git_path_abort_safety_file(), "%s", "");
485 static int fast_forward_to(struct repository *r,
486 const struct object_id *to,
487 const struct object_id *from,
489 struct replay_opts *opts)
491 struct ref_transaction *transaction;
492 struct strbuf sb = STRBUF_INIT;
493 struct strbuf err = STRBUF_INIT;
496 if (checkout_fast_forward(r, from, to, 1))
497 return -1; /* the callee should have complained already */
499 strbuf_addf(&sb, _("%s: fast-forward"), _(action_name(opts)));
501 transaction = ref_transaction_begin(&err);
503 ref_transaction_update(transaction, "HEAD",
504 to, unborn && !is_rebase_i(opts) ?
507 ref_transaction_commit(transaction, &err)) {
508 ref_transaction_free(transaction);
509 error("%s", err.buf);
511 strbuf_release(&err);
516 strbuf_release(&err);
517 ref_transaction_free(transaction);
518 update_abort_safety_file();
522 enum commit_msg_cleanup_mode get_cleanup_mode(const char *cleanup_arg,
525 if (!cleanup_arg || !strcmp(cleanup_arg, "default"))
526 return use_editor ? COMMIT_MSG_CLEANUP_ALL :
527 COMMIT_MSG_CLEANUP_SPACE;
528 else if (!strcmp(cleanup_arg, "verbatim"))
529 return COMMIT_MSG_CLEANUP_NONE;
530 else if (!strcmp(cleanup_arg, "whitespace"))
531 return COMMIT_MSG_CLEANUP_SPACE;
532 else if (!strcmp(cleanup_arg, "strip"))
533 return COMMIT_MSG_CLEANUP_ALL;
534 else if (!strcmp(cleanup_arg, "scissors"))
535 return use_editor ? COMMIT_MSG_CLEANUP_SCISSORS :
536 COMMIT_MSG_CLEANUP_SPACE;
538 die(_("Invalid cleanup mode %s"), cleanup_arg);
542 * NB using int rather than enum cleanup_mode to stop clang's
543 * -Wtautological-constant-out-of-range-compare complaining that the comparison
546 static const char *describe_cleanup_mode(int cleanup_mode)
548 static const char *modes[] = { "whitespace",
553 if (cleanup_mode < ARRAY_SIZE(modes))
554 return modes[cleanup_mode];
556 BUG("invalid cleanup_mode provided (%d)", cleanup_mode);
559 void append_conflicts_hint(struct index_state *istate,
560 struct strbuf *msgbuf, enum commit_msg_cleanup_mode cleanup_mode)
564 if (cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS) {
565 strbuf_addch(msgbuf, '\n');
566 wt_status_append_cut_line(msgbuf);
567 strbuf_addch(msgbuf, comment_line_char);
570 strbuf_addch(msgbuf, '\n');
571 strbuf_commented_addf(msgbuf, "Conflicts:\n");
572 for (i = 0; i < istate->cache_nr;) {
573 const struct cache_entry *ce = istate->cache[i++];
575 strbuf_commented_addf(msgbuf, "\t%s\n", ce->name);
576 while (i < istate->cache_nr &&
577 !strcmp(ce->name, istate->cache[i]->name))
583 static int do_recursive_merge(struct repository *r,
584 struct commit *base, struct commit *next,
585 const char *base_label, const char *next_label,
586 struct object_id *head, struct strbuf *msgbuf,
587 struct replay_opts *opts)
589 struct merge_options o;
590 struct tree *result, *next_tree, *base_tree, *head_tree;
593 struct lock_file index_lock = LOCK_INIT;
595 if (repo_hold_locked_index(r, &index_lock, LOCK_REPORT_ON_ERROR) < 0)
600 init_merge_options(&o, r);
601 o.ancestor = base ? base_label : "(empty tree)";
603 o.branch2 = next ? next_label : "(empty tree)";
604 if (is_rebase_i(opts))
606 o.show_rename_progress = 1;
608 head_tree = parse_tree_indirect(head);
609 next_tree = next ? get_commit_tree(next) : empty_tree(r);
610 base_tree = base ? get_commit_tree(base) : empty_tree(r);
612 for (xopt = opts->xopts; xopt != opts->xopts + opts->xopts_nr; xopt++)
613 parse_merge_opt(&o, *xopt);
615 clean = merge_trees(&o,
617 next_tree, base_tree, &result);
618 if (is_rebase_i(opts) && clean <= 0)
619 fputs(o.obuf.buf, stdout);
620 strbuf_release(&o.obuf);
621 diff_warn_rename_limit("merge.renamelimit", o.needed_rename_limit, 0);
623 rollback_lock_file(&index_lock);
627 if (write_locked_index(r->index, &index_lock,
628 COMMIT_LOCK | SKIP_IF_UNCHANGED))
630 * TRANSLATORS: %s will be "revert", "cherry-pick" or
633 return error(_("%s: Unable to write new index file"),
634 _(action_name(opts)));
637 append_conflicts_hint(r->index, msgbuf,
638 opts->default_msg_cleanup);
643 static struct object_id *get_cache_tree_oid(struct index_state *istate)
645 if (!istate->cache_tree)
646 istate->cache_tree = cache_tree();
648 if (!cache_tree_fully_valid(istate->cache_tree))
649 if (cache_tree_update(istate, 0)) {
650 error(_("unable to update cache tree"));
654 return &istate->cache_tree->oid;
657 static int is_index_unchanged(struct repository *r)
659 struct object_id head_oid, *cache_tree_oid;
660 struct commit *head_commit;
661 struct index_state *istate = r->index;
663 if (!resolve_ref_unsafe("HEAD", RESOLVE_REF_READING, &head_oid, NULL))
664 return error(_("could not resolve HEAD commit"));
666 head_commit = lookup_commit(r, &head_oid);
669 * If head_commit is NULL, check_commit, called from
670 * lookup_commit, would have indicated that head_commit is not
671 * a commit object already. parse_commit() will return failure
672 * without further complaints in such a case. Otherwise, if
673 * the commit is invalid, parse_commit() will complain. So
674 * there is nothing for us to say here. Just return failure.
676 if (parse_commit(head_commit))
679 if (!(cache_tree_oid = get_cache_tree_oid(istate)))
682 return oideq(cache_tree_oid, get_commit_tree_oid(head_commit));
685 static int write_author_script(const char *message)
687 struct strbuf buf = STRBUF_INIT;
692 if (!*message || starts_with(message, "\n")) {
694 /* Missing 'author' line? */
695 unlink(rebase_path_author_script());
697 } else if (skip_prefix(message, "author ", &message))
699 else if ((eol = strchr(message, '\n')))
704 strbuf_addstr(&buf, "GIT_AUTHOR_NAME='");
705 while (*message && *message != '\n' && *message != '\r')
706 if (skip_prefix(message, " <", &message))
708 else if (*message != '\'')
709 strbuf_addch(&buf, *(message++));
711 strbuf_addf(&buf, "'\\%c'", *(message++));
712 strbuf_addstr(&buf, "'\nGIT_AUTHOR_EMAIL='");
713 while (*message && *message != '\n' && *message != '\r')
714 if (skip_prefix(message, "> ", &message))
716 else if (*message != '\'')
717 strbuf_addch(&buf, *(message++));
719 strbuf_addf(&buf, "'\\%c'", *(message++));
720 strbuf_addstr(&buf, "'\nGIT_AUTHOR_DATE='@");
721 while (*message && *message != '\n' && *message != '\r')
722 if (*message != '\'')
723 strbuf_addch(&buf, *(message++));
725 strbuf_addf(&buf, "'\\%c'", *(message++));
726 strbuf_addch(&buf, '\'');
727 res = write_message(buf.buf, buf.len, rebase_path_author_script(), 1);
728 strbuf_release(&buf);
733 * Take a series of KEY='VALUE' lines where VALUE part is
734 * sq-quoted, and append <KEY, VALUE> at the end of the string list
736 static int parse_key_value_squoted(char *buf, struct string_list *list)
739 struct string_list_item *item;
741 char *cp = strchr(buf, '=');
743 np = strchrnul(buf, '\n');
744 return error(_("no key present in '%.*s'"),
745 (int) (np - buf), buf);
747 np = strchrnul(cp, '\n');
749 item = string_list_append(list, buf);
751 buf = np + (*np == '\n');
755 return error(_("unable to dequote value of '%s'"),
757 item->util = xstrdup(cp);
763 * Reads and parses the state directory's "author-script" file, and sets name,
764 * email and date accordingly.
765 * Returns 0 on success, -1 if the file could not be parsed.
767 * The author script is of the format:
769 * GIT_AUTHOR_NAME='$author_name'
770 * GIT_AUTHOR_EMAIL='$author_email'
771 * GIT_AUTHOR_DATE='$author_date'
773 * where $author_name, $author_email and $author_date are quoted. We are strict
774 * with our parsing, as the file was meant to be eval'd in the old
775 * git-am.sh/git-rebase--interactive.sh scripts, and thus if the file differs
776 * from what this function expects, it is better to bail out than to do
777 * something that the user does not expect.
779 int read_author_script(const char *path, char **name, char **email, char **date,
782 struct strbuf buf = STRBUF_INIT;
783 struct string_list kv = STRING_LIST_INIT_DUP;
784 int retval = -1; /* assume failure */
785 int i, name_i = -2, email_i = -2, date_i = -2, err = 0;
787 if (strbuf_read_file(&buf, path, 256) <= 0) {
788 strbuf_release(&buf);
789 if (errno == ENOENT && allow_missing)
792 return error_errno(_("could not open '%s' for reading"),
796 if (parse_key_value_squoted(buf.buf, &kv))
799 for (i = 0; i < kv.nr; i++) {
800 if (!strcmp(kv.items[i].string, "GIT_AUTHOR_NAME")) {
802 name_i = error(_("'GIT_AUTHOR_NAME' already given"));
805 } else if (!strcmp(kv.items[i].string, "GIT_AUTHOR_EMAIL")) {
807 email_i = error(_("'GIT_AUTHOR_EMAIL' already given"));
810 } else if (!strcmp(kv.items[i].string, "GIT_AUTHOR_DATE")) {
812 date_i = error(_("'GIT_AUTHOR_DATE' already given"));
816 err = error(_("unknown variable '%s'"),
821 error(_("missing 'GIT_AUTHOR_NAME'"));
823 error(_("missing 'GIT_AUTHOR_EMAIL'"));
825 error(_("missing 'GIT_AUTHOR_DATE'"));
826 if (date_i < 0 || email_i < 0 || date_i < 0 || err)
830 *name = kv.items[name_i].util;
832 free(kv.items[name_i].util);
834 *email = kv.items[email_i].util;
836 free(kv.items[email_i].util);
838 *date = kv.items[date_i].util;
840 free(kv.items[date_i].util);
843 string_list_clear(&kv, !!retval);
844 strbuf_release(&buf);
849 * Read a GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL AND GIT_AUTHOR_DATE from a
850 * file with shell quoting into struct argv_array. Returns -1 on
851 * error, 0 otherwise.
853 static int read_env_script(struct argv_array *env)
855 char *name, *email, *date;
857 if (read_author_script(rebase_path_author_script(),
858 &name, &email, &date, 0))
861 argv_array_pushf(env, "GIT_AUTHOR_NAME=%s", name);
862 argv_array_pushf(env, "GIT_AUTHOR_EMAIL=%s", email);
863 argv_array_pushf(env, "GIT_AUTHOR_DATE=%s", date);
871 static char *get_author(const char *message)
876 a = find_commit_header(message, "author", &len);
878 return xmemdupz(a, len);
883 /* Returns a "date" string that needs to be free()'d by the caller */
884 static char *read_author_date_or_null(void)
888 if (read_author_script(rebase_path_author_script(),
889 NULL, NULL, &date, 0))
894 static const char staged_changes_advice[] =
895 N_("you have staged changes in your working tree\n"
896 "If these changes are meant to be squashed into the previous commit, run:\n"
898 " git commit --amend %s\n"
900 "If they are meant to go into a new commit, run:\n"
904 "In both cases, once you're done, continue with:\n"
906 " git rebase --continue\n");
908 #define ALLOW_EMPTY (1<<0)
909 #define EDIT_MSG (1<<1)
910 #define AMEND_MSG (1<<2)
911 #define CLEANUP_MSG (1<<3)
912 #define VERIFY_MSG (1<<4)
913 #define CREATE_ROOT_COMMIT (1<<5)
915 static int run_command_silent_on_success(struct child_process *cmd)
917 struct strbuf buf = STRBUF_INIT;
920 cmd->stdout_to_stderr = 1;
921 rc = pipe_command(cmd,
927 fputs(buf.buf, stderr);
928 strbuf_release(&buf);
933 * If we are cherry-pick, and if the merge did not result in
934 * hand-editing, we will hit this commit and inherit the original
935 * author date and name.
937 * If we are revert, or if our cherry-pick results in a hand merge,
938 * we had better say that the current user is responsible for that.
940 * An exception is when run_git_commit() is called during an
941 * interactive rebase: in that case, we will want to retain the
944 static int run_git_commit(struct repository *r,
946 struct replay_opts *opts,
949 struct child_process cmd = CHILD_PROCESS_INIT;
953 if (opts->committer_date_is_author_date) {
955 struct strbuf datebuf = STRBUF_INIT;
956 char *date = read_author_date_or_null();
961 strbuf_addf(&datebuf, "@%s", date);
962 res = setenv("GIT_COMMITTER_DATE", datebuf.buf, 1);
964 strbuf_release(&datebuf);
971 if (is_rebase_i(opts) && read_env_script(&cmd.env_array)) {
972 const char *gpg_opt = gpg_sign_opt_quoted(opts);
974 return error(_(staged_changes_advice),
978 argv_array_push(&cmd.args, "commit");
980 if (!(flags & VERIFY_MSG))
981 argv_array_push(&cmd.args, "-n");
982 if ((flags & AMEND_MSG))
983 argv_array_push(&cmd.args, "--amend");
985 argv_array_pushf(&cmd.args, "-S%s", opts->gpg_sign);
987 argv_array_pushl(&cmd.args, "-F", defmsg, NULL);
988 else if (!(flags & EDIT_MSG))
989 argv_array_pushl(&cmd.args, "-C", "HEAD", NULL);
990 if ((flags & CLEANUP_MSG))
991 argv_array_push(&cmd.args, "--cleanup=strip");
992 if ((flags & EDIT_MSG))
993 argv_array_push(&cmd.args, "-e");
994 else if (!(flags & CLEANUP_MSG) &&
995 !opts->signoff && !opts->record_origin &&
996 !opts->explicit_cleanup)
997 argv_array_push(&cmd.args, "--cleanup=verbatim");
999 if ((flags & ALLOW_EMPTY))
1000 argv_array_push(&cmd.args, "--allow-empty");
1002 if (!(flags & EDIT_MSG))
1003 argv_array_push(&cmd.args, "--allow-empty-message");
1005 if (is_rebase_i(opts) && !(flags & EDIT_MSG))
1006 return run_command_silent_on_success(&cmd);
1008 return run_command(&cmd);
1011 static int rest_is_empty(const struct strbuf *sb, int start)
1016 /* Check if the rest is just whitespace and Signed-off-by's. */
1017 for (i = start; i < sb->len; i++) {
1018 nl = memchr(sb->buf + i, '\n', sb->len - i);
1024 if (strlen(sign_off_header) <= eol - i &&
1025 starts_with(sb->buf + i, sign_off_header)) {
1030 if (!isspace(sb->buf[i++]))
1037 void cleanup_message(struct strbuf *msgbuf,
1038 enum commit_msg_cleanup_mode cleanup_mode, int verbose)
1040 if (verbose || /* Truncate the message just before the diff, if any. */
1041 cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS)
1042 strbuf_setlen(msgbuf, wt_status_locate_end(msgbuf->buf, msgbuf->len));
1043 if (cleanup_mode != COMMIT_MSG_CLEANUP_NONE)
1044 strbuf_stripspace(msgbuf, cleanup_mode == COMMIT_MSG_CLEANUP_ALL);
1048 * Find out if the message in the strbuf contains only whitespace and
1049 * Signed-off-by lines.
1051 int message_is_empty(const struct strbuf *sb,
1052 enum commit_msg_cleanup_mode cleanup_mode)
1054 if (cleanup_mode == COMMIT_MSG_CLEANUP_NONE && sb->len)
1056 return rest_is_empty(sb, 0);
1060 * See if the user edited the message in the editor or left what
1061 * was in the template intact
1063 int template_untouched(const struct strbuf *sb, const char *template_file,
1064 enum commit_msg_cleanup_mode cleanup_mode)
1066 struct strbuf tmpl = STRBUF_INIT;
1069 if (cleanup_mode == COMMIT_MSG_CLEANUP_NONE && sb->len)
1072 if (!template_file || strbuf_read_file(&tmpl, template_file, 0) <= 0)
1075 strbuf_stripspace(&tmpl, cleanup_mode == COMMIT_MSG_CLEANUP_ALL);
1076 if (!skip_prefix(sb->buf, tmpl.buf, &start))
1078 strbuf_release(&tmpl);
1079 return rest_is_empty(sb, start - sb->buf);
1082 int update_head_with_reflog(const struct commit *old_head,
1083 const struct object_id *new_head,
1084 const char *action, const struct strbuf *msg,
1087 struct ref_transaction *transaction;
1088 struct strbuf sb = STRBUF_INIT;
1093 strbuf_addstr(&sb, action);
1094 strbuf_addstr(&sb, ": ");
1097 nl = strchr(msg->buf, '\n');
1099 strbuf_add(&sb, msg->buf, nl + 1 - msg->buf);
1101 strbuf_addbuf(&sb, msg);
1102 strbuf_addch(&sb, '\n');
1105 transaction = ref_transaction_begin(err);
1107 ref_transaction_update(transaction, "HEAD", new_head,
1108 old_head ? &old_head->object.oid : &null_oid,
1110 ref_transaction_commit(transaction, err)) {
1113 ref_transaction_free(transaction);
1114 strbuf_release(&sb);
1119 static int run_rewrite_hook(const struct object_id *oldoid,
1120 const struct object_id *newoid)
1122 struct child_process proc = CHILD_PROCESS_INIT;
1123 const char *argv[3];
1125 struct strbuf sb = STRBUF_INIT;
1127 argv[0] = find_hook("post-rewrite");
1136 proc.stdout_to_stderr = 1;
1137 proc.trace2_hook_name = "post-rewrite";
1139 code = start_command(&proc);
1142 strbuf_addf(&sb, "%s %s\n", oid_to_hex(oldoid), oid_to_hex(newoid));
1143 sigchain_push(SIGPIPE, SIG_IGN);
1144 write_in_full(proc.in, sb.buf, sb.len);
1146 strbuf_release(&sb);
1147 sigchain_pop(SIGPIPE);
1148 return finish_command(&proc);
1151 void commit_post_rewrite(struct repository *r,
1152 const struct commit *old_head,
1153 const struct object_id *new_head)
1155 struct notes_rewrite_cfg *cfg;
1157 cfg = init_copy_notes_for_rewrite("amend");
1159 /* we are amending, so old_head is not NULL */
1160 copy_note_for_rewrite(cfg, &old_head->object.oid, new_head);
1161 finish_copy_notes_for_rewrite(r, cfg, "Notes added by 'git commit --amend'");
1163 run_rewrite_hook(&old_head->object.oid, new_head);
1166 static int run_prepare_commit_msg_hook(struct repository *r,
1170 struct argv_array hook_env = ARGV_ARRAY_INIT;
1174 name = git_path_commit_editmsg();
1175 if (write_message(msg->buf, msg->len, name, 0))
1178 argv_array_pushf(&hook_env, "GIT_INDEX_FILE=%s", r->index_file);
1179 argv_array_push(&hook_env, "GIT_EDITOR=:");
1181 ret = run_hook_le(hook_env.argv, "prepare-commit-msg", name,
1182 "commit", commit, NULL);
1184 ret = run_hook_le(hook_env.argv, "prepare-commit-msg", name,
1187 ret = error(_("'prepare-commit-msg' hook failed"));
1188 argv_array_clear(&hook_env);
1193 static const char implicit_ident_advice_noconfig[] =
1194 N_("Your name and email address were configured automatically based\n"
1195 "on your username and hostname. Please check that they are accurate.\n"
1196 "You can suppress this message by setting them explicitly. Run the\n"
1197 "following command and follow the instructions in your editor to edit\n"
1198 "your configuration file:\n"
1200 " git config --global --edit\n"
1202 "After doing this, you may fix the identity used for this commit with:\n"
1204 " git commit --amend --reset-author\n");
1206 static const char implicit_ident_advice_config[] =
1207 N_("Your name and email address were configured automatically based\n"
1208 "on your username and hostname. Please check that they are accurate.\n"
1209 "You can suppress this message by setting them explicitly:\n"
1211 " git config --global user.name \"Your Name\"\n"
1212 " git config --global user.email you@example.com\n"
1214 "After doing this, you may fix the identity used for this commit with:\n"
1216 " git commit --amend --reset-author\n");
1218 static const char *implicit_ident_advice(void)
1220 char *user_config = expand_user_path("~/.gitconfig", 0);
1221 char *xdg_config = xdg_config_home("config");
1222 int config_exists = file_exists(user_config) || file_exists(xdg_config);
1228 return _(implicit_ident_advice_config);
1230 return _(implicit_ident_advice_noconfig);
1234 void print_commit_summary(struct repository *r,
1236 const struct object_id *oid,
1239 struct rev_info rev;
1240 struct commit *commit;
1241 struct strbuf format = STRBUF_INIT;
1243 struct pretty_print_context pctx = {0};
1244 struct strbuf author_ident = STRBUF_INIT;
1245 struct strbuf committer_ident = STRBUF_INIT;
1247 commit = lookup_commit(r, oid);
1249 die(_("couldn't look up newly created commit"));
1250 if (parse_commit(commit))
1251 die(_("could not parse newly created commit"));
1253 strbuf_addstr(&format, "format:%h] %s");
1255 format_commit_message(commit, "%an <%ae>", &author_ident, &pctx);
1256 format_commit_message(commit, "%cn <%ce>", &committer_ident, &pctx);
1257 if (strbuf_cmp(&author_ident, &committer_ident)) {
1258 strbuf_addstr(&format, "\n Author: ");
1259 strbuf_addbuf_percentquote(&format, &author_ident);
1261 if (flags & SUMMARY_SHOW_AUTHOR_DATE) {
1262 struct strbuf date = STRBUF_INIT;
1264 format_commit_message(commit, "%ad", &date, &pctx);
1265 strbuf_addstr(&format, "\n Date: ");
1266 strbuf_addbuf_percentquote(&format, &date);
1267 strbuf_release(&date);
1269 if (!committer_ident_sufficiently_given()) {
1270 strbuf_addstr(&format, "\n Committer: ");
1271 strbuf_addbuf_percentquote(&format, &committer_ident);
1272 if (advice_implicit_identity) {
1273 strbuf_addch(&format, '\n');
1274 strbuf_addstr(&format, implicit_ident_advice());
1277 strbuf_release(&author_ident);
1278 strbuf_release(&committer_ident);
1280 repo_init_revisions(r, &rev, prefix);
1281 setup_revisions(0, NULL, &rev, NULL);
1284 rev.diffopt.output_format =
1285 DIFF_FORMAT_SHORTSTAT | DIFF_FORMAT_SUMMARY;
1287 rev.verbose_header = 1;
1288 rev.show_root_diff = 1;
1289 get_commit_format(format.buf, &rev);
1290 rev.always_show_header = 0;
1291 rev.diffopt.detect_rename = DIFF_DETECT_RENAME;
1292 rev.diffopt.break_opt = 0;
1293 diff_setup_done(&rev.diffopt);
1295 head = resolve_ref_unsafe("HEAD", 0, NULL, NULL);
1297 die_errno(_("unable to resolve HEAD after creating commit"));
1298 if (!strcmp(head, "HEAD"))
1299 head = _("detached HEAD");
1301 skip_prefix(head, "refs/heads/", &head);
1302 printf("[%s%s ", head, (flags & SUMMARY_INITIAL_COMMIT) ?
1303 _(" (root-commit)") : "");
1305 if (!log_tree_commit(&rev, commit)) {
1306 rev.always_show_header = 1;
1307 rev.use_terminator = 1;
1308 log_tree_commit(&rev, commit);
1311 strbuf_release(&format);
1314 static int parse_head(struct repository *r, struct commit **head)
1316 struct commit *current_head;
1317 struct object_id oid;
1319 if (get_oid("HEAD", &oid)) {
1320 current_head = NULL;
1322 current_head = lookup_commit_reference(r, &oid);
1324 return error(_("could not parse HEAD"));
1325 if (!oideq(&oid, ¤t_head->object.oid)) {
1326 warning(_("HEAD %s is not a commit!"),
1329 if (parse_commit(current_head))
1330 return error(_("could not parse HEAD commit"));
1332 *head = current_head;
1338 * Try to commit without forking 'git commit'. In some cases we need
1339 * to run 'git commit' to display an error message
1342 * -1 - error unable to commit
1344 * 1 - run 'git commit'
1346 static int try_to_commit(struct repository *r,
1347 struct strbuf *msg, const char *author,
1348 struct replay_opts *opts, unsigned int flags,
1349 struct object_id *oid)
1351 struct object_id tree;
1352 struct commit *current_head = NULL;
1353 struct commit_list *parents = NULL;
1354 struct commit_extra_header *extra = NULL;
1355 struct strbuf err = STRBUF_INIT;
1356 struct strbuf commit_msg = STRBUF_INIT;
1357 char *amend_author = NULL;
1358 const char *hook_commit = NULL;
1359 enum commit_msg_cleanup_mode cleanup;
1362 if (parse_head(r, ¤t_head))
1364 if (flags & AMEND_MSG) {
1365 const char *exclude_gpgsig[] = { "gpgsig", NULL };
1366 const char *out_enc = get_commit_output_encoding();
1367 const char *message = logmsg_reencode(current_head, NULL,
1371 const char *orig_message = NULL;
1373 find_commit_subject(message, &orig_message);
1375 strbuf_addstr(msg, orig_message);
1376 hook_commit = "HEAD";
1378 author = amend_author = get_author(message);
1379 unuse_commit_buffer(current_head, message);
1381 res = error(_("unable to parse commit author"));
1384 parents = copy_commit_list(current_head->parents);
1385 extra = read_commit_extra_headers(current_head, exclude_gpgsig);
1386 } else if (current_head &&
1387 (!(flags & CREATE_ROOT_COMMIT) || (flags & AMEND_MSG))) {
1388 commit_list_insert(current_head, &parents);
1391 if (opts->committer_date_is_author_date) {
1392 int len = strlen(author);
1393 struct ident_split ident;
1394 struct strbuf date = STRBUF_INIT;
1396 if (split_ident_line(&ident, author, len) < 0) {
1397 res = error(_("malformed ident line"));
1400 if (!ident.date_begin) {
1401 res = error(_("corrupted author without date information"));
1405 strbuf_addf(&date, "@%.*s %.*s",
1406 (int)(ident.date_end - ident.date_begin), ident.date_begin,
1407 (int)(ident.tz_end - ident.tz_begin), ident.tz_begin);
1408 res = setenv("GIT_COMMITTER_DATE", date.buf, 1);
1409 strbuf_release(&date);
1415 if (write_index_as_tree(&tree, r->index, r->index_file, 0, NULL)) {
1416 res = error(_("git write-tree failed to write a tree"));
1420 if (!(flags & ALLOW_EMPTY) && oideq(current_head ?
1421 get_commit_tree_oid(current_head) :
1422 the_hash_algo->empty_tree, &tree)) {
1423 res = 1; /* run 'git commit' to display error message */
1427 if (find_hook("prepare-commit-msg")) {
1428 res = run_prepare_commit_msg_hook(r, msg, hook_commit);
1431 if (strbuf_read_file(&commit_msg, git_path_commit_editmsg(),
1433 res = error_errno(_("unable to read commit message "
1435 git_path_commit_editmsg());
1441 if (flags & CLEANUP_MSG)
1442 cleanup = COMMIT_MSG_CLEANUP_ALL;
1443 else if ((opts->signoff || opts->record_origin) &&
1444 !opts->explicit_cleanup)
1445 cleanup = COMMIT_MSG_CLEANUP_SPACE;
1447 cleanup = opts->default_msg_cleanup;
1449 if (cleanup != COMMIT_MSG_CLEANUP_NONE)
1450 strbuf_stripspace(msg, cleanup == COMMIT_MSG_CLEANUP_ALL);
1451 if ((flags & EDIT_MSG) && message_is_empty(msg, cleanup)) {
1452 res = 1; /* run 'git commit' to display error message */
1458 if (commit_tree_extended(msg->buf, msg->len, &tree, parents,
1459 oid, author, opts->gpg_sign, extra)) {
1460 res = error(_("failed to write commit object"));
1464 if (update_head_with_reflog(current_head, oid,
1465 getenv("GIT_REFLOG_ACTION"), msg, &err)) {
1466 res = error("%s", err.buf);
1470 if (flags & AMEND_MSG)
1471 commit_post_rewrite(r, current_head, oid);
1474 free_commit_extra_headers(extra);
1475 strbuf_release(&err);
1476 strbuf_release(&commit_msg);
1482 static int do_commit(struct repository *r,
1483 const char *msg_file, const char *author,
1484 struct replay_opts *opts, unsigned int flags)
1488 if (!(flags & EDIT_MSG) && !(flags & VERIFY_MSG)) {
1489 struct object_id oid;
1490 struct strbuf sb = STRBUF_INIT;
1492 if (msg_file && strbuf_read_file(&sb, msg_file, 2048) < 0)
1493 return error_errno(_("unable to read commit message "
1497 res = try_to_commit(r, msg_file ? &sb : NULL,
1498 author, opts, flags, &oid);
1499 strbuf_release(&sb);
1501 unlink(git_path_cherry_pick_head(r));
1502 unlink(git_path_merge_msg(r));
1503 if (!is_rebase_i(opts))
1504 print_commit_summary(r, NULL, &oid,
1505 SUMMARY_SHOW_AUTHOR_DATE);
1510 return run_git_commit(r, msg_file, opts, flags);
1515 static int is_original_commit_empty(struct commit *commit)
1517 const struct object_id *ptree_oid;
1519 if (parse_commit(commit))
1520 return error(_("could not parse commit %s"),
1521 oid_to_hex(&commit->object.oid));
1522 if (commit->parents) {
1523 struct commit *parent = commit->parents->item;
1524 if (parse_commit(parent))
1525 return error(_("could not parse parent commit %s"),
1526 oid_to_hex(&parent->object.oid));
1527 ptree_oid = get_commit_tree_oid(parent);
1529 ptree_oid = the_hash_algo->empty_tree; /* commit is root */
1532 return oideq(ptree_oid, get_commit_tree_oid(commit));
1536 * Do we run "git commit" with "--allow-empty"?
1538 static int allow_empty(struct repository *r,
1539 struct replay_opts *opts,
1540 struct commit *commit)
1542 int index_unchanged, empty_commit;
1547 * (1) we do not allow empty at all and error out.
1549 * (2) we allow ones that were initially empty, but
1550 * forbid the ones that become empty;
1552 * (3) we allow both.
1554 if (!opts->allow_empty)
1555 return 0; /* let "git commit" barf as necessary */
1557 index_unchanged = is_index_unchanged(r);
1558 if (index_unchanged < 0)
1559 return index_unchanged;
1560 if (!index_unchanged)
1561 return 0; /* we do not have to say --allow-empty */
1563 if (opts->keep_redundant_commits)
1566 empty_commit = is_original_commit_empty(commit);
1567 if (empty_commit < 0)
1568 return empty_commit;
1578 } todo_command_info[] = {
1595 static const char *command_to_string(const enum todo_command command)
1597 if (command < TODO_COMMENT)
1598 return todo_command_info[command].str;
1599 die(_("unknown command: %d"), command);
1602 static char command_to_char(const enum todo_command command)
1604 if (command < TODO_COMMENT && todo_command_info[command].c)
1605 return todo_command_info[command].c;
1606 return comment_line_char;
1609 static int is_noop(const enum todo_command command)
1611 return TODO_NOOP <= command;
1614 static int is_fixup(enum todo_command command)
1616 return command == TODO_FIXUP || command == TODO_SQUASH;
1619 /* Does this command create a (non-merge) commit? */
1620 static int is_pick_or_similar(enum todo_command command)
1635 static int update_squash_messages(struct repository *r,
1636 enum todo_command command,
1637 struct commit *commit,
1638 struct replay_opts *opts)
1640 struct strbuf buf = STRBUF_INIT;
1642 const char *message, *body;
1644 if (opts->current_fixup_count > 0) {
1645 struct strbuf header = STRBUF_INIT;
1648 if (strbuf_read_file(&buf, rebase_path_squash_msg(), 9) <= 0)
1649 return error(_("could not read '%s'"),
1650 rebase_path_squash_msg());
1652 eol = buf.buf[0] != comment_line_char ?
1653 buf.buf : strchrnul(buf.buf, '\n');
1655 strbuf_addf(&header, "%c ", comment_line_char);
1656 strbuf_addf(&header, _("This is a combination of %d commits."),
1657 opts->current_fixup_count + 2);
1658 strbuf_splice(&buf, 0, eol - buf.buf, header.buf, header.len);
1659 strbuf_release(&header);
1661 struct object_id head;
1662 struct commit *head_commit;
1663 const char *head_message, *body;
1665 if (get_oid("HEAD", &head))
1666 return error(_("need a HEAD to fixup"));
1667 if (!(head_commit = lookup_commit_reference(r, &head)))
1668 return error(_("could not read HEAD"));
1669 if (!(head_message = get_commit_buffer(head_commit, NULL)))
1670 return error(_("could not read HEAD's commit message"));
1672 find_commit_subject(head_message, &body);
1673 if (write_message(body, strlen(body),
1674 rebase_path_fixup_msg(), 0)) {
1675 unuse_commit_buffer(head_commit, head_message);
1676 return error(_("cannot write '%s'"),
1677 rebase_path_fixup_msg());
1680 strbuf_addf(&buf, "%c ", comment_line_char);
1681 strbuf_addf(&buf, _("This is a combination of %d commits."), 2);
1682 strbuf_addf(&buf, "\n%c ", comment_line_char);
1683 strbuf_addstr(&buf, _("This is the 1st commit message:"));
1684 strbuf_addstr(&buf, "\n\n");
1685 strbuf_addstr(&buf, body);
1687 unuse_commit_buffer(head_commit, head_message);
1690 if (!(message = get_commit_buffer(commit, NULL)))
1691 return error(_("could not read commit message of %s"),
1692 oid_to_hex(&commit->object.oid));
1693 find_commit_subject(message, &body);
1695 if (command == TODO_SQUASH) {
1696 unlink(rebase_path_fixup_msg());
1697 strbuf_addf(&buf, "\n%c ", comment_line_char);
1698 strbuf_addf(&buf, _("This is the commit message #%d:"),
1699 ++opts->current_fixup_count + 1);
1700 strbuf_addstr(&buf, "\n\n");
1701 strbuf_addstr(&buf, body);
1702 } else if (command == TODO_FIXUP) {
1703 strbuf_addf(&buf, "\n%c ", comment_line_char);
1704 strbuf_addf(&buf, _("The commit message #%d will be skipped:"),
1705 ++opts->current_fixup_count + 1);
1706 strbuf_addstr(&buf, "\n\n");
1707 strbuf_add_commented_lines(&buf, body, strlen(body));
1709 return error(_("unknown command: %d"), command);
1710 unuse_commit_buffer(commit, message);
1712 res = write_message(buf.buf, buf.len, rebase_path_squash_msg(), 0);
1713 strbuf_release(&buf);
1716 strbuf_addf(&opts->current_fixups, "%s%s %s",
1717 opts->current_fixups.len ? "\n" : "",
1718 command_to_string(command),
1719 oid_to_hex(&commit->object.oid));
1720 res = write_message(opts->current_fixups.buf,
1721 opts->current_fixups.len,
1722 rebase_path_current_fixups(), 0);
1728 static void flush_rewritten_pending(void)
1730 struct strbuf buf = STRBUF_INIT;
1731 struct object_id newoid;
1734 if (strbuf_read_file(&buf, rebase_path_rewritten_pending(), (GIT_MAX_HEXSZ + 1) * 2) > 0 &&
1735 !get_oid("HEAD", &newoid) &&
1736 (out = fopen_or_warn(rebase_path_rewritten_list(), "a"))) {
1737 char *bol = buf.buf, *eol;
1740 eol = strchrnul(bol, '\n');
1741 fprintf(out, "%.*s %s\n", (int)(eol - bol),
1742 bol, oid_to_hex(&newoid));
1748 unlink(rebase_path_rewritten_pending());
1750 strbuf_release(&buf);
1753 static void record_in_rewritten(struct object_id *oid,
1754 enum todo_command next_command)
1756 FILE *out = fopen_or_warn(rebase_path_rewritten_pending(), "a");
1761 fprintf(out, "%s\n", oid_to_hex(oid));
1764 if (!is_fixup(next_command))
1765 flush_rewritten_pending();
1768 static int do_pick_commit(struct repository *r,
1769 enum todo_command command,
1770 struct commit *commit,
1771 struct replay_opts *opts,
1772 int final_fixup, int *check_todo)
1774 unsigned int flags = opts->edit ? EDIT_MSG : 0;
1775 const char *msg_file = opts->edit ? NULL : git_path_merge_msg(r);
1776 struct object_id head;
1777 struct commit *base, *next, *parent;
1778 const char *base_label, *next_label;
1779 char *author = NULL;
1780 struct commit_message msg = { NULL, NULL, NULL, NULL };
1781 struct strbuf msgbuf = STRBUF_INIT;
1782 int res, unborn = 0, reword = 0, allow;
1784 if (opts->no_commit) {
1786 * We do not intend to commit immediately. We just want to
1787 * merge the differences in, so let's compute the tree
1788 * that represents the "current" state for merge-recursive
1791 if (write_index_as_tree(&head, r->index, r->index_file, 0, NULL))
1792 return error(_("your index file is unmerged."));
1794 unborn = get_oid("HEAD", &head);
1795 /* Do we want to generate a root commit? */
1796 if (is_pick_or_similar(command) && opts->have_squash_onto &&
1797 oideq(&head, &opts->squash_onto)) {
1798 if (is_fixup(command))
1799 return error(_("cannot fixup root commit"));
1800 flags |= CREATE_ROOT_COMMIT;
1803 oidcpy(&head, the_hash_algo->empty_tree);
1804 if (index_differs_from(r, unborn ? empty_tree_oid_hex() : "HEAD",
1806 return error_dirty_index(r, opts);
1808 discard_index(r->index);
1810 if (!commit->parents)
1812 else if (commit->parents->next) {
1813 /* Reverting or cherry-picking a merge commit */
1815 struct commit_list *p;
1817 if (!opts->mainline)
1818 return error(_("commit %s is a merge but no -m option was given."),
1819 oid_to_hex(&commit->object.oid));
1821 for (cnt = 1, p = commit->parents;
1822 cnt != opts->mainline && p;
1825 if (cnt != opts->mainline || !p)
1826 return error(_("commit %s does not have parent %d"),
1827 oid_to_hex(&commit->object.oid), opts->mainline);
1829 } else if (1 < opts->mainline)
1831 * Non-first parent explicitly specified as mainline for
1834 return error(_("commit %s does not have parent %d"),
1835 oid_to_hex(&commit->object.oid), opts->mainline);
1837 parent = commit->parents->item;
1839 if (get_message(commit, &msg) != 0)
1840 return error(_("cannot get commit message for %s"),
1841 oid_to_hex(&commit->object.oid));
1843 if (opts->allow_ff && !is_fixup(command) &&
1844 ((parent && oideq(&parent->object.oid, &head)) ||
1845 (!parent && unborn))) {
1846 if (is_rebase_i(opts))
1847 write_author_script(msg.message);
1848 res = fast_forward_to(r, &commit->object.oid, &head, unborn,
1850 if (res || command != TODO_REWORD)
1854 goto fast_forward_edit;
1856 if (parent && parse_commit(parent) < 0)
1857 /* TRANSLATORS: The first %s will be a "todo" command like
1858 "revert" or "pick", the second %s a SHA1. */
1859 return error(_("%s: cannot parse parent commit %s"),
1860 command_to_string(command),
1861 oid_to_hex(&parent->object.oid));
1864 * "commit" is an existing commit. We would want to apply
1865 * the difference it introduces since its first parent "prev"
1866 * on top of the current HEAD if we are cherry-pick. Or the
1867 * reverse of it if we are revert.
1870 if (command == TODO_REVERT) {
1872 base_label = msg.label;
1874 next_label = msg.parent_label;
1875 strbuf_addstr(&msgbuf, "Revert \"");
1876 strbuf_addstr(&msgbuf, msg.subject);
1877 strbuf_addstr(&msgbuf, "\"\n\nThis reverts commit ");
1878 strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1880 if (commit->parents && commit->parents->next) {
1881 strbuf_addstr(&msgbuf, ", reversing\nchanges made to ");
1882 strbuf_addstr(&msgbuf, oid_to_hex(&parent->object.oid));
1884 strbuf_addstr(&msgbuf, ".\n");
1889 base_label = msg.parent_label;
1891 next_label = msg.label;
1893 /* Append the commit log message to msgbuf. */
1894 if (find_commit_subject(msg.message, &p))
1895 strbuf_addstr(&msgbuf, p);
1897 if (opts->record_origin) {
1898 strbuf_complete_line(&msgbuf);
1899 if (!has_conforming_footer(&msgbuf, NULL, 0))
1900 strbuf_addch(&msgbuf, '\n');
1901 strbuf_addstr(&msgbuf, cherry_picked_prefix);
1902 strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1903 strbuf_addstr(&msgbuf, ")\n");
1905 if (!is_fixup(command))
1906 author = get_author(msg.message);
1909 if (command == TODO_REWORD)
1911 else if (is_fixup(command)) {
1912 if (update_squash_messages(r, command, commit, opts))
1916 msg_file = rebase_path_squash_msg();
1917 else if (file_exists(rebase_path_fixup_msg())) {
1918 flags |= CLEANUP_MSG;
1919 msg_file = rebase_path_fixup_msg();
1921 const char *dest = git_path_squash_msg(r);
1923 if (copy_file(dest, rebase_path_squash_msg(), 0666))
1924 return error(_("could not rename '%s' to '%s'"),
1925 rebase_path_squash_msg(), dest);
1926 unlink(git_path_merge_msg(r));
1932 if (opts->signoff && !is_fixup(command))
1933 append_signoff(&msgbuf, 0, 0);
1935 if (is_rebase_i(opts) && write_author_script(msg.message) < 0)
1937 else if (!opts->strategy || !strcmp(opts->strategy, "recursive") || command == TODO_REVERT) {
1938 res = do_recursive_merge(r, base, next, base_label, next_label,
1939 &head, &msgbuf, opts);
1943 res |= write_message(msgbuf.buf, msgbuf.len,
1944 git_path_merge_msg(r), 0);
1946 struct commit_list *common = NULL;
1947 struct commit_list *remotes = NULL;
1949 res = write_message(msgbuf.buf, msgbuf.len,
1950 git_path_merge_msg(r), 0);
1952 commit_list_insert(base, &common);
1953 commit_list_insert(next, &remotes);
1954 res |= try_merge_command(r, opts->strategy,
1955 opts->xopts_nr, (const char **)opts->xopts,
1956 common, oid_to_hex(&head), remotes);
1957 free_commit_list(common);
1958 free_commit_list(remotes);
1960 strbuf_release(&msgbuf);
1963 * If the merge was clean or if it failed due to conflict, we write
1964 * CHERRY_PICK_HEAD for the subsequent invocation of commit to use.
1965 * However, if the merge did not even start, then we don't want to
1968 if (command == TODO_PICK && !opts->no_commit && (res == 0 || res == 1) &&
1969 update_ref(NULL, "CHERRY_PICK_HEAD", &commit->object.oid, NULL,
1970 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1972 if (command == TODO_REVERT && ((opts->no_commit && res == 0) || res == 1) &&
1973 update_ref(NULL, "REVERT_HEAD", &commit->object.oid, NULL,
1974 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1978 error(command == TODO_REVERT
1979 ? _("could not revert %s... %s")
1980 : _("could not apply %s... %s"),
1981 short_commit_name(commit), msg.subject);
1982 print_advice(r, res == 1, opts);
1983 repo_rerere(r, opts->allow_rerere_auto);
1987 allow = allow_empty(r, opts, commit);
1992 flags |= ALLOW_EMPTY;
1993 if (!opts->no_commit) {
1994 if (author || command == TODO_REVERT || (flags & AMEND_MSG))
1995 res = do_commit(r, msg_file, author, opts, flags);
1997 res = error(_("unable to parse commit author"));
1998 *check_todo = !!(flags & EDIT_MSG);
1999 if (!res && reword) {
2001 res = run_git_commit(r, NULL, opts, EDIT_MSG |
2002 VERIFY_MSG | AMEND_MSG |
2003 (flags & ALLOW_EMPTY));
2009 if (!res && final_fixup) {
2010 unlink(rebase_path_fixup_msg());
2011 unlink(rebase_path_squash_msg());
2012 unlink(rebase_path_current_fixups());
2013 strbuf_reset(&opts->current_fixups);
2014 opts->current_fixup_count = 0;
2018 free_message(commit, &msg);
2020 update_abort_safety_file();
2025 static int prepare_revs(struct replay_opts *opts)
2028 * picking (but not reverting) ranges (but not individual revisions)
2029 * should be done in reverse
2031 if (opts->action == REPLAY_PICK && !opts->revs->no_walk)
2032 opts->revs->reverse ^= 1;
2034 if (prepare_revision_walk(opts->revs))
2035 return error(_("revision walk setup failed"));
2040 static int read_and_refresh_cache(struct repository *r,
2041 struct replay_opts *opts)
2043 struct lock_file index_lock = LOCK_INIT;
2044 int index_fd = repo_hold_locked_index(r, &index_lock, 0);
2045 if (repo_read_index(r) < 0) {
2046 rollback_lock_file(&index_lock);
2047 return error(_("git %s: failed to read the index"),
2048 _(action_name(opts)));
2050 refresh_index(r->index, REFRESH_QUIET|REFRESH_UNMERGED, NULL, NULL, NULL);
2051 if (index_fd >= 0) {
2052 if (write_locked_index(r->index, &index_lock,
2053 COMMIT_LOCK | SKIP_IF_UNCHANGED)) {
2054 return error(_("git %s: failed to refresh the index"),
2055 _(action_name(opts)));
2061 enum todo_item_flags {
2062 TODO_EDIT_MERGE_MSG = 1
2065 void todo_list_release(struct todo_list *todo_list)
2067 strbuf_release(&todo_list->buf);
2068 FREE_AND_NULL(todo_list->items);
2069 todo_list->nr = todo_list->alloc = 0;
2072 static struct todo_item *append_new_todo(struct todo_list *todo_list)
2074 ALLOC_GROW(todo_list->items, todo_list->nr + 1, todo_list->alloc);
2075 return todo_list->items + todo_list->nr++;
2078 const char *todo_item_get_arg(struct todo_list *todo_list,
2079 struct todo_item *item)
2081 return todo_list->buf.buf + item->arg_offset;
2084 static int parse_insn_line(struct repository *r, struct todo_item *item,
2085 const char *buf, const char *bol, char *eol)
2087 struct object_id commit_oid;
2088 char *end_of_object_name;
2089 int i, saved, status, padding;
2094 bol += strspn(bol, " \t");
2096 if (bol == eol || *bol == '\r' || *bol == comment_line_char) {
2097 item->command = TODO_COMMENT;
2098 item->commit = NULL;
2099 item->arg_offset = bol - buf;
2100 item->arg_len = eol - bol;
2104 for (i = 0; i < TODO_COMMENT; i++)
2105 if (skip_prefix(bol, todo_command_info[i].str, &bol)) {
2108 } else if ((bol + 1 == eol || bol[1] == ' ') &&
2109 *bol == todo_command_info[i].c) {
2114 if (i >= TODO_COMMENT)
2117 /* Eat up extra spaces/ tabs before object name */
2118 padding = strspn(bol, " \t");
2121 if (item->command == TODO_NOOP || item->command == TODO_BREAK) {
2123 return error(_("%s does not accept arguments: '%s'"),
2124 command_to_string(item->command), bol);
2125 item->commit = NULL;
2126 item->arg_offset = bol - buf;
2127 item->arg_len = eol - bol;
2132 return error(_("missing arguments for %s"),
2133 command_to_string(item->command));
2135 if (item->command == TODO_EXEC || item->command == TODO_LABEL ||
2136 item->command == TODO_RESET) {
2137 item->commit = NULL;
2138 item->arg_offset = bol - buf;
2139 item->arg_len = (int)(eol - bol);
2143 if (item->command == TODO_MERGE) {
2144 if (skip_prefix(bol, "-C", &bol))
2145 bol += strspn(bol, " \t");
2146 else if (skip_prefix(bol, "-c", &bol)) {
2147 bol += strspn(bol, " \t");
2148 item->flags |= TODO_EDIT_MERGE_MSG;
2150 item->flags |= TODO_EDIT_MERGE_MSG;
2151 item->commit = NULL;
2152 item->arg_offset = bol - buf;
2153 item->arg_len = (int)(eol - bol);
2158 end_of_object_name = (char *) bol + strcspn(bol, " \t\n");
2159 saved = *end_of_object_name;
2160 *end_of_object_name = '\0';
2161 status = get_oid(bol, &commit_oid);
2162 *end_of_object_name = saved;
2164 bol = end_of_object_name + strspn(end_of_object_name, " \t");
2165 item->arg_offset = bol - buf;
2166 item->arg_len = (int)(eol - bol);
2169 return error(_("could not parse '%.*s'"),
2170 (int)(end_of_object_name - bol), bol);
2172 item->commit = lookup_commit_reference(r, &commit_oid);
2173 return !item->commit;
2176 int sequencer_get_last_command(struct repository *r, enum replay_action *action)
2178 struct todo_item item;
2180 const char *todo_file;
2181 struct strbuf buf = STRBUF_INIT;
2184 todo_file = git_path_todo_file();
2185 if (strbuf_read_file(&buf, todo_file, 0) < 0) {
2186 if (errno == ENOENT)
2189 return error_errno("unable to open '%s'", todo_file);
2191 eol = strchrnul(buf.buf, '\n');
2192 if (buf.buf != eol && eol[-1] == '\r')
2193 eol--; /* strip Carriage Return */
2194 if (parse_insn_line(r, &item, buf.buf, buf.buf, eol))
2196 if (item.command == TODO_PICK)
2197 *action = REPLAY_PICK;
2198 else if (item.command == TODO_REVERT)
2199 *action = REPLAY_REVERT;
2206 strbuf_release(&buf);
2211 int todo_list_parse_insn_buffer(struct repository *r, char *buf,
2212 struct todo_list *todo_list)
2214 struct todo_item *item;
2215 char *p = buf, *next_p;
2216 int i, res = 0, fixup_okay = file_exists(rebase_path_done());
2218 todo_list->current = todo_list->nr = 0;
2220 for (i = 1; *p; i++, p = next_p) {
2221 char *eol = strchrnul(p, '\n');
2223 next_p = *eol ? eol + 1 /* skip LF */ : eol;
2225 if (p != eol && eol[-1] == '\r')
2226 eol--; /* strip Carriage Return */
2228 item = append_new_todo(todo_list);
2229 item->offset_in_buf = p - todo_list->buf.buf;
2230 if (parse_insn_line(r, item, buf, p, eol)) {
2231 res = error(_("invalid line %d: %.*s"),
2232 i, (int)(eol - p), p);
2233 item->command = TODO_COMMENT + 1;
2234 item->arg_offset = p - buf;
2235 item->arg_len = (int)(eol - p);
2236 item->commit = NULL;
2241 else if (is_fixup(item->command))
2242 return error(_("cannot '%s' without a previous commit"),
2243 command_to_string(item->command));
2244 else if (!is_noop(item->command))
2251 static int count_commands(struct todo_list *todo_list)
2255 for (i = 0; i < todo_list->nr; i++)
2256 if (todo_list->items[i].command != TODO_COMMENT)
2262 static int get_item_line_offset(struct todo_list *todo_list, int index)
2264 return index < todo_list->nr ?
2265 todo_list->items[index].offset_in_buf : todo_list->buf.len;
2268 static const char *get_item_line(struct todo_list *todo_list, int index)
2270 return todo_list->buf.buf + get_item_line_offset(todo_list, index);
2273 static int get_item_line_length(struct todo_list *todo_list, int index)
2275 return get_item_line_offset(todo_list, index + 1)
2276 - get_item_line_offset(todo_list, index);
2279 static ssize_t strbuf_read_file_or_whine(struct strbuf *sb, const char *path)
2284 fd = open(path, O_RDONLY);
2286 return error_errno(_("could not open '%s'"), path);
2287 len = strbuf_read(sb, fd, 0);
2290 return error(_("could not read '%s'."), path);
2294 static int have_finished_the_last_pick(void)
2296 struct strbuf buf = STRBUF_INIT;
2298 const char *todo_path = git_path_todo_file();
2301 if (strbuf_read_file(&buf, todo_path, 0) < 0) {
2302 if (errno == ENOENT) {
2305 error_errno("unable to open '%s'", todo_path);
2309 /* If there is only one line then we are done */
2310 eol = strchr(buf.buf, '\n');
2311 if (!eol || !eol[1])
2314 strbuf_release(&buf);
2319 void sequencer_post_commit_cleanup(struct repository *r)
2321 struct replay_opts opts = REPLAY_OPTS_INIT;
2322 int need_cleanup = 0;
2324 if (file_exists(git_path_cherry_pick_head(r))) {
2325 unlink(git_path_cherry_pick_head(r));
2326 opts.action = REPLAY_PICK;
2330 if (file_exists(git_path_revert_head(r))) {
2331 unlink(git_path_revert_head(r));
2332 opts.action = REPLAY_REVERT;
2339 if (!have_finished_the_last_pick())
2342 sequencer_remove_state(&opts);
2345 static int read_populate_todo(struct repository *r,
2346 struct todo_list *todo_list,
2347 struct replay_opts *opts)
2350 const char *todo_file = get_todo_path(opts);
2353 strbuf_reset(&todo_list->buf);
2354 if (strbuf_read_file_or_whine(&todo_list->buf, todo_file) < 0)
2357 res = stat(todo_file, &st);
2359 return error(_("could not stat '%s'"), todo_file);
2360 fill_stat_data(&todo_list->stat, &st);
2362 res = todo_list_parse_insn_buffer(r, todo_list->buf.buf, todo_list);
2364 if (is_rebase_i(opts))
2365 return error(_("please fix this using "
2366 "'git rebase --edit-todo'."));
2367 return error(_("unusable instruction sheet: '%s'"), todo_file);
2370 if (!todo_list->nr &&
2371 (!is_rebase_i(opts) || !file_exists(rebase_path_done())))
2372 return error(_("no commits parsed."));
2374 if (!is_rebase_i(opts)) {
2375 enum todo_command valid =
2376 opts->action == REPLAY_PICK ? TODO_PICK : TODO_REVERT;
2379 for (i = 0; i < todo_list->nr; i++)
2380 if (valid == todo_list->items[i].command)
2382 else if (valid == TODO_PICK)
2383 return error(_("cannot cherry-pick during a revert."));
2385 return error(_("cannot revert during a cherry-pick."));
2388 if (is_rebase_i(opts)) {
2389 struct todo_list done = TODO_LIST_INIT;
2390 FILE *f = fopen_or_warn(rebase_path_msgtotal(), "w");
2392 if (strbuf_read_file(&done.buf, rebase_path_done(), 0) > 0 &&
2393 !todo_list_parse_insn_buffer(r, done.buf.buf, &done))
2394 todo_list->done_nr = count_commands(&done);
2396 todo_list->done_nr = 0;
2398 todo_list->total_nr = todo_list->done_nr
2399 + count_commands(todo_list);
2400 todo_list_release(&done);
2403 fprintf(f, "%d\n", todo_list->total_nr);
2411 static int git_config_string_dup(char **dest,
2412 const char *var, const char *value)
2415 return config_error_nonbool(var);
2417 *dest = xstrdup(value);
2421 static int populate_opts_cb(const char *key, const char *value, void *data)
2423 struct replay_opts *opts = data;
2428 else if (!strcmp(key, "options.no-commit"))
2429 opts->no_commit = git_config_bool_or_int(key, value, &error_flag);
2430 else if (!strcmp(key, "options.edit"))
2431 opts->edit = git_config_bool_or_int(key, value, &error_flag);
2432 else if (!strcmp(key, "options.allow-empty"))
2434 git_config_bool_or_int(key, value, &error_flag);
2435 else if (!strcmp(key, "options.allow-empty-message"))
2436 opts->allow_empty_message =
2437 git_config_bool_or_int(key, value, &error_flag);
2438 else if (!strcmp(key, "options.keep-redundant-commits"))
2439 opts->keep_redundant_commits =
2440 git_config_bool_or_int(key, value, &error_flag);
2441 else if (!strcmp(key, "options.signoff"))
2442 opts->signoff = git_config_bool_or_int(key, value, &error_flag);
2443 else if (!strcmp(key, "options.record-origin"))
2444 opts->record_origin = git_config_bool_or_int(key, value, &error_flag);
2445 else if (!strcmp(key, "options.allow-ff"))
2446 opts->allow_ff = git_config_bool_or_int(key, value, &error_flag);
2447 else if (!strcmp(key, "options.mainline"))
2448 opts->mainline = git_config_int(key, value);
2449 else if (!strcmp(key, "options.strategy"))
2450 git_config_string_dup(&opts->strategy, key, value);
2451 else if (!strcmp(key, "options.gpg-sign"))
2452 git_config_string_dup(&opts->gpg_sign, key, value);
2453 else if (!strcmp(key, "options.strategy-option")) {
2454 ALLOC_GROW(opts->xopts, opts->xopts_nr + 1, opts->xopts_alloc);
2455 opts->xopts[opts->xopts_nr++] = xstrdup(value);
2456 } else if (!strcmp(key, "options.allow-rerere-auto"))
2457 opts->allow_rerere_auto =
2458 git_config_bool_or_int(key, value, &error_flag) ?
2459 RERERE_AUTOUPDATE : RERERE_NOAUTOUPDATE;
2460 else if (!strcmp(key, "options.default-msg-cleanup")) {
2461 opts->explicit_cleanup = 1;
2462 opts->default_msg_cleanup = get_cleanup_mode(value, 1);
2464 return error(_("invalid key: %s"), key);
2467 return error(_("invalid value for %s: %s"), key, value);
2472 void parse_strategy_opts(struct replay_opts *opts, char *raw_opts)
2475 char *strategy_opts_string = raw_opts;
2477 if (*strategy_opts_string == ' ')
2478 strategy_opts_string++;
2480 opts->xopts_nr = split_cmdline(strategy_opts_string,
2481 (const char ***)&opts->xopts);
2482 for (i = 0; i < opts->xopts_nr; i++) {
2483 const char *arg = opts->xopts[i];
2485 skip_prefix(arg, "--", &arg);
2486 opts->xopts[i] = xstrdup(arg);
2490 static void read_strategy_opts(struct replay_opts *opts, struct strbuf *buf)
2493 if (!read_oneliner(buf, rebase_path_strategy(), 0))
2495 opts->strategy = strbuf_detach(buf, NULL);
2496 if (!read_oneliner(buf, rebase_path_strategy_opts(), 0))
2499 parse_strategy_opts(opts, buf->buf);
2502 static int read_populate_opts(struct replay_opts *opts)
2504 if (is_rebase_i(opts)) {
2505 struct strbuf buf = STRBUF_INIT;
2507 if (read_oneliner(&buf, rebase_path_gpg_sign_opt(), 1)) {
2508 if (!starts_with(buf.buf, "-S"))
2511 free(opts->gpg_sign);
2512 opts->gpg_sign = xstrdup(buf.buf + 2);
2517 if (read_oneliner(&buf, rebase_path_allow_rerere_autoupdate(), 1)) {
2518 if (!strcmp(buf.buf, "--rerere-autoupdate"))
2519 opts->allow_rerere_auto = RERERE_AUTOUPDATE;
2520 else if (!strcmp(buf.buf, "--no-rerere-autoupdate"))
2521 opts->allow_rerere_auto = RERERE_NOAUTOUPDATE;
2525 if (file_exists(rebase_path_verbose()))
2528 if (file_exists(rebase_path_quiet()))
2531 if (file_exists(rebase_path_signoff())) {
2536 if (file_exists(rebase_path_cdate_is_adate())) {
2538 opts->committer_date_is_author_date = 1;
2541 if (file_exists(rebase_path_reschedule_failed_exec()))
2542 opts->reschedule_failed_exec = 1;
2544 read_strategy_opts(opts, &buf);
2545 strbuf_release(&buf);
2547 if (read_oneliner(&opts->current_fixups,
2548 rebase_path_current_fixups(), 1)) {
2549 const char *p = opts->current_fixups.buf;
2550 opts->current_fixup_count = 1;
2551 while ((p = strchr(p, '\n'))) {
2552 opts->current_fixup_count++;
2557 if (read_oneliner(&buf, rebase_path_squash_onto(), 0)) {
2558 if (get_oid_hex(buf.buf, &opts->squash_onto) < 0)
2559 return error(_("unusable squash-onto"));
2560 opts->have_squash_onto = 1;
2566 if (!file_exists(git_path_opts_file()))
2569 * The function git_parse_source(), called from git_config_from_file(),
2570 * may die() in case of a syntactically incorrect file. We do not care
2571 * about this case, though, because we wrote that file ourselves, so we
2572 * are pretty certain that it is syntactically correct.
2574 if (git_config_from_file(populate_opts_cb, git_path_opts_file(), opts) < 0)
2575 return error(_("malformed options sheet: '%s'"),
2576 git_path_opts_file());
2580 static void write_strategy_opts(struct replay_opts *opts)
2583 struct strbuf buf = STRBUF_INIT;
2585 for (i = 0; i < opts->xopts_nr; ++i)
2586 strbuf_addf(&buf, " --%s", opts->xopts[i]);
2588 write_file(rebase_path_strategy_opts(), "%s\n", buf.buf);
2589 strbuf_release(&buf);
2592 int write_basic_state(struct replay_opts *opts, const char *head_name,
2593 struct commit *onto, const char *orig_head)
2595 const char *quiet = getenv("GIT_QUIET");
2598 write_file(rebase_path_head_name(), "%s\n", head_name);
2600 write_file(rebase_path_onto(), "%s\n",
2601 oid_to_hex(&onto->object.oid));
2603 write_file(rebase_path_orig_head(), "%s\n", orig_head);
2606 write_file(rebase_path_quiet(), "%s\n", quiet);
2608 write_file(rebase_path_verbose(), "%s", "");
2610 write_file(rebase_path_strategy(), "%s\n", opts->strategy);
2611 if (opts->xopts_nr > 0)
2612 write_strategy_opts(opts);
2614 if (opts->allow_rerere_auto == RERERE_AUTOUPDATE)
2615 write_file(rebase_path_allow_rerere_autoupdate(), "--rerere-autoupdate\n");
2616 else if (opts->allow_rerere_auto == RERERE_NOAUTOUPDATE)
2617 write_file(rebase_path_allow_rerere_autoupdate(), "--no-rerere-autoupdate\n");
2620 write_file(rebase_path_gpg_sign_opt(), "-S%s\n", opts->gpg_sign);
2622 write_file(rebase_path_signoff(), "--signoff\n");
2623 if (opts->committer_date_is_author_date)
2624 write_file(rebase_path_cdate_is_adate(), "%s", "");
2625 if (opts->reschedule_failed_exec)
2626 write_file(rebase_path_reschedule_failed_exec(), "%s", "");
2631 static int walk_revs_populate_todo(struct todo_list *todo_list,
2632 struct replay_opts *opts)
2634 enum todo_command command = opts->action == REPLAY_PICK ?
2635 TODO_PICK : TODO_REVERT;
2636 const char *command_string = todo_command_info[command].str;
2637 struct commit *commit;
2639 if (prepare_revs(opts))
2642 while ((commit = get_revision(opts->revs))) {
2643 struct todo_item *item = append_new_todo(todo_list);
2644 const char *commit_buffer = get_commit_buffer(commit, NULL);
2645 const char *subject;
2648 item->command = command;
2649 item->commit = commit;
2650 item->arg_offset = 0;
2652 item->offset_in_buf = todo_list->buf.len;
2653 subject_len = find_commit_subject(commit_buffer, &subject);
2654 strbuf_addf(&todo_list->buf, "%s %s %.*s\n", command_string,
2655 short_commit_name(commit), subject_len, subject);
2656 unuse_commit_buffer(commit, commit_buffer);
2660 return error(_("empty commit set passed"));
2665 static int create_seq_dir(void)
2667 if (file_exists(git_path_seq_dir())) {
2668 error(_("a cherry-pick or revert is already in progress"));
2669 advise(_("try \"git cherry-pick (--continue | --quit | --abort)\""));
2671 } else if (mkdir(git_path_seq_dir(), 0777) < 0)
2672 return error_errno(_("could not create sequencer directory '%s'"),
2673 git_path_seq_dir());
2677 static int save_head(const char *head)
2679 struct lock_file head_lock = LOCK_INIT;
2680 struct strbuf buf = STRBUF_INIT;
2684 fd = hold_lock_file_for_update(&head_lock, git_path_head_file(), 0);
2686 return error_errno(_("could not lock HEAD"));
2687 strbuf_addf(&buf, "%s\n", head);
2688 written = write_in_full(fd, buf.buf, buf.len);
2689 strbuf_release(&buf);
2691 error_errno(_("could not write to '%s'"), git_path_head_file());
2692 rollback_lock_file(&head_lock);
2695 if (commit_lock_file(&head_lock) < 0)
2696 return error(_("failed to finalize '%s'"), git_path_head_file());
2700 static int rollback_is_safe(void)
2702 struct strbuf sb = STRBUF_INIT;
2703 struct object_id expected_head, actual_head;
2705 if (strbuf_read_file(&sb, git_path_abort_safety_file(), 0) >= 0) {
2707 if (get_oid_hex(sb.buf, &expected_head)) {
2708 strbuf_release(&sb);
2709 die(_("could not parse %s"), git_path_abort_safety_file());
2711 strbuf_release(&sb);
2713 else if (errno == ENOENT)
2714 oidclr(&expected_head);
2716 die_errno(_("could not read '%s'"), git_path_abort_safety_file());
2718 if (get_oid("HEAD", &actual_head))
2719 oidclr(&actual_head);
2721 return oideq(&actual_head, &expected_head);
2724 static int reset_for_rollback(const struct object_id *oid)
2726 const char *argv[4]; /* reset --merge <arg> + NULL */
2729 argv[1] = "--merge";
2730 argv[2] = oid_to_hex(oid);
2732 return run_command_v_opt(argv, RUN_GIT_CMD);
2735 static int rollback_single_pick(struct repository *r)
2737 struct object_id head_oid;
2739 if (!file_exists(git_path_cherry_pick_head(r)) &&
2740 !file_exists(git_path_revert_head(r)))
2741 return error(_("no cherry-pick or revert in progress"));
2742 if (read_ref_full("HEAD", 0, &head_oid, NULL))
2743 return error(_("cannot resolve HEAD"));
2744 if (is_null_oid(&head_oid))
2745 return error(_("cannot abort from a branch yet to be born"));
2746 return reset_for_rollback(&head_oid);
2749 int sequencer_rollback(struct repository *r, struct replay_opts *opts)
2752 struct object_id oid;
2753 struct strbuf buf = STRBUF_INIT;
2756 f = fopen(git_path_head_file(), "r");
2757 if (!f && errno == ENOENT) {
2759 * There is no multiple-cherry-pick in progress.
2760 * If CHERRY_PICK_HEAD or REVERT_HEAD indicates
2761 * a single-cherry-pick in progress, abort that.
2763 return rollback_single_pick(r);
2766 return error_errno(_("cannot open '%s'"), git_path_head_file());
2767 if (strbuf_getline_lf(&buf, f)) {
2768 error(_("cannot read '%s': %s"), git_path_head_file(),
2769 ferror(f) ? strerror(errno) : _("unexpected end of file"));
2774 if (parse_oid_hex(buf.buf, &oid, &p) || *p != '\0') {
2775 error(_("stored pre-cherry-pick HEAD file '%s' is corrupt"),
2776 git_path_head_file());
2779 if (is_null_oid(&oid)) {
2780 error(_("cannot abort from a branch yet to be born"));
2784 if (!rollback_is_safe()) {
2785 /* Do not error, just do not rollback */
2786 warning(_("You seem to have moved HEAD. "
2787 "Not rewinding, check your HEAD!"));
2789 if (reset_for_rollback(&oid))
2791 strbuf_release(&buf);
2792 return sequencer_remove_state(opts);
2794 strbuf_release(&buf);
2798 static int save_todo(struct todo_list *todo_list, struct replay_opts *opts)
2800 struct lock_file todo_lock = LOCK_INIT;
2801 const char *todo_path = get_todo_path(opts);
2802 int next = todo_list->current, offset, fd;
2805 * rebase -i writes "git-rebase-todo" without the currently executing
2806 * command, appending it to "done" instead.
2808 if (is_rebase_i(opts))
2811 fd = hold_lock_file_for_update(&todo_lock, todo_path, 0);
2813 return error_errno(_("could not lock '%s'"), todo_path);
2814 offset = get_item_line_offset(todo_list, next);
2815 if (write_in_full(fd, todo_list->buf.buf + offset,
2816 todo_list->buf.len - offset) < 0)
2817 return error_errno(_("could not write to '%s'"), todo_path);
2818 if (commit_lock_file(&todo_lock) < 0)
2819 return error(_("failed to finalize '%s'"), todo_path);
2821 if (is_rebase_i(opts) && next > 0) {
2822 const char *done = rebase_path_done();
2823 int fd = open(done, O_CREAT | O_WRONLY | O_APPEND, 0666);
2828 if (write_in_full(fd, get_item_line(todo_list, next - 1),
2829 get_item_line_length(todo_list, next - 1))
2831 ret = error_errno(_("could not write to '%s'"), done);
2833 ret = error_errno(_("failed to finalize '%s'"), done);
2839 static int save_opts(struct replay_opts *opts)
2841 const char *opts_file = git_path_opts_file();
2844 if (opts->no_commit)
2845 res |= git_config_set_in_file_gently(opts_file,
2846 "options.no-commit", "true");
2848 res |= git_config_set_in_file_gently(opts_file,
2849 "options.edit", "true");
2850 if (opts->allow_empty)
2851 res |= git_config_set_in_file_gently(opts_file,
2852 "options.allow-empty", "true");
2853 if (opts->allow_empty_message)
2854 res |= git_config_set_in_file_gently(opts_file,
2855 "options.allow-empty-message", "true");
2856 if (opts->keep_redundant_commits)
2857 res |= git_config_set_in_file_gently(opts_file,
2858 "options.keep-redundant-commits", "true");
2860 res |= git_config_set_in_file_gently(opts_file,
2861 "options.signoff", "true");
2862 if (opts->record_origin)
2863 res |= git_config_set_in_file_gently(opts_file,
2864 "options.record-origin", "true");
2866 res |= git_config_set_in_file_gently(opts_file,
2867 "options.allow-ff", "true");
2868 if (opts->mainline) {
2869 struct strbuf buf = STRBUF_INIT;
2870 strbuf_addf(&buf, "%d", opts->mainline);
2871 res |= git_config_set_in_file_gently(opts_file,
2872 "options.mainline", buf.buf);
2873 strbuf_release(&buf);
2876 res |= git_config_set_in_file_gently(opts_file,
2877 "options.strategy", opts->strategy);
2879 res |= git_config_set_in_file_gently(opts_file,
2880 "options.gpg-sign", opts->gpg_sign);
2883 for (i = 0; i < opts->xopts_nr; i++)
2884 res |= git_config_set_multivar_in_file_gently(opts_file,
2885 "options.strategy-option",
2886 opts->xopts[i], "^$", 0);
2888 if (opts->allow_rerere_auto)
2889 res |= git_config_set_in_file_gently(opts_file,
2890 "options.allow-rerere-auto",
2891 opts->allow_rerere_auto == RERERE_AUTOUPDATE ?
2894 if (opts->explicit_cleanup)
2895 res |= git_config_set_in_file_gently(opts_file,
2896 "options.default-msg-cleanup",
2897 describe_cleanup_mode(opts->default_msg_cleanup));
2901 static int make_patch(struct repository *r,
2902 struct commit *commit,
2903 struct replay_opts *opts)
2905 struct strbuf buf = STRBUF_INIT;
2906 struct rev_info log_tree_opt;
2907 const char *subject, *p;
2910 p = short_commit_name(commit);
2911 if (write_message(p, strlen(p), rebase_path_stopped_sha(), 1) < 0)
2913 if (update_ref("rebase", "REBASE_HEAD", &commit->object.oid,
2914 NULL, REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
2915 res |= error(_("could not update %s"), "REBASE_HEAD");
2917 strbuf_addf(&buf, "%s/patch", get_dir(opts));
2918 memset(&log_tree_opt, 0, sizeof(log_tree_opt));
2919 repo_init_revisions(r, &log_tree_opt, NULL);
2920 log_tree_opt.abbrev = 0;
2921 log_tree_opt.diff = 1;
2922 log_tree_opt.diffopt.output_format = DIFF_FORMAT_PATCH;
2923 log_tree_opt.disable_stdin = 1;
2924 log_tree_opt.no_commit_id = 1;
2925 log_tree_opt.diffopt.file = fopen(buf.buf, "w");
2926 log_tree_opt.diffopt.use_color = GIT_COLOR_NEVER;
2927 if (!log_tree_opt.diffopt.file)
2928 res |= error_errno(_("could not open '%s'"), buf.buf);
2930 res |= log_tree_commit(&log_tree_opt, commit);
2931 fclose(log_tree_opt.diffopt.file);
2935 strbuf_addf(&buf, "%s/message", get_dir(opts));
2936 if (!file_exists(buf.buf)) {
2937 const char *commit_buffer = get_commit_buffer(commit, NULL);
2938 find_commit_subject(commit_buffer, &subject);
2939 res |= write_message(subject, strlen(subject), buf.buf, 1);
2940 unuse_commit_buffer(commit, commit_buffer);
2942 strbuf_release(&buf);
2947 static int intend_to_amend(void)
2949 struct object_id head;
2952 if (get_oid("HEAD", &head))
2953 return error(_("cannot read HEAD"));
2955 p = oid_to_hex(&head);
2956 return write_message(p, strlen(p), rebase_path_amend(), 1);
2959 static int error_with_patch(struct repository *r,
2960 struct commit *commit,
2961 const char *subject, int subject_len,
2962 struct replay_opts *opts,
2963 int exit_code, int to_amend)
2966 if (make_patch(r, commit, opts))
2968 } else if (copy_file(rebase_path_message(),
2969 git_path_merge_msg(r), 0666))
2970 return error(_("unable to copy '%s' to '%s'"),
2971 git_path_merge_msg(r), rebase_path_message());
2974 if (intend_to_amend())
2978 _("You can amend the commit now, with\n"
2980 " git commit --amend %s\n"
2982 "Once you are satisfied with your changes, run\n"
2984 " git rebase --continue\n"),
2985 gpg_sign_opt_quoted(opts));
2986 } else if (exit_code) {
2988 fprintf_ln(stderr, _("Could not apply %s... %.*s"),
2989 short_commit_name(commit), subject_len, subject);
2992 * We don't have the hash of the parent so
2993 * just print the line from the todo file.
2995 fprintf_ln(stderr, _("Could not merge %.*s"),
2996 subject_len, subject);
3002 static int error_failed_squash(struct repository *r,
3003 struct commit *commit,
3004 struct replay_opts *opts,
3006 const char *subject)
3008 if (copy_file(rebase_path_message(), rebase_path_squash_msg(), 0666))
3009 return error(_("could not copy '%s' to '%s'"),
3010 rebase_path_squash_msg(), rebase_path_message());
3011 unlink(git_path_merge_msg(r));
3012 if (copy_file(git_path_merge_msg(r), rebase_path_message(), 0666))
3013 return error(_("could not copy '%s' to '%s'"),
3014 rebase_path_message(),
3015 git_path_merge_msg(r));
3016 return error_with_patch(r, commit, subject, subject_len, opts, 1, 0);
3019 static int do_exec(struct repository *r, const char *command_line)
3021 struct argv_array child_env = ARGV_ARRAY_INIT;
3022 const char *child_argv[] = { NULL, NULL };
3025 fprintf(stderr, "Executing: %s\n", command_line);
3026 child_argv[0] = command_line;
3027 argv_array_pushf(&child_env, "GIT_DIR=%s", absolute_path(get_git_dir()));
3028 argv_array_pushf(&child_env, "GIT_WORK_TREE=%s",
3029 absolute_path(get_git_work_tree()));
3030 status = run_command_v_opt_cd_env(child_argv, RUN_USING_SHELL, NULL,
3033 /* force re-reading of the cache */
3034 if (discard_index(r->index) < 0 || repo_read_index(r) < 0)
3035 return error(_("could not read index"));
3037 dirty = require_clean_work_tree(r, "rebase", NULL, 1, 1);
3040 warning(_("execution failed: %s\n%s"
3041 "You can fix the problem, and then run\n"
3043 " git rebase --continue\n"
3046 dirty ? N_("and made changes to the index and/or the "
3047 "working tree\n") : "");
3049 /* command not found */
3052 warning(_("execution succeeded: %s\nbut "
3053 "left changes to the index and/or the working tree\n"
3054 "Commit or stash your changes, and then run\n"
3056 " git rebase --continue\n"
3057 "\n"), command_line);
3061 argv_array_clear(&child_env);
3066 static int safe_append(const char *filename, const char *fmt, ...)
3069 struct lock_file lock = LOCK_INIT;
3070 int fd = hold_lock_file_for_update(&lock, filename,
3071 LOCK_REPORT_ON_ERROR);
3072 struct strbuf buf = STRBUF_INIT;
3077 if (strbuf_read_file(&buf, filename, 0) < 0 && errno != ENOENT) {
3078 error_errno(_("could not read '%s'"), filename);
3079 rollback_lock_file(&lock);
3082 strbuf_complete(&buf, '\n');
3084 strbuf_vaddf(&buf, fmt, ap);
3087 if (write_in_full(fd, buf.buf, buf.len) < 0) {
3088 error_errno(_("could not write to '%s'"), filename);
3089 strbuf_release(&buf);
3090 rollback_lock_file(&lock);
3093 if (commit_lock_file(&lock) < 0) {
3094 strbuf_release(&buf);
3095 rollback_lock_file(&lock);
3096 return error(_("failed to finalize '%s'"), filename);
3099 strbuf_release(&buf);
3103 static int do_label(struct repository *r, const char *name, int len)
3105 struct ref_store *refs = get_main_ref_store(r);
3106 struct ref_transaction *transaction;
3107 struct strbuf ref_name = STRBUF_INIT, err = STRBUF_INIT;
3108 struct strbuf msg = STRBUF_INIT;
3110 struct object_id head_oid;
3112 if (len == 1 && *name == '#')
3113 return error(_("illegal label name: '%.*s'"), len, name);
3115 strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
3116 strbuf_addf(&msg, "rebase -i (label) '%.*s'", len, name);
3118 transaction = ref_store_transaction_begin(refs, &err);
3120 error("%s", err.buf);
3122 } else if (get_oid("HEAD", &head_oid)) {
3123 error(_("could not read HEAD"));
3125 } else if (ref_transaction_update(transaction, ref_name.buf, &head_oid,
3126 NULL, 0, msg.buf, &err) < 0 ||
3127 ref_transaction_commit(transaction, &err)) {
3128 error("%s", err.buf);
3131 ref_transaction_free(transaction);
3132 strbuf_release(&err);
3133 strbuf_release(&msg);
3136 ret = safe_append(rebase_path_refs_to_delete(),
3137 "%s\n", ref_name.buf);
3138 strbuf_release(&ref_name);
3143 static const char *reflog_message(struct replay_opts *opts,
3144 const char *sub_action, const char *fmt, ...);
3146 static int do_reset(struct repository *r,
3147 const char *name, int len,
3148 struct replay_opts *opts)
3150 struct strbuf ref_name = STRBUF_INIT;
3151 struct object_id oid;
3152 struct lock_file lock = LOCK_INIT;
3153 struct tree_desc desc;
3155 struct unpack_trees_options unpack_tree_opts;
3158 if (repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0)
3161 if (len == 10 && !strncmp("[new root]", name, len)) {
3162 if (!opts->have_squash_onto) {
3164 if (commit_tree("", 0, the_hash_algo->empty_tree,
3165 NULL, &opts->squash_onto,
3167 return error(_("writing fake root commit"));
3168 opts->have_squash_onto = 1;
3169 hex = oid_to_hex(&opts->squash_onto);
3170 if (write_message(hex, strlen(hex),
3171 rebase_path_squash_onto(), 0))
3172 return error(_("writing squash-onto"));
3174 oidcpy(&oid, &opts->squash_onto);
3178 /* Determine the length of the label */
3179 for (i = 0; i < len; i++)
3180 if (isspace(name[i]))
3184 strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
3185 if (get_oid(ref_name.buf, &oid) &&
3186 get_oid(ref_name.buf + strlen("refs/rewritten/"), &oid)) {
3187 error(_("could not read '%s'"), ref_name.buf);
3188 rollback_lock_file(&lock);
3189 strbuf_release(&ref_name);
3194 memset(&unpack_tree_opts, 0, sizeof(unpack_tree_opts));
3195 setup_unpack_trees_porcelain(&unpack_tree_opts, "reset");
3196 unpack_tree_opts.head_idx = 1;
3197 unpack_tree_opts.src_index = r->index;
3198 unpack_tree_opts.dst_index = r->index;
3199 unpack_tree_opts.fn = oneway_merge;
3200 unpack_tree_opts.merge = 1;
3201 unpack_tree_opts.update = 1;
3203 if (repo_read_index_unmerged(r)) {
3204 rollback_lock_file(&lock);
3205 strbuf_release(&ref_name);
3206 return error_resolve_conflict(_(action_name(opts)));
3209 if (!fill_tree_descriptor(&desc, &oid)) {
3210 error(_("failed to find tree of %s"), oid_to_hex(&oid));
3211 rollback_lock_file(&lock);
3212 free((void *)desc.buffer);
3213 strbuf_release(&ref_name);
3217 if (unpack_trees(1, &desc, &unpack_tree_opts)) {
3218 rollback_lock_file(&lock);
3219 free((void *)desc.buffer);
3220 strbuf_release(&ref_name);
3224 tree = parse_tree_indirect(&oid);
3225 prime_cache_tree(r, r->index, tree);
3227 if (write_locked_index(r->index, &lock, COMMIT_LOCK) < 0)
3228 ret = error(_("could not write index"));
3229 free((void *)desc.buffer);
3232 ret = update_ref(reflog_message(opts, "reset", "'%.*s'",
3233 len, name), "HEAD", &oid,
3234 NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3236 strbuf_release(&ref_name);
3240 static struct commit *lookup_label(const char *label, int len,
3243 struct commit *commit;
3246 strbuf_addf(buf, "refs/rewritten/%.*s", len, label);
3247 commit = lookup_commit_reference_by_name(buf->buf);
3249 /* fall back to non-rewritten ref or commit */
3250 strbuf_splice(buf, 0, strlen("refs/rewritten/"), "", 0);
3251 commit = lookup_commit_reference_by_name(buf->buf);
3255 error(_("could not resolve '%s'"), buf->buf);
3260 static int do_merge(struct repository *r,
3261 struct commit *commit,
3262 const char *arg, int arg_len,
3263 int flags, struct replay_opts *opts)
3265 int run_commit_flags = (flags & TODO_EDIT_MERGE_MSG) ?
3266 EDIT_MSG | VERIFY_MSG : 0;
3267 struct strbuf ref_name = STRBUF_INIT;
3268 struct commit *head_commit, *merge_commit, *i;
3269 struct commit_list *bases, *j, *reversed = NULL;
3270 struct commit_list *to_merge = NULL, **tail = &to_merge;
3271 struct merge_options o;
3272 int merge_arg_len, oneline_offset, can_fast_forward, ret, k;
3273 static struct lock_file lock;
3276 if (repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0) {
3281 head_commit = lookup_commit_reference_by_name("HEAD");
3283 ret = error(_("cannot merge without a current revision"));
3288 * For octopus merges, the arg starts with the list of revisions to be
3289 * merged. The list is optionally followed by '#' and the oneline.
3291 merge_arg_len = oneline_offset = arg_len;
3292 for (p = arg; p - arg < arg_len; p += strspn(p, " \t\n")) {
3295 if (*p == '#' && (!p[1] || isspace(p[1]))) {
3296 p += 1 + strspn(p + 1, " \t\n");
3297 oneline_offset = p - arg;
3300 k = strcspn(p, " \t\n");
3303 merge_commit = lookup_label(p, k, &ref_name);
3304 if (!merge_commit) {
3305 ret = error(_("unable to parse '%.*s'"), k, p);
3308 tail = &commit_list_insert(merge_commit, tail)->next;
3310 merge_arg_len = p - arg;
3314 ret = error(_("nothing to merge: '%.*s'"), arg_len, arg);
3318 if (opts->have_squash_onto &&
3319 oideq(&head_commit->object.oid, &opts->squash_onto)) {
3321 * When the user tells us to "merge" something into a
3322 * "[new root]", let's simply fast-forward to the merge head.
3324 rollback_lock_file(&lock);
3326 ret = error(_("octopus merge cannot be executed on "
3327 "top of a [new root]"));
3329 ret = fast_forward_to(r, &to_merge->item->object.oid,
3330 &head_commit->object.oid, 0,
3336 const char *message = get_commit_buffer(commit, NULL);
3341 ret = error(_("could not get commit message of '%s'"),
3342 oid_to_hex(&commit->object.oid));
3345 write_author_script(message);
3346 find_commit_subject(message, &body);
3348 ret = write_message(body, len, git_path_merge_msg(r), 0);
3349 unuse_commit_buffer(commit, message);
3351 error_errno(_("could not write '%s'"),
3352 git_path_merge_msg(r));
3356 struct strbuf buf = STRBUF_INIT;
3359 strbuf_addf(&buf, "author %s", git_author_info(0));
3360 write_author_script(buf.buf);
3363 if (oneline_offset < arg_len) {
3364 p = arg + oneline_offset;
3365 len = arg_len - oneline_offset;
3367 strbuf_addf(&buf, "Merge %s '%.*s'",
3368 to_merge->next ? "branches" : "branch",
3369 merge_arg_len, arg);
3374 ret = write_message(p, len, git_path_merge_msg(r), 0);
3375 strbuf_release(&buf);
3377 error_errno(_("could not write '%s'"),
3378 git_path_merge_msg(r));
3384 * If HEAD is not identical to the first parent of the original merge
3385 * commit, we cannot fast-forward.
3387 can_fast_forward = opts->allow_ff && commit && commit->parents &&
3388 oideq(&commit->parents->item->object.oid,
3389 &head_commit->object.oid);
3392 * If any merge head is different from the original one, we cannot
3395 if (can_fast_forward) {
3396 struct commit_list *p = commit->parents->next;
3398 for (j = to_merge; j && p; j = j->next, p = p->next)
3399 if (!oideq(&j->item->object.oid,
3400 &p->item->object.oid)) {
3401 can_fast_forward = 0;
3405 * If the number of merge heads differs from the original merge
3406 * commit, we cannot fast-forward.
3409 can_fast_forward = 0;
3412 if (can_fast_forward) {
3413 rollback_lock_file(&lock);
3414 ret = fast_forward_to(r, &commit->object.oid,
3415 &head_commit->object.oid, 0, opts);
3419 if (to_merge->next) {
3421 struct child_process cmd = CHILD_PROCESS_INIT;
3423 if (read_env_script(&cmd.env_array)) {
3424 const char *gpg_opt = gpg_sign_opt_quoted(opts);
3426 ret = error(_(staged_changes_advice), gpg_opt, gpg_opt);
3431 argv_array_push(&cmd.args, "merge");
3432 argv_array_push(&cmd.args, "-s");
3433 argv_array_push(&cmd.args, "octopus");
3434 argv_array_push(&cmd.args, "--no-edit");
3435 argv_array_push(&cmd.args, "--no-ff");
3436 argv_array_push(&cmd.args, "--no-log");
3437 argv_array_push(&cmd.args, "--no-stat");
3438 argv_array_push(&cmd.args, "-F");
3439 argv_array_push(&cmd.args, git_path_merge_msg(r));
3441 argv_array_push(&cmd.args, opts->gpg_sign);
3443 /* Add the tips to be merged */
3444 for (j = to_merge; j; j = j->next)
3445 argv_array_push(&cmd.args,
3446 oid_to_hex(&j->item->object.oid));
3448 strbuf_release(&ref_name);
3449 unlink(git_path_cherry_pick_head(r));
3450 rollback_lock_file(&lock);
3452 rollback_lock_file(&lock);
3453 ret = run_command(&cmd);
3455 /* force re-reading of the cache */
3456 if (!ret && (discard_index(r->index) < 0 ||
3457 repo_read_index(r) < 0))
3458 ret = error(_("could not read index"));
3462 merge_commit = to_merge->item;
3463 bases = get_merge_bases(head_commit, merge_commit);
3464 if (bases && oideq(&merge_commit->object.oid,
3465 &bases->item->object.oid)) {
3467 /* skip merging an ancestor of HEAD */
3471 write_message(oid_to_hex(&merge_commit->object.oid), GIT_SHA1_HEXSZ,
3472 git_path_merge_head(r), 0);
3473 write_message("no-ff", 5, git_path_merge_mode(r), 0);
3475 for (j = bases; j; j = j->next)
3476 commit_list_insert(j->item, &reversed);
3477 free_commit_list(bases);
3480 init_merge_options(&o, r);
3482 o.branch2 = ref_name.buf;
3483 o.buffer_output = 2;
3485 ret = merge_recursive(&o, head_commit, merge_commit, reversed, &i);
3487 fputs(o.obuf.buf, stdout);
3488 strbuf_release(&o.obuf);
3490 error(_("could not even attempt to merge '%.*s'"),
3491 merge_arg_len, arg);
3495 * The return value of merge_recursive() is 1 on clean, and 0 on
3498 * Let's reverse that, so that do_merge() returns 0 upon success and
3499 * 1 upon failed merge (keeping the return value -1 for the cases where
3500 * we will want to reschedule the `merge` command).
3504 if (r->index->cache_changed &&
3505 write_locked_index(r->index, &lock, COMMIT_LOCK)) {
3506 ret = error(_("merge: Unable to write new index file"));
3510 rollback_lock_file(&lock);
3512 repo_rerere(r, opts->allow_rerere_auto);
3515 * In case of problems, we now want to return a positive
3516 * value (a negative one would indicate that the `merge`
3517 * command needs to be rescheduled).
3519 ret = !!run_git_commit(r, git_path_merge_msg(r), opts,
3523 strbuf_release(&ref_name);
3524 rollback_lock_file(&lock);
3525 free_commit_list(to_merge);
3529 static int is_final_fixup(struct todo_list *todo_list)
3531 int i = todo_list->current;
3533 if (!is_fixup(todo_list->items[i].command))
3536 while (++i < todo_list->nr)
3537 if (is_fixup(todo_list->items[i].command))
3539 else if (!is_noop(todo_list->items[i].command))
3544 static enum todo_command peek_command(struct todo_list *todo_list, int offset)
3548 for (i = todo_list->current + offset; i < todo_list->nr; i++)
3549 if (!is_noop(todo_list->items[i].command))
3550 return todo_list->items[i].command;
3555 static int apply_autostash(struct replay_opts *opts)
3557 struct strbuf stash_sha1 = STRBUF_INIT;
3558 struct child_process child = CHILD_PROCESS_INIT;
3561 if (!read_oneliner(&stash_sha1, rebase_path_autostash(), 1)) {
3562 strbuf_release(&stash_sha1);
3565 strbuf_trim(&stash_sha1);
3568 child.no_stdout = 1;
3569 child.no_stderr = 1;
3570 argv_array_push(&child.args, "stash");
3571 argv_array_push(&child.args, "apply");
3572 argv_array_push(&child.args, stash_sha1.buf);
3573 if (!run_command(&child))
3574 fprintf(stderr, _("Applied autostash.\n"));
3576 struct child_process store = CHILD_PROCESS_INIT;
3579 argv_array_push(&store.args, "stash");
3580 argv_array_push(&store.args, "store");
3581 argv_array_push(&store.args, "-m");
3582 argv_array_push(&store.args, "autostash");
3583 argv_array_push(&store.args, "-q");
3584 argv_array_push(&store.args, stash_sha1.buf);
3585 if (run_command(&store))
3586 ret = error(_("cannot store %s"), stash_sha1.buf);
3589 _("Applying autostash resulted in conflicts.\n"
3590 "Your changes are safe in the stash.\n"
3591 "You can run \"git stash pop\" or"
3592 " \"git stash drop\" at any time.\n"));
3595 strbuf_release(&stash_sha1);
3599 static const char *reflog_message(struct replay_opts *opts,
3600 const char *sub_action, const char *fmt, ...)
3603 static struct strbuf buf = STRBUF_INIT;
3607 strbuf_addstr(&buf, action_name(opts));
3609 strbuf_addf(&buf, " (%s)", sub_action);
3611 strbuf_addstr(&buf, ": ");
3612 strbuf_vaddf(&buf, fmt, ap);
3619 static int run_git_checkout(struct repository *r, struct replay_opts *opts,
3620 const char *commit, const char *action)
3622 struct child_process cmd = CHILD_PROCESS_INIT;
3627 argv_array_push(&cmd.args, "checkout");
3628 argv_array_push(&cmd.args, commit);
3629 argv_array_pushf(&cmd.env_array, GIT_REFLOG_ACTION "=%s", action);
3632 ret = run_command(&cmd);
3634 ret = run_command_silent_on_success(&cmd);
3637 discard_index(r->index);
3642 int prepare_branch_to_be_rebased(struct repository *r, struct replay_opts *opts,
3647 if (commit && *commit) {
3648 action = reflog_message(opts, "start", "checkout %s", commit);
3649 if (run_git_checkout(r, opts, commit, action))
3650 return error(_("could not checkout %s"), commit);
3656 static int checkout_onto(struct repository *r, struct replay_opts *opts,
3657 const char *onto_name, const struct object_id *onto,
3658 const char *orig_head)
3660 struct object_id oid;
3661 const char *action = reflog_message(opts, "start", "checkout %s", onto_name);
3663 if (get_oid(orig_head, &oid))
3664 return error(_("%s: not a valid OID"), orig_head);
3666 if (run_git_checkout(r, opts, oid_to_hex(onto), action)) {
3667 apply_autostash(opts);
3668 sequencer_remove_state(opts);
3669 return error(_("could not detach HEAD"));
3672 return update_ref(NULL, "ORIG_HEAD", &oid, NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3675 static int stopped_at_head(struct repository *r)
3677 struct object_id head;
3678 struct commit *commit;
3679 struct commit_message message;
3681 if (get_oid("HEAD", &head) ||
3682 !(commit = lookup_commit(r, &head)) ||
3683 parse_commit(commit) || get_message(commit, &message))
3684 fprintf(stderr, _("Stopped at HEAD\n"));
3686 fprintf(stderr, _("Stopped at %s\n"), message.label);
3687 free_message(commit, &message);
3693 static const char rescheduled_advice[] =
3694 N_("Could not execute the todo command\n"
3698 "It has been rescheduled; To edit the command before continuing, please\n"
3699 "edit the todo list first:\n"
3701 " git rebase --edit-todo\n"
3702 " git rebase --continue\n");
3704 static int pick_commits(struct repository *r,
3705 struct todo_list *todo_list,
3706 struct replay_opts *opts)
3708 int res = 0, reschedule = 0;
3710 setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
3712 assert(!(opts->signoff || opts->no_commit ||
3713 opts->record_origin || opts->edit ||
3714 opts->committer_date_is_author_date));
3715 if (read_and_refresh_cache(r, opts))
3718 while (todo_list->current < todo_list->nr) {
3719 struct todo_item *item = todo_list->items + todo_list->current;
3720 const char *arg = todo_item_get_arg(todo_list, item);
3723 if (save_todo(todo_list, opts))
3725 if (is_rebase_i(opts)) {
3726 if (item->command != TODO_COMMENT) {
3727 FILE *f = fopen(rebase_path_msgnum(), "w");
3729 todo_list->done_nr++;
3732 fprintf(f, "%d\n", todo_list->done_nr);
3736 fprintf(stderr, "Rebasing (%d/%d)%s",
3738 todo_list->total_nr,
3739 opts->verbose ? "\n" : "\r");
3741 unlink(rebase_path_message());
3742 unlink(rebase_path_author_script());
3743 unlink(rebase_path_stopped_sha());
3744 unlink(rebase_path_amend());
3745 unlink(git_path_merge_head(the_repository));
3746 delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
3748 if (item->command == TODO_BREAK) {
3751 return stopped_at_head(r);
3754 if (item->command <= TODO_SQUASH) {
3755 if (is_rebase_i(opts))
3756 setenv("GIT_REFLOG_ACTION", reflog_message(opts,
3757 command_to_string(item->command), NULL),
3759 res = do_pick_commit(r, item->command, item->commit,
3760 opts, is_final_fixup(todo_list),
3762 if (is_rebase_i(opts) && res < 0) {
3764 advise(_(rescheduled_advice),
3765 get_item_line_length(todo_list,
3766 todo_list->current),
3767 get_item_line(todo_list,
3768 todo_list->current));
3769 todo_list->current--;
3770 if (save_todo(todo_list, opts))
3773 if (item->command == TODO_EDIT) {
3774 struct commit *commit = item->commit;
3779 _("Stopped at %s... %.*s\n"),
3780 short_commit_name(commit),
3781 item->arg_len, arg);
3783 return error_with_patch(r, commit,
3784 arg, item->arg_len, opts, res, !res);
3786 if (is_rebase_i(opts) && !res)
3787 record_in_rewritten(&item->commit->object.oid,
3788 peek_command(todo_list, 1));
3789 if (res && is_fixup(item->command)) {
3792 return error_failed_squash(r, item->commit, opts,
3793 item->arg_len, arg);
3794 } else if (res && is_rebase_i(opts) && item->commit) {
3796 struct object_id oid;
3799 * If we are rewording and have either
3800 * fast-forwarded already, or are about to
3801 * create a new root commit, we want to amend,
3802 * otherwise we do not.
3804 if (item->command == TODO_REWORD &&
3805 !get_oid("HEAD", &oid) &&
3806 (oideq(&item->commit->object.oid, &oid) ||
3807 (opts->have_squash_onto &&
3808 oideq(&opts->squash_onto, &oid))))
3811 return res | error_with_patch(r, item->commit,
3812 arg, item->arg_len, opts,
3815 } else if (item->command == TODO_EXEC) {
3816 char *end_of_arg = (char *)(arg + item->arg_len);
3817 int saved = *end_of_arg;
3822 res = do_exec(r, arg);
3823 *end_of_arg = saved;
3826 if (opts->reschedule_failed_exec)
3830 } else if (item->command == TODO_LABEL) {
3831 if ((res = do_label(r, arg, item->arg_len)))
3833 } else if (item->command == TODO_RESET) {
3834 if ((res = do_reset(r, arg, item->arg_len, opts)))
3836 } else if (item->command == TODO_MERGE) {
3837 if ((res = do_merge(r, item->commit,
3839 item->flags, opts)) < 0)
3841 else if (item->commit)
3842 record_in_rewritten(&item->commit->object.oid,
3843 peek_command(todo_list, 1));
3845 /* failed with merge conflicts */
3846 return error_with_patch(r, item->commit,
3849 } else if (!is_noop(item->command))
3850 return error(_("unknown command %d"), item->command);
3853 advise(_(rescheduled_advice),
3854 get_item_line_length(todo_list,
3855 todo_list->current),
3856 get_item_line(todo_list, todo_list->current));
3857 todo_list->current--;
3858 if (save_todo(todo_list, opts))
3861 return error_with_patch(r,
3865 } else if (check_todo && !res) {
3868 if (stat(get_todo_path(opts), &st)) {
3869 res = error_errno(_("could not stat '%s'"),
3870 get_todo_path(opts));
3871 } else if (match_stat_data(&todo_list->stat, &st)) {
3872 /* Reread the todo file if it has changed. */
3873 todo_list_release(todo_list);
3874 if (read_populate_todo(r, todo_list, opts))
3875 res = -1; /* message was printed */
3876 /* `current` will be incremented below */
3877 todo_list->current = -1;
3881 todo_list->current++;
3886 if (is_rebase_i(opts)) {
3887 struct strbuf head_ref = STRBUF_INIT, buf = STRBUF_INIT;
3890 /* Stopped in the middle, as planned? */
3891 if (todo_list->current < todo_list->nr)
3894 if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
3895 starts_with(head_ref.buf, "refs/")) {
3897 struct object_id head, orig;
3900 if (get_oid("HEAD", &head)) {
3901 res = error(_("cannot read HEAD"));
3903 strbuf_release(&head_ref);
3904 strbuf_release(&buf);
3907 if (!read_oneliner(&buf, rebase_path_orig_head(), 0) ||
3908 get_oid_hex(buf.buf, &orig)) {
3909 res = error(_("could not read orig-head"));
3910 goto cleanup_head_ref;
3913 if (!read_oneliner(&buf, rebase_path_onto(), 0)) {
3914 res = error(_("could not read 'onto'"));
3915 goto cleanup_head_ref;
3917 msg = reflog_message(opts, "finish", "%s onto %s",
3918 head_ref.buf, buf.buf);
3919 if (update_ref(msg, head_ref.buf, &head, &orig,
3920 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR)) {
3921 res = error(_("could not update %s"),
3923 goto cleanup_head_ref;
3925 msg = reflog_message(opts, "finish", "returning to %s",
3927 if (create_symref("HEAD", head_ref.buf, msg)) {
3928 res = error(_("could not update HEAD to %s"),
3930 goto cleanup_head_ref;
3935 if (opts->verbose) {
3936 struct rev_info log_tree_opt;
3937 struct object_id orig, head;
3939 memset(&log_tree_opt, 0, sizeof(log_tree_opt));
3940 repo_init_revisions(r, &log_tree_opt, NULL);
3941 log_tree_opt.diff = 1;
3942 log_tree_opt.diffopt.output_format =
3943 DIFF_FORMAT_DIFFSTAT;
3944 log_tree_opt.disable_stdin = 1;
3946 if (read_oneliner(&buf, rebase_path_orig_head(), 0) &&
3947 !get_oid(buf.buf, &orig) &&
3948 !get_oid("HEAD", &head)) {
3949 diff_tree_oid(&orig, &head, "",
3950 &log_tree_opt.diffopt);
3951 log_tree_diff_flush(&log_tree_opt);
3954 flush_rewritten_pending();
3955 if (!stat(rebase_path_rewritten_list(), &st) &&
3957 struct child_process child = CHILD_PROCESS_INIT;
3958 const char *post_rewrite_hook =
3959 find_hook("post-rewrite");
3961 child.in = open(rebase_path_rewritten_list(), O_RDONLY);
3963 argv_array_push(&child.args, "notes");
3964 argv_array_push(&child.args, "copy");
3965 argv_array_push(&child.args, "--for-rewrite=rebase");
3966 /* we don't care if this copying failed */
3967 run_command(&child);
3969 if (post_rewrite_hook) {
3970 struct child_process hook = CHILD_PROCESS_INIT;
3972 hook.in = open(rebase_path_rewritten_list(),
3974 hook.stdout_to_stderr = 1;
3975 hook.trace2_hook_name = "post-rewrite";
3976 argv_array_push(&hook.args, post_rewrite_hook);
3977 argv_array_push(&hook.args, "rebase");
3978 /* we don't care if this hook failed */
3982 apply_autostash(opts);
3988 "Successfully rebased and updated %s.\n",
3992 strbuf_release(&buf);
3993 strbuf_release(&head_ref);
3997 * Sequence of picks finished successfully; cleanup by
3998 * removing the .git/sequencer directory
4000 return sequencer_remove_state(opts);
4003 static int continue_single_pick(struct repository *r)
4005 const char *argv[] = { "commit", NULL };
4007 if (!file_exists(git_path_cherry_pick_head(r)) &&
4008 !file_exists(git_path_revert_head(r)))
4009 return error(_("no cherry-pick or revert in progress"));
4010 return run_command_v_opt(argv, RUN_GIT_CMD);
4013 static int commit_staged_changes(struct repository *r,
4014 struct replay_opts *opts,
4015 struct todo_list *todo_list)
4017 unsigned int flags = ALLOW_EMPTY | EDIT_MSG;
4018 unsigned int final_fixup = 0, is_clean;
4020 if (has_unstaged_changes(r, 1))
4021 return error(_("cannot rebase: You have unstaged changes."));
4023 is_clean = !has_uncommitted_changes(r, 0);
4025 if (file_exists(rebase_path_amend())) {
4026 struct strbuf rev = STRBUF_INIT;
4027 struct object_id head, to_amend;
4029 if (get_oid("HEAD", &head))
4030 return error(_("cannot amend non-existing commit"));
4031 if (!read_oneliner(&rev, rebase_path_amend(), 0))
4032 return error(_("invalid file: '%s'"), rebase_path_amend());
4033 if (get_oid_hex(rev.buf, &to_amend))
4034 return error(_("invalid contents: '%s'"),
4035 rebase_path_amend());
4036 if (!is_clean && !oideq(&head, &to_amend))
4037 return error(_("\nYou have uncommitted changes in your "
4038 "working tree. Please, commit them\n"
4039 "first and then run 'git rebase "
4040 "--continue' again."));
4042 * When skipping a failed fixup/squash, we need to edit the
4043 * commit message, the current fixup list and count, and if it
4044 * was the last fixup/squash in the chain, we need to clean up
4045 * the commit message and if there was a squash, let the user
4048 if (!is_clean || !opts->current_fixup_count)
4049 ; /* this is not the final fixup */
4050 else if (!oideq(&head, &to_amend) ||
4051 !file_exists(rebase_path_stopped_sha())) {
4052 /* was a final fixup or squash done manually? */
4053 if (!is_fixup(peek_command(todo_list, 0))) {
4054 unlink(rebase_path_fixup_msg());
4055 unlink(rebase_path_squash_msg());
4056 unlink(rebase_path_current_fixups());
4057 strbuf_reset(&opts->current_fixups);
4058 opts->current_fixup_count = 0;
4061 /* we are in a fixup/squash chain */
4062 const char *p = opts->current_fixups.buf;
4063 int len = opts->current_fixups.len;
4065 opts->current_fixup_count--;
4067 BUG("Incorrect current_fixups:\n%s", p);
4068 while (len && p[len - 1] != '\n')
4070 strbuf_setlen(&opts->current_fixups, len);
4071 if (write_message(p, len, rebase_path_current_fixups(),
4073 return error(_("could not write file: '%s'"),
4074 rebase_path_current_fixups());
4077 * If a fixup/squash in a fixup/squash chain failed, the
4078 * commit message is already correct, no need to commit
4081 * Only if it is the final command in the fixup/squash
4082 * chain, and only if the chain is longer than a single
4083 * fixup/squash command (which was just skipped), do we
4084 * actually need to re-commit with a cleaned up commit
4087 if (opts->current_fixup_count > 0 &&
4088 !is_fixup(peek_command(todo_list, 0))) {
4091 * If there was not a single "squash" in the
4092 * chain, we only need to clean up the commit
4093 * message, no need to bother the user with
4094 * opening the commit message in the editor.
4096 if (!starts_with(p, "squash ") &&
4097 !strstr(p, "\nsquash "))
4098 flags = (flags & ~EDIT_MSG) | CLEANUP_MSG;
4099 } else if (is_fixup(peek_command(todo_list, 0))) {
4101 * We need to update the squash message to skip
4102 * the latest commit message.
4104 struct commit *commit;
4105 const char *path = rebase_path_squash_msg();
4107 if (parse_head(r, &commit) ||
4108 !(p = get_commit_buffer(commit, NULL)) ||
4109 write_message(p, strlen(p), path, 0)) {
4110 unuse_commit_buffer(commit, p);
4111 return error(_("could not write file: "
4114 unuse_commit_buffer(commit, p);
4118 strbuf_release(&rev);
4123 const char *cherry_pick_head = git_path_cherry_pick_head(r);
4125 if (file_exists(cherry_pick_head) && unlink(cherry_pick_head))
4126 return error(_("could not remove CHERRY_PICK_HEAD"));
4131 if (run_git_commit(r, final_fixup ? NULL : rebase_path_message(),
4133 return error(_("could not commit staged changes."));
4134 unlink(rebase_path_amend());
4135 unlink(git_path_merge_head(the_repository));
4137 unlink(rebase_path_fixup_msg());
4138 unlink(rebase_path_squash_msg());
4140 if (opts->current_fixup_count > 0) {
4142 * Whether final fixup or not, we just cleaned up the commit
4145 unlink(rebase_path_current_fixups());
4146 strbuf_reset(&opts->current_fixups);
4147 opts->current_fixup_count = 0;
4152 int sequencer_continue(struct repository *r, struct replay_opts *opts)
4154 struct todo_list todo_list = TODO_LIST_INIT;
4157 if (read_and_refresh_cache(r, opts))
4160 if (read_populate_opts(opts))
4162 if (is_rebase_i(opts)) {
4163 if ((res = read_populate_todo(r, &todo_list, opts)))
4164 goto release_todo_list;
4165 if (commit_staged_changes(r, opts, &todo_list))
4167 } else if (!file_exists(get_todo_path(opts)))
4168 return continue_single_pick(r);
4169 else if ((res = read_populate_todo(r, &todo_list, opts)))
4170 goto release_todo_list;
4172 if (!is_rebase_i(opts)) {
4173 /* Verify that the conflict has been resolved */
4174 if (file_exists(git_path_cherry_pick_head(r)) ||
4175 file_exists(git_path_revert_head(r))) {
4176 res = continue_single_pick(r);
4178 goto release_todo_list;
4180 if (index_differs_from(r, "HEAD", NULL, 0)) {
4181 res = error_dirty_index(r, opts);
4182 goto release_todo_list;
4184 todo_list.current++;
4185 } else if (file_exists(rebase_path_stopped_sha())) {
4186 struct strbuf buf = STRBUF_INIT;
4187 struct object_id oid;
4189 if (read_oneliner(&buf, rebase_path_stopped_sha(), 1) &&
4190 !get_oid_committish(buf.buf, &oid))
4191 record_in_rewritten(&oid, peek_command(&todo_list, 0));
4192 strbuf_release(&buf);
4195 res = pick_commits(r, &todo_list, opts);
4197 todo_list_release(&todo_list);
4201 static int single_pick(struct repository *r,
4202 struct commit *cmit,
4203 struct replay_opts *opts)
4207 setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
4208 return do_pick_commit(r, opts->action == REPLAY_PICK ?
4209 TODO_PICK : TODO_REVERT, cmit, opts, 0,
4213 int sequencer_pick_revisions(struct repository *r,
4214 struct replay_opts *opts)
4216 struct todo_list todo_list = TODO_LIST_INIT;
4217 struct object_id oid;
4221 if (read_and_refresh_cache(r, opts))
4224 for (i = 0; i < opts->revs->pending.nr; i++) {
4225 struct object_id oid;
4226 const char *name = opts->revs->pending.objects[i].name;
4228 /* This happens when using --stdin. */
4232 if (!get_oid(name, &oid)) {
4233 if (!lookup_commit_reference_gently(r, &oid, 1)) {
4234 enum object_type type = oid_object_info(r,
4237 return error(_("%s: can't cherry-pick a %s"),
4238 name, type_name(type));
4241 return error(_("%s: bad revision"), name);
4245 * If we were called as "git cherry-pick <commit>", just
4246 * cherry-pick/revert it, set CHERRY_PICK_HEAD /
4247 * REVERT_HEAD, and don't touch the sequencer state.
4248 * This means it is possible to cherry-pick in the middle
4249 * of a cherry-pick sequence.
4251 if (opts->revs->cmdline.nr == 1 &&
4252 opts->revs->cmdline.rev->whence == REV_CMD_REV &&
4253 opts->revs->no_walk &&
4254 !opts->revs->cmdline.rev->flags) {
4255 struct commit *cmit;
4256 if (prepare_revision_walk(opts->revs))
4257 return error(_("revision walk setup failed"));
4258 cmit = get_revision(opts->revs);
4260 return error(_("empty commit set passed"));
4261 if (get_revision(opts->revs))
4262 BUG("unexpected extra commit from walk");
4263 return single_pick(r, cmit, opts);
4267 * Start a new cherry-pick/ revert sequence; but
4268 * first, make sure that an existing one isn't in
4272 if (walk_revs_populate_todo(&todo_list, opts) ||
4273 create_seq_dir() < 0)
4275 if (get_oid("HEAD", &oid) && (opts->action == REPLAY_REVERT))
4276 return error(_("can't revert as initial commit"));
4277 if (save_head(oid_to_hex(&oid)))
4279 if (save_opts(opts))
4281 update_abort_safety_file();
4282 res = pick_commits(r, &todo_list, opts);
4283 todo_list_release(&todo_list);
4287 void append_signoff(struct strbuf *msgbuf, size_t ignore_footer, unsigned flag)
4289 unsigned no_dup_sob = flag & APPEND_SIGNOFF_DEDUP;
4290 struct strbuf sob = STRBUF_INIT;
4293 strbuf_addstr(&sob, sign_off_header);
4294 strbuf_addstr(&sob, fmt_name(WANT_COMMITTER_IDENT));
4295 strbuf_addch(&sob, '\n');
4298 strbuf_complete_line(msgbuf);
4301 * If the whole message buffer is equal to the sob, pretend that we
4302 * found a conforming footer with a matching sob
4304 if (msgbuf->len - ignore_footer == sob.len &&
4305 !strncmp(msgbuf->buf, sob.buf, sob.len))
4308 has_footer = has_conforming_footer(msgbuf, &sob, ignore_footer);
4311 const char *append_newlines = NULL;
4312 size_t len = msgbuf->len - ignore_footer;
4316 * The buffer is completely empty. Leave foom for
4317 * the title and body to be filled in by the user.
4319 append_newlines = "\n\n";
4320 } else if (len == 1) {
4322 * Buffer contains a single newline. Add another
4323 * so that we leave room for the title and body.
4325 append_newlines = "\n";
4326 } else if (msgbuf->buf[len - 2] != '\n') {
4328 * Buffer ends with a single newline. Add another
4329 * so that there is an empty line between the message
4332 append_newlines = "\n";
4333 } /* else, the buffer already ends with two newlines. */
4335 if (append_newlines)
4336 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4337 append_newlines, strlen(append_newlines));
4340 if (has_footer != 3 && (!no_dup_sob || has_footer != 2))
4341 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4344 strbuf_release(&sob);
4347 struct labels_entry {
4348 struct hashmap_entry entry;
4349 char label[FLEX_ARRAY];
4352 static int labels_cmp(const void *fndata, const struct labels_entry *a,
4353 const struct labels_entry *b, const void *key)
4355 return key ? strcmp(a->label, key) : strcmp(a->label, b->label);
4358 struct string_entry {
4359 struct oidmap_entry entry;
4360 char string[FLEX_ARRAY];
4363 struct label_state {
4364 struct oidmap commit2label;
4365 struct hashmap labels;
4369 static const char *label_oid(struct object_id *oid, const char *label,
4370 struct label_state *state)
4372 struct labels_entry *labels_entry;
4373 struct string_entry *string_entry;
4374 struct object_id dummy;
4378 string_entry = oidmap_get(&state->commit2label, oid);
4380 return string_entry->string;
4383 * For "uninteresting" commits, i.e. commits that are not to be
4384 * rebased, and which can therefore not be labeled, we use a unique
4385 * abbreviation of the commit name. This is slightly more complicated
4386 * than calling find_unique_abbrev() because we also need to make
4387 * sure that the abbreviation does not conflict with any other
4390 * We disallow "interesting" commits to be labeled by a string that
4391 * is a valid full-length hash, to ensure that we always can find an
4392 * abbreviation for any uninteresting commit's names that does not
4393 * clash with any other label.
4398 strbuf_reset(&state->buf);
4399 strbuf_grow(&state->buf, GIT_SHA1_HEXSZ);
4400 label = p = state->buf.buf;
4402 find_unique_abbrev_r(p, oid, default_abbrev);
4405 * We may need to extend the abbreviated hash so that there is
4406 * no conflicting label.
4408 if (hashmap_get_from_hash(&state->labels, strihash(p), p)) {
4409 size_t i = strlen(p) + 1;
4411 oid_to_hex_r(p, oid);
4412 for (; i < GIT_SHA1_HEXSZ; i++) {
4415 if (!hashmap_get_from_hash(&state->labels,
4421 } else if (((len = strlen(label)) == the_hash_algo->hexsz &&
4422 !get_oid_hex(label, &dummy)) ||
4423 (len == 1 && *label == '#') ||
4424 hashmap_get_from_hash(&state->labels,
4425 strihash(label), label)) {
4427 * If the label already exists, or if the label is a valid full
4428 * OID, or the label is a '#' (which we use as a separator
4429 * between merge heads and oneline), we append a dash and a
4430 * number to make it unique.
4432 struct strbuf *buf = &state->buf;
4435 strbuf_add(buf, label, len);
4437 for (i = 2; ; i++) {
4438 strbuf_setlen(buf, len);
4439 strbuf_addf(buf, "-%d", i);
4440 if (!hashmap_get_from_hash(&state->labels,
4449 FLEX_ALLOC_STR(labels_entry, label, label);
4450 hashmap_entry_init(labels_entry, strihash(label));
4451 hashmap_add(&state->labels, labels_entry);
4453 FLEX_ALLOC_STR(string_entry, string, label);
4454 oidcpy(&string_entry->entry.oid, oid);
4455 oidmap_put(&state->commit2label, string_entry);
4457 return string_entry->string;
4460 static int make_script_with_merges(struct pretty_print_context *pp,
4461 struct rev_info *revs, struct strbuf *out,
4464 int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4465 int rebase_cousins = flags & TODO_LIST_REBASE_COUSINS;
4466 struct strbuf buf = STRBUF_INIT, oneline = STRBUF_INIT;
4467 struct strbuf label = STRBUF_INIT;
4468 struct commit_list *commits = NULL, **tail = &commits, *iter;
4469 struct commit_list *tips = NULL, **tips_tail = &tips;
4470 struct commit *commit;
4471 struct oidmap commit2todo = OIDMAP_INIT;
4472 struct string_entry *entry;
4473 struct oidset interesting = OIDSET_INIT, child_seen = OIDSET_INIT,
4474 shown = OIDSET_INIT;
4475 struct label_state state = { OIDMAP_INIT, { NULL }, STRBUF_INIT };
4477 int abbr = flags & TODO_LIST_ABBREVIATE_CMDS;
4478 const char *cmd_pick = abbr ? "p" : "pick",
4479 *cmd_label = abbr ? "l" : "label",
4480 *cmd_reset = abbr ? "t" : "reset",
4481 *cmd_merge = abbr ? "m" : "merge";
4483 oidmap_init(&commit2todo, 0);
4484 oidmap_init(&state.commit2label, 0);
4485 hashmap_init(&state.labels, (hashmap_cmp_fn) labels_cmp, NULL, 0);
4486 strbuf_init(&state.buf, 32);
4488 if (revs->cmdline.nr && (revs->cmdline.rev[0].flags & BOTTOM)) {
4489 struct object_id *oid = &revs->cmdline.rev[0].item->oid;
4490 FLEX_ALLOC_STR(entry, string, "onto");
4491 oidcpy(&entry->entry.oid, oid);
4492 oidmap_put(&state.commit2label, entry);
4497 * - get onelines for all commits
4498 * - gather all branch tips (i.e. 2nd or later parents of merges)
4499 * - label all branch tips
4501 while ((commit = get_revision(revs))) {
4502 struct commit_list *to_merge;
4503 const char *p1, *p2;
4504 struct object_id *oid;
4507 tail = &commit_list_insert(commit, tail)->next;
4508 oidset_insert(&interesting, &commit->object.oid);
4510 is_empty = is_original_commit_empty(commit);
4511 if (!is_empty && (commit->object.flags & PATCHSAME))
4514 strbuf_reset(&oneline);
4515 pretty_print_commit(pp, commit, &oneline);
4517 to_merge = commit->parents ? commit->parents->next : NULL;
4519 /* non-merge commit: easy case */
4521 if (!keep_empty && is_empty)
4522 strbuf_addf(&buf, "%c ", comment_line_char);
4523 strbuf_addf(&buf, "%s %s %s", cmd_pick,
4524 oid_to_hex(&commit->object.oid),
4527 FLEX_ALLOC_STR(entry, string, buf.buf);
4528 oidcpy(&entry->entry.oid, &commit->object.oid);
4529 oidmap_put(&commit2todo, entry);
4534 /* Create a label */
4535 strbuf_reset(&label);
4536 if (skip_prefix(oneline.buf, "Merge ", &p1) &&
4537 (p1 = strchr(p1, '\'')) &&
4538 (p2 = strchr(++p1, '\'')))
4539 strbuf_add(&label, p1, p2 - p1);
4540 else if (skip_prefix(oneline.buf, "Merge pull request ",
4542 (p1 = strstr(p1, " from ")))
4543 strbuf_addstr(&label, p1 + strlen(" from "));
4545 strbuf_addbuf(&label, &oneline);
4547 for (p1 = label.buf; *p1; p1++)
4552 strbuf_addf(&buf, "%s -C %s",
4553 cmd_merge, oid_to_hex(&commit->object.oid));
4555 /* label the tips of merged branches */
4556 for (; to_merge; to_merge = to_merge->next) {
4557 oid = &to_merge->item->object.oid;
4558 strbuf_addch(&buf, ' ');
4560 if (!oidset_contains(&interesting, oid)) {
4561 strbuf_addstr(&buf, label_oid(oid, NULL,
4566 tips_tail = &commit_list_insert(to_merge->item,
4569 strbuf_addstr(&buf, label_oid(oid, label.buf, &state));
4571 strbuf_addf(&buf, " # %s", oneline.buf);
4573 FLEX_ALLOC_STR(entry, string, buf.buf);
4574 oidcpy(&entry->entry.oid, &commit->object.oid);
4575 oidmap_put(&commit2todo, entry);
4580 * - label branch points
4581 * - add HEAD to the branch tips
4583 for (iter = commits; iter; iter = iter->next) {
4584 struct commit_list *parent = iter->item->parents;
4585 for (; parent; parent = parent->next) {
4586 struct object_id *oid = &parent->item->object.oid;
4587 if (!oidset_contains(&interesting, oid))
4589 if (oidset_insert(&child_seen, oid))
4590 label_oid(oid, "branch-point", &state);
4593 /* Add HEAD as implict "tip of branch" */
4595 tips_tail = &commit_list_insert(iter->item,
4600 * Third phase: output the todo list. This is a bit tricky, as we
4601 * want to avoid jumping back and forth between revisions. To
4602 * accomplish that goal, we walk backwards from the branch tips,
4603 * gathering commits not yet shown, reversing the list on the fly,
4604 * then outputting that list (labeling revisions as needed).
4606 strbuf_addf(out, "%s onto\n", cmd_label);
4607 for (iter = tips; iter; iter = iter->next) {
4608 struct commit_list *list = NULL, *iter2;
4610 commit = iter->item;
4611 if (oidset_contains(&shown, &commit->object.oid))
4613 entry = oidmap_get(&state.commit2label, &commit->object.oid);
4616 strbuf_addf(out, "\n%c Branch %s\n", comment_line_char, entry->string);
4618 strbuf_addch(out, '\n');
4620 while (oidset_contains(&interesting, &commit->object.oid) &&
4621 !oidset_contains(&shown, &commit->object.oid)) {
4622 commit_list_insert(commit, &list);
4623 if (!commit->parents) {
4627 commit = commit->parents->item;
4631 strbuf_addf(out, "%s %s\n", cmd_reset,
4632 rebase_cousins ? "onto" : "[new root]");
4634 const char *to = NULL;
4636 entry = oidmap_get(&state.commit2label,
4637 &commit->object.oid);
4640 else if (!rebase_cousins)
4641 to = label_oid(&commit->object.oid, NULL,
4644 if (!to || !strcmp(to, "onto"))
4645 strbuf_addf(out, "%s onto\n", cmd_reset);
4647 strbuf_reset(&oneline);
4648 pretty_print_commit(pp, commit, &oneline);
4649 strbuf_addf(out, "%s %s # %s\n",
4650 cmd_reset, to, oneline.buf);
4654 for (iter2 = list; iter2; iter2 = iter2->next) {
4655 struct object_id *oid = &iter2->item->object.oid;
4656 entry = oidmap_get(&commit2todo, oid);
4657 /* only show if not already upstream */
4659 strbuf_addf(out, "%s\n", entry->string);
4660 entry = oidmap_get(&state.commit2label, oid);
4662 strbuf_addf(out, "%s %s\n",
4663 cmd_label, entry->string);
4664 oidset_insert(&shown, oid);
4667 free_commit_list(list);
4670 free_commit_list(commits);
4671 free_commit_list(tips);
4673 strbuf_release(&label);
4674 strbuf_release(&oneline);
4675 strbuf_release(&buf);
4677 oidmap_free(&commit2todo, 1);
4678 oidmap_free(&state.commit2label, 1);
4679 hashmap_free(&state.labels, 1);
4680 strbuf_release(&state.buf);
4685 int sequencer_make_script(struct repository *r, struct strbuf *out, int argc,
4686 const char **argv, unsigned flags)
4688 char *format = NULL;
4689 struct pretty_print_context pp = {0};
4690 struct rev_info revs;
4691 struct commit *commit;
4692 int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4693 const char *insn = flags & TODO_LIST_ABBREVIATE_CMDS ? "p" : "pick";
4694 int rebase_merges = flags & TODO_LIST_REBASE_MERGES;
4696 repo_init_revisions(r, &revs, NULL);
4697 revs.verbose_header = 1;
4699 revs.max_parents = 1;
4700 revs.cherry_mark = 1;
4703 revs.right_only = 1;
4704 revs.sort_order = REV_SORT_IN_GRAPH_ORDER;
4705 revs.topo_order = 1;
4707 revs.pretty_given = 1;
4708 git_config_get_string("rebase.instructionFormat", &format);
4709 if (!format || !*format) {
4711 format = xstrdup("%s");
4713 get_commit_format(format, &revs);
4715 pp.fmt = revs.commit_format;
4716 pp.output_encoding = get_log_output_encoding();
4718 if (setup_revisions(argc, argv, &revs, NULL) > 1)
4719 return error(_("make_script: unhandled options"));
4721 if (prepare_revision_walk(&revs) < 0)
4722 return error(_("make_script: error preparing revisions"));
4725 return make_script_with_merges(&pp, &revs, out, flags);
4727 while ((commit = get_revision(&revs))) {
4728 int is_empty = is_original_commit_empty(commit);
4730 if (!is_empty && (commit->object.flags & PATCHSAME))
4732 if (!keep_empty && is_empty)
4733 strbuf_addf(out, "%c ", comment_line_char);
4734 strbuf_addf(out, "%s %s ", insn,
4735 oid_to_hex(&commit->object.oid));
4736 pretty_print_commit(&pp, commit, out);
4737 strbuf_addch(out, '\n');
4743 * Add commands after pick and (series of) squash/fixup commands
4746 void todo_list_add_exec_commands(struct todo_list *todo_list,
4747 struct string_list *commands)
4749 struct strbuf *buf = &todo_list->buf;
4750 size_t base_offset = buf->len;
4751 int i, insert, nr = 0, alloc = 0;
4752 struct todo_item *items = NULL, *base_items = NULL;
4754 base_items = xcalloc(commands->nr, sizeof(struct todo_item));
4755 for (i = 0; i < commands->nr; i++) {
4756 size_t command_len = strlen(commands->items[i].string);
4758 strbuf_addstr(buf, commands->items[i].string);
4759 strbuf_addch(buf, '\n');
4761 base_items[i].command = TODO_EXEC;
4762 base_items[i].offset_in_buf = base_offset;
4763 base_items[i].arg_offset = base_offset + strlen("exec ");
4764 base_items[i].arg_len = command_len - strlen("exec ");
4766 base_offset += command_len + 1;
4770 * Insert <commands> after every pick. Here, fixup/squash chains
4771 * are considered part of the pick, so we insert the commands *after*
4772 * those chains if there are any.
4774 * As we insert the exec commands immediatly after rearranging
4775 * any fixups and before the user edits the list, a fixup chain
4776 * can never contain comments (any comments are empty picks that
4777 * have been commented out because the user did not specify
4778 * --keep-empty). So, it is safe to insert an exec command
4779 * without looking at the command following a comment.
4782 for (i = 0; i < todo_list->nr; i++) {
4783 enum todo_command command = todo_list->items[i].command;
4784 if (insert && !is_fixup(command)) {
4785 ALLOC_GROW(items, nr + commands->nr, alloc);
4786 COPY_ARRAY(items + nr, base_items, commands->nr);
4792 ALLOC_GROW(items, nr + 1, alloc);
4793 items[nr++] = todo_list->items[i];
4795 if (command == TODO_PICK || command == TODO_MERGE)
4799 /* insert or append final <commands> */
4800 if (insert || nr == todo_list->nr) {
4801 ALLOC_GROW(items, nr + commands->nr, alloc);
4802 COPY_ARRAY(items + nr, base_items, commands->nr);
4807 FREE_AND_NULL(todo_list->items);
4808 todo_list->items = items;
4810 todo_list->alloc = alloc;
4813 static void todo_list_to_strbuf(struct repository *r, struct todo_list *todo_list,
4814 struct strbuf *buf, int num, unsigned flags)
4816 struct todo_item *item;
4817 int i, max = todo_list->nr;
4819 if (num > 0 && num < max)
4822 for (item = todo_list->items, i = 0; i < max; i++, item++) {
4823 /* if the item is not a command write it and continue */
4824 if (item->command >= TODO_COMMENT) {
4825 strbuf_addf(buf, "%.*s\n", item->arg_len,
4826 todo_item_get_arg(todo_list, item));
4830 /* add command to the buffer */
4831 if (flags & TODO_LIST_ABBREVIATE_CMDS)
4832 strbuf_addch(buf, command_to_char(item->command));
4834 strbuf_addstr(buf, command_to_string(item->command));
4838 const char *oid = flags & TODO_LIST_SHORTEN_IDS ?
4839 short_commit_name(item->commit) :
4840 oid_to_hex(&item->commit->object.oid);
4842 if (item->command == TODO_MERGE) {
4843 if (item->flags & TODO_EDIT_MERGE_MSG)
4844 strbuf_addstr(buf, " -c");
4846 strbuf_addstr(buf, " -C");
4849 strbuf_addf(buf, " %s", oid);
4852 /* add all the rest */
4854 strbuf_addch(buf, '\n');
4856 strbuf_addf(buf, " %.*s\n", item->arg_len,
4857 todo_item_get_arg(todo_list, item));
4861 int todo_list_write_to_file(struct repository *r, struct todo_list *todo_list,
4862 const char *file, const char *shortrevisions,
4863 const char *shortonto, int num, unsigned flags)
4866 struct strbuf buf = STRBUF_INIT;
4868 todo_list_to_strbuf(r, todo_list, &buf, num, flags);
4869 if (flags & TODO_LIST_APPEND_TODO_HELP)
4870 append_todo_help(flags & TODO_LIST_KEEP_EMPTY, count_commands(todo_list),
4871 shortrevisions, shortonto, &buf);
4873 res = write_message(buf.buf, buf.len, file, 0);
4874 strbuf_release(&buf);
4879 static const char edit_todo_list_advice[] =
4880 N_("You can fix this with 'git rebase --edit-todo' "
4881 "and then run 'git rebase --continue'.\n"
4882 "Or you can abort the rebase with 'git rebase"
4885 int check_todo_list_from_file(struct repository *r)
4887 struct todo_list old_todo = TODO_LIST_INIT, new_todo = TODO_LIST_INIT;
4890 if (strbuf_read_file_or_whine(&new_todo.buf, rebase_path_todo()) < 0) {
4895 if (strbuf_read_file_or_whine(&old_todo.buf, rebase_path_todo_backup()) < 0) {
4900 res = todo_list_parse_insn_buffer(r, old_todo.buf.buf, &old_todo);
4902 res = todo_list_parse_insn_buffer(r, new_todo.buf.buf, &new_todo);
4904 res = todo_list_check(&old_todo, &new_todo);
4906 fprintf(stderr, _(edit_todo_list_advice));
4908 todo_list_release(&old_todo);
4909 todo_list_release(&new_todo);
4914 /* skip picking commits whose parents are unchanged */
4915 static int skip_unnecessary_picks(struct repository *r,
4916 struct todo_list *todo_list,
4917 struct object_id *base_oid)
4919 struct object_id *parent_oid;
4922 for (i = 0; i < todo_list->nr; i++) {
4923 struct todo_item *item = todo_list->items + i;
4925 if (item->command >= TODO_NOOP)
4927 if (item->command != TODO_PICK)
4929 if (parse_commit(item->commit)) {
4930 return error(_("could not parse commit '%s'"),
4931 oid_to_hex(&item->commit->object.oid));
4933 if (!item->commit->parents)
4934 break; /* root commit */
4935 if (item->commit->parents->next)
4936 break; /* merge commit */
4937 parent_oid = &item->commit->parents->item->object.oid;
4938 if (!oideq(parent_oid, base_oid))
4940 oidcpy(base_oid, &item->commit->object.oid);
4943 const char *done_path = rebase_path_done();
4945 if (todo_list_write_to_file(r, todo_list, done_path, NULL, NULL, i, 0)) {
4946 error_errno(_("could not write to '%s'"), done_path);
4950 MOVE_ARRAY(todo_list->items, todo_list->items + i, todo_list->nr - i);
4952 todo_list->current = 0;
4954 if (is_fixup(peek_command(todo_list, 0)))
4955 record_in_rewritten(base_oid, peek_command(todo_list, 0));
4961 int complete_action(struct repository *r, struct replay_opts *opts, unsigned flags,
4962 const char *shortrevisions, const char *onto_name,
4963 struct commit *onto, const char *orig_head,
4964 struct string_list *commands, unsigned autosquash,
4965 struct todo_list *todo_list)
4967 const char *shortonto, *todo_file = rebase_path_todo();
4968 struct todo_list new_todo = TODO_LIST_INIT;
4969 struct strbuf *buf = &todo_list->buf;
4970 struct object_id oid = onto->object.oid;
4973 shortonto = find_unique_abbrev(&oid, DEFAULT_ABBREV);
4975 if (buf->len == 0) {
4976 struct todo_item *item = append_new_todo(todo_list);
4977 item->command = TODO_NOOP;
4978 item->commit = NULL;
4979 item->arg_len = item->arg_offset = item->flags = item->offset_in_buf = 0;
4982 if (autosquash && todo_list_rearrange_squash(todo_list))
4986 todo_list_add_exec_commands(todo_list, commands);
4988 if (count_commands(todo_list) == 0) {
4989 apply_autostash(opts);
4990 sequencer_remove_state(opts);
4992 return error(_("nothing to do"));
4995 res = edit_todo_list(r, todo_list, &new_todo, shortrevisions,
4999 else if (res == -2) {
5000 apply_autostash(opts);
5001 sequencer_remove_state(opts);
5004 } else if (res == -3) {
5005 apply_autostash(opts);
5006 sequencer_remove_state(opts);
5007 todo_list_release(&new_todo);
5009 return error(_("nothing to do"));
5012 if (todo_list_parse_insn_buffer(r, new_todo.buf.buf, &new_todo) ||
5013 todo_list_check(todo_list, &new_todo)) {
5014 fprintf(stderr, _(edit_todo_list_advice));
5015 checkout_onto(r, opts, onto_name, &onto->object.oid, orig_head);
5016 todo_list_release(&new_todo);
5021 if (opts->allow_ff && skip_unnecessary_picks(r, &new_todo, &oid)) {
5022 todo_list_release(&new_todo);
5023 return error(_("could not skip unnecessary pick commands"));
5026 if (todo_list_write_to_file(r, &new_todo, todo_file, NULL, NULL, -1,
5027 flags & ~(TODO_LIST_SHORTEN_IDS))) {
5028 todo_list_release(&new_todo);
5029 return error_errno(_("could not write '%s'"), todo_file);
5032 todo_list_release(&new_todo);
5034 if (checkout_onto(r, opts, onto_name, &oid, orig_head))
5037 if (require_clean_work_tree(r, "rebase", "", 1, 1))
5040 return sequencer_continue(r, opts);
5043 struct subject2item_entry {
5044 struct hashmap_entry entry;
5046 char subject[FLEX_ARRAY];
5049 static int subject2item_cmp(const void *fndata,
5050 const struct subject2item_entry *a,
5051 const struct subject2item_entry *b, const void *key)
5053 return key ? strcmp(a->subject, key) : strcmp(a->subject, b->subject);
5056 define_commit_slab(commit_todo_item, struct todo_item *);
5059 * Rearrange the todo list that has both "pick commit-id msg" and "pick
5060 * commit-id fixup!/squash! msg" in it so that the latter is put immediately
5061 * after the former, and change "pick" to "fixup"/"squash".
5063 * Note that if the config has specified a custom instruction format, each log
5064 * message will have to be retrieved from the commit (as the oneline in the
5065 * script cannot be trusted) in order to normalize the autosquash arrangement.
5067 int todo_list_rearrange_squash(struct todo_list *todo_list)
5069 struct hashmap subject2item;
5070 int rearranged = 0, *next, *tail, i, nr = 0, alloc = 0;
5072 struct commit_todo_item commit_todo;
5073 struct todo_item *items = NULL;
5075 init_commit_todo_item(&commit_todo);
5077 * The hashmap maps onelines to the respective todo list index.
5079 * If any items need to be rearranged, the next[i] value will indicate
5080 * which item was moved directly after the i'th.
5082 * In that case, last[i] will indicate the index of the latest item to
5083 * be moved to appear after the i'th.
5085 hashmap_init(&subject2item, (hashmap_cmp_fn) subject2item_cmp,
5086 NULL, todo_list->nr);
5087 ALLOC_ARRAY(next, todo_list->nr);
5088 ALLOC_ARRAY(tail, todo_list->nr);
5089 ALLOC_ARRAY(subjects, todo_list->nr);
5090 for (i = 0; i < todo_list->nr; i++) {
5091 struct strbuf buf = STRBUF_INIT;
5092 struct todo_item *item = todo_list->items + i;
5093 const char *commit_buffer, *subject, *p;
5096 struct subject2item_entry *entry;
5098 next[i] = tail[i] = -1;
5099 if (!item->commit || item->command == TODO_DROP) {
5104 if (is_fixup(item->command)) {
5105 clear_commit_todo_item(&commit_todo);
5106 return error(_("the script was already rearranged."));
5109 *commit_todo_item_at(&commit_todo, item->commit) = item;
5111 parse_commit(item->commit);
5112 commit_buffer = get_commit_buffer(item->commit, NULL);
5113 find_commit_subject(commit_buffer, &subject);
5114 format_subject(&buf, subject, " ");
5115 subject = subjects[i] = strbuf_detach(&buf, &subject_len);
5116 unuse_commit_buffer(item->commit, commit_buffer);
5117 if ((skip_prefix(subject, "fixup! ", &p) ||
5118 skip_prefix(subject, "squash! ", &p))) {
5119 struct commit *commit2;
5124 if (!skip_prefix(p, "fixup! ", &p) &&
5125 !skip_prefix(p, "squash! ", &p))
5129 if ((entry = hashmap_get_from_hash(&subject2item,
5131 /* found by title */
5133 else if (!strchr(p, ' ') &&
5135 lookup_commit_reference_by_name(p)) &&
5136 *commit_todo_item_at(&commit_todo, commit2))
5137 /* found by commit name */
5138 i2 = *commit_todo_item_at(&commit_todo, commit2)
5141 /* copy can be a prefix of the commit subject */
5142 for (i2 = 0; i2 < i; i2++)
5144 starts_with(subjects[i2], p))
5152 todo_list->items[i].command =
5153 starts_with(subject, "fixup!") ?
5154 TODO_FIXUP : TODO_SQUASH;
5160 } else if (!hashmap_get_from_hash(&subject2item,
5161 strhash(subject), subject)) {
5162 FLEX_ALLOC_MEM(entry, subject, subject, subject_len);
5164 hashmap_entry_init(entry, strhash(entry->subject));
5165 hashmap_put(&subject2item, entry);
5170 for (i = 0; i < todo_list->nr; i++) {
5171 enum todo_command command = todo_list->items[i].command;
5175 * Initially, all commands are 'pick's. If it is a
5176 * fixup or a squash now, we have rearranged it.
5178 if (is_fixup(command))
5182 ALLOC_GROW(items, nr + 1, alloc);
5183 items[nr++] = todo_list->items[cur];
5188 FREE_AND_NULL(todo_list->items);
5189 todo_list->items = items;
5191 todo_list->alloc = alloc;
5196 for (i = 0; i < todo_list->nr; i++)
5199 hashmap_free(&subject2item, 1);
5201 clear_commit_todo_item(&commit_todo);