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 const char sign_off_header[] = "Signed-off-by: ";
39 static const char cherry_picked_prefix[] = "(cherry picked from commit ";
41 GIT_PATH_FUNC(git_path_commit_editmsg, "COMMIT_EDITMSG")
43 GIT_PATH_FUNC(git_path_seq_dir, "sequencer")
45 static GIT_PATH_FUNC(git_path_todo_file, "sequencer/todo")
46 static GIT_PATH_FUNC(git_path_opts_file, "sequencer/opts")
47 static GIT_PATH_FUNC(git_path_head_file, "sequencer/head")
48 static GIT_PATH_FUNC(git_path_abort_safety_file, "sequencer/abort-safety")
50 static GIT_PATH_FUNC(rebase_path, "rebase-merge")
52 * The file containing rebase commands, comments, and empty lines.
53 * This file is created by "git rebase -i" then edited by the user. As
54 * the lines are processed, they are removed from the front of this
55 * file and written to the tail of 'done'.
57 GIT_PATH_FUNC(rebase_path_todo, "rebase-merge/git-rebase-todo")
58 GIT_PATH_FUNC(rebase_path_todo_backup, "rebase-merge/git-rebase-todo.backup")
61 * The rebase command lines that have already been processed. A line
62 * is moved here when it is first handled, before any associated user
65 static GIT_PATH_FUNC(rebase_path_done, "rebase-merge/done")
67 * The file to keep track of how many commands were already processed (e.g.
70 static GIT_PATH_FUNC(rebase_path_msgnum, "rebase-merge/msgnum")
72 * The file to keep track of how many commands are to be processed in total
73 * (e.g. for the prompt).
75 static GIT_PATH_FUNC(rebase_path_msgtotal, "rebase-merge/end")
77 * The commit message that is planned to be used for any changes that
78 * need to be committed following a user interaction.
80 static GIT_PATH_FUNC(rebase_path_message, "rebase-merge/message")
82 * The file into which is accumulated the suggested commit message for
83 * squash/fixup commands. When the first of a series of squash/fixups
84 * is seen, the file is created and the commit message from the
85 * previous commit and from the first squash/fixup commit are written
86 * to it. The commit message for each subsequent squash/fixup commit
87 * is appended to the file as it is processed.
89 static GIT_PATH_FUNC(rebase_path_squash_msg, "rebase-merge/message-squash")
91 * If the current series of squash/fixups has not yet included a squash
92 * command, then this file exists and holds the commit message of the
93 * original "pick" commit. (If the series ends without a "squash"
94 * command, then this can be used as the commit message of the combined
95 * commit without opening the editor.)
97 static GIT_PATH_FUNC(rebase_path_fixup_msg, "rebase-merge/message-fixup")
99 * This file contains the list fixup/squash commands that have been
100 * accumulated into message-fixup or message-squash so far.
102 static GIT_PATH_FUNC(rebase_path_current_fixups, "rebase-merge/current-fixups")
104 * A script to set the GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, and
105 * GIT_AUTHOR_DATE that will be used for the commit that is currently
108 static GIT_PATH_FUNC(rebase_path_author_script, "rebase-merge/author-script")
110 * When an "edit" rebase command is being processed, the SHA1 of the
111 * commit to be edited is recorded in this file. When "git rebase
112 * --continue" is executed, if there are any staged changes then they
113 * will be amended to the HEAD commit, but only provided the HEAD
114 * commit is still the commit to be edited. When any other rebase
115 * command is processed, this file is deleted.
117 static GIT_PATH_FUNC(rebase_path_amend, "rebase-merge/amend")
119 * When we stop at a given patch via the "edit" command, this file contains
120 * the abbreviated commit name of the corresponding patch.
122 static GIT_PATH_FUNC(rebase_path_stopped_sha, "rebase-merge/stopped-sha")
124 * For the post-rewrite hook, we make a list of rewritten commits and
125 * their new sha1s. The rewritten-pending list keeps the sha1s of
126 * commits that have been processed, but not committed yet,
127 * e.g. because they are waiting for a 'squash' command.
129 static GIT_PATH_FUNC(rebase_path_rewritten_list, "rebase-merge/rewritten-list")
130 static GIT_PATH_FUNC(rebase_path_rewritten_pending,
131 "rebase-merge/rewritten-pending")
134 * The path of the file containig the OID of the "squash onto" commit, i.e.
135 * the dummy commit used for `reset [new root]`.
137 static GIT_PATH_FUNC(rebase_path_squash_onto, "rebase-merge/squash-onto")
140 * The path of the file listing refs that need to be deleted after the rebase
141 * finishes. This is used by the `label` command to record the need for cleanup.
143 static GIT_PATH_FUNC(rebase_path_refs_to_delete, "rebase-merge/refs-to-delete")
146 * The following files are written by git-rebase just after parsing the
149 static GIT_PATH_FUNC(rebase_path_gpg_sign_opt, "rebase-merge/gpg_sign_opt")
150 static GIT_PATH_FUNC(rebase_path_orig_head, "rebase-merge/orig-head")
151 static GIT_PATH_FUNC(rebase_path_verbose, "rebase-merge/verbose")
152 static GIT_PATH_FUNC(rebase_path_signoff, "rebase-merge/signoff")
153 static GIT_PATH_FUNC(rebase_path_head_name, "rebase-merge/head-name")
154 static GIT_PATH_FUNC(rebase_path_onto, "rebase-merge/onto")
155 static GIT_PATH_FUNC(rebase_path_autostash, "rebase-merge/autostash")
156 static GIT_PATH_FUNC(rebase_path_strategy, "rebase-merge/strategy")
157 static GIT_PATH_FUNC(rebase_path_strategy_opts, "rebase-merge/strategy_opts")
158 static GIT_PATH_FUNC(rebase_path_allow_rerere_autoupdate, "rebase-merge/allow_rerere_autoupdate")
159 static GIT_PATH_FUNC(rebase_path_quiet, "rebase-merge/quiet")
161 static int git_sequencer_config(const char *k, const char *v, void *cb)
163 struct replay_opts *opts = cb;
166 if (!strcmp(k, "commit.cleanup")) {
169 status = git_config_string(&s, k, v);
173 if (!strcmp(s, "verbatim"))
174 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_NONE;
175 else if (!strcmp(s, "whitespace"))
176 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_SPACE;
177 else if (!strcmp(s, "strip"))
178 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_ALL;
179 else if (!strcmp(s, "scissors"))
180 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_SPACE;
182 warning(_("invalid commit message cleanup mode '%s'"),
189 if (!strcmp(k, "commit.gpgsign")) {
190 opts->gpg_sign = git_config_bool(k, v) ? xstrdup("") : NULL;
194 status = git_gpg_config(k, v, NULL);
198 return git_diff_basic_config(k, v, NULL);
201 void sequencer_init_config(struct replay_opts *opts)
203 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_NONE;
204 git_config(git_sequencer_config, opts);
207 static inline int is_rebase_i(const struct replay_opts *opts)
209 return opts->action == REPLAY_INTERACTIVE_REBASE;
212 static const char *get_dir(const struct replay_opts *opts)
214 if (is_rebase_i(opts))
215 return rebase_path();
216 return git_path_seq_dir();
219 static const char *get_todo_path(const struct replay_opts *opts)
221 if (is_rebase_i(opts))
222 return rebase_path_todo();
223 return git_path_todo_file();
227 * Returns 0 for non-conforming footer
228 * Returns 1 for conforming footer
229 * Returns 2 when sob exists within conforming footer
230 * Returns 3 when sob exists within conforming footer as last entry
232 static int has_conforming_footer(struct strbuf *sb, struct strbuf *sob,
233 size_t ignore_footer)
235 struct process_trailer_options opts = PROCESS_TRAILER_OPTIONS_INIT;
236 struct trailer_info info;
238 int found_sob = 0, found_sob_last = 0;
242 trailer_info_get(&info, sb->buf, &opts);
244 if (info.trailer_start == info.trailer_end)
247 for (i = 0; i < info.trailer_nr; i++)
248 if (sob && !strncmp(info.trailers[i], sob->buf, sob->len)) {
250 if (i == info.trailer_nr - 1)
254 trailer_info_release(&info);
263 static const char *gpg_sign_opt_quoted(struct replay_opts *opts)
265 static struct strbuf buf = STRBUF_INIT;
269 sq_quotef(&buf, "-S%s", opts->gpg_sign);
273 int sequencer_remove_state(struct replay_opts *opts)
275 struct strbuf buf = STRBUF_INIT;
278 if (is_rebase_i(opts) &&
279 strbuf_read_file(&buf, rebase_path_refs_to_delete(), 0) > 0) {
282 char *eol = strchr(p, '\n');
285 if (delete_ref("(rebase -i) cleanup", p, NULL, 0) < 0)
286 warning(_("could not delete '%s'"), p);
293 free(opts->gpg_sign);
294 free(opts->strategy);
295 for (i = 0; i < opts->xopts_nr; i++)
296 free(opts->xopts[i]);
298 strbuf_release(&opts->current_fixups);
301 strbuf_addstr(&buf, get_dir(opts));
302 remove_dir_recursively(&buf, 0);
303 strbuf_release(&buf);
308 static const char *action_name(const struct replay_opts *opts)
310 switch (opts->action) {
314 return N_("cherry-pick");
315 case REPLAY_INTERACTIVE_REBASE:
316 return N_("rebase -i");
318 die(_("unknown action: %d"), opts->action);
321 struct commit_message {
328 static const char *short_commit_name(struct commit *commit)
330 return find_unique_abbrev(&commit->object.oid, DEFAULT_ABBREV);
333 static int get_message(struct commit *commit, struct commit_message *out)
335 const char *abbrev, *subject;
338 out->message = logmsg_reencode(commit, NULL, get_commit_output_encoding());
339 abbrev = short_commit_name(commit);
341 subject_len = find_commit_subject(out->message, &subject);
343 out->subject = xmemdupz(subject, subject_len);
344 out->label = xstrfmt("%s... %s", abbrev, out->subject);
345 out->parent_label = xstrfmt("parent of %s", out->label);
350 static void free_message(struct commit *commit, struct commit_message *msg)
352 free(msg->parent_label);
355 unuse_commit_buffer(commit, msg->message);
358 static void print_advice(struct repository *r, int show_hint,
359 struct replay_opts *opts)
361 char *msg = getenv("GIT_CHERRY_PICK_HELP");
364 fprintf(stderr, "%s\n", msg);
366 * A conflict has occurred but the porcelain
367 * (typically rebase --interactive) wants to take care
368 * of the commit itself so remove CHERRY_PICK_HEAD
370 unlink(git_path_cherry_pick_head(r));
376 advise(_("after resolving the conflicts, mark the corrected paths\n"
377 "with 'git add <paths>' or 'git rm <paths>'"));
379 advise(_("after resolving the conflicts, mark the corrected paths\n"
380 "with 'git add <paths>' or 'git rm <paths>'\n"
381 "and commit the result with 'git commit'"));
385 static int write_message(const void *buf, size_t len, const char *filename,
388 struct lock_file msg_file = LOCK_INIT;
390 int msg_fd = hold_lock_file_for_update(&msg_file, filename, 0);
392 return error_errno(_("could not lock '%s'"), filename);
393 if (write_in_full(msg_fd, buf, len) < 0) {
394 error_errno(_("could not write to '%s'"), filename);
395 rollback_lock_file(&msg_file);
398 if (append_eol && write(msg_fd, "\n", 1) < 0) {
399 error_errno(_("could not write eol to '%s'"), filename);
400 rollback_lock_file(&msg_file);
403 if (commit_lock_file(&msg_file) < 0)
404 return error(_("failed to finalize '%s'"), filename);
410 * Reads a file that was presumably written by a shell script, i.e. with an
411 * end-of-line marker that needs to be stripped.
413 * Note that only the last end-of-line marker is stripped, consistent with the
414 * behavior of "$(cat path)" in a shell script.
416 * Returns 1 if the file was read, 0 if it could not be read or does not exist.
418 static int read_oneliner(struct strbuf *buf,
419 const char *path, int skip_if_empty)
421 int orig_len = buf->len;
423 if (!file_exists(path))
426 if (strbuf_read_file(buf, path, 0) < 0) {
427 warning_errno(_("could not read '%s'"), path);
431 if (buf->len > orig_len && buf->buf[buf->len - 1] == '\n') {
432 if (--buf->len > orig_len && buf->buf[buf->len - 1] == '\r')
434 buf->buf[buf->len] = '\0';
437 if (skip_if_empty && buf->len == orig_len)
443 static struct tree *empty_tree(struct repository *r)
445 return lookup_tree(r, the_hash_algo->empty_tree);
448 static int error_dirty_index(struct index_state *istate, struct replay_opts *opts)
450 if (read_index_unmerged(istate))
451 return error_resolve_conflict(_(action_name(opts)));
453 error(_("your local changes would be overwritten by %s."),
454 _(action_name(opts)));
456 if (advice_commit_before_merge)
457 advise(_("commit your changes or stash them to proceed."));
461 static void update_abort_safety_file(void)
463 struct object_id head;
465 /* Do nothing on a single-pick */
466 if (!file_exists(git_path_seq_dir()))
469 if (!get_oid("HEAD", &head))
470 write_file(git_path_abort_safety_file(), "%s", oid_to_hex(&head));
472 write_file(git_path_abort_safety_file(), "%s", "");
475 static int fast_forward_to(struct repository *r,
476 const struct object_id *to,
477 const struct object_id *from,
479 struct replay_opts *opts)
481 struct ref_transaction *transaction;
482 struct strbuf sb = STRBUF_INIT;
483 struct strbuf err = STRBUF_INIT;
485 read_index(r->index);
486 if (checkout_fast_forward(r, from, to, 1))
487 return -1; /* the callee should have complained already */
489 strbuf_addf(&sb, _("%s: fast-forward"), _(action_name(opts)));
491 transaction = ref_transaction_begin(&err);
493 ref_transaction_update(transaction, "HEAD",
494 to, unborn && !is_rebase_i(opts) ?
497 ref_transaction_commit(transaction, &err)) {
498 ref_transaction_free(transaction);
499 error("%s", err.buf);
501 strbuf_release(&err);
506 strbuf_release(&err);
507 ref_transaction_free(transaction);
508 update_abort_safety_file();
512 void append_conflicts_hint(struct index_state *istate,
513 struct strbuf *msgbuf)
517 strbuf_addch(msgbuf, '\n');
518 strbuf_commented_addf(msgbuf, "Conflicts:\n");
519 for (i = 0; i < istate->cache_nr;) {
520 const struct cache_entry *ce = istate->cache[i++];
522 strbuf_commented_addf(msgbuf, "\t%s\n", ce->name);
523 while (i < istate->cache_nr &&
524 !strcmp(ce->name, istate->cache[i]->name))
530 static int do_recursive_merge(struct repository *r,
531 struct commit *base, struct commit *next,
532 const char *base_label, const char *next_label,
533 struct object_id *head, struct strbuf *msgbuf,
534 struct replay_opts *opts)
536 struct merge_options o;
537 struct tree *result, *next_tree, *base_tree, *head_tree;
540 struct lock_file index_lock = LOCK_INIT;
542 if (hold_locked_index(&index_lock, LOCK_REPORT_ON_ERROR) < 0)
545 read_index(r->index);
547 init_merge_options(&o);
548 o.ancestor = base ? base_label : "(empty tree)";
550 o.branch2 = next ? next_label : "(empty tree)";
551 if (is_rebase_i(opts))
553 o.show_rename_progress = 1;
555 head_tree = parse_tree_indirect(head);
556 next_tree = next ? get_commit_tree(next) : empty_tree(r);
557 base_tree = base ? get_commit_tree(base) : empty_tree(r);
559 for (xopt = opts->xopts; xopt != opts->xopts + opts->xopts_nr; xopt++)
560 parse_merge_opt(&o, *xopt);
562 clean = merge_trees(&o,
564 next_tree, base_tree, &result);
565 if (is_rebase_i(opts) && clean <= 0)
566 fputs(o.obuf.buf, stdout);
567 strbuf_release(&o.obuf);
568 diff_warn_rename_limit("merge.renamelimit", o.needed_rename_limit, 0);
570 rollback_lock_file(&index_lock);
574 if (write_locked_index(r->index, &index_lock,
575 COMMIT_LOCK | SKIP_IF_UNCHANGED))
577 * TRANSLATORS: %s will be "revert", "cherry-pick" or
580 return error(_("%s: Unable to write new index file"),
581 _(action_name(opts)));
584 append_conflicts_hint(r->index, msgbuf);
589 static struct object_id *get_cache_tree_oid(struct index_state *istate)
591 if (!istate->cache_tree)
592 istate->cache_tree = cache_tree();
594 if (!cache_tree_fully_valid(istate->cache_tree))
595 if (cache_tree_update(istate, 0)) {
596 error(_("unable to update cache tree"));
600 return &istate->cache_tree->oid;
603 static int is_index_unchanged(struct repository *r)
605 struct object_id head_oid, *cache_tree_oid;
606 struct commit *head_commit;
607 struct index_state *istate = r->index;
609 if (!resolve_ref_unsafe("HEAD", RESOLVE_REF_READING, &head_oid, NULL))
610 return error(_("could not resolve HEAD commit"));
612 head_commit = lookup_commit(r, &head_oid);
615 * If head_commit is NULL, check_commit, called from
616 * lookup_commit, would have indicated that head_commit is not
617 * a commit object already. parse_commit() will return failure
618 * without further complaints in such a case. Otherwise, if
619 * the commit is invalid, parse_commit() will complain. So
620 * there is nothing for us to say here. Just return failure.
622 if (parse_commit(head_commit))
625 if (!(cache_tree_oid = get_cache_tree_oid(istate)))
628 return oideq(cache_tree_oid, get_commit_tree_oid(head_commit));
631 static int write_author_script(const char *message)
633 struct strbuf buf = STRBUF_INIT;
638 if (!*message || starts_with(message, "\n")) {
640 /* Missing 'author' line? */
641 unlink(rebase_path_author_script());
643 } else if (skip_prefix(message, "author ", &message))
645 else if ((eol = strchr(message, '\n')))
650 strbuf_addstr(&buf, "GIT_AUTHOR_NAME='");
651 while (*message && *message != '\n' && *message != '\r')
652 if (skip_prefix(message, " <", &message))
654 else if (*message != '\'')
655 strbuf_addch(&buf, *(message++));
657 strbuf_addf(&buf, "'\\%c'", *(message++));
658 strbuf_addstr(&buf, "'\nGIT_AUTHOR_EMAIL='");
659 while (*message && *message != '\n' && *message != '\r')
660 if (skip_prefix(message, "> ", &message))
662 else if (*message != '\'')
663 strbuf_addch(&buf, *(message++));
665 strbuf_addf(&buf, "'\\%c'", *(message++));
666 strbuf_addstr(&buf, "'\nGIT_AUTHOR_DATE='@");
667 while (*message && *message != '\n' && *message != '\r')
668 if (*message != '\'')
669 strbuf_addch(&buf, *(message++));
671 strbuf_addf(&buf, "'\\%c'", *(message++));
672 strbuf_addch(&buf, '\'');
673 res = write_message(buf.buf, buf.len, rebase_path_author_script(), 1);
674 strbuf_release(&buf);
679 * Take a series of KEY='VALUE' lines where VALUE part is
680 * sq-quoted, and append <KEY, VALUE> at the end of the string list
682 static int parse_key_value_squoted(char *buf, struct string_list *list)
685 struct string_list_item *item;
687 char *cp = strchr(buf, '=');
689 np = strchrnul(buf, '\n');
690 return error(_("no key present in '%.*s'"),
691 (int) (np - buf), buf);
693 np = strchrnul(cp, '\n');
695 item = string_list_append(list, buf);
697 buf = np + (*np == '\n');
701 return error(_("unable to dequote value of '%s'"),
703 item->util = xstrdup(cp);
709 * Reads and parses the state directory's "author-script" file, and sets name,
710 * email and date accordingly.
711 * Returns 0 on success, -1 if the file could not be parsed.
713 * The author script is of the format:
715 * GIT_AUTHOR_NAME='$author_name'
716 * GIT_AUTHOR_EMAIL='$author_email'
717 * GIT_AUTHOR_DATE='$author_date'
719 * where $author_name, $author_email and $author_date are quoted. We are strict
720 * with our parsing, as the file was meant to be eval'd in the old
721 * git-am.sh/git-rebase--interactive.sh scripts, and thus if the file differs
722 * from what this function expects, it is better to bail out than to do
723 * something that the user does not expect.
725 int read_author_script(const char *path, char **name, char **email, char **date,
728 struct strbuf buf = STRBUF_INIT;
729 struct string_list kv = STRING_LIST_INIT_DUP;
730 int retval = -1; /* assume failure */
731 int i, name_i = -2, email_i = -2, date_i = -2, err = 0;
733 if (strbuf_read_file(&buf, path, 256) <= 0) {
734 strbuf_release(&buf);
735 if (errno == ENOENT && allow_missing)
738 return error_errno(_("could not open '%s' for reading"),
742 if (parse_key_value_squoted(buf.buf, &kv))
745 for (i = 0; i < kv.nr; i++) {
746 if (!strcmp(kv.items[i].string, "GIT_AUTHOR_NAME")) {
748 name_i = error(_("'GIT_AUTHOR_NAME' already given"));
751 } else if (!strcmp(kv.items[i].string, "GIT_AUTHOR_EMAIL")) {
753 email_i = error(_("'GIT_AUTHOR_EMAIL' already given"));
756 } else if (!strcmp(kv.items[i].string, "GIT_AUTHOR_DATE")) {
758 date_i = error(_("'GIT_AUTHOR_DATE' already given"));
762 err = error(_("unknown variable '%s'"),
767 error(_("missing 'GIT_AUTHOR_NAME'"));
769 error(_("missing 'GIT_AUTHOR_EMAIL'"));
771 error(_("missing 'GIT_AUTHOR_DATE'"));
772 if (date_i < 0 || email_i < 0 || date_i < 0 || err)
774 *name = kv.items[name_i].util;
775 *email = kv.items[email_i].util;
776 *date = kv.items[date_i].util;
779 string_list_clear(&kv, !!retval);
780 strbuf_release(&buf);
785 * Read a GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL AND GIT_AUTHOR_DATE from a
786 * file with shell quoting into struct argv_array. Returns -1 on
787 * error, 0 otherwise.
789 static int read_env_script(struct argv_array *env)
791 char *name, *email, *date;
793 if (read_author_script(rebase_path_author_script(),
794 &name, &email, &date, 0))
797 argv_array_pushf(env, "GIT_AUTHOR_NAME=%s", name);
798 argv_array_pushf(env, "GIT_AUTHOR_EMAIL=%s", email);
799 argv_array_pushf(env, "GIT_AUTHOR_DATE=%s", date);
807 static char *get_author(const char *message)
812 a = find_commit_header(message, "author", &len);
814 return xmemdupz(a, len);
819 /* Read author-script and return an ident line (author <email> timestamp) */
820 static const char *read_author_ident(struct strbuf *buf)
822 struct strbuf out = STRBUF_INIT;
823 char *name, *email, *date;
825 if (read_author_script(rebase_path_author_script(),
826 &name, &email, &date, 0))
829 /* validate date since fmt_ident() will die() on bad value */
830 if (parse_date(date, &out)){
831 warning(_("invalid date format '%s' in '%s'"),
832 date, rebase_path_author_script());
833 strbuf_release(&out);
838 strbuf_addstr(&out, fmt_ident(name, email, date, 0));
839 strbuf_swap(buf, &out);
840 strbuf_release(&out);
847 static const char staged_changes_advice[] =
848 N_("you have staged changes in your working tree\n"
849 "If these changes are meant to be squashed into the previous commit, run:\n"
851 " git commit --amend %s\n"
853 "If they are meant to go into a new commit, run:\n"
857 "In both cases, once you're done, continue with:\n"
859 " git rebase --continue\n");
861 #define ALLOW_EMPTY (1<<0)
862 #define EDIT_MSG (1<<1)
863 #define AMEND_MSG (1<<2)
864 #define CLEANUP_MSG (1<<3)
865 #define VERIFY_MSG (1<<4)
866 #define CREATE_ROOT_COMMIT (1<<5)
868 static int run_command_silent_on_success(struct child_process *cmd)
870 struct strbuf buf = STRBUF_INIT;
873 cmd->stdout_to_stderr = 1;
874 rc = pipe_command(cmd,
880 fputs(buf.buf, stderr);
881 strbuf_release(&buf);
886 * If we are cherry-pick, and if the merge did not result in
887 * hand-editing, we will hit this commit and inherit the original
888 * author date and name.
890 * If we are revert, or if our cherry-pick results in a hand merge,
891 * we had better say that the current user is responsible for that.
893 * An exception is when run_git_commit() is called during an
894 * interactive rebase: in that case, we will want to retain the
897 static int run_git_commit(struct repository *r,
899 struct replay_opts *opts,
902 struct child_process cmd = CHILD_PROCESS_INIT;
905 if ((flags & CREATE_ROOT_COMMIT) && !(flags & AMEND_MSG)) {
906 struct strbuf msg = STRBUF_INIT, script = STRBUF_INIT;
907 const char *author = NULL;
908 struct object_id root_commit, *cache_tree_oid;
911 if (is_rebase_i(opts)) {
912 author = read_author_ident(&script);
914 strbuf_release(&script);
920 BUG("root commit without message");
922 if (!(cache_tree_oid = get_cache_tree_oid(r->index)))
926 res = strbuf_read_file(&msg, defmsg, 0);
929 res = error_errno(_("could not read '%s'"), defmsg);
931 res = commit_tree(msg.buf, msg.len, cache_tree_oid,
932 NULL, &root_commit, author,
935 strbuf_release(&msg);
936 strbuf_release(&script);
938 update_ref(NULL, "CHERRY_PICK_HEAD", &root_commit, NULL,
939 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR);
940 res = update_ref(NULL, "HEAD", &root_commit, NULL, 0,
941 UPDATE_REFS_MSG_ON_ERR);
943 return res < 0 ? error(_("writing root commit")) : 0;
948 if (is_rebase_i(opts) && read_env_script(&cmd.env_array)) {
949 const char *gpg_opt = gpg_sign_opt_quoted(opts);
951 return error(_(staged_changes_advice),
955 argv_array_push(&cmd.args, "commit");
957 if (!(flags & VERIFY_MSG))
958 argv_array_push(&cmd.args, "-n");
959 if ((flags & AMEND_MSG))
960 argv_array_push(&cmd.args, "--amend");
962 argv_array_pushf(&cmd.args, "-S%s", opts->gpg_sign);
964 argv_array_pushl(&cmd.args, "-F", defmsg, NULL);
965 else if (!(flags & EDIT_MSG))
966 argv_array_pushl(&cmd.args, "-C", "HEAD", NULL);
967 if ((flags & CLEANUP_MSG))
968 argv_array_push(&cmd.args, "--cleanup=strip");
969 if ((flags & EDIT_MSG))
970 argv_array_push(&cmd.args, "-e");
971 else if (!(flags & CLEANUP_MSG) &&
972 !opts->signoff && !opts->record_origin &&
973 git_config_get_value("commit.cleanup", &value))
974 argv_array_push(&cmd.args, "--cleanup=verbatim");
976 if ((flags & ALLOW_EMPTY))
977 argv_array_push(&cmd.args, "--allow-empty");
979 if (!(flags & EDIT_MSG))
980 argv_array_push(&cmd.args, "--allow-empty-message");
982 if (is_rebase_i(opts) && !(flags & EDIT_MSG))
983 return run_command_silent_on_success(&cmd);
985 return run_command(&cmd);
988 static int rest_is_empty(const struct strbuf *sb, int start)
993 /* Check if the rest is just whitespace and Signed-off-by's. */
994 for (i = start; i < sb->len; i++) {
995 nl = memchr(sb->buf + i, '\n', sb->len - i);
1001 if (strlen(sign_off_header) <= eol - i &&
1002 starts_with(sb->buf + i, sign_off_header)) {
1007 if (!isspace(sb->buf[i++]))
1015 * Find out if the message in the strbuf contains only whitespace and
1016 * Signed-off-by lines.
1018 int message_is_empty(const struct strbuf *sb,
1019 enum commit_msg_cleanup_mode cleanup_mode)
1021 if (cleanup_mode == COMMIT_MSG_CLEANUP_NONE && sb->len)
1023 return rest_is_empty(sb, 0);
1027 * See if the user edited the message in the editor or left what
1028 * was in the template intact
1030 int template_untouched(const struct strbuf *sb, const char *template_file,
1031 enum commit_msg_cleanup_mode cleanup_mode)
1033 struct strbuf tmpl = STRBUF_INIT;
1036 if (cleanup_mode == COMMIT_MSG_CLEANUP_NONE && sb->len)
1039 if (!template_file || strbuf_read_file(&tmpl, template_file, 0) <= 0)
1042 strbuf_stripspace(&tmpl, cleanup_mode == COMMIT_MSG_CLEANUP_ALL);
1043 if (!skip_prefix(sb->buf, tmpl.buf, &start))
1045 strbuf_release(&tmpl);
1046 return rest_is_empty(sb, start - sb->buf);
1049 int update_head_with_reflog(const struct commit *old_head,
1050 const struct object_id *new_head,
1051 const char *action, const struct strbuf *msg,
1054 struct ref_transaction *transaction;
1055 struct strbuf sb = STRBUF_INIT;
1060 strbuf_addstr(&sb, action);
1061 strbuf_addstr(&sb, ": ");
1064 nl = strchr(msg->buf, '\n');
1066 strbuf_add(&sb, msg->buf, nl + 1 - msg->buf);
1068 strbuf_addbuf(&sb, msg);
1069 strbuf_addch(&sb, '\n');
1072 transaction = ref_transaction_begin(err);
1074 ref_transaction_update(transaction, "HEAD", new_head,
1075 old_head ? &old_head->object.oid : &null_oid,
1077 ref_transaction_commit(transaction, err)) {
1080 ref_transaction_free(transaction);
1081 strbuf_release(&sb);
1086 static int run_rewrite_hook(const struct object_id *oldoid,
1087 const struct object_id *newoid)
1089 struct child_process proc = CHILD_PROCESS_INIT;
1090 const char *argv[3];
1092 struct strbuf sb = STRBUF_INIT;
1094 argv[0] = find_hook("post-rewrite");
1103 proc.stdout_to_stderr = 1;
1105 code = start_command(&proc);
1108 strbuf_addf(&sb, "%s %s\n", oid_to_hex(oldoid), oid_to_hex(newoid));
1109 sigchain_push(SIGPIPE, SIG_IGN);
1110 write_in_full(proc.in, sb.buf, sb.len);
1112 strbuf_release(&sb);
1113 sigchain_pop(SIGPIPE);
1114 return finish_command(&proc);
1117 void commit_post_rewrite(const struct commit *old_head,
1118 const struct object_id *new_head)
1120 struct notes_rewrite_cfg *cfg;
1122 cfg = init_copy_notes_for_rewrite("amend");
1124 /* we are amending, so old_head is not NULL */
1125 copy_note_for_rewrite(cfg, &old_head->object.oid, new_head);
1126 finish_copy_notes_for_rewrite(cfg, "Notes added by 'git commit --amend'");
1128 run_rewrite_hook(&old_head->object.oid, new_head);
1131 static int run_prepare_commit_msg_hook(struct repository *r,
1135 struct argv_array hook_env = ARGV_ARRAY_INIT;
1139 name = git_path_commit_editmsg();
1140 if (write_message(msg->buf, msg->len, name, 0))
1143 argv_array_pushf(&hook_env, "GIT_INDEX_FILE=%s", r->index_file);
1144 argv_array_push(&hook_env, "GIT_EDITOR=:");
1146 ret = run_hook_le(hook_env.argv, "prepare-commit-msg", name,
1147 "commit", commit, NULL);
1149 ret = run_hook_le(hook_env.argv, "prepare-commit-msg", name,
1152 ret = error(_("'prepare-commit-msg' hook failed"));
1153 argv_array_clear(&hook_env);
1158 static const char implicit_ident_advice_noconfig[] =
1159 N_("Your name and email address were configured automatically based\n"
1160 "on your username and hostname. Please check that they are accurate.\n"
1161 "You can suppress this message by setting them explicitly. Run the\n"
1162 "following command and follow the instructions in your editor to edit\n"
1163 "your configuration file:\n"
1165 " git config --global --edit\n"
1167 "After doing this, you may fix the identity used for this commit with:\n"
1169 " git commit --amend --reset-author\n");
1171 static const char implicit_ident_advice_config[] =
1172 N_("Your name and email address were configured automatically based\n"
1173 "on your username and hostname. Please check that they are accurate.\n"
1174 "You can suppress this message by setting them explicitly:\n"
1176 " git config --global user.name \"Your Name\"\n"
1177 " git config --global user.email you@example.com\n"
1179 "After doing this, you may fix the identity used for this commit with:\n"
1181 " git commit --amend --reset-author\n");
1183 static const char *implicit_ident_advice(void)
1185 char *user_config = expand_user_path("~/.gitconfig", 0);
1186 char *xdg_config = xdg_config_home("config");
1187 int config_exists = file_exists(user_config) || file_exists(xdg_config);
1193 return _(implicit_ident_advice_config);
1195 return _(implicit_ident_advice_noconfig);
1199 void print_commit_summary(struct repository *r,
1201 const struct object_id *oid,
1204 struct rev_info rev;
1205 struct commit *commit;
1206 struct strbuf format = STRBUF_INIT;
1208 struct pretty_print_context pctx = {0};
1209 struct strbuf author_ident = STRBUF_INIT;
1210 struct strbuf committer_ident = STRBUF_INIT;
1212 commit = lookup_commit(r, oid);
1214 die(_("couldn't look up newly created commit"));
1215 if (parse_commit(commit))
1216 die(_("could not parse newly created commit"));
1218 strbuf_addstr(&format, "format:%h] %s");
1220 format_commit_message(commit, "%an <%ae>", &author_ident, &pctx);
1221 format_commit_message(commit, "%cn <%ce>", &committer_ident, &pctx);
1222 if (strbuf_cmp(&author_ident, &committer_ident)) {
1223 strbuf_addstr(&format, "\n Author: ");
1224 strbuf_addbuf_percentquote(&format, &author_ident);
1226 if (flags & SUMMARY_SHOW_AUTHOR_DATE) {
1227 struct strbuf date = STRBUF_INIT;
1229 format_commit_message(commit, "%ad", &date, &pctx);
1230 strbuf_addstr(&format, "\n Date: ");
1231 strbuf_addbuf_percentquote(&format, &date);
1232 strbuf_release(&date);
1234 if (!committer_ident_sufficiently_given()) {
1235 strbuf_addstr(&format, "\n Committer: ");
1236 strbuf_addbuf_percentquote(&format, &committer_ident);
1237 if (advice_implicit_identity) {
1238 strbuf_addch(&format, '\n');
1239 strbuf_addstr(&format, implicit_ident_advice());
1242 strbuf_release(&author_ident);
1243 strbuf_release(&committer_ident);
1245 repo_init_revisions(r, &rev, prefix);
1246 setup_revisions(0, NULL, &rev, NULL);
1249 rev.diffopt.output_format =
1250 DIFF_FORMAT_SHORTSTAT | DIFF_FORMAT_SUMMARY;
1252 rev.verbose_header = 1;
1253 rev.show_root_diff = 1;
1254 get_commit_format(format.buf, &rev);
1255 rev.always_show_header = 0;
1256 rev.diffopt.detect_rename = DIFF_DETECT_RENAME;
1257 rev.diffopt.break_opt = 0;
1258 diff_setup_done(&rev.diffopt);
1260 head = resolve_ref_unsafe("HEAD", 0, NULL, NULL);
1262 die_errno(_("unable to resolve HEAD after creating commit"));
1263 if (!strcmp(head, "HEAD"))
1264 head = _("detached HEAD");
1266 skip_prefix(head, "refs/heads/", &head);
1267 printf("[%s%s ", head, (flags & SUMMARY_INITIAL_COMMIT) ?
1268 _(" (root-commit)") : "");
1270 if (!log_tree_commit(&rev, commit)) {
1271 rev.always_show_header = 1;
1272 rev.use_terminator = 1;
1273 log_tree_commit(&rev, commit);
1276 strbuf_release(&format);
1279 static int parse_head(struct repository *r, struct commit **head)
1281 struct commit *current_head;
1282 struct object_id oid;
1284 if (get_oid("HEAD", &oid)) {
1285 current_head = NULL;
1287 current_head = lookup_commit_reference(r, &oid);
1289 return error(_("could not parse HEAD"));
1290 if (!oideq(&oid, ¤t_head->object.oid)) {
1291 warning(_("HEAD %s is not a commit!"),
1294 if (parse_commit(current_head))
1295 return error(_("could not parse HEAD commit"));
1297 *head = current_head;
1303 * Try to commit without forking 'git commit'. In some cases we need
1304 * to run 'git commit' to display an error message
1307 * -1 - error unable to commit
1309 * 1 - run 'git commit'
1311 static int try_to_commit(struct repository *r,
1312 struct strbuf *msg, const char *author,
1313 struct replay_opts *opts, unsigned int flags,
1314 struct object_id *oid)
1316 struct object_id tree;
1317 struct commit *current_head;
1318 struct commit_list *parents = NULL;
1319 struct commit_extra_header *extra = NULL;
1320 struct strbuf err = STRBUF_INIT;
1321 struct strbuf commit_msg = STRBUF_INIT;
1322 char *amend_author = NULL;
1323 const char *hook_commit = NULL;
1324 enum commit_msg_cleanup_mode cleanup;
1327 if (parse_head(r, ¤t_head))
1330 if (flags & AMEND_MSG) {
1331 const char *exclude_gpgsig[] = { "gpgsig", NULL };
1332 const char *out_enc = get_commit_output_encoding();
1333 const char *message = logmsg_reencode(current_head, NULL,
1337 const char *orig_message = NULL;
1339 find_commit_subject(message, &orig_message);
1341 strbuf_addstr(msg, orig_message);
1342 hook_commit = "HEAD";
1344 author = amend_author = get_author(message);
1345 unuse_commit_buffer(current_head, message);
1347 res = error(_("unable to parse commit author"));
1350 parents = copy_commit_list(current_head->parents);
1351 extra = read_commit_extra_headers(current_head, exclude_gpgsig);
1352 } else if (current_head) {
1353 commit_list_insert(current_head, &parents);
1356 if (write_index_as_tree(&tree, r->index, r->index_file, 0, NULL)) {
1357 res = error(_("git write-tree failed to write a tree"));
1361 if (!(flags & ALLOW_EMPTY) && oideq(current_head ?
1362 get_commit_tree_oid(current_head) :
1363 the_hash_algo->empty_tree, &tree)) {
1364 res = 1; /* run 'git commit' to display error message */
1368 if (find_hook("prepare-commit-msg")) {
1369 res = run_prepare_commit_msg_hook(r, msg, hook_commit);
1372 if (strbuf_read_file(&commit_msg, git_path_commit_editmsg(),
1374 res = error_errno(_("unable to read commit message "
1376 git_path_commit_editmsg());
1382 cleanup = (flags & CLEANUP_MSG) ? COMMIT_MSG_CLEANUP_ALL :
1383 opts->default_msg_cleanup;
1385 if (cleanup != COMMIT_MSG_CLEANUP_NONE)
1386 strbuf_stripspace(msg, cleanup == COMMIT_MSG_CLEANUP_ALL);
1387 if ((flags & EDIT_MSG) && message_is_empty(msg, cleanup)) {
1388 res = 1; /* run 'git commit' to display error message */
1394 if (commit_tree_extended(msg->buf, msg->len, &tree, parents,
1395 oid, author, opts->gpg_sign, extra)) {
1396 res = error(_("failed to write commit object"));
1400 if (update_head_with_reflog(current_head, oid,
1401 getenv("GIT_REFLOG_ACTION"), msg, &err)) {
1402 res = error("%s", err.buf);
1406 if (flags & AMEND_MSG)
1407 commit_post_rewrite(current_head, oid);
1410 free_commit_extra_headers(extra);
1411 strbuf_release(&err);
1412 strbuf_release(&commit_msg);
1418 static int do_commit(struct repository *r,
1419 const char *msg_file, const char *author,
1420 struct replay_opts *opts, unsigned int flags)
1424 if (!(flags & EDIT_MSG) && !(flags & VERIFY_MSG) &&
1425 !(flags & CREATE_ROOT_COMMIT)) {
1426 struct object_id oid;
1427 struct strbuf sb = STRBUF_INIT;
1429 if (msg_file && strbuf_read_file(&sb, msg_file, 2048) < 0)
1430 return error_errno(_("unable to read commit message "
1434 res = try_to_commit(r, msg_file ? &sb : NULL,
1435 author, opts, flags, &oid);
1436 strbuf_release(&sb);
1438 unlink(git_path_cherry_pick_head(r));
1439 unlink(git_path_merge_msg(r));
1440 if (!is_rebase_i(opts))
1441 print_commit_summary(r, NULL, &oid,
1442 SUMMARY_SHOW_AUTHOR_DATE);
1447 return run_git_commit(r, msg_file, opts, flags);
1452 static int is_original_commit_empty(struct commit *commit)
1454 const struct object_id *ptree_oid;
1456 if (parse_commit(commit))
1457 return error(_("could not parse commit %s"),
1458 oid_to_hex(&commit->object.oid));
1459 if (commit->parents) {
1460 struct commit *parent = commit->parents->item;
1461 if (parse_commit(parent))
1462 return error(_("could not parse parent commit %s"),
1463 oid_to_hex(&parent->object.oid));
1464 ptree_oid = get_commit_tree_oid(parent);
1466 ptree_oid = the_hash_algo->empty_tree; /* commit is root */
1469 return oideq(ptree_oid, get_commit_tree_oid(commit));
1473 * Do we run "git commit" with "--allow-empty"?
1475 static int allow_empty(struct repository *r,
1476 struct replay_opts *opts,
1477 struct commit *commit)
1479 int index_unchanged, empty_commit;
1484 * (1) we do not allow empty at all and error out.
1486 * (2) we allow ones that were initially empty, but
1487 * forbid the ones that become empty;
1489 * (3) we allow both.
1491 if (!opts->allow_empty)
1492 return 0; /* let "git commit" barf as necessary */
1494 index_unchanged = is_index_unchanged(r);
1495 if (index_unchanged < 0)
1496 return index_unchanged;
1497 if (!index_unchanged)
1498 return 0; /* we do not have to say --allow-empty */
1500 if (opts->keep_redundant_commits)
1503 empty_commit = is_original_commit_empty(commit);
1504 if (empty_commit < 0)
1505 return empty_commit;
1515 } todo_command_info[] = {
1532 static const char *command_to_string(const enum todo_command command)
1534 if (command < TODO_COMMENT)
1535 return todo_command_info[command].str;
1536 die(_("unknown command: %d"), command);
1539 static char command_to_char(const enum todo_command command)
1541 if (command < TODO_COMMENT && todo_command_info[command].c)
1542 return todo_command_info[command].c;
1543 return comment_line_char;
1546 static int is_noop(const enum todo_command command)
1548 return TODO_NOOP <= command;
1551 static int is_fixup(enum todo_command command)
1553 return command == TODO_FIXUP || command == TODO_SQUASH;
1556 /* Does this command create a (non-merge) commit? */
1557 static int is_pick_or_similar(enum todo_command command)
1572 static int update_squash_messages(struct repository *r,
1573 enum todo_command command,
1574 struct commit *commit,
1575 struct replay_opts *opts)
1577 struct strbuf buf = STRBUF_INIT;
1579 const char *message, *body;
1581 if (opts->current_fixup_count > 0) {
1582 struct strbuf header = STRBUF_INIT;
1585 if (strbuf_read_file(&buf, rebase_path_squash_msg(), 9) <= 0)
1586 return error(_("could not read '%s'"),
1587 rebase_path_squash_msg());
1589 eol = buf.buf[0] != comment_line_char ?
1590 buf.buf : strchrnul(buf.buf, '\n');
1592 strbuf_addf(&header, "%c ", comment_line_char);
1593 strbuf_addf(&header, _("This is a combination of %d commits."),
1594 opts->current_fixup_count + 2);
1595 strbuf_splice(&buf, 0, eol - buf.buf, header.buf, header.len);
1596 strbuf_release(&header);
1598 struct object_id head;
1599 struct commit *head_commit;
1600 const char *head_message, *body;
1602 if (get_oid("HEAD", &head))
1603 return error(_("need a HEAD to fixup"));
1604 if (!(head_commit = lookup_commit_reference(r, &head)))
1605 return error(_("could not read HEAD"));
1606 if (!(head_message = get_commit_buffer(head_commit, NULL)))
1607 return error(_("could not read HEAD's commit message"));
1609 find_commit_subject(head_message, &body);
1610 if (write_message(body, strlen(body),
1611 rebase_path_fixup_msg(), 0)) {
1612 unuse_commit_buffer(head_commit, head_message);
1613 return error(_("cannot write '%s'"),
1614 rebase_path_fixup_msg());
1617 strbuf_addf(&buf, "%c ", comment_line_char);
1618 strbuf_addf(&buf, _("This is a combination of %d commits."), 2);
1619 strbuf_addf(&buf, "\n%c ", comment_line_char);
1620 strbuf_addstr(&buf, _("This is the 1st commit message:"));
1621 strbuf_addstr(&buf, "\n\n");
1622 strbuf_addstr(&buf, body);
1624 unuse_commit_buffer(head_commit, head_message);
1627 if (!(message = get_commit_buffer(commit, NULL)))
1628 return error(_("could not read commit message of %s"),
1629 oid_to_hex(&commit->object.oid));
1630 find_commit_subject(message, &body);
1632 if (command == TODO_SQUASH) {
1633 unlink(rebase_path_fixup_msg());
1634 strbuf_addf(&buf, "\n%c ", comment_line_char);
1635 strbuf_addf(&buf, _("This is the commit message #%d:"),
1636 ++opts->current_fixup_count + 1);
1637 strbuf_addstr(&buf, "\n\n");
1638 strbuf_addstr(&buf, body);
1639 } else if (command == TODO_FIXUP) {
1640 strbuf_addf(&buf, "\n%c ", comment_line_char);
1641 strbuf_addf(&buf, _("The commit message #%d will be skipped:"),
1642 ++opts->current_fixup_count + 1);
1643 strbuf_addstr(&buf, "\n\n");
1644 strbuf_add_commented_lines(&buf, body, strlen(body));
1646 return error(_("unknown command: %d"), command);
1647 unuse_commit_buffer(commit, message);
1649 res = write_message(buf.buf, buf.len, rebase_path_squash_msg(), 0);
1650 strbuf_release(&buf);
1653 strbuf_addf(&opts->current_fixups, "%s%s %s",
1654 opts->current_fixups.len ? "\n" : "",
1655 command_to_string(command),
1656 oid_to_hex(&commit->object.oid));
1657 res = write_message(opts->current_fixups.buf,
1658 opts->current_fixups.len,
1659 rebase_path_current_fixups(), 0);
1665 static void flush_rewritten_pending(void) {
1666 struct strbuf buf = STRBUF_INIT;
1667 struct object_id newoid;
1670 if (strbuf_read_file(&buf, rebase_path_rewritten_pending(), (GIT_MAX_HEXSZ + 1) * 2) > 0 &&
1671 !get_oid("HEAD", &newoid) &&
1672 (out = fopen_or_warn(rebase_path_rewritten_list(), "a"))) {
1673 char *bol = buf.buf, *eol;
1676 eol = strchrnul(bol, '\n');
1677 fprintf(out, "%.*s %s\n", (int)(eol - bol),
1678 bol, oid_to_hex(&newoid));
1684 unlink(rebase_path_rewritten_pending());
1686 strbuf_release(&buf);
1689 static void record_in_rewritten(struct object_id *oid,
1690 enum todo_command next_command) {
1691 FILE *out = fopen_or_warn(rebase_path_rewritten_pending(), "a");
1696 fprintf(out, "%s\n", oid_to_hex(oid));
1699 if (!is_fixup(next_command))
1700 flush_rewritten_pending();
1703 static int do_pick_commit(struct repository *r,
1704 enum todo_command command,
1705 struct commit *commit,
1706 struct replay_opts *opts,
1709 unsigned int flags = opts->edit ? EDIT_MSG : 0;
1710 const char *msg_file = opts->edit ? NULL : git_path_merge_msg(r);
1711 struct object_id head;
1712 struct commit *base, *next, *parent;
1713 const char *base_label, *next_label;
1714 char *author = NULL;
1715 struct commit_message msg = { NULL, NULL, NULL, NULL };
1716 struct strbuf msgbuf = STRBUF_INIT;
1717 int res, unborn = 0, allow;
1719 if (opts->no_commit) {
1721 * We do not intend to commit immediately. We just want to
1722 * merge the differences in, so let's compute the tree
1723 * that represents the "current" state for merge-recursive
1726 if (write_index_as_tree(&head, r->index, r->index_file, 0, NULL))
1727 return error(_("your index file is unmerged."));
1729 unborn = get_oid("HEAD", &head);
1730 /* Do we want to generate a root commit? */
1731 if (is_pick_or_similar(command) && opts->have_squash_onto &&
1732 oideq(&head, &opts->squash_onto)) {
1733 if (is_fixup(command))
1734 return error(_("cannot fixup root commit"));
1735 flags |= CREATE_ROOT_COMMIT;
1738 oidcpy(&head, the_hash_algo->empty_tree);
1739 if (index_differs_from(r, unborn ? empty_tree_oid_hex() : "HEAD",
1741 return error_dirty_index(r->index, opts);
1743 discard_index(r->index);
1745 if (!commit->parents)
1747 else if (commit->parents->next) {
1748 /* Reverting or cherry-picking a merge commit */
1750 struct commit_list *p;
1752 if (!opts->mainline)
1753 return error(_("commit %s is a merge but no -m option was given."),
1754 oid_to_hex(&commit->object.oid));
1756 for (cnt = 1, p = commit->parents;
1757 cnt != opts->mainline && p;
1760 if (cnt != opts->mainline || !p)
1761 return error(_("commit %s does not have parent %d"),
1762 oid_to_hex(&commit->object.oid), opts->mainline);
1764 } else if (0 < opts->mainline)
1765 return error(_("mainline was specified but commit %s is not a merge."),
1766 oid_to_hex(&commit->object.oid));
1768 parent = commit->parents->item;
1770 if (get_message(commit, &msg) != 0)
1771 return error(_("cannot get commit message for %s"),
1772 oid_to_hex(&commit->object.oid));
1774 if (opts->allow_ff && !is_fixup(command) &&
1775 ((parent && oideq(&parent->object.oid, &head)) ||
1776 (!parent && unborn))) {
1777 if (is_rebase_i(opts))
1778 write_author_script(msg.message);
1779 res = fast_forward_to(r, &commit->object.oid, &head, unborn,
1781 if (res || command != TODO_REWORD)
1783 flags |= EDIT_MSG | AMEND_MSG | VERIFY_MSG;
1785 goto fast_forward_edit;
1787 if (parent && parse_commit(parent) < 0)
1788 /* TRANSLATORS: The first %s will be a "todo" command like
1789 "revert" or "pick", the second %s a SHA1. */
1790 return error(_("%s: cannot parse parent commit %s"),
1791 command_to_string(command),
1792 oid_to_hex(&parent->object.oid));
1795 * "commit" is an existing commit. We would want to apply
1796 * the difference it introduces since its first parent "prev"
1797 * on top of the current HEAD if we are cherry-pick. Or the
1798 * reverse of it if we are revert.
1801 if (command == TODO_REVERT) {
1803 base_label = msg.label;
1805 next_label = msg.parent_label;
1806 strbuf_addstr(&msgbuf, "Revert \"");
1807 strbuf_addstr(&msgbuf, msg.subject);
1808 strbuf_addstr(&msgbuf, "\"\n\nThis reverts commit ");
1809 strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1811 if (commit->parents && commit->parents->next) {
1812 strbuf_addstr(&msgbuf, ", reversing\nchanges made to ");
1813 strbuf_addstr(&msgbuf, oid_to_hex(&parent->object.oid));
1815 strbuf_addstr(&msgbuf, ".\n");
1820 base_label = msg.parent_label;
1822 next_label = msg.label;
1824 /* Append the commit log message to msgbuf. */
1825 if (find_commit_subject(msg.message, &p))
1826 strbuf_addstr(&msgbuf, p);
1828 if (opts->record_origin) {
1829 strbuf_complete_line(&msgbuf);
1830 if (!has_conforming_footer(&msgbuf, NULL, 0))
1831 strbuf_addch(&msgbuf, '\n');
1832 strbuf_addstr(&msgbuf, cherry_picked_prefix);
1833 strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1834 strbuf_addstr(&msgbuf, ")\n");
1836 if (!is_fixup(command))
1837 author = get_author(msg.message);
1840 if (command == TODO_REWORD)
1841 flags |= EDIT_MSG | VERIFY_MSG;
1842 else if (is_fixup(command)) {
1843 if (update_squash_messages(r, command, commit, opts))
1847 msg_file = rebase_path_squash_msg();
1848 else if (file_exists(rebase_path_fixup_msg())) {
1849 flags |= CLEANUP_MSG;
1850 msg_file = rebase_path_fixup_msg();
1852 const char *dest = git_path_squash_msg(r);
1854 if (copy_file(dest, rebase_path_squash_msg(), 0666))
1855 return error(_("could not rename '%s' to '%s'"),
1856 rebase_path_squash_msg(), dest);
1857 unlink(git_path_merge_msg(r));
1863 if (opts->signoff && !is_fixup(command))
1864 append_signoff(&msgbuf, 0, 0);
1866 if (is_rebase_i(opts) && write_author_script(msg.message) < 0)
1868 else if (!opts->strategy || !strcmp(opts->strategy, "recursive") || command == TODO_REVERT) {
1869 res = do_recursive_merge(r, base, next, base_label, next_label,
1870 &head, &msgbuf, opts);
1874 res |= write_message(msgbuf.buf, msgbuf.len,
1875 git_path_merge_msg(r), 0);
1877 struct commit_list *common = NULL;
1878 struct commit_list *remotes = NULL;
1880 res = write_message(msgbuf.buf, msgbuf.len,
1881 git_path_merge_msg(r), 0);
1883 commit_list_insert(base, &common);
1884 commit_list_insert(next, &remotes);
1885 res |= try_merge_command(r, opts->strategy,
1886 opts->xopts_nr, (const char **)opts->xopts,
1887 common, oid_to_hex(&head), remotes);
1888 free_commit_list(common);
1889 free_commit_list(remotes);
1891 strbuf_release(&msgbuf);
1894 * If the merge was clean or if it failed due to conflict, we write
1895 * CHERRY_PICK_HEAD for the subsequent invocation of commit to use.
1896 * However, if the merge did not even start, then we don't want to
1899 if (command == TODO_PICK && !opts->no_commit && (res == 0 || res == 1) &&
1900 update_ref(NULL, "CHERRY_PICK_HEAD", &commit->object.oid, NULL,
1901 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1903 if (command == TODO_REVERT && ((opts->no_commit && res == 0) || res == 1) &&
1904 update_ref(NULL, "REVERT_HEAD", &commit->object.oid, NULL,
1905 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1909 error(command == TODO_REVERT
1910 ? _("could not revert %s... %s")
1911 : _("could not apply %s... %s"),
1912 short_commit_name(commit), msg.subject);
1913 print_advice(r, res == 1, opts);
1914 repo_rerere(r, opts->allow_rerere_auto);
1918 allow = allow_empty(r, opts, commit);
1923 flags |= ALLOW_EMPTY;
1924 if (!opts->no_commit) {
1926 if (author || command == TODO_REVERT || (flags & AMEND_MSG))
1927 res = do_commit(r, msg_file, author, opts, flags);
1929 res = error(_("unable to parse commit author"));
1932 if (!res && final_fixup) {
1933 unlink(rebase_path_fixup_msg());
1934 unlink(rebase_path_squash_msg());
1935 unlink(rebase_path_current_fixups());
1936 strbuf_reset(&opts->current_fixups);
1937 opts->current_fixup_count = 0;
1941 free_message(commit, &msg);
1943 update_abort_safety_file();
1948 static int prepare_revs(struct replay_opts *opts)
1951 * picking (but not reverting) ranges (but not individual revisions)
1952 * should be done in reverse
1954 if (opts->action == REPLAY_PICK && !opts->revs->no_walk)
1955 opts->revs->reverse ^= 1;
1957 if (prepare_revision_walk(opts->revs))
1958 return error(_("revision walk setup failed"));
1963 static int read_and_refresh_cache(struct repository *r,
1964 struct replay_opts *opts)
1966 struct lock_file index_lock = LOCK_INIT;
1967 int index_fd = hold_locked_index(&index_lock, 0);
1968 if (read_index(r->index) < 0) {
1969 rollback_lock_file(&index_lock);
1970 return error(_("git %s: failed to read the index"),
1971 _(action_name(opts)));
1973 refresh_index(r->index, REFRESH_QUIET|REFRESH_UNMERGED, NULL, NULL, NULL);
1974 if (index_fd >= 0) {
1975 if (write_locked_index(r->index, &index_lock,
1976 COMMIT_LOCK | SKIP_IF_UNCHANGED)) {
1977 return error(_("git %s: failed to refresh the index"),
1978 _(action_name(opts)));
1984 enum todo_item_flags {
1985 TODO_EDIT_MERGE_MSG = 1
1988 void todo_list_release(struct todo_list *todo_list)
1990 strbuf_release(&todo_list->buf);
1991 FREE_AND_NULL(todo_list->items);
1992 todo_list->nr = todo_list->alloc = 0;
1995 static struct todo_item *append_new_todo(struct todo_list *todo_list)
1997 ALLOC_GROW(todo_list->items, todo_list->nr + 1, todo_list->alloc);
1998 return todo_list->items + todo_list->nr++;
2001 const char *todo_item_get_arg(struct todo_list *todo_list,
2002 struct todo_item *item)
2004 return todo_list->buf.buf + item->arg_offset;
2007 static int parse_insn_line(struct repository *r, struct todo_item *item,
2008 const char *buf, const char *bol, char *eol)
2010 struct object_id commit_oid;
2011 char *end_of_object_name;
2012 int i, saved, status, padding;
2017 bol += strspn(bol, " \t");
2019 if (bol == eol || *bol == '\r' || *bol == comment_line_char) {
2020 item->command = TODO_COMMENT;
2021 item->commit = NULL;
2022 item->arg_offset = bol - buf;
2023 item->arg_len = eol - bol;
2027 for (i = 0; i < TODO_COMMENT; i++)
2028 if (skip_prefix(bol, todo_command_info[i].str, &bol)) {
2031 } else if ((bol + 1 == eol || bol[1] == ' ') &&
2032 *bol == todo_command_info[i].c) {
2037 if (i >= TODO_COMMENT)
2040 /* Eat up extra spaces/ tabs before object name */
2041 padding = strspn(bol, " \t");
2044 if (item->command == TODO_NOOP || item->command == TODO_BREAK) {
2046 return error(_("%s does not accept arguments: '%s'"),
2047 command_to_string(item->command), bol);
2048 item->commit = NULL;
2049 item->arg_offset = bol - buf;
2050 item->arg_len = eol - bol;
2055 return error(_("missing arguments for %s"),
2056 command_to_string(item->command));
2058 if (item->command == TODO_EXEC || item->command == TODO_LABEL ||
2059 item->command == TODO_RESET) {
2060 item->commit = NULL;
2061 item->arg_offset = bol - buf;
2062 item->arg_len = (int)(eol - bol);
2066 if (item->command == TODO_MERGE) {
2067 if (skip_prefix(bol, "-C", &bol))
2068 bol += strspn(bol, " \t");
2069 else if (skip_prefix(bol, "-c", &bol)) {
2070 bol += strspn(bol, " \t");
2071 item->flags |= TODO_EDIT_MERGE_MSG;
2073 item->flags |= TODO_EDIT_MERGE_MSG;
2074 item->commit = NULL;
2075 item->arg_offset = bol - buf;
2076 item->arg_len = (int)(eol - bol);
2081 end_of_object_name = (char *) bol + strcspn(bol, " \t\n");
2082 saved = *end_of_object_name;
2083 *end_of_object_name = '\0';
2084 status = get_oid(bol, &commit_oid);
2085 *end_of_object_name = saved;
2087 bol = end_of_object_name + strspn(end_of_object_name, " \t");
2088 item->arg_offset = bol - buf;
2089 item->arg_len = (int)(eol - bol);
2094 item->commit = lookup_commit_reference(r, &commit_oid);
2095 return !item->commit;
2098 int todo_list_parse_insn_buffer(struct repository *r, char *buf,
2099 struct todo_list *todo_list)
2101 struct todo_item *item;
2102 char *p = buf, *next_p;
2103 int i, res = 0, fixup_okay = file_exists(rebase_path_done());
2105 todo_list->current = todo_list->nr = 0;
2107 for (i = 1; *p; i++, p = next_p) {
2108 char *eol = strchrnul(p, '\n');
2110 next_p = *eol ? eol + 1 /* skip LF */ : eol;
2112 if (p != eol && eol[-1] == '\r')
2113 eol--; /* strip Carriage Return */
2115 item = append_new_todo(todo_list);
2116 item->offset_in_buf = p - todo_list->buf.buf;
2117 if (parse_insn_line(r, item, buf, p, eol)) {
2118 res = error(_("invalid line %d: %.*s"),
2119 i, (int)(eol - p), p);
2120 item->command = TODO_COMMENT + 1;
2121 item->arg_offset = p - buf;
2122 item->arg_len = (int)(eol - p);
2123 item->commit = NULL;
2128 else if (is_fixup(item->command))
2129 return error(_("cannot '%s' without a previous commit"),
2130 command_to_string(item->command));
2131 else if (!is_noop(item->command))
2138 static int count_commands(struct todo_list *todo_list)
2142 for (i = 0; i < todo_list->nr; i++)
2143 if (todo_list->items[i].command != TODO_COMMENT)
2149 static int get_item_line_offset(struct todo_list *todo_list, int index)
2151 return index < todo_list->nr ?
2152 todo_list->items[index].offset_in_buf : todo_list->buf.len;
2155 static const char *get_item_line(struct todo_list *todo_list, int index)
2157 return todo_list->buf.buf + get_item_line_offset(todo_list, index);
2160 static int get_item_line_length(struct todo_list *todo_list, int index)
2162 return get_item_line_offset(todo_list, index + 1)
2163 - get_item_line_offset(todo_list, index);
2166 static ssize_t strbuf_read_file_or_whine(struct strbuf *sb, const char *path)
2171 fd = open(path, O_RDONLY);
2173 return error_errno(_("could not open '%s'"), path);
2174 len = strbuf_read(sb, fd, 0);
2177 return error(_("could not read '%s'."), path);
2181 static int read_populate_todo(struct repository *r,
2182 struct todo_list *todo_list,
2183 struct replay_opts *opts)
2186 const char *todo_file = get_todo_path(opts);
2189 strbuf_reset(&todo_list->buf);
2190 if (strbuf_read_file_or_whine(&todo_list->buf, todo_file) < 0)
2193 res = stat(todo_file, &st);
2195 return error(_("could not stat '%s'"), todo_file);
2196 fill_stat_data(&todo_list->stat, &st);
2198 res = todo_list_parse_insn_buffer(r, todo_list->buf.buf, todo_list);
2200 if (is_rebase_i(opts))
2201 return error(_("please fix this using "
2202 "'git rebase --edit-todo'."));
2203 return error(_("unusable instruction sheet: '%s'"), todo_file);
2206 if (!todo_list->nr &&
2207 (!is_rebase_i(opts) || !file_exists(rebase_path_done())))
2208 return error(_("no commits parsed."));
2210 if (!is_rebase_i(opts)) {
2211 enum todo_command valid =
2212 opts->action == REPLAY_PICK ? TODO_PICK : TODO_REVERT;
2215 for (i = 0; i < todo_list->nr; i++)
2216 if (valid == todo_list->items[i].command)
2218 else if (valid == TODO_PICK)
2219 return error(_("cannot cherry-pick during a revert."));
2221 return error(_("cannot revert during a cherry-pick."));
2224 if (is_rebase_i(opts)) {
2225 struct todo_list done = TODO_LIST_INIT;
2226 FILE *f = fopen_or_warn(rebase_path_msgtotal(), "w");
2228 if (strbuf_read_file(&done.buf, rebase_path_done(), 0) > 0 &&
2229 !todo_list_parse_insn_buffer(r, done.buf.buf, &done))
2230 todo_list->done_nr = count_commands(&done);
2232 todo_list->done_nr = 0;
2234 todo_list->total_nr = todo_list->done_nr
2235 + count_commands(todo_list);
2236 todo_list_release(&done);
2239 fprintf(f, "%d\n", todo_list->total_nr);
2247 static int git_config_string_dup(char **dest,
2248 const char *var, const char *value)
2251 return config_error_nonbool(var);
2253 *dest = xstrdup(value);
2257 static int populate_opts_cb(const char *key, const char *value, void *data)
2259 struct replay_opts *opts = data;
2264 else if (!strcmp(key, "options.no-commit"))
2265 opts->no_commit = git_config_bool_or_int(key, value, &error_flag);
2266 else if (!strcmp(key, "options.edit"))
2267 opts->edit = git_config_bool_or_int(key, value, &error_flag);
2268 else if (!strcmp(key, "options.signoff"))
2269 opts->signoff = git_config_bool_or_int(key, value, &error_flag);
2270 else if (!strcmp(key, "options.record-origin"))
2271 opts->record_origin = git_config_bool_or_int(key, value, &error_flag);
2272 else if (!strcmp(key, "options.allow-ff"))
2273 opts->allow_ff = git_config_bool_or_int(key, value, &error_flag);
2274 else if (!strcmp(key, "options.mainline"))
2275 opts->mainline = git_config_int(key, value);
2276 else if (!strcmp(key, "options.strategy"))
2277 git_config_string_dup(&opts->strategy, key, value);
2278 else if (!strcmp(key, "options.gpg-sign"))
2279 git_config_string_dup(&opts->gpg_sign, key, value);
2280 else if (!strcmp(key, "options.strategy-option")) {
2281 ALLOC_GROW(opts->xopts, opts->xopts_nr + 1, opts->xopts_alloc);
2282 opts->xopts[opts->xopts_nr++] = xstrdup(value);
2283 } else if (!strcmp(key, "options.allow-rerere-auto"))
2284 opts->allow_rerere_auto =
2285 git_config_bool_or_int(key, value, &error_flag) ?
2286 RERERE_AUTOUPDATE : RERERE_NOAUTOUPDATE;
2288 return error(_("invalid key: %s"), key);
2291 return error(_("invalid value for %s: %s"), key, value);
2296 void parse_strategy_opts(struct replay_opts *opts, char *raw_opts)
2299 char *strategy_opts_string = raw_opts;
2301 if (*strategy_opts_string == ' ')
2302 strategy_opts_string++;
2304 opts->xopts_nr = split_cmdline(strategy_opts_string,
2305 (const char ***)&opts->xopts);
2306 for (i = 0; i < opts->xopts_nr; i++) {
2307 const char *arg = opts->xopts[i];
2309 skip_prefix(arg, "--", &arg);
2310 opts->xopts[i] = xstrdup(arg);
2314 static void read_strategy_opts(struct replay_opts *opts, struct strbuf *buf)
2317 if (!read_oneliner(buf, rebase_path_strategy(), 0))
2319 opts->strategy = strbuf_detach(buf, NULL);
2320 if (!read_oneliner(buf, rebase_path_strategy_opts(), 0))
2323 parse_strategy_opts(opts, buf->buf);
2326 static int read_populate_opts(struct replay_opts *opts)
2328 if (is_rebase_i(opts)) {
2329 struct strbuf buf = STRBUF_INIT;
2331 if (read_oneliner(&buf, rebase_path_gpg_sign_opt(), 1)) {
2332 if (!starts_with(buf.buf, "-S"))
2335 free(opts->gpg_sign);
2336 opts->gpg_sign = xstrdup(buf.buf + 2);
2341 if (read_oneliner(&buf, rebase_path_allow_rerere_autoupdate(), 1)) {
2342 if (!strcmp(buf.buf, "--rerere-autoupdate"))
2343 opts->allow_rerere_auto = RERERE_AUTOUPDATE;
2344 else if (!strcmp(buf.buf, "--no-rerere-autoupdate"))
2345 opts->allow_rerere_auto = RERERE_NOAUTOUPDATE;
2349 if (file_exists(rebase_path_verbose()))
2352 if (file_exists(rebase_path_signoff())) {
2357 read_strategy_opts(opts, &buf);
2358 strbuf_release(&buf);
2360 if (read_oneliner(&opts->current_fixups,
2361 rebase_path_current_fixups(), 1)) {
2362 const char *p = opts->current_fixups.buf;
2363 opts->current_fixup_count = 1;
2364 while ((p = strchr(p, '\n'))) {
2365 opts->current_fixup_count++;
2370 if (read_oneliner(&buf, rebase_path_squash_onto(), 0)) {
2371 if (get_oid_hex(buf.buf, &opts->squash_onto) < 0)
2372 return error(_("unusable squash-onto"));
2373 opts->have_squash_onto = 1;
2379 if (!file_exists(git_path_opts_file()))
2382 * The function git_parse_source(), called from git_config_from_file(),
2383 * may die() in case of a syntactically incorrect file. We do not care
2384 * about this case, though, because we wrote that file ourselves, so we
2385 * are pretty certain that it is syntactically correct.
2387 if (git_config_from_file(populate_opts_cb, git_path_opts_file(), opts) < 0)
2388 return error(_("malformed options sheet: '%s'"),
2389 git_path_opts_file());
2393 static void write_strategy_opts(struct replay_opts *opts)
2396 struct strbuf buf = STRBUF_INIT;
2398 for (i = 0; i < opts->xopts_nr; ++i)
2399 strbuf_addf(&buf, " --%s", opts->xopts[i]);
2401 write_file(rebase_path_strategy_opts(), "%s\n", buf.buf);
2402 strbuf_release(&buf);
2405 int write_basic_state(struct replay_opts *opts, const char *head_name,
2406 const char *onto, const char *orig_head)
2408 const char *quiet = getenv("GIT_QUIET");
2411 write_file(rebase_path_head_name(), "%s\n", head_name);
2413 write_file(rebase_path_onto(), "%s\n", onto);
2415 write_file(rebase_path_orig_head(), "%s\n", orig_head);
2418 write_file(rebase_path_quiet(), "%s\n", quiet);
2420 write_file(rebase_path_quiet(), "\n");
2423 write_file(rebase_path_verbose(), "%s", "");
2425 write_file(rebase_path_strategy(), "%s\n", opts->strategy);
2426 if (opts->xopts_nr > 0)
2427 write_strategy_opts(opts);
2429 if (opts->allow_rerere_auto == RERERE_AUTOUPDATE)
2430 write_file(rebase_path_allow_rerere_autoupdate(), "--rerere-autoupdate\n");
2431 else if (opts->allow_rerere_auto == RERERE_NOAUTOUPDATE)
2432 write_file(rebase_path_allow_rerere_autoupdate(), "--no-rerere-autoupdate\n");
2435 write_file(rebase_path_gpg_sign_opt(), "-S%s\n", opts->gpg_sign);
2437 write_file(rebase_path_signoff(), "--signoff\n");
2442 static int walk_revs_populate_todo(struct todo_list *todo_list,
2443 struct replay_opts *opts)
2445 enum todo_command command = opts->action == REPLAY_PICK ?
2446 TODO_PICK : TODO_REVERT;
2447 const char *command_string = todo_command_info[command].str;
2448 struct commit *commit;
2450 if (prepare_revs(opts))
2453 while ((commit = get_revision(opts->revs))) {
2454 struct todo_item *item = append_new_todo(todo_list);
2455 const char *commit_buffer = get_commit_buffer(commit, NULL);
2456 const char *subject;
2459 item->command = command;
2460 item->commit = commit;
2461 item->arg_offset = 0;
2463 item->offset_in_buf = todo_list->buf.len;
2464 subject_len = find_commit_subject(commit_buffer, &subject);
2465 strbuf_addf(&todo_list->buf, "%s %s %.*s\n", command_string,
2466 short_commit_name(commit), subject_len, subject);
2467 unuse_commit_buffer(commit, commit_buffer);
2471 return error(_("empty commit set passed"));
2476 static int create_seq_dir(void)
2478 if (file_exists(git_path_seq_dir())) {
2479 error(_("a cherry-pick or revert is already in progress"));
2480 advise(_("try \"git cherry-pick (--continue | --quit | --abort)\""));
2482 } else if (mkdir(git_path_seq_dir(), 0777) < 0)
2483 return error_errno(_("could not create sequencer directory '%s'"),
2484 git_path_seq_dir());
2488 static int save_head(const char *head)
2490 struct lock_file head_lock = LOCK_INIT;
2491 struct strbuf buf = STRBUF_INIT;
2495 fd = hold_lock_file_for_update(&head_lock, git_path_head_file(), 0);
2497 return error_errno(_("could not lock HEAD"));
2498 strbuf_addf(&buf, "%s\n", head);
2499 written = write_in_full(fd, buf.buf, buf.len);
2500 strbuf_release(&buf);
2502 error_errno(_("could not write to '%s'"), git_path_head_file());
2503 rollback_lock_file(&head_lock);
2506 if (commit_lock_file(&head_lock) < 0)
2507 return error(_("failed to finalize '%s'"), git_path_head_file());
2511 static int rollback_is_safe(void)
2513 struct strbuf sb = STRBUF_INIT;
2514 struct object_id expected_head, actual_head;
2516 if (strbuf_read_file(&sb, git_path_abort_safety_file(), 0) >= 0) {
2518 if (get_oid_hex(sb.buf, &expected_head)) {
2519 strbuf_release(&sb);
2520 die(_("could not parse %s"), git_path_abort_safety_file());
2522 strbuf_release(&sb);
2524 else if (errno == ENOENT)
2525 oidclr(&expected_head);
2527 die_errno(_("could not read '%s'"), git_path_abort_safety_file());
2529 if (get_oid("HEAD", &actual_head))
2530 oidclr(&actual_head);
2532 return oideq(&actual_head, &expected_head);
2535 static int reset_for_rollback(const struct object_id *oid)
2537 const char *argv[4]; /* reset --merge <arg> + NULL */
2540 argv[1] = "--merge";
2541 argv[2] = oid_to_hex(oid);
2543 return run_command_v_opt(argv, RUN_GIT_CMD);
2546 static int rollback_single_pick(struct repository *r)
2548 struct object_id head_oid;
2550 if (!file_exists(git_path_cherry_pick_head(r)) &&
2551 !file_exists(git_path_revert_head(r)))
2552 return error(_("no cherry-pick or revert in progress"));
2553 if (read_ref_full("HEAD", 0, &head_oid, NULL))
2554 return error(_("cannot resolve HEAD"));
2555 if (is_null_oid(&head_oid))
2556 return error(_("cannot abort from a branch yet to be born"));
2557 return reset_for_rollback(&head_oid);
2560 int sequencer_rollback(struct repository *r, struct replay_opts *opts)
2563 struct object_id oid;
2564 struct strbuf buf = STRBUF_INIT;
2567 f = fopen(git_path_head_file(), "r");
2568 if (!f && errno == ENOENT) {
2570 * There is no multiple-cherry-pick in progress.
2571 * If CHERRY_PICK_HEAD or REVERT_HEAD indicates
2572 * a single-cherry-pick in progress, abort that.
2574 return rollback_single_pick(r);
2577 return error_errno(_("cannot open '%s'"), git_path_head_file());
2578 if (strbuf_getline_lf(&buf, f)) {
2579 error(_("cannot read '%s': %s"), git_path_head_file(),
2580 ferror(f) ? strerror(errno) : _("unexpected end of file"));
2585 if (parse_oid_hex(buf.buf, &oid, &p) || *p != '\0') {
2586 error(_("stored pre-cherry-pick HEAD file '%s' is corrupt"),
2587 git_path_head_file());
2590 if (is_null_oid(&oid)) {
2591 error(_("cannot abort from a branch yet to be born"));
2595 if (!rollback_is_safe()) {
2596 /* Do not error, just do not rollback */
2597 warning(_("You seem to have moved HEAD. "
2598 "Not rewinding, check your HEAD!"));
2600 if (reset_for_rollback(&oid))
2602 strbuf_release(&buf);
2603 return sequencer_remove_state(opts);
2605 strbuf_release(&buf);
2609 static int save_todo(struct todo_list *todo_list, struct replay_opts *opts)
2611 struct lock_file todo_lock = LOCK_INIT;
2612 const char *todo_path = get_todo_path(opts);
2613 int next = todo_list->current, offset, fd;
2616 * rebase -i writes "git-rebase-todo" without the currently executing
2617 * command, appending it to "done" instead.
2619 if (is_rebase_i(opts))
2622 fd = hold_lock_file_for_update(&todo_lock, todo_path, 0);
2624 return error_errno(_("could not lock '%s'"), todo_path);
2625 offset = get_item_line_offset(todo_list, next);
2626 if (write_in_full(fd, todo_list->buf.buf + offset,
2627 todo_list->buf.len - offset) < 0)
2628 return error_errno(_("could not write to '%s'"), todo_path);
2629 if (commit_lock_file(&todo_lock) < 0)
2630 return error(_("failed to finalize '%s'"), todo_path);
2632 if (is_rebase_i(opts) && next > 0) {
2633 const char *done = rebase_path_done();
2634 int fd = open(done, O_CREAT | O_WRONLY | O_APPEND, 0666);
2639 if (write_in_full(fd, get_item_line(todo_list, next - 1),
2640 get_item_line_length(todo_list, next - 1))
2642 ret = error_errno(_("could not write to '%s'"), done);
2644 ret = error_errno(_("failed to finalize '%s'"), done);
2650 static int save_opts(struct replay_opts *opts)
2652 const char *opts_file = git_path_opts_file();
2655 if (opts->no_commit)
2656 res |= git_config_set_in_file_gently(opts_file, "options.no-commit", "true");
2658 res |= git_config_set_in_file_gently(opts_file, "options.edit", "true");
2660 res |= git_config_set_in_file_gently(opts_file, "options.signoff", "true");
2661 if (opts->record_origin)
2662 res |= git_config_set_in_file_gently(opts_file, "options.record-origin", "true");
2664 res |= git_config_set_in_file_gently(opts_file, "options.allow-ff", "true");
2665 if (opts->mainline) {
2666 struct strbuf buf = STRBUF_INIT;
2667 strbuf_addf(&buf, "%d", opts->mainline);
2668 res |= git_config_set_in_file_gently(opts_file, "options.mainline", buf.buf);
2669 strbuf_release(&buf);
2672 res |= git_config_set_in_file_gently(opts_file, "options.strategy", opts->strategy);
2674 res |= git_config_set_in_file_gently(opts_file, "options.gpg-sign", opts->gpg_sign);
2677 for (i = 0; i < opts->xopts_nr; i++)
2678 res |= git_config_set_multivar_in_file_gently(opts_file,
2679 "options.strategy-option",
2680 opts->xopts[i], "^$", 0);
2682 if (opts->allow_rerere_auto)
2683 res |= git_config_set_in_file_gently(opts_file, "options.allow-rerere-auto",
2684 opts->allow_rerere_auto == RERERE_AUTOUPDATE ?
2689 static int make_patch(struct repository *r,
2690 struct commit *commit,
2691 struct replay_opts *opts)
2693 struct strbuf buf = STRBUF_INIT;
2694 struct rev_info log_tree_opt;
2695 const char *subject, *p;
2698 p = short_commit_name(commit);
2699 if (write_message(p, strlen(p), rebase_path_stopped_sha(), 1) < 0)
2701 if (update_ref("rebase", "REBASE_HEAD", &commit->object.oid,
2702 NULL, REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
2703 res |= error(_("could not update %s"), "REBASE_HEAD");
2705 strbuf_addf(&buf, "%s/patch", get_dir(opts));
2706 memset(&log_tree_opt, 0, sizeof(log_tree_opt));
2707 repo_init_revisions(r, &log_tree_opt, NULL);
2708 log_tree_opt.abbrev = 0;
2709 log_tree_opt.diff = 1;
2710 log_tree_opt.diffopt.output_format = DIFF_FORMAT_PATCH;
2711 log_tree_opt.disable_stdin = 1;
2712 log_tree_opt.no_commit_id = 1;
2713 log_tree_opt.diffopt.file = fopen(buf.buf, "w");
2714 log_tree_opt.diffopt.use_color = GIT_COLOR_NEVER;
2715 if (!log_tree_opt.diffopt.file)
2716 res |= error_errno(_("could not open '%s'"), buf.buf);
2718 res |= log_tree_commit(&log_tree_opt, commit);
2719 fclose(log_tree_opt.diffopt.file);
2723 strbuf_addf(&buf, "%s/message", get_dir(opts));
2724 if (!file_exists(buf.buf)) {
2725 const char *commit_buffer = get_commit_buffer(commit, NULL);
2726 find_commit_subject(commit_buffer, &subject);
2727 res |= write_message(subject, strlen(subject), buf.buf, 1);
2728 unuse_commit_buffer(commit, commit_buffer);
2730 strbuf_release(&buf);
2735 static int intend_to_amend(void)
2737 struct object_id head;
2740 if (get_oid("HEAD", &head))
2741 return error(_("cannot read HEAD"));
2743 p = oid_to_hex(&head);
2744 return write_message(p, strlen(p), rebase_path_amend(), 1);
2747 static int error_with_patch(struct repository *r,
2748 struct commit *commit,
2749 const char *subject, int subject_len,
2750 struct replay_opts *opts,
2751 int exit_code, int to_amend)
2754 if (make_patch(r, commit, opts))
2756 } else if (copy_file(rebase_path_message(),
2757 git_path_merge_msg(r), 0666))
2758 return error(_("unable to copy '%s' to '%s'"),
2759 git_path_merge_msg(r), rebase_path_message());
2762 if (intend_to_amend())
2766 _("You can amend the commit now, with\n"
2768 " git commit --amend %s\n"
2770 "Once you are satisfied with your changes, run\n"
2772 " git rebase --continue\n"),
2773 gpg_sign_opt_quoted(opts));
2774 } else if (exit_code) {
2776 fprintf_ln(stderr, _("Could not apply %s... %.*s"),
2777 short_commit_name(commit), subject_len, subject);
2780 * We don't have the hash of the parent so
2781 * just print the line from the todo file.
2783 fprintf_ln(stderr, _("Could not merge %.*s"),
2784 subject_len, subject);
2790 static int error_failed_squash(struct repository *r,
2791 struct commit *commit,
2792 struct replay_opts *opts,
2794 const char *subject)
2796 if (copy_file(rebase_path_message(), rebase_path_squash_msg(), 0666))
2797 return error(_("could not copy '%s' to '%s'"),
2798 rebase_path_squash_msg(), rebase_path_message());
2799 unlink(git_path_merge_msg(r));
2800 if (copy_file(git_path_merge_msg(r), rebase_path_message(), 0666))
2801 return error(_("could not copy '%s' to '%s'"),
2802 rebase_path_message(),
2803 git_path_merge_msg(r));
2804 return error_with_patch(r, commit, subject, subject_len, opts, 1, 0);
2807 static int do_exec(struct repository *r, const char *command_line)
2809 struct argv_array child_env = ARGV_ARRAY_INIT;
2810 const char *child_argv[] = { NULL, NULL };
2813 fprintf(stderr, "Executing: %s\n", command_line);
2814 child_argv[0] = command_line;
2815 argv_array_pushf(&child_env, "GIT_DIR=%s", absolute_path(get_git_dir()));
2816 argv_array_pushf(&child_env, "GIT_WORK_TREE=%s",
2817 absolute_path(get_git_work_tree()));
2818 status = run_command_v_opt_cd_env(child_argv, RUN_USING_SHELL, NULL,
2821 /* force re-reading of the cache */
2822 if (discard_index(r->index) < 0 || read_index(r->index) < 0)
2823 return error(_("could not read index"));
2825 dirty = require_clean_work_tree(r, "rebase", NULL, 1, 1);
2828 warning(_("execution failed: %s\n%s"
2829 "You can fix the problem, and then run\n"
2831 " git rebase --continue\n"
2834 dirty ? N_("and made changes to the index and/or the "
2835 "working tree\n") : "");
2837 /* command not found */
2840 warning(_("execution succeeded: %s\nbut "
2841 "left changes to the index and/or the working tree\n"
2842 "Commit or stash your changes, and then run\n"
2844 " git rebase --continue\n"
2845 "\n"), command_line);
2849 argv_array_clear(&child_env);
2854 static int safe_append(const char *filename, const char *fmt, ...)
2857 struct lock_file lock = LOCK_INIT;
2858 int fd = hold_lock_file_for_update(&lock, filename,
2859 LOCK_REPORT_ON_ERROR);
2860 struct strbuf buf = STRBUF_INIT;
2865 if (strbuf_read_file(&buf, filename, 0) < 0 && errno != ENOENT) {
2866 error_errno(_("could not read '%s'"), filename);
2867 rollback_lock_file(&lock);
2870 strbuf_complete(&buf, '\n');
2872 strbuf_vaddf(&buf, fmt, ap);
2875 if (write_in_full(fd, buf.buf, buf.len) < 0) {
2876 error_errno(_("could not write to '%s'"), filename);
2877 strbuf_release(&buf);
2878 rollback_lock_file(&lock);
2881 if (commit_lock_file(&lock) < 0) {
2882 strbuf_release(&buf);
2883 rollback_lock_file(&lock);
2884 return error(_("failed to finalize '%s'"), filename);
2887 strbuf_release(&buf);
2891 static int do_label(struct repository *r, const char *name, int len)
2893 struct ref_store *refs = get_main_ref_store(r);
2894 struct ref_transaction *transaction;
2895 struct strbuf ref_name = STRBUF_INIT, err = STRBUF_INIT;
2896 struct strbuf msg = STRBUF_INIT;
2898 struct object_id head_oid;
2900 if (len == 1 && *name == '#')
2901 return error(_("illegal label name: '%.*s'"), len, name);
2903 strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
2904 strbuf_addf(&msg, "rebase -i (label) '%.*s'", len, name);
2906 transaction = ref_store_transaction_begin(refs, &err);
2908 error("%s", err.buf);
2910 } else if (get_oid("HEAD", &head_oid)) {
2911 error(_("could not read HEAD"));
2913 } else if (ref_transaction_update(transaction, ref_name.buf, &head_oid,
2914 NULL, 0, msg.buf, &err) < 0 ||
2915 ref_transaction_commit(transaction, &err)) {
2916 error("%s", err.buf);
2919 ref_transaction_free(transaction);
2920 strbuf_release(&err);
2921 strbuf_release(&msg);
2924 ret = safe_append(rebase_path_refs_to_delete(),
2925 "%s\n", ref_name.buf);
2926 strbuf_release(&ref_name);
2931 static const char *reflog_message(struct replay_opts *opts,
2932 const char *sub_action, const char *fmt, ...);
2934 static int do_reset(struct repository *r,
2935 const char *name, int len,
2936 struct replay_opts *opts)
2938 struct strbuf ref_name = STRBUF_INIT;
2939 struct object_id oid;
2940 struct lock_file lock = LOCK_INIT;
2941 struct tree_desc desc;
2943 struct unpack_trees_options unpack_tree_opts;
2946 if (hold_locked_index(&lock, LOCK_REPORT_ON_ERROR) < 0)
2949 if (len == 10 && !strncmp("[new root]", name, len)) {
2950 if (!opts->have_squash_onto) {
2952 if (commit_tree("", 0, the_hash_algo->empty_tree,
2953 NULL, &opts->squash_onto,
2955 return error(_("writing fake root commit"));
2956 opts->have_squash_onto = 1;
2957 hex = oid_to_hex(&opts->squash_onto);
2958 if (write_message(hex, strlen(hex),
2959 rebase_path_squash_onto(), 0))
2960 return error(_("writing squash-onto"));
2962 oidcpy(&oid, &opts->squash_onto);
2966 /* Determine the length of the label */
2967 for (i = 0; i < len; i++)
2968 if (isspace(name[i]))
2972 strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
2973 if (get_oid(ref_name.buf, &oid) &&
2974 get_oid(ref_name.buf + strlen("refs/rewritten/"), &oid)) {
2975 error(_("could not read '%s'"), ref_name.buf);
2976 rollback_lock_file(&lock);
2977 strbuf_release(&ref_name);
2982 memset(&unpack_tree_opts, 0, sizeof(unpack_tree_opts));
2983 setup_unpack_trees_porcelain(&unpack_tree_opts, "reset");
2984 unpack_tree_opts.head_idx = 1;
2985 unpack_tree_opts.src_index = r->index;
2986 unpack_tree_opts.dst_index = r->index;
2987 unpack_tree_opts.fn = oneway_merge;
2988 unpack_tree_opts.merge = 1;
2989 unpack_tree_opts.update = 1;
2991 if (read_index_unmerged(r->index)) {
2992 rollback_lock_file(&lock);
2993 strbuf_release(&ref_name);
2994 return error_resolve_conflict(_(action_name(opts)));
2997 if (!fill_tree_descriptor(&desc, &oid)) {
2998 error(_("failed to find tree of %s"), oid_to_hex(&oid));
2999 rollback_lock_file(&lock);
3000 free((void *)desc.buffer);
3001 strbuf_release(&ref_name);
3005 if (unpack_trees(1, &desc, &unpack_tree_opts)) {
3006 rollback_lock_file(&lock);
3007 free((void *)desc.buffer);
3008 strbuf_release(&ref_name);
3012 tree = parse_tree_indirect(&oid);
3013 prime_cache_tree(r, r->index, tree);
3015 if (write_locked_index(r->index, &lock, COMMIT_LOCK) < 0)
3016 ret = error(_("could not write index"));
3017 free((void *)desc.buffer);
3020 ret = update_ref(reflog_message(opts, "reset", "'%.*s'",
3021 len, name), "HEAD", &oid,
3022 NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3024 strbuf_release(&ref_name);
3028 static struct commit *lookup_label(const char *label, int len,
3031 struct commit *commit;
3034 strbuf_addf(buf, "refs/rewritten/%.*s", len, label);
3035 commit = lookup_commit_reference_by_name(buf->buf);
3037 /* fall back to non-rewritten ref or commit */
3038 strbuf_splice(buf, 0, strlen("refs/rewritten/"), "", 0);
3039 commit = lookup_commit_reference_by_name(buf->buf);
3043 error(_("could not resolve '%s'"), buf->buf);
3048 static int do_merge(struct repository *r,
3049 struct commit *commit,
3050 const char *arg, int arg_len,
3051 int flags, struct replay_opts *opts)
3053 int run_commit_flags = (flags & TODO_EDIT_MERGE_MSG) ?
3054 EDIT_MSG | VERIFY_MSG : 0;
3055 struct strbuf ref_name = STRBUF_INIT;
3056 struct commit *head_commit, *merge_commit, *i;
3057 struct commit_list *bases, *j, *reversed = NULL;
3058 struct commit_list *to_merge = NULL, **tail = &to_merge;
3059 struct merge_options o;
3060 int merge_arg_len, oneline_offset, can_fast_forward, ret, k;
3061 static struct lock_file lock;
3064 if (hold_locked_index(&lock, LOCK_REPORT_ON_ERROR) < 0) {
3069 head_commit = lookup_commit_reference_by_name("HEAD");
3071 ret = error(_("cannot merge without a current revision"));
3076 * For octopus merges, the arg starts with the list of revisions to be
3077 * merged. The list is optionally followed by '#' and the oneline.
3079 merge_arg_len = oneline_offset = arg_len;
3080 for (p = arg; p - arg < arg_len; p += strspn(p, " \t\n")) {
3083 if (*p == '#' && (!p[1] || isspace(p[1]))) {
3084 p += 1 + strspn(p + 1, " \t\n");
3085 oneline_offset = p - arg;
3088 k = strcspn(p, " \t\n");
3091 merge_commit = lookup_label(p, k, &ref_name);
3092 if (!merge_commit) {
3093 ret = error(_("unable to parse '%.*s'"), k, p);
3096 tail = &commit_list_insert(merge_commit, tail)->next;
3098 merge_arg_len = p - arg;
3102 ret = error(_("nothing to merge: '%.*s'"), arg_len, arg);
3106 if (opts->have_squash_onto &&
3107 oideq(&head_commit->object.oid, &opts->squash_onto)) {
3109 * When the user tells us to "merge" something into a
3110 * "[new root]", let's simply fast-forward to the merge head.
3112 rollback_lock_file(&lock);
3114 ret = error(_("octopus merge cannot be executed on "
3115 "top of a [new root]"));
3117 ret = fast_forward_to(r, &to_merge->item->object.oid,
3118 &head_commit->object.oid, 0,
3124 const char *message = get_commit_buffer(commit, NULL);
3129 ret = error(_("could not get commit message of '%s'"),
3130 oid_to_hex(&commit->object.oid));
3133 write_author_script(message);
3134 find_commit_subject(message, &body);
3136 ret = write_message(body, len, git_path_merge_msg(r), 0);
3137 unuse_commit_buffer(commit, message);
3139 error_errno(_("could not write '%s'"),
3140 git_path_merge_msg(r));
3144 struct strbuf buf = STRBUF_INIT;
3147 strbuf_addf(&buf, "author %s", git_author_info(0));
3148 write_author_script(buf.buf);
3151 if (oneline_offset < arg_len) {
3152 p = arg + oneline_offset;
3153 len = arg_len - oneline_offset;
3155 strbuf_addf(&buf, "Merge %s '%.*s'",
3156 to_merge->next ? "branches" : "branch",
3157 merge_arg_len, arg);
3162 ret = write_message(p, len, git_path_merge_msg(r), 0);
3163 strbuf_release(&buf);
3165 error_errno(_("could not write '%s'"),
3166 git_path_merge_msg(r));
3172 * If HEAD is not identical to the first parent of the original merge
3173 * commit, we cannot fast-forward.
3175 can_fast_forward = opts->allow_ff && commit && commit->parents &&
3176 oideq(&commit->parents->item->object.oid,
3177 &head_commit->object.oid);
3180 * If any merge head is different from the original one, we cannot
3183 if (can_fast_forward) {
3184 struct commit_list *p = commit->parents->next;
3186 for (j = to_merge; j && p; j = j->next, p = p->next)
3187 if (!oideq(&j->item->object.oid,
3188 &p->item->object.oid)) {
3189 can_fast_forward = 0;
3193 * If the number of merge heads differs from the original merge
3194 * commit, we cannot fast-forward.
3197 can_fast_forward = 0;
3200 if (can_fast_forward) {
3201 rollback_lock_file(&lock);
3202 ret = fast_forward_to(r, &commit->object.oid,
3203 &head_commit->object.oid, 0, opts);
3207 if (to_merge->next) {
3209 struct child_process cmd = CHILD_PROCESS_INIT;
3211 if (read_env_script(&cmd.env_array)) {
3212 const char *gpg_opt = gpg_sign_opt_quoted(opts);
3214 ret = error(_(staged_changes_advice), gpg_opt, gpg_opt);
3219 argv_array_push(&cmd.args, "merge");
3220 argv_array_push(&cmd.args, "-s");
3221 argv_array_push(&cmd.args, "octopus");
3222 argv_array_push(&cmd.args, "--no-edit");
3223 argv_array_push(&cmd.args, "--no-ff");
3224 argv_array_push(&cmd.args, "--no-log");
3225 argv_array_push(&cmd.args, "--no-stat");
3226 argv_array_push(&cmd.args, "-F");
3227 argv_array_push(&cmd.args, git_path_merge_msg(r));
3229 argv_array_push(&cmd.args, opts->gpg_sign);
3231 /* Add the tips to be merged */
3232 for (j = to_merge; j; j = j->next)
3233 argv_array_push(&cmd.args,
3234 oid_to_hex(&j->item->object.oid));
3236 strbuf_release(&ref_name);
3237 unlink(git_path_cherry_pick_head(r));
3238 rollback_lock_file(&lock);
3240 rollback_lock_file(&lock);
3241 ret = run_command(&cmd);
3243 /* force re-reading of the cache */
3244 if (!ret && (discard_index(r->index) < 0 ||
3245 read_index(r->index) < 0))
3246 ret = error(_("could not read index"));
3250 merge_commit = to_merge->item;
3251 bases = get_merge_bases(head_commit, merge_commit);
3252 if (bases && oideq(&merge_commit->object.oid,
3253 &bases->item->object.oid)) {
3255 /* skip merging an ancestor of HEAD */
3259 write_message(oid_to_hex(&merge_commit->object.oid), GIT_SHA1_HEXSZ,
3260 git_path_merge_head(r), 0);
3261 write_message("no-ff", 5, git_path_merge_mode(r), 0);
3263 for (j = bases; j; j = j->next)
3264 commit_list_insert(j->item, &reversed);
3265 free_commit_list(bases);
3267 read_index(r->index);
3268 init_merge_options(&o);
3270 o.branch2 = ref_name.buf;
3271 o.buffer_output = 2;
3273 ret = merge_recursive(&o, head_commit, merge_commit, reversed, &i);
3275 fputs(o.obuf.buf, stdout);
3276 strbuf_release(&o.obuf);
3278 error(_("could not even attempt to merge '%.*s'"),
3279 merge_arg_len, arg);
3283 * The return value of merge_recursive() is 1 on clean, and 0 on
3286 * Let's reverse that, so that do_merge() returns 0 upon success and
3287 * 1 upon failed merge (keeping the return value -1 for the cases where
3288 * we will want to reschedule the `merge` command).
3292 if (r->index->cache_changed &&
3293 write_locked_index(r->index, &lock, COMMIT_LOCK)) {
3294 ret = error(_("merge: Unable to write new index file"));
3298 rollback_lock_file(&lock);
3300 repo_rerere(r, opts->allow_rerere_auto);
3303 * In case of problems, we now want to return a positive
3304 * value (a negative one would indicate that the `merge`
3305 * command needs to be rescheduled).
3307 ret = !!run_git_commit(r, git_path_merge_msg(r), opts,
3311 strbuf_release(&ref_name);
3312 rollback_lock_file(&lock);
3313 free_commit_list(to_merge);
3317 static int is_final_fixup(struct todo_list *todo_list)
3319 int i = todo_list->current;
3321 if (!is_fixup(todo_list->items[i].command))
3324 while (++i < todo_list->nr)
3325 if (is_fixup(todo_list->items[i].command))
3327 else if (!is_noop(todo_list->items[i].command))
3332 static enum todo_command peek_command(struct todo_list *todo_list, int offset)
3336 for (i = todo_list->current + offset; i < todo_list->nr; i++)
3337 if (!is_noop(todo_list->items[i].command))
3338 return todo_list->items[i].command;
3343 static int apply_autostash(struct replay_opts *opts)
3345 struct strbuf stash_sha1 = STRBUF_INIT;
3346 struct child_process child = CHILD_PROCESS_INIT;
3349 if (!read_oneliner(&stash_sha1, rebase_path_autostash(), 1)) {
3350 strbuf_release(&stash_sha1);
3353 strbuf_trim(&stash_sha1);
3356 child.no_stdout = 1;
3357 child.no_stderr = 1;
3358 argv_array_push(&child.args, "stash");
3359 argv_array_push(&child.args, "apply");
3360 argv_array_push(&child.args, stash_sha1.buf);
3361 if (!run_command(&child))
3362 fprintf(stderr, _("Applied autostash.\n"));
3364 struct child_process store = CHILD_PROCESS_INIT;
3367 argv_array_push(&store.args, "stash");
3368 argv_array_push(&store.args, "store");
3369 argv_array_push(&store.args, "-m");
3370 argv_array_push(&store.args, "autostash");
3371 argv_array_push(&store.args, "-q");
3372 argv_array_push(&store.args, stash_sha1.buf);
3373 if (run_command(&store))
3374 ret = error(_("cannot store %s"), stash_sha1.buf);
3377 _("Applying autostash resulted in conflicts.\n"
3378 "Your changes are safe in the stash.\n"
3379 "You can run \"git stash pop\" or"
3380 " \"git stash drop\" at any time.\n"));
3383 strbuf_release(&stash_sha1);
3387 static const char *reflog_message(struct replay_opts *opts,
3388 const char *sub_action, const char *fmt, ...)
3391 static struct strbuf buf = STRBUF_INIT;
3395 strbuf_addstr(&buf, action_name(opts));
3397 strbuf_addf(&buf, " (%s)", sub_action);
3399 strbuf_addstr(&buf, ": ");
3400 strbuf_vaddf(&buf, fmt, ap);
3407 static int run_git_checkout(struct replay_opts *opts, const char *commit,
3410 struct child_process cmd = CHILD_PROCESS_INIT;
3414 argv_array_push(&cmd.args, "checkout");
3415 argv_array_push(&cmd.args, commit);
3416 argv_array_pushf(&cmd.env_array, GIT_REFLOG_ACTION "=%s", action);
3419 return run_command(&cmd);
3421 return run_command_silent_on_success(&cmd);
3424 int prepare_branch_to_be_rebased(struct replay_opts *opts, const char *commit)
3428 if (commit && *commit) {
3429 action = reflog_message(opts, "start", "checkout %s", commit);
3430 if (run_git_checkout(opts, commit, action))
3431 return error(_("could not checkout %s"), commit);
3437 static int checkout_onto(struct replay_opts *opts,
3438 const char *onto_name, const char *onto,
3439 const char *orig_head)
3441 struct object_id oid;
3442 const char *action = reflog_message(opts, "start", "checkout %s", onto_name);
3444 if (get_oid(orig_head, &oid))
3445 return error(_("%s: not a valid OID"), orig_head);
3447 if (run_git_checkout(opts, onto, action)) {
3448 apply_autostash(opts);
3449 sequencer_remove_state(opts);
3450 return error(_("could not detach HEAD"));
3453 return update_ref(NULL, "ORIG_HEAD", &oid, NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3456 static int stopped_at_head(struct repository *r)
3458 struct object_id head;
3459 struct commit *commit;
3460 struct commit_message message;
3462 if (get_oid("HEAD", &head) ||
3463 !(commit = lookup_commit(r, &head)) ||
3464 parse_commit(commit) || get_message(commit, &message))
3465 fprintf(stderr, _("Stopped at HEAD\n"));
3467 fprintf(stderr, _("Stopped at %s\n"), message.label);
3468 free_message(commit, &message);
3474 static const char rescheduled_advice[] =
3475 N_("Could not execute the todo command\n"
3479 "It has been rescheduled; To edit the command before continuing, please\n"
3480 "edit the todo list first:\n"
3482 " git rebase --edit-todo\n"
3483 " git rebase --continue\n");
3485 static int pick_commits(struct repository *r,
3486 struct todo_list *todo_list,
3487 struct replay_opts *opts)
3489 int res = 0, reschedule = 0;
3491 setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
3493 assert(!(opts->signoff || opts->no_commit ||
3494 opts->record_origin || opts->edit));
3495 if (read_and_refresh_cache(r, opts))
3498 while (todo_list->current < todo_list->nr) {
3499 struct todo_item *item = todo_list->items + todo_list->current;
3500 const char *arg = todo_item_get_arg(todo_list, item);
3502 if (save_todo(todo_list, opts))
3504 if (is_rebase_i(opts)) {
3505 if (item->command != TODO_COMMENT) {
3506 FILE *f = fopen(rebase_path_msgnum(), "w");
3508 todo_list->done_nr++;
3511 fprintf(f, "%d\n", todo_list->done_nr);
3514 fprintf(stderr, "Rebasing (%d/%d)%s",
3516 todo_list->total_nr,
3517 opts->verbose ? "\n" : "\r");
3519 unlink(rebase_path_message());
3520 unlink(rebase_path_author_script());
3521 unlink(rebase_path_stopped_sha());
3522 unlink(rebase_path_amend());
3523 unlink(git_path_merge_head(the_repository));
3524 delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
3526 if (item->command == TODO_BREAK)
3527 return stopped_at_head(r);
3529 if (item->command <= TODO_SQUASH) {
3530 if (is_rebase_i(opts))
3531 setenv("GIT_REFLOG_ACTION", reflog_message(opts,
3532 command_to_string(item->command), NULL),
3534 res = do_pick_commit(r, item->command, item->commit,
3535 opts, is_final_fixup(todo_list));
3536 if (is_rebase_i(opts) && res < 0) {
3538 advise(_(rescheduled_advice),
3539 get_item_line_length(todo_list,
3540 todo_list->current),
3541 get_item_line(todo_list,
3542 todo_list->current));
3543 todo_list->current--;
3544 if (save_todo(todo_list, opts))
3547 if (item->command == TODO_EDIT) {
3548 struct commit *commit = item->commit;
3551 _("Stopped at %s... %.*s\n"),
3552 short_commit_name(commit),
3553 item->arg_len, arg);
3554 return error_with_patch(r, commit,
3555 arg, item->arg_len, opts, res, !res);
3557 if (is_rebase_i(opts) && !res)
3558 record_in_rewritten(&item->commit->object.oid,
3559 peek_command(todo_list, 1));
3560 if (res && is_fixup(item->command)) {
3563 return error_failed_squash(r, item->commit, opts,
3564 item->arg_len, arg);
3565 } else if (res && is_rebase_i(opts) && item->commit) {
3567 struct object_id oid;
3570 * If we are rewording and have either
3571 * fast-forwarded already, or are about to
3572 * create a new root commit, we want to amend,
3573 * otherwise we do not.
3575 if (item->command == TODO_REWORD &&
3576 !get_oid("HEAD", &oid) &&
3577 (oideq(&item->commit->object.oid, &oid) ||
3578 (opts->have_squash_onto &&
3579 oideq(&opts->squash_onto, &oid))))
3582 return res | error_with_patch(r, item->commit,
3583 arg, item->arg_len, opts,
3586 } else if (item->command == TODO_EXEC) {
3587 char *end_of_arg = (char *)(arg + item->arg_len);
3588 int saved = *end_of_arg;
3592 res = do_exec(r, arg);
3593 *end_of_arg = saved;
3595 /* Reread the todo file if it has changed. */
3597 ; /* fall through */
3598 else if (stat(get_todo_path(opts), &st))
3599 res = error_errno(_("could not stat '%s'"),
3600 get_todo_path(opts));
3601 else if (match_stat_data(&todo_list->stat, &st)) {
3602 todo_list_release(todo_list);
3603 if (read_populate_todo(r, todo_list, opts))
3604 res = -1; /* message was printed */
3605 /* `current` will be incremented below */
3606 todo_list->current = -1;
3608 } else if (item->command == TODO_LABEL) {
3609 if ((res = do_label(r, arg, item->arg_len)))
3611 } else if (item->command == TODO_RESET) {
3612 if ((res = do_reset(r, arg, item->arg_len, opts)))
3614 } else if (item->command == TODO_MERGE) {
3615 if ((res = do_merge(r, item->commit,
3617 item->flags, opts)) < 0)
3619 else if (item->commit)
3620 record_in_rewritten(&item->commit->object.oid,
3621 peek_command(todo_list, 1));
3623 /* failed with merge conflicts */
3624 return error_with_patch(r, item->commit,
3627 } else if (!is_noop(item->command))
3628 return error(_("unknown command %d"), item->command);
3631 advise(_(rescheduled_advice),
3632 get_item_line_length(todo_list,
3633 todo_list->current),
3634 get_item_line(todo_list, todo_list->current));
3635 todo_list->current--;
3636 if (save_todo(todo_list, opts))
3639 return error_with_patch(r,
3645 todo_list->current++;
3650 if (is_rebase_i(opts)) {
3651 struct strbuf head_ref = STRBUF_INIT, buf = STRBUF_INIT;
3654 /* Stopped in the middle, as planned? */
3655 if (todo_list->current < todo_list->nr)
3658 if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
3659 starts_with(head_ref.buf, "refs/")) {
3661 struct object_id head, orig;
3664 if (get_oid("HEAD", &head)) {
3665 res = error(_("cannot read HEAD"));
3667 strbuf_release(&head_ref);
3668 strbuf_release(&buf);
3671 if (!read_oneliner(&buf, rebase_path_orig_head(), 0) ||
3672 get_oid_hex(buf.buf, &orig)) {
3673 res = error(_("could not read orig-head"));
3674 goto cleanup_head_ref;
3677 if (!read_oneliner(&buf, rebase_path_onto(), 0)) {
3678 res = error(_("could not read 'onto'"));
3679 goto cleanup_head_ref;
3681 msg = reflog_message(opts, "finish", "%s onto %s",
3682 head_ref.buf, buf.buf);
3683 if (update_ref(msg, head_ref.buf, &head, &orig,
3684 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR)) {
3685 res = error(_("could not update %s"),
3687 goto cleanup_head_ref;
3689 msg = reflog_message(opts, "finish", "returning to %s",
3691 if (create_symref("HEAD", head_ref.buf, msg)) {
3692 res = error(_("could not update HEAD to %s"),
3694 goto cleanup_head_ref;
3699 if (opts->verbose) {
3700 struct rev_info log_tree_opt;
3701 struct object_id orig, head;
3703 memset(&log_tree_opt, 0, sizeof(log_tree_opt));
3704 repo_init_revisions(r, &log_tree_opt, NULL);
3705 log_tree_opt.diff = 1;
3706 log_tree_opt.diffopt.output_format =
3707 DIFF_FORMAT_DIFFSTAT;
3708 log_tree_opt.disable_stdin = 1;
3710 if (read_oneliner(&buf, rebase_path_orig_head(), 0) &&
3711 !get_oid(buf.buf, &orig) &&
3712 !get_oid("HEAD", &head)) {
3713 diff_tree_oid(&orig, &head, "",
3714 &log_tree_opt.diffopt);
3715 log_tree_diff_flush(&log_tree_opt);
3718 flush_rewritten_pending();
3719 if (!stat(rebase_path_rewritten_list(), &st) &&
3721 struct child_process child = CHILD_PROCESS_INIT;
3722 const char *post_rewrite_hook =
3723 find_hook("post-rewrite");
3725 child.in = open(rebase_path_rewritten_list(), O_RDONLY);
3727 argv_array_push(&child.args, "notes");
3728 argv_array_push(&child.args, "copy");
3729 argv_array_push(&child.args, "--for-rewrite=rebase");
3730 /* we don't care if this copying failed */
3731 run_command(&child);
3733 if (post_rewrite_hook) {
3734 struct child_process hook = CHILD_PROCESS_INIT;
3736 hook.in = open(rebase_path_rewritten_list(),
3738 hook.stdout_to_stderr = 1;
3739 argv_array_push(&hook.args, post_rewrite_hook);
3740 argv_array_push(&hook.args, "rebase");
3741 /* we don't care if this hook failed */
3745 apply_autostash(opts);
3747 fprintf(stderr, "Successfully rebased and updated %s.\n",
3750 strbuf_release(&buf);
3751 strbuf_release(&head_ref);
3755 * Sequence of picks finished successfully; cleanup by
3756 * removing the .git/sequencer directory
3758 return sequencer_remove_state(opts);
3761 static int continue_single_pick(struct repository *r)
3763 const char *argv[] = { "commit", NULL };
3765 if (!file_exists(git_path_cherry_pick_head(r)) &&
3766 !file_exists(git_path_revert_head(r)))
3767 return error(_("no cherry-pick or revert in progress"));
3768 return run_command_v_opt(argv, RUN_GIT_CMD);
3771 static int commit_staged_changes(struct repository *r,
3772 struct replay_opts *opts,
3773 struct todo_list *todo_list)
3775 unsigned int flags = ALLOW_EMPTY | EDIT_MSG;
3776 unsigned int final_fixup = 0, is_clean;
3778 if (has_unstaged_changes(r, 1))
3779 return error(_("cannot rebase: You have unstaged changes."));
3781 is_clean = !has_uncommitted_changes(r, 0);
3783 if (file_exists(rebase_path_amend())) {
3784 struct strbuf rev = STRBUF_INIT;
3785 struct object_id head, to_amend;
3787 if (get_oid("HEAD", &head))
3788 return error(_("cannot amend non-existing commit"));
3789 if (!read_oneliner(&rev, rebase_path_amend(), 0))
3790 return error(_("invalid file: '%s'"), rebase_path_amend());
3791 if (get_oid_hex(rev.buf, &to_amend))
3792 return error(_("invalid contents: '%s'"),
3793 rebase_path_amend());
3794 if (!is_clean && !oideq(&head, &to_amend))
3795 return error(_("\nYou have uncommitted changes in your "
3796 "working tree. Please, commit them\n"
3797 "first and then run 'git rebase "
3798 "--continue' again."));
3800 * When skipping a failed fixup/squash, we need to edit the
3801 * commit message, the current fixup list and count, and if it
3802 * was the last fixup/squash in the chain, we need to clean up
3803 * the commit message and if there was a squash, let the user
3806 if (!is_clean || !opts->current_fixup_count)
3807 ; /* this is not the final fixup */
3808 else if (!oideq(&head, &to_amend) ||
3809 !file_exists(rebase_path_stopped_sha())) {
3810 /* was a final fixup or squash done manually? */
3811 if (!is_fixup(peek_command(todo_list, 0))) {
3812 unlink(rebase_path_fixup_msg());
3813 unlink(rebase_path_squash_msg());
3814 unlink(rebase_path_current_fixups());
3815 strbuf_reset(&opts->current_fixups);
3816 opts->current_fixup_count = 0;
3819 /* we are in a fixup/squash chain */
3820 const char *p = opts->current_fixups.buf;
3821 int len = opts->current_fixups.len;
3823 opts->current_fixup_count--;
3825 BUG("Incorrect current_fixups:\n%s", p);
3826 while (len && p[len - 1] != '\n')
3828 strbuf_setlen(&opts->current_fixups, len);
3829 if (write_message(p, len, rebase_path_current_fixups(),
3831 return error(_("could not write file: '%s'"),
3832 rebase_path_current_fixups());
3835 * If a fixup/squash in a fixup/squash chain failed, the
3836 * commit message is already correct, no need to commit
3839 * Only if it is the final command in the fixup/squash
3840 * chain, and only if the chain is longer than a single
3841 * fixup/squash command (which was just skipped), do we
3842 * actually need to re-commit with a cleaned up commit
3845 if (opts->current_fixup_count > 0 &&
3846 !is_fixup(peek_command(todo_list, 0))) {
3849 * If there was not a single "squash" in the
3850 * chain, we only need to clean up the commit
3851 * message, no need to bother the user with
3852 * opening the commit message in the editor.
3854 if (!starts_with(p, "squash ") &&
3855 !strstr(p, "\nsquash "))
3856 flags = (flags & ~EDIT_MSG) | CLEANUP_MSG;
3857 } else if (is_fixup(peek_command(todo_list, 0))) {
3859 * We need to update the squash message to skip
3860 * the latest commit message.
3862 struct commit *commit;
3863 const char *path = rebase_path_squash_msg();
3865 if (parse_head(r, &commit) ||
3866 !(p = get_commit_buffer(commit, NULL)) ||
3867 write_message(p, strlen(p), path, 0)) {
3868 unuse_commit_buffer(commit, p);
3869 return error(_("could not write file: "
3872 unuse_commit_buffer(commit, p);
3876 strbuf_release(&rev);
3881 const char *cherry_pick_head = git_path_cherry_pick_head(r);
3883 if (file_exists(cherry_pick_head) && unlink(cherry_pick_head))
3884 return error(_("could not remove CHERRY_PICK_HEAD"));
3889 if (run_git_commit(r, final_fixup ? NULL : rebase_path_message(),
3891 return error(_("could not commit staged changes."));
3892 unlink(rebase_path_amend());
3893 unlink(git_path_merge_head(the_repository));
3895 unlink(rebase_path_fixup_msg());
3896 unlink(rebase_path_squash_msg());
3898 if (opts->current_fixup_count > 0) {
3900 * Whether final fixup or not, we just cleaned up the commit
3903 unlink(rebase_path_current_fixups());
3904 strbuf_reset(&opts->current_fixups);
3905 opts->current_fixup_count = 0;
3910 int sequencer_continue(struct repository *r, struct replay_opts *opts)
3912 struct todo_list todo_list = TODO_LIST_INIT;
3915 if (read_and_refresh_cache(r, opts))
3918 if (read_populate_opts(opts))
3920 if (is_rebase_i(opts)) {
3921 if ((res = read_populate_todo(r, &todo_list, opts)))
3922 goto release_todo_list;
3923 if (commit_staged_changes(r, opts, &todo_list))
3925 } else if (!file_exists(get_todo_path(opts)))
3926 return continue_single_pick(r);
3927 else if ((res = read_populate_todo(r, &todo_list, opts)))
3928 goto release_todo_list;
3930 if (!is_rebase_i(opts)) {
3931 /* Verify that the conflict has been resolved */
3932 if (file_exists(git_path_cherry_pick_head(r)) ||
3933 file_exists(git_path_revert_head(r))) {
3934 res = continue_single_pick(r);
3936 goto release_todo_list;
3938 if (index_differs_from(r, "HEAD", NULL, 0)) {
3939 res = error_dirty_index(r->index, opts);
3940 goto release_todo_list;
3942 todo_list.current++;
3943 } else if (file_exists(rebase_path_stopped_sha())) {
3944 struct strbuf buf = STRBUF_INIT;
3945 struct object_id oid;
3947 if (read_oneliner(&buf, rebase_path_stopped_sha(), 1) &&
3948 !get_oid_committish(buf.buf, &oid))
3949 record_in_rewritten(&oid, peek_command(&todo_list, 0));
3950 strbuf_release(&buf);
3953 res = pick_commits(r, &todo_list, opts);
3955 todo_list_release(&todo_list);
3959 static int single_pick(struct repository *r,
3960 struct commit *cmit,
3961 struct replay_opts *opts)
3963 setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
3964 return do_pick_commit(r, opts->action == REPLAY_PICK ?
3965 TODO_PICK : TODO_REVERT, cmit, opts, 0);
3968 int sequencer_pick_revisions(struct repository *r,
3969 struct replay_opts *opts)
3971 struct todo_list todo_list = TODO_LIST_INIT;
3972 struct object_id oid;
3976 if (read_and_refresh_cache(r, opts))
3979 for (i = 0; i < opts->revs->pending.nr; i++) {
3980 struct object_id oid;
3981 const char *name = opts->revs->pending.objects[i].name;
3983 /* This happens when using --stdin. */
3987 if (!get_oid(name, &oid)) {
3988 if (!lookup_commit_reference_gently(r, &oid, 1)) {
3989 enum object_type type = oid_object_info(r,
3992 return error(_("%s: can't cherry-pick a %s"),
3993 name, type_name(type));
3996 return error(_("%s: bad revision"), name);
4000 * If we were called as "git cherry-pick <commit>", just
4001 * cherry-pick/revert it, set CHERRY_PICK_HEAD /
4002 * REVERT_HEAD, and don't touch the sequencer state.
4003 * This means it is possible to cherry-pick in the middle
4004 * of a cherry-pick sequence.
4006 if (opts->revs->cmdline.nr == 1 &&
4007 opts->revs->cmdline.rev->whence == REV_CMD_REV &&
4008 opts->revs->no_walk &&
4009 !opts->revs->cmdline.rev->flags) {
4010 struct commit *cmit;
4011 if (prepare_revision_walk(opts->revs))
4012 return error(_("revision walk setup failed"));
4013 cmit = get_revision(opts->revs);
4015 return error(_("empty commit set passed"));
4016 if (get_revision(opts->revs))
4017 BUG("unexpected extra commit from walk");
4018 return single_pick(r, cmit, opts);
4022 * Start a new cherry-pick/ revert sequence; but
4023 * first, make sure that an existing one isn't in
4027 if (walk_revs_populate_todo(&todo_list, opts) ||
4028 create_seq_dir() < 0)
4030 if (get_oid("HEAD", &oid) && (opts->action == REPLAY_REVERT))
4031 return error(_("can't revert as initial commit"));
4032 if (save_head(oid_to_hex(&oid)))
4034 if (save_opts(opts))
4036 update_abort_safety_file();
4037 res = pick_commits(r, &todo_list, opts);
4038 todo_list_release(&todo_list);
4042 void append_signoff(struct strbuf *msgbuf, size_t ignore_footer, unsigned flag)
4044 unsigned no_dup_sob = flag & APPEND_SIGNOFF_DEDUP;
4045 struct strbuf sob = STRBUF_INIT;
4048 strbuf_addstr(&sob, sign_off_header);
4049 strbuf_addstr(&sob, fmt_name(getenv("GIT_COMMITTER_NAME"),
4050 getenv("GIT_COMMITTER_EMAIL")));
4051 strbuf_addch(&sob, '\n');
4054 strbuf_complete_line(msgbuf);
4057 * If the whole message buffer is equal to the sob, pretend that we
4058 * found a conforming footer with a matching sob
4060 if (msgbuf->len - ignore_footer == sob.len &&
4061 !strncmp(msgbuf->buf, sob.buf, sob.len))
4064 has_footer = has_conforming_footer(msgbuf, &sob, ignore_footer);
4067 const char *append_newlines = NULL;
4068 size_t len = msgbuf->len - ignore_footer;
4072 * The buffer is completely empty. Leave foom for
4073 * the title and body to be filled in by the user.
4075 append_newlines = "\n\n";
4076 } else if (len == 1) {
4078 * Buffer contains a single newline. Add another
4079 * so that we leave room for the title and body.
4081 append_newlines = "\n";
4082 } else if (msgbuf->buf[len - 2] != '\n') {
4084 * Buffer ends with a single newline. Add another
4085 * so that there is an empty line between the message
4088 append_newlines = "\n";
4089 } /* else, the buffer already ends with two newlines. */
4091 if (append_newlines)
4092 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4093 append_newlines, strlen(append_newlines));
4096 if (has_footer != 3 && (!no_dup_sob || has_footer != 2))
4097 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4100 strbuf_release(&sob);
4103 struct labels_entry {
4104 struct hashmap_entry entry;
4105 char label[FLEX_ARRAY];
4108 static int labels_cmp(const void *fndata, const struct labels_entry *a,
4109 const struct labels_entry *b, const void *key)
4111 return key ? strcmp(a->label, key) : strcmp(a->label, b->label);
4114 struct string_entry {
4115 struct oidmap_entry entry;
4116 char string[FLEX_ARRAY];
4119 struct label_state {
4120 struct oidmap commit2label;
4121 struct hashmap labels;
4125 static const char *label_oid(struct object_id *oid, const char *label,
4126 struct label_state *state)
4128 struct labels_entry *labels_entry;
4129 struct string_entry *string_entry;
4130 struct object_id dummy;
4134 string_entry = oidmap_get(&state->commit2label, oid);
4136 return string_entry->string;
4139 * For "uninteresting" commits, i.e. commits that are not to be
4140 * rebased, and which can therefore not be labeled, we use a unique
4141 * abbreviation of the commit name. This is slightly more complicated
4142 * than calling find_unique_abbrev() because we also need to make
4143 * sure that the abbreviation does not conflict with any other
4146 * We disallow "interesting" commits to be labeled by a string that
4147 * is a valid full-length hash, to ensure that we always can find an
4148 * abbreviation for any uninteresting commit's names that does not
4149 * clash with any other label.
4154 strbuf_reset(&state->buf);
4155 strbuf_grow(&state->buf, GIT_SHA1_HEXSZ);
4156 label = p = state->buf.buf;
4158 find_unique_abbrev_r(p, oid, default_abbrev);
4161 * We may need to extend the abbreviated hash so that there is
4162 * no conflicting label.
4164 if (hashmap_get_from_hash(&state->labels, strihash(p), p)) {
4165 size_t i = strlen(p) + 1;
4167 oid_to_hex_r(p, oid);
4168 for (; i < GIT_SHA1_HEXSZ; i++) {
4171 if (!hashmap_get_from_hash(&state->labels,
4177 } else if (((len = strlen(label)) == the_hash_algo->hexsz &&
4178 !get_oid_hex(label, &dummy)) ||
4179 (len == 1 && *label == '#') ||
4180 hashmap_get_from_hash(&state->labels,
4181 strihash(label), label)) {
4183 * If the label already exists, or if the label is a valid full
4184 * OID, or the label is a '#' (which we use as a separator
4185 * between merge heads and oneline), we append a dash and a
4186 * number to make it unique.
4188 struct strbuf *buf = &state->buf;
4191 strbuf_add(buf, label, len);
4193 for (i = 2; ; i++) {
4194 strbuf_setlen(buf, len);
4195 strbuf_addf(buf, "-%d", i);
4196 if (!hashmap_get_from_hash(&state->labels,
4205 FLEX_ALLOC_STR(labels_entry, label, label);
4206 hashmap_entry_init(labels_entry, strihash(label));
4207 hashmap_add(&state->labels, labels_entry);
4209 FLEX_ALLOC_STR(string_entry, string, label);
4210 oidcpy(&string_entry->entry.oid, oid);
4211 oidmap_put(&state->commit2label, string_entry);
4213 return string_entry->string;
4216 static int make_script_with_merges(struct pretty_print_context *pp,
4217 struct rev_info *revs, struct strbuf *out,
4220 int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4221 int rebase_cousins = flags & TODO_LIST_REBASE_COUSINS;
4222 struct strbuf buf = STRBUF_INIT, oneline = STRBUF_INIT;
4223 struct strbuf label = STRBUF_INIT;
4224 struct commit_list *commits = NULL, **tail = &commits, *iter;
4225 struct commit_list *tips = NULL, **tips_tail = &tips;
4226 struct commit *commit;
4227 struct oidmap commit2todo = OIDMAP_INIT;
4228 struct string_entry *entry;
4229 struct oidset interesting = OIDSET_INIT, child_seen = OIDSET_INIT,
4230 shown = OIDSET_INIT;
4231 struct label_state state = { OIDMAP_INIT, { NULL }, STRBUF_INIT };
4233 int abbr = flags & TODO_LIST_ABBREVIATE_CMDS;
4234 const char *cmd_pick = abbr ? "p" : "pick",
4235 *cmd_label = abbr ? "l" : "label",
4236 *cmd_reset = abbr ? "t" : "reset",
4237 *cmd_merge = abbr ? "m" : "merge";
4239 oidmap_init(&commit2todo, 0);
4240 oidmap_init(&state.commit2label, 0);
4241 hashmap_init(&state.labels, (hashmap_cmp_fn) labels_cmp, NULL, 0);
4242 strbuf_init(&state.buf, 32);
4244 if (revs->cmdline.nr && (revs->cmdline.rev[0].flags & BOTTOM)) {
4245 struct object_id *oid = &revs->cmdline.rev[0].item->oid;
4246 FLEX_ALLOC_STR(entry, string, "onto");
4247 oidcpy(&entry->entry.oid, oid);
4248 oidmap_put(&state.commit2label, entry);
4253 * - get onelines for all commits
4254 * - gather all branch tips (i.e. 2nd or later parents of merges)
4255 * - label all branch tips
4257 while ((commit = get_revision(revs))) {
4258 struct commit_list *to_merge;
4259 const char *p1, *p2;
4260 struct object_id *oid;
4263 tail = &commit_list_insert(commit, tail)->next;
4264 oidset_insert(&interesting, &commit->object.oid);
4266 is_empty = is_original_commit_empty(commit);
4267 if (!is_empty && (commit->object.flags & PATCHSAME))
4270 strbuf_reset(&oneline);
4271 pretty_print_commit(pp, commit, &oneline);
4273 to_merge = commit->parents ? commit->parents->next : NULL;
4275 /* non-merge commit: easy case */
4277 if (!keep_empty && is_empty)
4278 strbuf_addf(&buf, "%c ", comment_line_char);
4279 strbuf_addf(&buf, "%s %s %s", cmd_pick,
4280 oid_to_hex(&commit->object.oid),
4283 FLEX_ALLOC_STR(entry, string, buf.buf);
4284 oidcpy(&entry->entry.oid, &commit->object.oid);
4285 oidmap_put(&commit2todo, entry);
4290 /* Create a label */
4291 strbuf_reset(&label);
4292 if (skip_prefix(oneline.buf, "Merge ", &p1) &&
4293 (p1 = strchr(p1, '\'')) &&
4294 (p2 = strchr(++p1, '\'')))
4295 strbuf_add(&label, p1, p2 - p1);
4296 else if (skip_prefix(oneline.buf, "Merge pull request ",
4298 (p1 = strstr(p1, " from ")))
4299 strbuf_addstr(&label, p1 + strlen(" from "));
4301 strbuf_addbuf(&label, &oneline);
4303 for (p1 = label.buf; *p1; p1++)
4308 strbuf_addf(&buf, "%s -C %s",
4309 cmd_merge, oid_to_hex(&commit->object.oid));
4311 /* label the tips of merged branches */
4312 for (; to_merge; to_merge = to_merge->next) {
4313 oid = &to_merge->item->object.oid;
4314 strbuf_addch(&buf, ' ');
4316 if (!oidset_contains(&interesting, oid)) {
4317 strbuf_addstr(&buf, label_oid(oid, NULL,
4322 tips_tail = &commit_list_insert(to_merge->item,
4325 strbuf_addstr(&buf, label_oid(oid, label.buf, &state));
4327 strbuf_addf(&buf, " # %s", oneline.buf);
4329 FLEX_ALLOC_STR(entry, string, buf.buf);
4330 oidcpy(&entry->entry.oid, &commit->object.oid);
4331 oidmap_put(&commit2todo, entry);
4336 * - label branch points
4337 * - add HEAD to the branch tips
4339 for (iter = commits; iter; iter = iter->next) {
4340 struct commit_list *parent = iter->item->parents;
4341 for (; parent; parent = parent->next) {
4342 struct object_id *oid = &parent->item->object.oid;
4343 if (!oidset_contains(&interesting, oid))
4345 if (oidset_insert(&child_seen, oid))
4346 label_oid(oid, "branch-point", &state);
4349 /* Add HEAD as implict "tip of branch" */
4351 tips_tail = &commit_list_insert(iter->item,
4356 * Third phase: output the todo list. This is a bit tricky, as we
4357 * want to avoid jumping back and forth between revisions. To
4358 * accomplish that goal, we walk backwards from the branch tips,
4359 * gathering commits not yet shown, reversing the list on the fly,
4360 * then outputting that list (labeling revisions as needed).
4362 strbuf_addf(out, "%s onto\n", cmd_label);
4363 for (iter = tips; iter; iter = iter->next) {
4364 struct commit_list *list = NULL, *iter2;
4366 commit = iter->item;
4367 if (oidset_contains(&shown, &commit->object.oid))
4369 entry = oidmap_get(&state.commit2label, &commit->object.oid);
4372 strbuf_addf(out, "\n%c Branch %s\n", comment_line_char, entry->string);
4374 strbuf_addch(out, '\n');
4376 while (oidset_contains(&interesting, &commit->object.oid) &&
4377 !oidset_contains(&shown, &commit->object.oid)) {
4378 commit_list_insert(commit, &list);
4379 if (!commit->parents) {
4383 commit = commit->parents->item;
4387 strbuf_addf(out, "%s %s\n", cmd_reset,
4388 rebase_cousins ? "onto" : "[new root]");
4390 const char *to = NULL;
4392 entry = oidmap_get(&state.commit2label,
4393 &commit->object.oid);
4396 else if (!rebase_cousins)
4397 to = label_oid(&commit->object.oid, NULL,
4400 if (!to || !strcmp(to, "onto"))
4401 strbuf_addf(out, "%s onto\n", cmd_reset);
4403 strbuf_reset(&oneline);
4404 pretty_print_commit(pp, commit, &oneline);
4405 strbuf_addf(out, "%s %s # %s\n",
4406 cmd_reset, to, oneline.buf);
4410 for (iter2 = list; iter2; iter2 = iter2->next) {
4411 struct object_id *oid = &iter2->item->object.oid;
4412 entry = oidmap_get(&commit2todo, oid);
4413 /* only show if not already upstream */
4415 strbuf_addf(out, "%s\n", entry->string);
4416 entry = oidmap_get(&state.commit2label, oid);
4418 strbuf_addf(out, "%s %s\n",
4419 cmd_label, entry->string);
4420 oidset_insert(&shown, oid);
4423 free_commit_list(list);
4426 free_commit_list(commits);
4427 free_commit_list(tips);
4429 strbuf_release(&label);
4430 strbuf_release(&oneline);
4431 strbuf_release(&buf);
4433 oidmap_free(&commit2todo, 1);
4434 oidmap_free(&state.commit2label, 1);
4435 hashmap_free(&state.labels, 1);
4436 strbuf_release(&state.buf);
4441 int sequencer_make_script(struct repository *r, struct strbuf *out, int argc,
4442 const char **argv, unsigned flags)
4444 char *format = NULL;
4445 struct pretty_print_context pp = {0};
4446 struct rev_info revs;
4447 struct commit *commit;
4448 int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4449 const char *insn = flags & TODO_LIST_ABBREVIATE_CMDS ? "p" : "pick";
4450 int rebase_merges = flags & TODO_LIST_REBASE_MERGES;
4452 repo_init_revisions(r, &revs, NULL);
4453 revs.verbose_header = 1;
4455 revs.max_parents = 1;
4456 revs.cherry_mark = 1;
4459 revs.right_only = 1;
4460 revs.sort_order = REV_SORT_IN_GRAPH_ORDER;
4461 revs.topo_order = 1;
4463 revs.pretty_given = 1;
4464 git_config_get_string("rebase.instructionFormat", &format);
4465 if (!format || !*format) {
4467 format = xstrdup("%s");
4469 get_commit_format(format, &revs);
4471 pp.fmt = revs.commit_format;
4472 pp.output_encoding = get_log_output_encoding();
4474 if (setup_revisions(argc, argv, &revs, NULL) > 1)
4475 return error(_("make_script: unhandled options"));
4477 if (prepare_revision_walk(&revs) < 0)
4478 return error(_("make_script: error preparing revisions"));
4481 return make_script_with_merges(&pp, &revs, out, flags);
4483 while ((commit = get_revision(&revs))) {
4484 int is_empty = is_original_commit_empty(commit);
4486 if (!is_empty && (commit->object.flags & PATCHSAME))
4488 if (!keep_empty && is_empty)
4489 strbuf_addf(out, "%c ", comment_line_char);
4490 strbuf_addf(out, "%s %s ", insn,
4491 oid_to_hex(&commit->object.oid));
4492 pretty_print_commit(&pp, commit, out);
4493 strbuf_addch(out, '\n');
4499 * Add commands after pick and (series of) squash/fixup commands
4502 void todo_list_add_exec_commands(struct todo_list *todo_list,
4503 struct string_list *commands)
4505 struct strbuf *buf = &todo_list->buf;
4506 size_t base_offset = buf->len;
4507 int i, insert, nr = 0, alloc = 0;
4508 struct todo_item *items = NULL, *base_items = NULL;
4510 base_items = xcalloc(commands->nr, sizeof(struct todo_item));
4511 for (i = 0; i < commands->nr; i++) {
4512 size_t command_len = strlen(commands->items[i].string);
4514 strbuf_addstr(buf, commands->items[i].string);
4515 strbuf_addch(buf, '\n');
4517 base_items[i].command = TODO_EXEC;
4518 base_items[i].offset_in_buf = base_offset;
4519 base_items[i].arg_offset = base_offset + strlen("exec ");
4520 base_items[i].arg_len = command_len - strlen("exec ");
4522 base_offset += command_len + 1;
4526 * Insert <commands> after every pick. Here, fixup/squash chains
4527 * are considered part of the pick, so we insert the commands *after*
4528 * those chains if there are any.
4530 * As we insert the exec commands immediatly after rearranging
4531 * any fixups and before the user edits the list, a fixup chain
4532 * can never contain comments (any comments are empty picks that
4533 * have been commented out because the user did not specify
4534 * --keep-empty). So, it is safe to insert an exec command
4535 * without looking at the command following a comment.
4538 for (i = 0; i < todo_list->nr; i++) {
4539 enum todo_command command = todo_list->items[i].command;
4540 if (insert && !is_fixup(command)) {
4541 ALLOC_GROW(items, nr + commands->nr, alloc);
4542 COPY_ARRAY(items + nr, base_items, commands->nr);
4548 ALLOC_GROW(items, nr + 1, alloc);
4549 items[nr++] = todo_list->items[i];
4551 if (command == TODO_PICK || command == TODO_MERGE)
4555 /* insert or append final <commands> */
4556 if (insert || nr == todo_list->nr) {
4557 ALLOC_GROW(items, nr + commands->nr, alloc);
4558 COPY_ARRAY(items + nr, base_items, commands->nr);
4563 FREE_AND_NULL(todo_list->items);
4564 todo_list->items = items;
4566 todo_list->alloc = alloc;
4569 static void todo_list_to_strbuf(struct repository *r, struct todo_list *todo_list,
4570 struct strbuf *buf, int num, unsigned flags)
4572 struct todo_item *item;
4573 int i, max = todo_list->nr;
4575 if (num > 0 && num < max)
4578 for (item = todo_list->items, i = 0; i < max; i++, item++) {
4579 /* if the item is not a command write it and continue */
4580 if (item->command >= TODO_COMMENT) {
4581 strbuf_addf(buf, "%.*s\n", item->arg_len,
4582 todo_item_get_arg(todo_list, item));
4586 /* add command to the buffer */
4587 if (flags & TODO_LIST_ABBREVIATE_CMDS)
4588 strbuf_addch(buf, command_to_char(item->command));
4590 strbuf_addstr(buf, command_to_string(item->command));
4594 const char *oid = flags & TODO_LIST_SHORTEN_IDS ?
4595 short_commit_name(item->commit) :
4596 oid_to_hex(&item->commit->object.oid);
4598 if (item->command == TODO_MERGE) {
4599 if (item->flags & TODO_EDIT_MERGE_MSG)
4600 strbuf_addstr(buf, " -c");
4602 strbuf_addstr(buf, " -C");
4605 strbuf_addf(buf, " %s", oid);
4608 /* add all the rest */
4610 strbuf_addch(buf, '\n');
4612 strbuf_addf(buf, " %.*s\n", item->arg_len,
4613 todo_item_get_arg(todo_list, item));
4617 int todo_list_write_to_file(struct repository *r, struct todo_list *todo_list,
4618 const char *file, const char *shortrevisions,
4619 const char *shortonto, int num, unsigned flags)
4622 struct strbuf buf = STRBUF_INIT;
4624 todo_list_to_strbuf(r, todo_list, &buf, num, flags);
4625 if (flags & TODO_LIST_APPEND_TODO_HELP)
4626 append_todo_help(flags & TODO_LIST_KEEP_EMPTY, count_commands(todo_list),
4627 shortrevisions, shortonto, &buf);
4629 res = write_message(buf.buf, buf.len, file, 0);
4630 strbuf_release(&buf);
4635 static const char edit_todo_list_advice[] =
4636 N_("You can fix this with 'git rebase --edit-todo' "
4637 "and then run 'git rebase --continue'.\n"
4638 "Or you can abort the rebase with 'git rebase"
4641 int check_todo_list_from_file(struct repository *r)
4643 struct todo_list old_todo = TODO_LIST_INIT, new_todo = TODO_LIST_INIT;
4646 if (strbuf_read_file_or_whine(&new_todo.buf, rebase_path_todo()) < 0) {
4651 if (strbuf_read_file_or_whine(&old_todo.buf, rebase_path_todo_backup()) < 0) {
4656 res = todo_list_parse_insn_buffer(r, old_todo.buf.buf, &old_todo);
4658 res = todo_list_parse_insn_buffer(r, new_todo.buf.buf, &new_todo);
4660 res = todo_list_check(&old_todo, &new_todo);
4662 fprintf(stderr, _(edit_todo_list_advice));
4664 todo_list_release(&old_todo);
4665 todo_list_release(&new_todo);
4670 /* skip picking commits whose parents are unchanged */
4671 static int skip_unnecessary_picks(struct repository *r,
4672 struct todo_list *todo_list,
4673 struct object_id *base_oid)
4675 struct object_id *parent_oid;
4678 for (i = 0; i < todo_list->nr; i++) {
4679 struct todo_item *item = todo_list->items + i;
4681 if (item->command >= TODO_NOOP)
4683 if (item->command != TODO_PICK)
4685 if (parse_commit(item->commit)) {
4686 return error(_("could not parse commit '%s'"),
4687 oid_to_hex(&item->commit->object.oid));
4689 if (!item->commit->parents)
4690 break; /* root commit */
4691 if (item->commit->parents->next)
4692 break; /* merge commit */
4693 parent_oid = &item->commit->parents->item->object.oid;
4694 if (!oideq(parent_oid, base_oid))
4696 oidcpy(base_oid, &item->commit->object.oid);
4699 const char *done_path = rebase_path_done();
4701 if (todo_list_write_to_file(r, todo_list, done_path, NULL, NULL, i, 0)) {
4702 error_errno(_("could not write to '%s'"), done_path);
4706 MOVE_ARRAY(todo_list->items, todo_list->items + i, todo_list->nr - i);
4708 todo_list->current = 0;
4710 if (is_fixup(peek_command(todo_list, 0)))
4711 record_in_rewritten(base_oid, peek_command(todo_list, 0));
4717 int complete_action(struct repository *r, struct replay_opts *opts, unsigned flags,
4718 const char *shortrevisions, const char *onto_name,
4719 const char *onto, const char *orig_head, struct string_list *commands,
4720 unsigned autosquash, struct todo_list *todo_list)
4722 const char *shortonto, *todo_file = rebase_path_todo();
4723 struct todo_list new_todo = TODO_LIST_INIT;
4724 struct strbuf *buf = &todo_list->buf;
4725 struct object_id oid;
4728 get_oid(onto, &oid);
4729 shortonto = find_unique_abbrev(&oid, DEFAULT_ABBREV);
4731 if (buf->len == 0) {
4732 struct todo_item *item = append_new_todo(todo_list);
4733 item->command = TODO_NOOP;
4734 item->commit = NULL;
4735 item->arg_len = item->arg_offset = item->flags = item->offset_in_buf = 0;
4738 if (autosquash && todo_list_rearrange_squash(todo_list))
4742 todo_list_add_exec_commands(todo_list, commands);
4744 if (count_commands(todo_list) == 0) {
4745 apply_autostash(opts);
4746 sequencer_remove_state(opts);
4748 return error(_("nothing to do"));
4751 res = edit_todo_list(r, todo_list, &new_todo, shortrevisions,
4755 else if (res == -2) {
4756 apply_autostash(opts);
4757 sequencer_remove_state(opts);
4760 } else if (res == -3) {
4761 apply_autostash(opts);
4762 sequencer_remove_state(opts);
4763 todo_list_release(&new_todo);
4765 return error(_("nothing to do"));
4768 if (todo_list_parse_insn_buffer(r, new_todo.buf.buf, &new_todo) ||
4769 todo_list_check(todo_list, &new_todo)) {
4770 fprintf(stderr, _(edit_todo_list_advice));
4771 checkout_onto(opts, onto_name, onto, orig_head);
4772 todo_list_release(&new_todo);
4777 if (opts->allow_ff && skip_unnecessary_picks(r, &new_todo, &oid)) {
4778 todo_list_release(&new_todo);
4779 return error(_("could not skip unnecessary pick commands"));
4782 if (todo_list_write_to_file(r, &new_todo, todo_file, NULL, NULL, -1,
4783 flags & ~(TODO_LIST_SHORTEN_IDS))) {
4784 todo_list_release(&new_todo);
4785 return error_errno(_("could not write '%s'"), todo_file);
4788 todo_list_release(&new_todo);
4790 if (checkout_onto(opts, onto_name, oid_to_hex(&oid), orig_head))
4793 if (require_clean_work_tree(r, "rebase", "", 1, 1))
4796 return sequencer_continue(r, opts);
4799 struct subject2item_entry {
4800 struct hashmap_entry entry;
4802 char subject[FLEX_ARRAY];
4805 static int subject2item_cmp(const void *fndata,
4806 const struct subject2item_entry *a,
4807 const struct subject2item_entry *b, const void *key)
4809 return key ? strcmp(a->subject, key) : strcmp(a->subject, b->subject);
4812 define_commit_slab(commit_todo_item, struct todo_item *);
4815 * Rearrange the todo list that has both "pick commit-id msg" and "pick
4816 * commit-id fixup!/squash! msg" in it so that the latter is put immediately
4817 * after the former, and change "pick" to "fixup"/"squash".
4819 * Note that if the config has specified a custom instruction format, each log
4820 * message will have to be retrieved from the commit (as the oneline in the
4821 * script cannot be trusted) in order to normalize the autosquash arrangement.
4823 int todo_list_rearrange_squash(struct todo_list *todo_list)
4825 struct hashmap subject2item;
4826 int rearranged = 0, *next, *tail, i, nr = 0, alloc = 0;
4828 struct commit_todo_item commit_todo;
4829 struct todo_item *items = NULL;
4831 init_commit_todo_item(&commit_todo);
4833 * The hashmap maps onelines to the respective todo list index.
4835 * If any items need to be rearranged, the next[i] value will indicate
4836 * which item was moved directly after the i'th.
4838 * In that case, last[i] will indicate the index of the latest item to
4839 * be moved to appear after the i'th.
4841 hashmap_init(&subject2item, (hashmap_cmp_fn) subject2item_cmp,
4842 NULL, todo_list->nr);
4843 ALLOC_ARRAY(next, todo_list->nr);
4844 ALLOC_ARRAY(tail, todo_list->nr);
4845 ALLOC_ARRAY(subjects, todo_list->nr);
4846 for (i = 0; i < todo_list->nr; i++) {
4847 struct strbuf buf = STRBUF_INIT;
4848 struct todo_item *item = todo_list->items + i;
4849 const char *commit_buffer, *subject, *p;
4852 struct subject2item_entry *entry;
4854 next[i] = tail[i] = -1;
4855 if (!item->commit || item->command == TODO_DROP) {
4860 if (is_fixup(item->command)) {
4861 clear_commit_todo_item(&commit_todo);
4862 return error(_("the script was already rearranged."));
4865 *commit_todo_item_at(&commit_todo, item->commit) = item;
4867 parse_commit(item->commit);
4868 commit_buffer = get_commit_buffer(item->commit, NULL);
4869 find_commit_subject(commit_buffer, &subject);
4870 format_subject(&buf, subject, " ");
4871 subject = subjects[i] = strbuf_detach(&buf, &subject_len);
4872 unuse_commit_buffer(item->commit, commit_buffer);
4873 if ((skip_prefix(subject, "fixup! ", &p) ||
4874 skip_prefix(subject, "squash! ", &p))) {
4875 struct commit *commit2;
4880 if (!skip_prefix(p, "fixup! ", &p) &&
4881 !skip_prefix(p, "squash! ", &p))
4885 if ((entry = hashmap_get_from_hash(&subject2item,
4887 /* found by title */
4889 else if (!strchr(p, ' ') &&
4891 lookup_commit_reference_by_name(p)) &&
4892 *commit_todo_item_at(&commit_todo, commit2))
4893 /* found by commit name */
4894 i2 = *commit_todo_item_at(&commit_todo, commit2)
4897 /* copy can be a prefix of the commit subject */
4898 for (i2 = 0; i2 < i; i2++)
4900 starts_with(subjects[i2], p))
4908 todo_list->items[i].command =
4909 starts_with(subject, "fixup!") ?
4910 TODO_FIXUP : TODO_SQUASH;
4916 } else if (!hashmap_get_from_hash(&subject2item,
4917 strhash(subject), subject)) {
4918 FLEX_ALLOC_MEM(entry, subject, subject, subject_len);
4920 hashmap_entry_init(entry, strhash(entry->subject));
4921 hashmap_put(&subject2item, entry);
4926 for (i = 0; i < todo_list->nr; i++) {
4927 enum todo_command command = todo_list->items[i].command;
4931 * Initially, all commands are 'pick's. If it is a
4932 * fixup or a squash now, we have rearranged it.
4934 if (is_fixup(command))
4938 ALLOC_GROW(items, nr + 1, alloc);
4939 items[nr++] = todo_list->items[cur];
4944 FREE_AND_NULL(todo_list->items);
4945 todo_list->items = items;
4947 todo_list->alloc = alloc;
4952 for (i = 0; i < todo_list->nr; i++)
4955 hashmap_free(&subject2item, 1);
4957 clear_commit_todo_item(&commit_todo);