5 #include "object-store.h"
10 #include "run-command.h"
13 #include "cache-tree.h"
17 #include "merge-recursive.h"
19 #include "argv-array.h"
23 #include "wt-status.h"
25 #include "notes-utils.h"
27 #include "unpack-trees.h"
31 #include "commit-slab.h"
33 #include "commit-reach.h"
34 #include "rebase-interactive.h"
36 #define GIT_REFLOG_ACTION "GIT_REFLOG_ACTION"
38 static const char sign_off_header[] = "Signed-off-by: ";
39 static const char cherry_picked_prefix[] = "(cherry picked from commit ";
41 GIT_PATH_FUNC(git_path_commit_editmsg, "COMMIT_EDITMSG")
43 GIT_PATH_FUNC(git_path_seq_dir, "sequencer")
45 static GIT_PATH_FUNC(git_path_todo_file, "sequencer/todo")
46 static GIT_PATH_FUNC(git_path_opts_file, "sequencer/opts")
47 static GIT_PATH_FUNC(git_path_head_file, "sequencer/head")
48 static GIT_PATH_FUNC(git_path_abort_safety_file, "sequencer/abort-safety")
50 static GIT_PATH_FUNC(rebase_path, "rebase-merge")
52 * The file containing rebase commands, comments, and empty lines.
53 * This file is created by "git rebase -i" then edited by the user. As
54 * the lines are processed, they are removed from the front of this
55 * file and written to the tail of 'done'.
57 GIT_PATH_FUNC(rebase_path_todo, "rebase-merge/git-rebase-todo")
58 GIT_PATH_FUNC(rebase_path_todo_backup, "rebase-merge/git-rebase-todo.backup")
60 GIT_PATH_FUNC(rebase_path_dropped, "rebase-merge/dropped")
63 * The rebase command lines that have already been processed. A line
64 * is moved here when it is first handled, before any associated user
67 static GIT_PATH_FUNC(rebase_path_done, "rebase-merge/done")
69 * The file to keep track of how many commands were already processed (e.g.
72 static GIT_PATH_FUNC(rebase_path_msgnum, "rebase-merge/msgnum")
74 * The file to keep track of how many commands are to be processed in total
75 * (e.g. for the prompt).
77 static GIT_PATH_FUNC(rebase_path_msgtotal, "rebase-merge/end")
79 * The commit message that is planned to be used for any changes that
80 * need to be committed following a user interaction.
82 static GIT_PATH_FUNC(rebase_path_message, "rebase-merge/message")
84 * The file into which is accumulated the suggested commit message for
85 * squash/fixup commands. When the first of a series of squash/fixups
86 * is seen, the file is created and the commit message from the
87 * previous commit and from the first squash/fixup commit are written
88 * to it. The commit message for each subsequent squash/fixup commit
89 * is appended to the file as it is processed.
91 static GIT_PATH_FUNC(rebase_path_squash_msg, "rebase-merge/message-squash")
93 * If the current series of squash/fixups has not yet included a squash
94 * command, then this file exists and holds the commit message of the
95 * original "pick" commit. (If the series ends without a "squash"
96 * command, then this can be used as the commit message of the combined
97 * commit without opening the editor.)
99 static GIT_PATH_FUNC(rebase_path_fixup_msg, "rebase-merge/message-fixup")
101 * This file contains the list fixup/squash commands that have been
102 * accumulated into message-fixup or message-squash so far.
104 static GIT_PATH_FUNC(rebase_path_current_fixups, "rebase-merge/current-fixups")
106 * A script to set the GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, and
107 * GIT_AUTHOR_DATE that will be used for the commit that is currently
110 static GIT_PATH_FUNC(rebase_path_author_script, "rebase-merge/author-script")
112 * When an "edit" rebase command is being processed, the SHA1 of the
113 * commit to be edited is recorded in this file. When "git rebase
114 * --continue" is executed, if there are any staged changes then they
115 * will be amended to the HEAD commit, but only provided the HEAD
116 * commit is still the commit to be edited. When any other rebase
117 * command is processed, this file is deleted.
119 static GIT_PATH_FUNC(rebase_path_amend, "rebase-merge/amend")
121 * When we stop at a given patch via the "edit" command, this file contains
122 * the abbreviated commit name of the corresponding patch.
124 static GIT_PATH_FUNC(rebase_path_stopped_sha, "rebase-merge/stopped-sha")
126 * For the post-rewrite hook, we make a list of rewritten commits and
127 * their new sha1s. The rewritten-pending list keeps the sha1s of
128 * commits that have been processed, but not committed yet,
129 * e.g. because they are waiting for a 'squash' command.
131 static GIT_PATH_FUNC(rebase_path_rewritten_list, "rebase-merge/rewritten-list")
132 static GIT_PATH_FUNC(rebase_path_rewritten_pending,
133 "rebase-merge/rewritten-pending")
136 * The path of the file containing the OID of the "squash onto" commit, i.e.
137 * the dummy commit used for `reset [new root]`.
139 static GIT_PATH_FUNC(rebase_path_squash_onto, "rebase-merge/squash-onto")
142 * The path of the file listing refs that need to be deleted after the rebase
143 * finishes. This is used by the `label` command to record the need for cleanup.
145 static GIT_PATH_FUNC(rebase_path_refs_to_delete, "rebase-merge/refs-to-delete")
148 * The following files are written by git-rebase just after parsing the
151 static GIT_PATH_FUNC(rebase_path_gpg_sign_opt, "rebase-merge/gpg_sign_opt")
152 static GIT_PATH_FUNC(rebase_path_orig_head, "rebase-merge/orig-head")
153 static GIT_PATH_FUNC(rebase_path_verbose, "rebase-merge/verbose")
154 static GIT_PATH_FUNC(rebase_path_quiet, "rebase-merge/quiet")
155 static GIT_PATH_FUNC(rebase_path_signoff, "rebase-merge/signoff")
156 static GIT_PATH_FUNC(rebase_path_head_name, "rebase-merge/head-name")
157 static GIT_PATH_FUNC(rebase_path_onto, "rebase-merge/onto")
158 static GIT_PATH_FUNC(rebase_path_autostash, "rebase-merge/autostash")
159 static GIT_PATH_FUNC(rebase_path_strategy, "rebase-merge/strategy")
160 static GIT_PATH_FUNC(rebase_path_strategy_opts, "rebase-merge/strategy_opts")
161 static GIT_PATH_FUNC(rebase_path_allow_rerere_autoupdate, "rebase-merge/allow_rerere_autoupdate")
162 static GIT_PATH_FUNC(rebase_path_reschedule_failed_exec, "rebase-merge/reschedule-failed-exec")
163 static GIT_PATH_FUNC(rebase_path_drop_redundant_commits, "rebase-merge/drop_redundant_commits")
164 static GIT_PATH_FUNC(rebase_path_keep_redundant_commits, "rebase-merge/keep_redundant_commits")
166 static int git_sequencer_config(const char *k, const char *v, void *cb)
168 struct replay_opts *opts = cb;
171 if (!strcmp(k, "commit.cleanup")) {
174 status = git_config_string(&s, k, v);
178 if (!strcmp(s, "verbatim")) {
179 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_NONE;
180 opts->explicit_cleanup = 1;
181 } else if (!strcmp(s, "whitespace")) {
182 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_SPACE;
183 opts->explicit_cleanup = 1;
184 } else if (!strcmp(s, "strip")) {
185 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_ALL;
186 opts->explicit_cleanup = 1;
187 } else if (!strcmp(s, "scissors")) {
188 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_SCISSORS;
189 opts->explicit_cleanup = 1;
191 warning(_("invalid commit message cleanup mode '%s'"),
199 if (!strcmp(k, "commit.gpgsign")) {
200 opts->gpg_sign = git_config_bool(k, v) ? xstrdup("") : NULL;
204 status = git_gpg_config(k, v, NULL);
208 return git_diff_basic_config(k, v, NULL);
211 void sequencer_init_config(struct replay_opts *opts)
213 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_NONE;
214 git_config(git_sequencer_config, opts);
217 static inline int is_rebase_i(const struct replay_opts *opts)
219 return opts->action == REPLAY_INTERACTIVE_REBASE;
222 static const char *get_dir(const struct replay_opts *opts)
224 if (is_rebase_i(opts))
225 return rebase_path();
226 return git_path_seq_dir();
229 static const char *get_todo_path(const struct replay_opts *opts)
231 if (is_rebase_i(opts))
232 return rebase_path_todo();
233 return git_path_todo_file();
237 * Returns 0 for non-conforming footer
238 * Returns 1 for conforming footer
239 * Returns 2 when sob exists within conforming footer
240 * Returns 3 when sob exists within conforming footer as last entry
242 static int has_conforming_footer(struct strbuf *sb, struct strbuf *sob,
243 size_t ignore_footer)
245 struct process_trailer_options opts = PROCESS_TRAILER_OPTIONS_INIT;
246 struct trailer_info info;
248 int found_sob = 0, found_sob_last = 0;
252 trailer_info_get(&info, sb->buf, &opts);
254 if (info.trailer_start == info.trailer_end)
257 for (i = 0; i < info.trailer_nr; i++)
258 if (sob && !strncmp(info.trailers[i], sob->buf, sob->len)) {
260 if (i == info.trailer_nr - 1)
264 trailer_info_release(&info);
273 static const char *gpg_sign_opt_quoted(struct replay_opts *opts)
275 static struct strbuf buf = STRBUF_INIT;
279 sq_quotef(&buf, "-S%s", opts->gpg_sign);
283 int sequencer_remove_state(struct replay_opts *opts)
285 struct strbuf buf = STRBUF_INIT;
288 if (is_rebase_i(opts) &&
289 strbuf_read_file(&buf, rebase_path_refs_to_delete(), 0) > 0) {
292 char *eol = strchr(p, '\n');
295 if (delete_ref("(rebase) cleanup", p, NULL, 0) < 0) {
296 warning(_("could not delete '%s'"), p);
305 free(opts->gpg_sign);
306 free(opts->strategy);
307 for (i = 0; i < opts->xopts_nr; i++)
308 free(opts->xopts[i]);
310 strbuf_release(&opts->current_fixups);
313 strbuf_addstr(&buf, get_dir(opts));
314 if (remove_dir_recursively(&buf, 0))
315 ret = error(_("could not remove '%s'"), buf.buf);
316 strbuf_release(&buf);
321 static const char *action_name(const struct replay_opts *opts)
323 switch (opts->action) {
327 return N_("cherry-pick");
328 case REPLAY_INTERACTIVE_REBASE:
331 die(_("unknown action: %d"), opts->action);
334 struct commit_message {
341 static const char *short_commit_name(struct commit *commit)
343 return find_unique_abbrev(&commit->object.oid, DEFAULT_ABBREV);
346 static int get_message(struct commit *commit, struct commit_message *out)
348 const char *abbrev, *subject;
351 out->message = logmsg_reencode(commit, NULL, get_commit_output_encoding());
352 abbrev = short_commit_name(commit);
354 subject_len = find_commit_subject(out->message, &subject);
356 out->subject = xmemdupz(subject, subject_len);
357 out->label = xstrfmt("%s... %s", abbrev, out->subject);
358 out->parent_label = xstrfmt("parent of %s", out->label);
363 static void free_message(struct commit *commit, struct commit_message *msg)
365 free(msg->parent_label);
368 unuse_commit_buffer(commit, msg->message);
371 static void print_advice(struct repository *r, int show_hint,
372 struct replay_opts *opts)
374 char *msg = getenv("GIT_CHERRY_PICK_HELP");
377 fprintf(stderr, "%s\n", msg);
379 * A conflict has occurred but the porcelain
380 * (typically rebase --interactive) wants to take care
381 * of the commit itself so remove CHERRY_PICK_HEAD
383 unlink(git_path_cherry_pick_head(r));
389 advise(_("after resolving the conflicts, mark the corrected paths\n"
390 "with 'git add <paths>' or 'git rm <paths>'"));
392 advise(_("after resolving the conflicts, mark the corrected paths\n"
393 "with 'git add <paths>' or 'git rm <paths>'\n"
394 "and commit the result with 'git commit'"));
398 static int write_message(const void *buf, size_t len, const char *filename,
401 struct lock_file msg_file = LOCK_INIT;
403 int msg_fd = hold_lock_file_for_update(&msg_file, filename, 0);
405 return error_errno(_("could not lock '%s'"), filename);
406 if (write_in_full(msg_fd, buf, len) < 0) {
407 error_errno(_("could not write to '%s'"), filename);
408 rollback_lock_file(&msg_file);
411 if (append_eol && write(msg_fd, "\n", 1) < 0) {
412 error_errno(_("could not write eol to '%s'"), filename);
413 rollback_lock_file(&msg_file);
416 if (commit_lock_file(&msg_file) < 0)
417 return error(_("failed to finalize '%s'"), filename);
422 #define READ_ONELINER_SKIP_IF_EMPTY (1 << 0)
423 #define READ_ONELINER_WARN_MISSING (1 << 1)
426 * Reads a file that was presumably written by a shell script, i.e. with an
427 * end-of-line marker that needs to be stripped.
429 * Note that only the last end-of-line marker is stripped, consistent with the
430 * behavior of "$(cat path)" in a shell script.
432 * Returns 1 if the file was read, 0 if it could not be read or does not exist.
434 static int read_oneliner(struct strbuf *buf,
435 const char *path, unsigned flags)
437 int orig_len = buf->len;
439 if (strbuf_read_file(buf, path, 0) < 0) {
440 if ((flags & READ_ONELINER_WARN_MISSING) ||
441 (errno != ENOENT && errno != ENOTDIR))
442 warning_errno(_("could not read '%s'"), path);
446 if (buf->len > orig_len && buf->buf[buf->len - 1] == '\n') {
447 if (--buf->len > orig_len && buf->buf[buf->len - 1] == '\r')
449 buf->buf[buf->len] = '\0';
452 if ((flags & READ_ONELINER_SKIP_IF_EMPTY) && buf->len == orig_len)
458 static struct tree *empty_tree(struct repository *r)
460 return lookup_tree(r, the_hash_algo->empty_tree);
463 static int error_dirty_index(struct repository *repo, struct replay_opts *opts)
465 if (repo_read_index_unmerged(repo))
466 return error_resolve_conflict(_(action_name(opts)));
468 error(_("your local changes would be overwritten by %s."),
469 _(action_name(opts)));
471 if (advice_commit_before_merge)
472 advise(_("commit your changes or stash them to proceed."));
476 static void update_abort_safety_file(void)
478 struct object_id head;
480 /* Do nothing on a single-pick */
481 if (!file_exists(git_path_seq_dir()))
484 if (!get_oid("HEAD", &head))
485 write_file(git_path_abort_safety_file(), "%s", oid_to_hex(&head));
487 write_file(git_path_abort_safety_file(), "%s", "");
490 static int fast_forward_to(struct repository *r,
491 const struct object_id *to,
492 const struct object_id *from,
494 struct replay_opts *opts)
496 struct ref_transaction *transaction;
497 struct strbuf sb = STRBUF_INIT;
498 struct strbuf err = STRBUF_INIT;
501 if (checkout_fast_forward(r, from, to, 1))
502 return -1; /* the callee should have complained already */
504 strbuf_addf(&sb, _("%s: fast-forward"), _(action_name(opts)));
506 transaction = ref_transaction_begin(&err);
508 ref_transaction_update(transaction, "HEAD",
509 to, unborn && !is_rebase_i(opts) ?
512 ref_transaction_commit(transaction, &err)) {
513 ref_transaction_free(transaction);
514 error("%s", err.buf);
516 strbuf_release(&err);
521 strbuf_release(&err);
522 ref_transaction_free(transaction);
523 update_abort_safety_file();
527 enum commit_msg_cleanup_mode get_cleanup_mode(const char *cleanup_arg,
530 if (!cleanup_arg || !strcmp(cleanup_arg, "default"))
531 return use_editor ? COMMIT_MSG_CLEANUP_ALL :
532 COMMIT_MSG_CLEANUP_SPACE;
533 else if (!strcmp(cleanup_arg, "verbatim"))
534 return COMMIT_MSG_CLEANUP_NONE;
535 else if (!strcmp(cleanup_arg, "whitespace"))
536 return COMMIT_MSG_CLEANUP_SPACE;
537 else if (!strcmp(cleanup_arg, "strip"))
538 return COMMIT_MSG_CLEANUP_ALL;
539 else if (!strcmp(cleanup_arg, "scissors"))
540 return use_editor ? COMMIT_MSG_CLEANUP_SCISSORS :
541 COMMIT_MSG_CLEANUP_SPACE;
543 die(_("Invalid cleanup mode %s"), cleanup_arg);
547 * NB using int rather than enum cleanup_mode to stop clang's
548 * -Wtautological-constant-out-of-range-compare complaining that the comparison
551 static const char *describe_cleanup_mode(int cleanup_mode)
553 static const char *modes[] = { "whitespace",
558 if (cleanup_mode < ARRAY_SIZE(modes))
559 return modes[cleanup_mode];
561 BUG("invalid cleanup_mode provided (%d)", cleanup_mode);
564 void append_conflicts_hint(struct index_state *istate,
565 struct strbuf *msgbuf, enum commit_msg_cleanup_mode cleanup_mode)
569 if (cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS) {
570 strbuf_addch(msgbuf, '\n');
571 wt_status_append_cut_line(msgbuf);
572 strbuf_addch(msgbuf, comment_line_char);
575 strbuf_addch(msgbuf, '\n');
576 strbuf_commented_addf(msgbuf, "Conflicts:\n");
577 for (i = 0; i < istate->cache_nr;) {
578 const struct cache_entry *ce = istate->cache[i++];
580 strbuf_commented_addf(msgbuf, "\t%s\n", ce->name);
581 while (i < istate->cache_nr &&
582 !strcmp(ce->name, istate->cache[i]->name))
588 static int do_recursive_merge(struct repository *r,
589 struct commit *base, struct commit *next,
590 const char *base_label, const char *next_label,
591 struct object_id *head, struct strbuf *msgbuf,
592 struct replay_opts *opts)
594 struct merge_options o;
595 struct tree *next_tree, *base_tree, *head_tree;
598 struct lock_file index_lock = LOCK_INIT;
600 if (repo_hold_locked_index(r, &index_lock, LOCK_REPORT_ON_ERROR) < 0)
605 init_merge_options(&o, r);
606 o.ancestor = base ? base_label : "(empty tree)";
608 o.branch2 = next ? next_label : "(empty tree)";
609 if (is_rebase_i(opts))
611 o.show_rename_progress = 1;
613 head_tree = parse_tree_indirect(head);
614 next_tree = next ? get_commit_tree(next) : empty_tree(r);
615 base_tree = base ? get_commit_tree(base) : empty_tree(r);
617 for (i = 0; i < opts->xopts_nr; i++)
618 parse_merge_opt(&o, opts->xopts[i]);
620 clean = merge_trees(&o,
622 next_tree, base_tree);
623 if (is_rebase_i(opts) && clean <= 0)
624 fputs(o.obuf.buf, stdout);
625 strbuf_release(&o.obuf);
627 rollback_lock_file(&index_lock);
631 if (write_locked_index(r->index, &index_lock,
632 COMMIT_LOCK | SKIP_IF_UNCHANGED))
634 * TRANSLATORS: %s will be "revert", "cherry-pick" or
637 return error(_("%s: Unable to write new index file"),
638 _(action_name(opts)));
641 append_conflicts_hint(r->index, msgbuf,
642 opts->default_msg_cleanup);
647 static struct object_id *get_cache_tree_oid(struct index_state *istate)
649 if (!istate->cache_tree)
650 istate->cache_tree = cache_tree();
652 if (!cache_tree_fully_valid(istate->cache_tree))
653 if (cache_tree_update(istate, 0)) {
654 error(_("unable to update cache tree"));
658 return &istate->cache_tree->oid;
661 static int is_index_unchanged(struct repository *r)
663 struct object_id head_oid, *cache_tree_oid;
664 struct commit *head_commit;
665 struct index_state *istate = r->index;
667 if (!resolve_ref_unsafe("HEAD", RESOLVE_REF_READING, &head_oid, NULL))
668 return error(_("could not resolve HEAD commit"));
670 head_commit = lookup_commit(r, &head_oid);
673 * If head_commit is NULL, check_commit, called from
674 * lookup_commit, would have indicated that head_commit is not
675 * a commit object already. parse_commit() will return failure
676 * without further complaints in such a case. Otherwise, if
677 * the commit is invalid, parse_commit() will complain. So
678 * there is nothing for us to say here. Just return failure.
680 if (parse_commit(head_commit))
683 if (!(cache_tree_oid = get_cache_tree_oid(istate)))
686 return oideq(cache_tree_oid, get_commit_tree_oid(head_commit));
689 static int write_author_script(const char *message)
691 struct strbuf buf = STRBUF_INIT;
696 if (!*message || starts_with(message, "\n")) {
698 /* Missing 'author' line? */
699 unlink(rebase_path_author_script());
701 } else if (skip_prefix(message, "author ", &message))
703 else if ((eol = strchr(message, '\n')))
708 strbuf_addstr(&buf, "GIT_AUTHOR_NAME='");
709 while (*message && *message != '\n' && *message != '\r')
710 if (skip_prefix(message, " <", &message))
712 else if (*message != '\'')
713 strbuf_addch(&buf, *(message++));
715 strbuf_addf(&buf, "'\\%c'", *(message++));
716 strbuf_addstr(&buf, "'\nGIT_AUTHOR_EMAIL='");
717 while (*message && *message != '\n' && *message != '\r')
718 if (skip_prefix(message, "> ", &message))
720 else if (*message != '\'')
721 strbuf_addch(&buf, *(message++));
723 strbuf_addf(&buf, "'\\%c'", *(message++));
724 strbuf_addstr(&buf, "'\nGIT_AUTHOR_DATE='@");
725 while (*message && *message != '\n' && *message != '\r')
726 if (*message != '\'')
727 strbuf_addch(&buf, *(message++));
729 strbuf_addf(&buf, "'\\%c'", *(message++));
730 strbuf_addch(&buf, '\'');
731 res = write_message(buf.buf, buf.len, rebase_path_author_script(), 1);
732 strbuf_release(&buf);
737 * Take a series of KEY='VALUE' lines where VALUE part is
738 * sq-quoted, and append <KEY, VALUE> at the end of the string list
740 static int parse_key_value_squoted(char *buf, struct string_list *list)
743 struct string_list_item *item;
745 char *cp = strchr(buf, '=');
747 np = strchrnul(buf, '\n');
748 return error(_("no key present in '%.*s'"),
749 (int) (np - buf), buf);
751 np = strchrnul(cp, '\n');
753 item = string_list_append(list, buf);
755 buf = np + (*np == '\n');
759 return error(_("unable to dequote value of '%s'"),
761 item->util = xstrdup(cp);
767 * Reads and parses the state directory's "author-script" file, and sets name,
768 * email and date accordingly.
769 * Returns 0 on success, -1 if the file could not be parsed.
771 * The author script is of the format:
773 * GIT_AUTHOR_NAME='$author_name'
774 * GIT_AUTHOR_EMAIL='$author_email'
775 * GIT_AUTHOR_DATE='$author_date'
777 * where $author_name, $author_email and $author_date are quoted. We are strict
778 * with our parsing, as the file was meant to be eval'd in the now-removed
779 * git-am.sh/git-rebase--interactive.sh scripts, and thus if the file differs
780 * from what this function expects, it is better to bail out than to do
781 * something that the user does not expect.
783 int read_author_script(const char *path, char **name, char **email, char **date,
786 struct strbuf buf = STRBUF_INIT;
787 struct string_list kv = STRING_LIST_INIT_DUP;
788 int retval = -1; /* assume failure */
789 int i, name_i = -2, email_i = -2, date_i = -2, err = 0;
791 if (strbuf_read_file(&buf, path, 256) <= 0) {
792 strbuf_release(&buf);
793 if (errno == ENOENT && allow_missing)
796 return error_errno(_("could not open '%s' for reading"),
800 if (parse_key_value_squoted(buf.buf, &kv))
803 for (i = 0; i < kv.nr; i++) {
804 if (!strcmp(kv.items[i].string, "GIT_AUTHOR_NAME")) {
806 name_i = error(_("'GIT_AUTHOR_NAME' already given"));
809 } else if (!strcmp(kv.items[i].string, "GIT_AUTHOR_EMAIL")) {
811 email_i = error(_("'GIT_AUTHOR_EMAIL' already given"));
814 } else if (!strcmp(kv.items[i].string, "GIT_AUTHOR_DATE")) {
816 date_i = error(_("'GIT_AUTHOR_DATE' already given"));
820 err = error(_("unknown variable '%s'"),
825 error(_("missing 'GIT_AUTHOR_NAME'"));
827 error(_("missing 'GIT_AUTHOR_EMAIL'"));
829 error(_("missing 'GIT_AUTHOR_DATE'"));
830 if (date_i < 0 || email_i < 0 || date_i < 0 || err)
832 *name = kv.items[name_i].util;
833 *email = kv.items[email_i].util;
834 *date = kv.items[date_i].util;
837 string_list_clear(&kv, !!retval);
838 strbuf_release(&buf);
843 * Read a GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL AND GIT_AUTHOR_DATE from a
844 * file with shell quoting into struct argv_array. Returns -1 on
845 * error, 0 otherwise.
847 static int read_env_script(struct argv_array *env)
849 char *name, *email, *date;
851 if (read_author_script(rebase_path_author_script(),
852 &name, &email, &date, 0))
855 argv_array_pushf(env, "GIT_AUTHOR_NAME=%s", name);
856 argv_array_pushf(env, "GIT_AUTHOR_EMAIL=%s", email);
857 argv_array_pushf(env, "GIT_AUTHOR_DATE=%s", date);
865 static char *get_author(const char *message)
870 a = find_commit_header(message, "author", &len);
872 return xmemdupz(a, len);
877 static const char staged_changes_advice[] =
878 N_("you have staged changes in your working tree\n"
879 "If these changes are meant to be squashed into the previous commit, run:\n"
881 " git commit --amend %s\n"
883 "If they are meant to go into a new commit, run:\n"
887 "In both cases, once you're done, continue with:\n"
889 " git rebase --continue\n");
891 #define ALLOW_EMPTY (1<<0)
892 #define EDIT_MSG (1<<1)
893 #define AMEND_MSG (1<<2)
894 #define CLEANUP_MSG (1<<3)
895 #define VERIFY_MSG (1<<4)
896 #define CREATE_ROOT_COMMIT (1<<5)
898 static int run_command_silent_on_success(struct child_process *cmd)
900 struct strbuf buf = STRBUF_INIT;
903 cmd->stdout_to_stderr = 1;
904 rc = pipe_command(cmd,
910 fputs(buf.buf, stderr);
911 strbuf_release(&buf);
916 * If we are cherry-pick, and if the merge did not result in
917 * hand-editing, we will hit this commit and inherit the original
918 * author date and name.
920 * If we are revert, or if our cherry-pick results in a hand merge,
921 * we had better say that the current user is responsible for that.
923 * An exception is when run_git_commit() is called during an
924 * interactive rebase: in that case, we will want to retain the
927 static int run_git_commit(struct repository *r,
929 struct replay_opts *opts,
932 struct child_process cmd = CHILD_PROCESS_INIT;
936 if (is_rebase_i(opts) && read_env_script(&cmd.env_array)) {
937 const char *gpg_opt = gpg_sign_opt_quoted(opts);
939 return error(_(staged_changes_advice),
943 argv_array_push(&cmd.args, "commit");
945 if (!(flags & VERIFY_MSG))
946 argv_array_push(&cmd.args, "-n");
947 if ((flags & AMEND_MSG))
948 argv_array_push(&cmd.args, "--amend");
950 argv_array_pushf(&cmd.args, "-S%s", opts->gpg_sign);
952 argv_array_pushl(&cmd.args, "-F", defmsg, NULL);
953 else if (!(flags & EDIT_MSG))
954 argv_array_pushl(&cmd.args, "-C", "HEAD", NULL);
955 if ((flags & CLEANUP_MSG))
956 argv_array_push(&cmd.args, "--cleanup=strip");
957 if ((flags & EDIT_MSG))
958 argv_array_push(&cmd.args, "-e");
959 else if (!(flags & CLEANUP_MSG) &&
960 !opts->signoff && !opts->record_origin &&
961 !opts->explicit_cleanup)
962 argv_array_push(&cmd.args, "--cleanup=verbatim");
964 if ((flags & ALLOW_EMPTY))
965 argv_array_push(&cmd.args, "--allow-empty");
967 if (!(flags & EDIT_MSG))
968 argv_array_push(&cmd.args, "--allow-empty-message");
970 if (is_rebase_i(opts) && !(flags & EDIT_MSG))
971 return run_command_silent_on_success(&cmd);
973 return run_command(&cmd);
976 static int rest_is_empty(const struct strbuf *sb, int start)
981 /* Check if the rest is just whitespace and Signed-off-by's. */
982 for (i = start; i < sb->len; i++) {
983 nl = memchr(sb->buf + i, '\n', sb->len - i);
989 if (strlen(sign_off_header) <= eol - i &&
990 starts_with(sb->buf + i, sign_off_header)) {
995 if (!isspace(sb->buf[i++]))
1002 void cleanup_message(struct strbuf *msgbuf,
1003 enum commit_msg_cleanup_mode cleanup_mode, int verbose)
1005 if (verbose || /* Truncate the message just before the diff, if any. */
1006 cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS)
1007 strbuf_setlen(msgbuf, wt_status_locate_end(msgbuf->buf, msgbuf->len));
1008 if (cleanup_mode != COMMIT_MSG_CLEANUP_NONE)
1009 strbuf_stripspace(msgbuf, cleanup_mode == COMMIT_MSG_CLEANUP_ALL);
1013 * Find out if the message in the strbuf contains only whitespace and
1014 * Signed-off-by lines.
1016 int message_is_empty(const struct strbuf *sb,
1017 enum commit_msg_cleanup_mode cleanup_mode)
1019 if (cleanup_mode == COMMIT_MSG_CLEANUP_NONE && sb->len)
1021 return rest_is_empty(sb, 0);
1025 * See if the user edited the message in the editor or left what
1026 * was in the template intact
1028 int template_untouched(const struct strbuf *sb, const char *template_file,
1029 enum commit_msg_cleanup_mode cleanup_mode)
1031 struct strbuf tmpl = STRBUF_INIT;
1034 if (cleanup_mode == COMMIT_MSG_CLEANUP_NONE && sb->len)
1037 if (!template_file || strbuf_read_file(&tmpl, template_file, 0) <= 0)
1040 strbuf_stripspace(&tmpl, cleanup_mode == COMMIT_MSG_CLEANUP_ALL);
1041 if (!skip_prefix(sb->buf, tmpl.buf, &start))
1043 strbuf_release(&tmpl);
1044 return rest_is_empty(sb, start - sb->buf);
1047 int update_head_with_reflog(const struct commit *old_head,
1048 const struct object_id *new_head,
1049 const char *action, const struct strbuf *msg,
1052 struct ref_transaction *transaction;
1053 struct strbuf sb = STRBUF_INIT;
1058 strbuf_addstr(&sb, action);
1059 strbuf_addstr(&sb, ": ");
1062 nl = strchr(msg->buf, '\n');
1064 strbuf_add(&sb, msg->buf, nl + 1 - msg->buf);
1066 strbuf_addbuf(&sb, msg);
1067 strbuf_addch(&sb, '\n');
1070 transaction = ref_transaction_begin(err);
1072 ref_transaction_update(transaction, "HEAD", new_head,
1073 old_head ? &old_head->object.oid : &null_oid,
1075 ref_transaction_commit(transaction, err)) {
1078 ref_transaction_free(transaction);
1079 strbuf_release(&sb);
1084 static int run_rewrite_hook(const struct object_id *oldoid,
1085 const struct object_id *newoid)
1087 struct child_process proc = CHILD_PROCESS_INIT;
1088 const char *argv[3];
1090 struct strbuf sb = STRBUF_INIT;
1092 argv[0] = find_hook("post-rewrite");
1101 proc.stdout_to_stderr = 1;
1102 proc.trace2_hook_name = "post-rewrite";
1104 code = start_command(&proc);
1107 strbuf_addf(&sb, "%s %s\n", oid_to_hex(oldoid), oid_to_hex(newoid));
1108 sigchain_push(SIGPIPE, SIG_IGN);
1109 write_in_full(proc.in, sb.buf, sb.len);
1111 strbuf_release(&sb);
1112 sigchain_pop(SIGPIPE);
1113 return finish_command(&proc);
1116 void commit_post_rewrite(struct repository *r,
1117 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(r, 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,
1136 const char *name, *arg1 = NULL, *arg2 = NULL;
1138 name = git_path_commit_editmsg();
1139 if (write_message(msg->buf, msg->len, name, 0))
1148 if (run_commit_hook(0, r->index_file, "prepare-commit-msg", name,
1150 ret = error(_("'prepare-commit-msg' hook failed"));
1155 static const char implicit_ident_advice_noconfig[] =
1156 N_("Your name and email address were configured automatically based\n"
1157 "on your username and hostname. Please check that they are accurate.\n"
1158 "You can suppress this message by setting them explicitly. Run the\n"
1159 "following command and follow the instructions in your editor to edit\n"
1160 "your configuration file:\n"
1162 " git config --global --edit\n"
1164 "After doing this, you may fix the identity used for this commit with:\n"
1166 " git commit --amend --reset-author\n");
1168 static const char implicit_ident_advice_config[] =
1169 N_("Your name and email address were configured automatically based\n"
1170 "on your username and hostname. Please check that they are accurate.\n"
1171 "You can suppress this message by setting them explicitly:\n"
1173 " git config --global user.name \"Your Name\"\n"
1174 " git config --global user.email you@example.com\n"
1176 "After doing this, you may fix the identity used for this commit with:\n"
1178 " git commit --amend --reset-author\n");
1180 static const char *implicit_ident_advice(void)
1182 char *user_config = expand_user_path("~/.gitconfig", 0);
1183 char *xdg_config = xdg_config_home("config");
1184 int config_exists = file_exists(user_config) || file_exists(xdg_config);
1190 return _(implicit_ident_advice_config);
1192 return _(implicit_ident_advice_noconfig);
1196 void print_commit_summary(struct repository *r,
1198 const struct object_id *oid,
1201 struct rev_info rev;
1202 struct commit *commit;
1203 struct strbuf format = STRBUF_INIT;
1205 struct pretty_print_context pctx = {0};
1206 struct strbuf author_ident = STRBUF_INIT;
1207 struct strbuf committer_ident = STRBUF_INIT;
1209 commit = lookup_commit(r, oid);
1211 die(_("couldn't look up newly created commit"));
1212 if (parse_commit(commit))
1213 die(_("could not parse newly created commit"));
1215 strbuf_addstr(&format, "format:%h] %s");
1217 format_commit_message(commit, "%an <%ae>", &author_ident, &pctx);
1218 format_commit_message(commit, "%cn <%ce>", &committer_ident, &pctx);
1219 if (strbuf_cmp(&author_ident, &committer_ident)) {
1220 strbuf_addstr(&format, "\n Author: ");
1221 strbuf_addbuf_percentquote(&format, &author_ident);
1223 if (flags & SUMMARY_SHOW_AUTHOR_DATE) {
1224 struct strbuf date = STRBUF_INIT;
1226 format_commit_message(commit, "%ad", &date, &pctx);
1227 strbuf_addstr(&format, "\n Date: ");
1228 strbuf_addbuf_percentquote(&format, &date);
1229 strbuf_release(&date);
1231 if (!committer_ident_sufficiently_given()) {
1232 strbuf_addstr(&format, "\n Committer: ");
1233 strbuf_addbuf_percentquote(&format, &committer_ident);
1234 if (advice_implicit_identity) {
1235 strbuf_addch(&format, '\n');
1236 strbuf_addstr(&format, implicit_ident_advice());
1239 strbuf_release(&author_ident);
1240 strbuf_release(&committer_ident);
1242 repo_init_revisions(r, &rev, prefix);
1243 setup_revisions(0, NULL, &rev, NULL);
1246 rev.diffopt.output_format =
1247 DIFF_FORMAT_SHORTSTAT | DIFF_FORMAT_SUMMARY;
1249 rev.verbose_header = 1;
1250 rev.show_root_diff = 1;
1251 get_commit_format(format.buf, &rev);
1252 rev.always_show_header = 0;
1253 rev.diffopt.detect_rename = DIFF_DETECT_RENAME;
1254 rev.diffopt.break_opt = 0;
1255 diff_setup_done(&rev.diffopt);
1257 head = resolve_ref_unsafe("HEAD", 0, NULL, NULL);
1259 die_errno(_("unable to resolve HEAD after creating commit"));
1260 if (!strcmp(head, "HEAD"))
1261 head = _("detached HEAD");
1263 skip_prefix(head, "refs/heads/", &head);
1264 printf("[%s%s ", head, (flags & SUMMARY_INITIAL_COMMIT) ?
1265 _(" (root-commit)") : "");
1267 if (!log_tree_commit(&rev, commit)) {
1268 rev.always_show_header = 1;
1269 rev.use_terminator = 1;
1270 log_tree_commit(&rev, commit);
1273 strbuf_release(&format);
1276 static int parse_head(struct repository *r, struct commit **head)
1278 struct commit *current_head;
1279 struct object_id oid;
1281 if (get_oid("HEAD", &oid)) {
1282 current_head = NULL;
1284 current_head = lookup_commit_reference(r, &oid);
1286 return error(_("could not parse HEAD"));
1287 if (!oideq(&oid, ¤t_head->object.oid)) {
1288 warning(_("HEAD %s is not a commit!"),
1291 if (parse_commit(current_head))
1292 return error(_("could not parse HEAD commit"));
1294 *head = current_head;
1300 * Try to commit without forking 'git commit'. In some cases we need
1301 * to run 'git commit' to display an error message
1304 * -1 - error unable to commit
1306 * 1 - run 'git commit'
1308 static int try_to_commit(struct repository *r,
1309 struct strbuf *msg, const char *author,
1310 struct replay_opts *opts, unsigned int flags,
1311 struct object_id *oid)
1313 struct object_id tree;
1314 struct commit *current_head = NULL;
1315 struct commit_list *parents = NULL;
1316 struct commit_extra_header *extra = NULL;
1317 struct strbuf err = STRBUF_INIT;
1318 struct strbuf commit_msg = STRBUF_INIT;
1319 char *amend_author = NULL;
1320 const char *hook_commit = NULL;
1321 enum commit_msg_cleanup_mode cleanup;
1324 if (parse_head(r, ¤t_head))
1327 if (flags & AMEND_MSG) {
1328 const char *exclude_gpgsig[] = { "gpgsig", NULL };
1329 const char *out_enc = get_commit_output_encoding();
1330 const char *message = logmsg_reencode(current_head, NULL,
1334 const char *orig_message = NULL;
1336 find_commit_subject(message, &orig_message);
1338 strbuf_addstr(msg, orig_message);
1339 hook_commit = "HEAD";
1341 author = amend_author = get_author(message);
1342 unuse_commit_buffer(current_head, message);
1344 res = error(_("unable to parse commit author"));
1347 parents = copy_commit_list(current_head->parents);
1348 extra = read_commit_extra_headers(current_head, exclude_gpgsig);
1349 } else if (current_head &&
1350 (!(flags & CREATE_ROOT_COMMIT) || (flags & AMEND_MSG))) {
1351 commit_list_insert(current_head, &parents);
1354 if (write_index_as_tree(&tree, r->index, r->index_file, 0, NULL)) {
1355 res = error(_("git write-tree failed to write a tree"));
1359 if (!(flags & ALLOW_EMPTY)) {
1360 struct commit *first_parent = current_head;
1362 if (flags & AMEND_MSG) {
1363 if (current_head->parents) {
1364 first_parent = current_head->parents->item;
1365 if (repo_parse_commit(r, first_parent)) {
1366 res = error(_("could not parse HEAD commit"));
1370 first_parent = NULL;
1373 if (oideq(first_parent
1374 ? get_commit_tree_oid(first_parent)
1375 : the_hash_algo->empty_tree,
1377 res = 1; /* run 'git commit' to display error message */
1382 if (find_hook("prepare-commit-msg")) {
1383 res = run_prepare_commit_msg_hook(r, msg, hook_commit);
1386 if (strbuf_read_file(&commit_msg, git_path_commit_editmsg(),
1388 res = error_errno(_("unable to read commit message "
1390 git_path_commit_editmsg());
1396 if (flags & CLEANUP_MSG)
1397 cleanup = COMMIT_MSG_CLEANUP_ALL;
1398 else if ((opts->signoff || opts->record_origin) &&
1399 !opts->explicit_cleanup)
1400 cleanup = COMMIT_MSG_CLEANUP_SPACE;
1402 cleanup = opts->default_msg_cleanup;
1404 if (cleanup != COMMIT_MSG_CLEANUP_NONE)
1405 strbuf_stripspace(msg, cleanup == COMMIT_MSG_CLEANUP_ALL);
1406 if ((flags & EDIT_MSG) && message_is_empty(msg, cleanup)) {
1407 res = 1; /* run 'git commit' to display error message */
1413 if (commit_tree_extended(msg->buf, msg->len, &tree, parents,
1414 oid, author, opts->gpg_sign, extra)) {
1415 res = error(_("failed to write commit object"));
1419 if (update_head_with_reflog(current_head, oid,
1420 getenv("GIT_REFLOG_ACTION"), msg, &err)) {
1421 res = error("%s", err.buf);
1425 run_commit_hook(0, r->index_file, "post-commit", NULL);
1426 if (flags & AMEND_MSG)
1427 commit_post_rewrite(r, current_head, oid);
1430 free_commit_extra_headers(extra);
1431 strbuf_release(&err);
1432 strbuf_release(&commit_msg);
1438 static int do_commit(struct repository *r,
1439 const char *msg_file, const char *author,
1440 struct replay_opts *opts, unsigned int flags)
1444 if (!(flags & EDIT_MSG) && !(flags & VERIFY_MSG)) {
1445 struct object_id oid;
1446 struct strbuf sb = STRBUF_INIT;
1448 if (msg_file && strbuf_read_file(&sb, msg_file, 2048) < 0)
1449 return error_errno(_("unable to read commit message "
1453 res = try_to_commit(r, msg_file ? &sb : NULL,
1454 author, opts, flags, &oid);
1455 strbuf_release(&sb);
1457 unlink(git_path_cherry_pick_head(r));
1458 unlink(git_path_merge_msg(r));
1459 if (!is_rebase_i(opts))
1460 print_commit_summary(r, NULL, &oid,
1461 SUMMARY_SHOW_AUTHOR_DATE);
1466 return run_git_commit(r, msg_file, opts, flags);
1471 static int is_original_commit_empty(struct commit *commit)
1473 const struct object_id *ptree_oid;
1475 if (parse_commit(commit))
1476 return error(_("could not parse commit %s"),
1477 oid_to_hex(&commit->object.oid));
1478 if (commit->parents) {
1479 struct commit *parent = commit->parents->item;
1480 if (parse_commit(parent))
1481 return error(_("could not parse parent commit %s"),
1482 oid_to_hex(&parent->object.oid));
1483 ptree_oid = get_commit_tree_oid(parent);
1485 ptree_oid = the_hash_algo->empty_tree; /* commit is root */
1488 return oideq(ptree_oid, get_commit_tree_oid(commit));
1492 * Should empty commits be allowed? Return status:
1493 * <0: Error in is_index_unchanged(r) or is_original_commit_empty(commit)
1494 * 0: Halt on empty commit
1495 * 1: Allow empty commit
1496 * 2: Drop empty commit
1498 static int allow_empty(struct repository *r,
1499 struct replay_opts *opts,
1500 struct commit *commit)
1502 int index_unchanged, originally_empty;
1507 * (1) we do not allow empty at all and error out.
1509 * (2) we allow ones that were initially empty, and
1510 * just drop the ones that become empty
1512 * (3) we allow ones that were initially empty, but
1513 * halt for the ones that become empty;
1515 * (4) we allow both.
1517 if (!opts->allow_empty)
1518 return 0; /* let "git commit" barf as necessary */
1520 index_unchanged = is_index_unchanged(r);
1521 if (index_unchanged < 0)
1522 return index_unchanged;
1523 if (!index_unchanged)
1524 return 0; /* we do not have to say --allow-empty */
1526 if (opts->keep_redundant_commits)
1529 originally_empty = is_original_commit_empty(commit);
1530 if (originally_empty < 0)
1531 return originally_empty;
1532 if (originally_empty)
1534 else if (opts->drop_redundant_commits)
1543 } todo_command_info[] = {
1560 static const char *command_to_string(const enum todo_command command)
1562 if (command < TODO_COMMENT)
1563 return todo_command_info[command].str;
1564 die(_("unknown command: %d"), command);
1567 static char command_to_char(const enum todo_command command)
1569 if (command < TODO_COMMENT && todo_command_info[command].c)
1570 return todo_command_info[command].c;
1571 return comment_line_char;
1574 static int is_noop(const enum todo_command command)
1576 return TODO_NOOP <= command;
1579 static int is_fixup(enum todo_command command)
1581 return command == TODO_FIXUP || command == TODO_SQUASH;
1584 /* Does this command create a (non-merge) commit? */
1585 static int is_pick_or_similar(enum todo_command command)
1600 static int update_squash_messages(struct repository *r,
1601 enum todo_command command,
1602 struct commit *commit,
1603 struct replay_opts *opts)
1605 struct strbuf buf = STRBUF_INIT;
1607 const char *message, *body;
1608 const char *encoding = get_commit_output_encoding();
1610 if (opts->current_fixup_count > 0) {
1611 struct strbuf header = STRBUF_INIT;
1614 if (strbuf_read_file(&buf, rebase_path_squash_msg(), 9) <= 0)
1615 return error(_("could not read '%s'"),
1616 rebase_path_squash_msg());
1618 eol = buf.buf[0] != comment_line_char ?
1619 buf.buf : strchrnul(buf.buf, '\n');
1621 strbuf_addf(&header, "%c ", comment_line_char);
1622 strbuf_addf(&header, _("This is a combination of %d commits."),
1623 opts->current_fixup_count + 2);
1624 strbuf_splice(&buf, 0, eol - buf.buf, header.buf, header.len);
1625 strbuf_release(&header);
1627 struct object_id head;
1628 struct commit *head_commit;
1629 const char *head_message, *body;
1631 if (get_oid("HEAD", &head))
1632 return error(_("need a HEAD to fixup"));
1633 if (!(head_commit = lookup_commit_reference(r, &head)))
1634 return error(_("could not read HEAD"));
1635 if (!(head_message = logmsg_reencode(head_commit, NULL, encoding)))
1636 return error(_("could not read HEAD's commit message"));
1638 find_commit_subject(head_message, &body);
1639 if (write_message(body, strlen(body),
1640 rebase_path_fixup_msg(), 0)) {
1641 unuse_commit_buffer(head_commit, head_message);
1642 return error(_("cannot write '%s'"),
1643 rebase_path_fixup_msg());
1646 strbuf_addf(&buf, "%c ", comment_line_char);
1647 strbuf_addf(&buf, _("This is a combination of %d commits."), 2);
1648 strbuf_addf(&buf, "\n%c ", comment_line_char);
1649 strbuf_addstr(&buf, _("This is the 1st commit message:"));
1650 strbuf_addstr(&buf, "\n\n");
1651 strbuf_addstr(&buf, body);
1653 unuse_commit_buffer(head_commit, head_message);
1656 if (!(message = logmsg_reencode(commit, NULL, encoding)))
1657 return error(_("could not read commit message of %s"),
1658 oid_to_hex(&commit->object.oid));
1659 find_commit_subject(message, &body);
1661 if (command == TODO_SQUASH) {
1662 unlink(rebase_path_fixup_msg());
1663 strbuf_addf(&buf, "\n%c ", comment_line_char);
1664 strbuf_addf(&buf, _("This is the commit message #%d:"),
1665 ++opts->current_fixup_count + 1);
1666 strbuf_addstr(&buf, "\n\n");
1667 strbuf_addstr(&buf, body);
1668 } else if (command == TODO_FIXUP) {
1669 strbuf_addf(&buf, "\n%c ", comment_line_char);
1670 strbuf_addf(&buf, _("The commit message #%d will be skipped:"),
1671 ++opts->current_fixup_count + 1);
1672 strbuf_addstr(&buf, "\n\n");
1673 strbuf_add_commented_lines(&buf, body, strlen(body));
1675 return error(_("unknown command: %d"), command);
1676 unuse_commit_buffer(commit, message);
1678 res = write_message(buf.buf, buf.len, rebase_path_squash_msg(), 0);
1679 strbuf_release(&buf);
1682 strbuf_addf(&opts->current_fixups, "%s%s %s",
1683 opts->current_fixups.len ? "\n" : "",
1684 command_to_string(command),
1685 oid_to_hex(&commit->object.oid));
1686 res = write_message(opts->current_fixups.buf,
1687 opts->current_fixups.len,
1688 rebase_path_current_fixups(), 0);
1694 static void flush_rewritten_pending(void)
1696 struct strbuf buf = STRBUF_INIT;
1697 struct object_id newoid;
1700 if (strbuf_read_file(&buf, rebase_path_rewritten_pending(), (GIT_MAX_HEXSZ + 1) * 2) > 0 &&
1701 !get_oid("HEAD", &newoid) &&
1702 (out = fopen_or_warn(rebase_path_rewritten_list(), "a"))) {
1703 char *bol = buf.buf, *eol;
1706 eol = strchrnul(bol, '\n');
1707 fprintf(out, "%.*s %s\n", (int)(eol - bol),
1708 bol, oid_to_hex(&newoid));
1714 unlink(rebase_path_rewritten_pending());
1716 strbuf_release(&buf);
1719 static void record_in_rewritten(struct object_id *oid,
1720 enum todo_command next_command)
1722 FILE *out = fopen_or_warn(rebase_path_rewritten_pending(), "a");
1727 fprintf(out, "%s\n", oid_to_hex(oid));
1730 if (!is_fixup(next_command))
1731 flush_rewritten_pending();
1734 static int do_pick_commit(struct repository *r,
1735 enum todo_command command,
1736 struct commit *commit,
1737 struct replay_opts *opts,
1738 int final_fixup, int *check_todo)
1740 unsigned int flags = opts->edit ? EDIT_MSG : 0;
1741 const char *msg_file = opts->edit ? NULL : git_path_merge_msg(r);
1742 struct object_id head;
1743 struct commit *base, *next, *parent;
1744 const char *base_label, *next_label;
1745 char *author = NULL;
1746 struct commit_message msg = { NULL, NULL, NULL, NULL };
1747 struct strbuf msgbuf = STRBUF_INIT;
1748 int res, unborn = 0, reword = 0, allow, drop_commit;
1750 if (opts->no_commit) {
1752 * We do not intend to commit immediately. We just want to
1753 * merge the differences in, so let's compute the tree
1754 * that represents the "current" state for merge-recursive
1757 if (write_index_as_tree(&head, r->index, r->index_file, 0, NULL))
1758 return error(_("your index file is unmerged."));
1760 unborn = get_oid("HEAD", &head);
1761 /* Do we want to generate a root commit? */
1762 if (is_pick_or_similar(command) && opts->have_squash_onto &&
1763 oideq(&head, &opts->squash_onto)) {
1764 if (is_fixup(command))
1765 return error(_("cannot fixup root commit"));
1766 flags |= CREATE_ROOT_COMMIT;
1769 oidcpy(&head, the_hash_algo->empty_tree);
1770 if (index_differs_from(r, unborn ? empty_tree_oid_hex() : "HEAD",
1772 return error_dirty_index(r, opts);
1774 discard_index(r->index);
1776 if (!commit->parents)
1778 else if (commit->parents->next) {
1779 /* Reverting or cherry-picking a merge commit */
1781 struct commit_list *p;
1783 if (!opts->mainline)
1784 return error(_("commit %s is a merge but no -m option was given."),
1785 oid_to_hex(&commit->object.oid));
1787 for (cnt = 1, p = commit->parents;
1788 cnt != opts->mainline && p;
1791 if (cnt != opts->mainline || !p)
1792 return error(_("commit %s does not have parent %d"),
1793 oid_to_hex(&commit->object.oid), opts->mainline);
1795 } else if (1 < opts->mainline)
1797 * Non-first parent explicitly specified as mainline for
1800 return error(_("commit %s does not have parent %d"),
1801 oid_to_hex(&commit->object.oid), opts->mainline);
1803 parent = commit->parents->item;
1805 if (get_message(commit, &msg) != 0)
1806 return error(_("cannot get commit message for %s"),
1807 oid_to_hex(&commit->object.oid));
1809 if (opts->allow_ff && !is_fixup(command) &&
1810 ((parent && oideq(&parent->object.oid, &head)) ||
1811 (!parent && unborn))) {
1812 if (is_rebase_i(opts))
1813 write_author_script(msg.message);
1814 res = fast_forward_to(r, &commit->object.oid, &head, unborn,
1816 if (res || command != TODO_REWORD)
1820 goto fast_forward_edit;
1822 if (parent && parse_commit(parent) < 0)
1823 /* TRANSLATORS: The first %s will be a "todo" command like
1824 "revert" or "pick", the second %s a SHA1. */
1825 return error(_("%s: cannot parse parent commit %s"),
1826 command_to_string(command),
1827 oid_to_hex(&parent->object.oid));
1830 * "commit" is an existing commit. We would want to apply
1831 * the difference it introduces since its first parent "prev"
1832 * on top of the current HEAD if we are cherry-pick. Or the
1833 * reverse of it if we are revert.
1836 if (command == TODO_REVERT) {
1838 base_label = msg.label;
1840 next_label = msg.parent_label;
1841 strbuf_addstr(&msgbuf, "Revert \"");
1842 strbuf_addstr(&msgbuf, msg.subject);
1843 strbuf_addstr(&msgbuf, "\"\n\nThis reverts commit ");
1844 strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1846 if (commit->parents && commit->parents->next) {
1847 strbuf_addstr(&msgbuf, ", reversing\nchanges made to ");
1848 strbuf_addstr(&msgbuf, oid_to_hex(&parent->object.oid));
1850 strbuf_addstr(&msgbuf, ".\n");
1855 base_label = msg.parent_label;
1857 next_label = msg.label;
1859 /* Append the commit log message to msgbuf. */
1860 if (find_commit_subject(msg.message, &p))
1861 strbuf_addstr(&msgbuf, p);
1863 if (opts->record_origin) {
1864 strbuf_complete_line(&msgbuf);
1865 if (!has_conforming_footer(&msgbuf, NULL, 0))
1866 strbuf_addch(&msgbuf, '\n');
1867 strbuf_addstr(&msgbuf, cherry_picked_prefix);
1868 strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1869 strbuf_addstr(&msgbuf, ")\n");
1871 if (!is_fixup(command))
1872 author = get_author(msg.message);
1875 if (command == TODO_REWORD)
1877 else if (is_fixup(command)) {
1878 if (update_squash_messages(r, command, commit, opts))
1882 msg_file = rebase_path_squash_msg();
1883 else if (file_exists(rebase_path_fixup_msg())) {
1884 flags |= CLEANUP_MSG;
1885 msg_file = rebase_path_fixup_msg();
1887 const char *dest = git_path_squash_msg(r);
1889 if (copy_file(dest, rebase_path_squash_msg(), 0666))
1890 return error(_("could not rename '%s' to '%s'"),
1891 rebase_path_squash_msg(), dest);
1892 unlink(git_path_merge_msg(r));
1898 if (opts->signoff && !is_fixup(command))
1899 append_signoff(&msgbuf, 0, 0);
1901 if (is_rebase_i(opts) && write_author_script(msg.message) < 0)
1903 else if (!opts->strategy || !strcmp(opts->strategy, "recursive") || command == TODO_REVERT) {
1904 res = do_recursive_merge(r, base, next, base_label, next_label,
1905 &head, &msgbuf, opts);
1909 res |= write_message(msgbuf.buf, msgbuf.len,
1910 git_path_merge_msg(r), 0);
1912 struct commit_list *common = NULL;
1913 struct commit_list *remotes = NULL;
1915 res = write_message(msgbuf.buf, msgbuf.len,
1916 git_path_merge_msg(r), 0);
1918 commit_list_insert(base, &common);
1919 commit_list_insert(next, &remotes);
1920 res |= try_merge_command(r, opts->strategy,
1921 opts->xopts_nr, (const char **)opts->xopts,
1922 common, oid_to_hex(&head), remotes);
1923 free_commit_list(common);
1924 free_commit_list(remotes);
1926 strbuf_release(&msgbuf);
1929 * If the merge was clean or if it failed due to conflict, we write
1930 * CHERRY_PICK_HEAD for the subsequent invocation of commit to use.
1931 * However, if the merge did not even start, then we don't want to
1934 if (command == TODO_PICK && !opts->no_commit && (res == 0 || res == 1) &&
1935 update_ref(NULL, "CHERRY_PICK_HEAD", &commit->object.oid, NULL,
1936 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1938 if (command == TODO_REVERT && ((opts->no_commit && res == 0) || res == 1) &&
1939 update_ref(NULL, "REVERT_HEAD", &commit->object.oid, NULL,
1940 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1944 error(command == TODO_REVERT
1945 ? _("could not revert %s... %s")
1946 : _("could not apply %s... %s"),
1947 short_commit_name(commit), msg.subject);
1948 print_advice(r, res == 1, opts);
1949 repo_rerere(r, opts->allow_rerere_auto);
1954 allow = allow_empty(r, opts, commit);
1958 } else if (allow == 1) {
1959 flags |= ALLOW_EMPTY;
1960 } else if (allow == 2) {
1962 unlink(git_path_cherry_pick_head(r));
1963 unlink(git_path_merge_msg(r));
1965 _("dropping %s %s -- patch contents already upstream\n"),
1966 oid_to_hex(&commit->object.oid), msg.subject);
1967 } /* else allow == 0 and there's nothing special to do */
1968 if (!opts->no_commit && !drop_commit) {
1969 if (author || command == TODO_REVERT || (flags & AMEND_MSG))
1970 res = do_commit(r, msg_file, author, opts, flags);
1972 res = error(_("unable to parse commit author"));
1973 *check_todo = !!(flags & EDIT_MSG);
1974 if (!res && reword) {
1976 res = run_git_commit(r, NULL, opts, EDIT_MSG |
1977 VERIFY_MSG | AMEND_MSG |
1978 (flags & ALLOW_EMPTY));
1984 if (!res && final_fixup) {
1985 unlink(rebase_path_fixup_msg());
1986 unlink(rebase_path_squash_msg());
1987 unlink(rebase_path_current_fixups());
1988 strbuf_reset(&opts->current_fixups);
1989 opts->current_fixup_count = 0;
1993 free_message(commit, &msg);
1995 update_abort_safety_file();
2000 static int prepare_revs(struct replay_opts *opts)
2003 * picking (but not reverting) ranges (but not individual revisions)
2004 * should be done in reverse
2006 if (opts->action == REPLAY_PICK && !opts->revs->no_walk)
2007 opts->revs->reverse ^= 1;
2009 if (prepare_revision_walk(opts->revs))
2010 return error(_("revision walk setup failed"));
2015 static int read_and_refresh_cache(struct repository *r,
2016 struct replay_opts *opts)
2018 struct lock_file index_lock = LOCK_INIT;
2019 int index_fd = repo_hold_locked_index(r, &index_lock, 0);
2020 if (repo_read_index(r) < 0) {
2021 rollback_lock_file(&index_lock);
2022 return error(_("git %s: failed to read the index"),
2023 _(action_name(opts)));
2025 refresh_index(r->index, REFRESH_QUIET|REFRESH_UNMERGED, NULL, NULL, NULL);
2026 if (index_fd >= 0) {
2027 if (write_locked_index(r->index, &index_lock,
2028 COMMIT_LOCK | SKIP_IF_UNCHANGED)) {
2029 return error(_("git %s: failed to refresh the index"),
2030 _(action_name(opts)));
2036 enum todo_item_flags {
2037 TODO_EDIT_MERGE_MSG = 1
2040 void todo_list_release(struct todo_list *todo_list)
2042 strbuf_release(&todo_list->buf);
2043 FREE_AND_NULL(todo_list->items);
2044 todo_list->nr = todo_list->alloc = 0;
2047 static struct todo_item *append_new_todo(struct todo_list *todo_list)
2049 ALLOC_GROW(todo_list->items, todo_list->nr + 1, todo_list->alloc);
2050 todo_list->total_nr++;
2051 return todo_list->items + todo_list->nr++;
2054 const char *todo_item_get_arg(struct todo_list *todo_list,
2055 struct todo_item *item)
2057 return todo_list->buf.buf + item->arg_offset;
2060 static int is_command(enum todo_command command, const char **bol)
2062 const char *str = todo_command_info[command].str;
2063 const char nick = todo_command_info[command].c;
2064 const char *p = *bol + 1;
2066 return skip_prefix(*bol, str, bol) ||
2067 ((nick && **bol == nick) &&
2068 (*p == ' ' || *p == '\t' || *p == '\n' || *p == '\r' || !*p) &&
2072 static int parse_insn_line(struct repository *r, struct todo_item *item,
2073 const char *buf, const char *bol, char *eol)
2075 struct object_id commit_oid;
2076 char *end_of_object_name;
2077 int i, saved, status, padding;
2082 bol += strspn(bol, " \t");
2084 if (bol == eol || *bol == '\r' || *bol == comment_line_char) {
2085 item->command = TODO_COMMENT;
2086 item->commit = NULL;
2087 item->arg_offset = bol - buf;
2088 item->arg_len = eol - bol;
2092 for (i = 0; i < TODO_COMMENT; i++)
2093 if (is_command(i, &bol)) {
2097 if (i >= TODO_COMMENT)
2100 /* Eat up extra spaces/ tabs before object name */
2101 padding = strspn(bol, " \t");
2104 if (item->command == TODO_NOOP || item->command == TODO_BREAK) {
2106 return error(_("%s does not accept arguments: '%s'"),
2107 command_to_string(item->command), bol);
2108 item->commit = NULL;
2109 item->arg_offset = bol - buf;
2110 item->arg_len = eol - bol;
2115 return error(_("missing arguments for %s"),
2116 command_to_string(item->command));
2118 if (item->command == TODO_EXEC || item->command == TODO_LABEL ||
2119 item->command == TODO_RESET) {
2120 item->commit = NULL;
2121 item->arg_offset = bol - buf;
2122 item->arg_len = (int)(eol - bol);
2126 if (item->command == TODO_MERGE) {
2127 if (skip_prefix(bol, "-C", &bol))
2128 bol += strspn(bol, " \t");
2129 else if (skip_prefix(bol, "-c", &bol)) {
2130 bol += strspn(bol, " \t");
2131 item->flags |= TODO_EDIT_MERGE_MSG;
2133 item->flags |= TODO_EDIT_MERGE_MSG;
2134 item->commit = NULL;
2135 item->arg_offset = bol - buf;
2136 item->arg_len = (int)(eol - bol);
2141 end_of_object_name = (char *) bol + strcspn(bol, " \t\n");
2142 saved = *end_of_object_name;
2143 *end_of_object_name = '\0';
2144 status = get_oid(bol, &commit_oid);
2146 error(_("could not parse '%s'"), bol); /* return later */
2147 *end_of_object_name = saved;
2149 bol = end_of_object_name + strspn(end_of_object_name, " \t");
2150 item->arg_offset = bol - buf;
2151 item->arg_len = (int)(eol - bol);
2156 item->commit = lookup_commit_reference(r, &commit_oid);
2157 return item->commit ? 0 : -1;
2160 int sequencer_get_last_command(struct repository *r, enum replay_action *action)
2162 const char *todo_file, *bol;
2163 struct strbuf buf = STRBUF_INIT;
2166 todo_file = git_path_todo_file();
2167 if (strbuf_read_file(&buf, todo_file, 0) < 0) {
2168 if (errno == ENOENT || errno == ENOTDIR)
2171 return error_errno("unable to open '%s'", todo_file);
2173 bol = buf.buf + strspn(buf.buf, " \t\r\n");
2174 if (is_command(TODO_PICK, &bol) && (*bol == ' ' || *bol == '\t'))
2175 *action = REPLAY_PICK;
2176 else if (is_command(TODO_REVERT, &bol) &&
2177 (*bol == ' ' || *bol == '\t'))
2178 *action = REPLAY_REVERT;
2182 strbuf_release(&buf);
2187 int todo_list_parse_insn_buffer(struct repository *r, char *buf,
2188 struct todo_list *todo_list)
2190 struct todo_item *item;
2191 char *p = buf, *next_p;
2192 int i, res = 0, fixup_okay = file_exists(rebase_path_done());
2194 todo_list->current = todo_list->nr = 0;
2196 for (i = 1; *p; i++, p = next_p) {
2197 char *eol = strchrnul(p, '\n');
2199 next_p = *eol ? eol + 1 /* skip LF */ : eol;
2201 if (p != eol && eol[-1] == '\r')
2202 eol--; /* strip Carriage Return */
2204 item = append_new_todo(todo_list);
2205 item->offset_in_buf = p - todo_list->buf.buf;
2206 if (parse_insn_line(r, item, buf, p, eol)) {
2207 res = error(_("invalid line %d: %.*s"),
2208 i, (int)(eol - p), p);
2209 item->command = TODO_COMMENT + 1;
2210 item->arg_offset = p - buf;
2211 item->arg_len = (int)(eol - p);
2212 item->commit = NULL;
2217 else if (is_fixup(item->command))
2218 return error(_("cannot '%s' without a previous commit"),
2219 command_to_string(item->command));
2220 else if (!is_noop(item->command))
2227 static int count_commands(struct todo_list *todo_list)
2231 for (i = 0; i < todo_list->nr; i++)
2232 if (todo_list->items[i].command != TODO_COMMENT)
2238 static int get_item_line_offset(struct todo_list *todo_list, int index)
2240 return index < todo_list->nr ?
2241 todo_list->items[index].offset_in_buf : todo_list->buf.len;
2244 static const char *get_item_line(struct todo_list *todo_list, int index)
2246 return todo_list->buf.buf + get_item_line_offset(todo_list, index);
2249 static int get_item_line_length(struct todo_list *todo_list, int index)
2251 return get_item_line_offset(todo_list, index + 1)
2252 - get_item_line_offset(todo_list, index);
2255 static ssize_t strbuf_read_file_or_whine(struct strbuf *sb, const char *path)
2260 fd = open(path, O_RDONLY);
2262 return error_errno(_("could not open '%s'"), path);
2263 len = strbuf_read(sb, fd, 0);
2266 return error(_("could not read '%s'."), path);
2270 static int have_finished_the_last_pick(void)
2272 struct strbuf buf = STRBUF_INIT;
2274 const char *todo_path = git_path_todo_file();
2277 if (strbuf_read_file(&buf, todo_path, 0) < 0) {
2278 if (errno == ENOENT) {
2281 error_errno("unable to open '%s'", todo_path);
2285 /* If there is only one line then we are done */
2286 eol = strchr(buf.buf, '\n');
2287 if (!eol || !eol[1])
2290 strbuf_release(&buf);
2295 void sequencer_post_commit_cleanup(struct repository *r, int verbose)
2297 struct replay_opts opts = REPLAY_OPTS_INIT;
2298 int need_cleanup = 0;
2300 if (file_exists(git_path_cherry_pick_head(r))) {
2301 if (!unlink(git_path_cherry_pick_head(r)) && verbose)
2302 warning(_("cancelling a cherry picking in progress"));
2303 opts.action = REPLAY_PICK;
2307 if (file_exists(git_path_revert_head(r))) {
2308 if (!unlink(git_path_revert_head(r)) && verbose)
2309 warning(_("cancelling a revert in progress"));
2310 opts.action = REPLAY_REVERT;
2317 if (!have_finished_the_last_pick())
2320 sequencer_remove_state(&opts);
2323 static void todo_list_write_total_nr(struct todo_list *todo_list)
2325 FILE *f = fopen_or_warn(rebase_path_msgtotal(), "w");
2328 fprintf(f, "%d\n", todo_list->total_nr);
2333 static int read_populate_todo(struct repository *r,
2334 struct todo_list *todo_list,
2335 struct replay_opts *opts)
2338 const char *todo_file = get_todo_path(opts);
2341 strbuf_reset(&todo_list->buf);
2342 if (strbuf_read_file_or_whine(&todo_list->buf, todo_file) < 0)
2345 res = stat(todo_file, &st);
2347 return error(_("could not stat '%s'"), todo_file);
2348 fill_stat_data(&todo_list->stat, &st);
2350 res = todo_list_parse_insn_buffer(r, todo_list->buf.buf, todo_list);
2352 if (is_rebase_i(opts))
2353 return error(_("please fix this using "
2354 "'git rebase --edit-todo'."));
2355 return error(_("unusable instruction sheet: '%s'"), todo_file);
2358 if (!todo_list->nr &&
2359 (!is_rebase_i(opts) || !file_exists(rebase_path_done())))
2360 return error(_("no commits parsed."));
2362 if (!is_rebase_i(opts)) {
2363 enum todo_command valid =
2364 opts->action == REPLAY_PICK ? TODO_PICK : TODO_REVERT;
2367 for (i = 0; i < todo_list->nr; i++)
2368 if (valid == todo_list->items[i].command)
2370 else if (valid == TODO_PICK)
2371 return error(_("cannot cherry-pick during a revert."));
2373 return error(_("cannot revert during a cherry-pick."));
2376 if (is_rebase_i(opts)) {
2377 struct todo_list done = TODO_LIST_INIT;
2379 if (strbuf_read_file(&done.buf, rebase_path_done(), 0) > 0 &&
2380 !todo_list_parse_insn_buffer(r, done.buf.buf, &done))
2381 todo_list->done_nr = count_commands(&done);
2383 todo_list->done_nr = 0;
2385 todo_list->total_nr = todo_list->done_nr
2386 + count_commands(todo_list);
2387 todo_list_release(&done);
2389 todo_list_write_total_nr(todo_list);
2395 static int git_config_string_dup(char **dest,
2396 const char *var, const char *value)
2399 return config_error_nonbool(var);
2401 *dest = xstrdup(value);
2405 static int populate_opts_cb(const char *key, const char *value, void *data)
2407 struct replay_opts *opts = data;
2412 else if (!strcmp(key, "options.no-commit"))
2413 opts->no_commit = git_config_bool_or_int(key, value, &error_flag);
2414 else if (!strcmp(key, "options.edit"))
2415 opts->edit = git_config_bool_or_int(key, value, &error_flag);
2416 else if (!strcmp(key, "options.allow-empty"))
2418 git_config_bool_or_int(key, value, &error_flag);
2419 else if (!strcmp(key, "options.allow-empty-message"))
2420 opts->allow_empty_message =
2421 git_config_bool_or_int(key, value, &error_flag);
2422 else if (!strcmp(key, "options.keep-redundant-commits"))
2423 opts->keep_redundant_commits =
2424 git_config_bool_or_int(key, value, &error_flag);
2425 else if (!strcmp(key, "options.signoff"))
2426 opts->signoff = git_config_bool_or_int(key, value, &error_flag);
2427 else if (!strcmp(key, "options.record-origin"))
2428 opts->record_origin = git_config_bool_or_int(key, value, &error_flag);
2429 else if (!strcmp(key, "options.allow-ff"))
2430 opts->allow_ff = git_config_bool_or_int(key, value, &error_flag);
2431 else if (!strcmp(key, "options.mainline"))
2432 opts->mainline = git_config_int(key, value);
2433 else if (!strcmp(key, "options.strategy"))
2434 git_config_string_dup(&opts->strategy, key, value);
2435 else if (!strcmp(key, "options.gpg-sign"))
2436 git_config_string_dup(&opts->gpg_sign, key, value);
2437 else if (!strcmp(key, "options.strategy-option")) {
2438 ALLOC_GROW(opts->xopts, opts->xopts_nr + 1, opts->xopts_alloc);
2439 opts->xopts[opts->xopts_nr++] = xstrdup(value);
2440 } else if (!strcmp(key, "options.allow-rerere-auto"))
2441 opts->allow_rerere_auto =
2442 git_config_bool_or_int(key, value, &error_flag) ?
2443 RERERE_AUTOUPDATE : RERERE_NOAUTOUPDATE;
2444 else if (!strcmp(key, "options.default-msg-cleanup")) {
2445 opts->explicit_cleanup = 1;
2446 opts->default_msg_cleanup = get_cleanup_mode(value, 1);
2448 return error(_("invalid key: %s"), key);
2451 return error(_("invalid value for %s: %s"), key, value);
2456 void parse_strategy_opts(struct replay_opts *opts, char *raw_opts)
2459 char *strategy_opts_string = raw_opts;
2461 if (*strategy_opts_string == ' ')
2462 strategy_opts_string++;
2464 opts->xopts_nr = split_cmdline(strategy_opts_string,
2465 (const char ***)&opts->xopts);
2466 for (i = 0; i < opts->xopts_nr; i++) {
2467 const char *arg = opts->xopts[i];
2469 skip_prefix(arg, "--", &arg);
2470 opts->xopts[i] = xstrdup(arg);
2474 static void read_strategy_opts(struct replay_opts *opts, struct strbuf *buf)
2477 if (!read_oneliner(buf, rebase_path_strategy(), 0))
2479 opts->strategy = strbuf_detach(buf, NULL);
2480 if (!read_oneliner(buf, rebase_path_strategy_opts(), 0))
2483 parse_strategy_opts(opts, buf->buf);
2486 static int read_populate_opts(struct replay_opts *opts)
2488 if (is_rebase_i(opts)) {
2489 struct strbuf buf = STRBUF_INIT;
2492 if (read_oneliner(&buf, rebase_path_gpg_sign_opt(),
2493 READ_ONELINER_SKIP_IF_EMPTY)) {
2494 if (!starts_with(buf.buf, "-S"))
2497 free(opts->gpg_sign);
2498 opts->gpg_sign = xstrdup(buf.buf + 2);
2503 if (read_oneliner(&buf, rebase_path_allow_rerere_autoupdate(),
2504 READ_ONELINER_SKIP_IF_EMPTY)) {
2505 if (!strcmp(buf.buf, "--rerere-autoupdate"))
2506 opts->allow_rerere_auto = RERERE_AUTOUPDATE;
2507 else if (!strcmp(buf.buf, "--no-rerere-autoupdate"))
2508 opts->allow_rerere_auto = RERERE_NOAUTOUPDATE;
2512 if (file_exists(rebase_path_verbose()))
2515 if (file_exists(rebase_path_quiet()))
2518 if (file_exists(rebase_path_signoff())) {
2523 if (file_exists(rebase_path_reschedule_failed_exec()))
2524 opts->reschedule_failed_exec = 1;
2526 if (file_exists(rebase_path_drop_redundant_commits()))
2527 opts->drop_redundant_commits = 1;
2529 if (file_exists(rebase_path_keep_redundant_commits()))
2530 opts->keep_redundant_commits = 1;
2532 read_strategy_opts(opts, &buf);
2535 if (read_oneliner(&opts->current_fixups,
2536 rebase_path_current_fixups(),
2537 READ_ONELINER_SKIP_IF_EMPTY)) {
2538 const char *p = opts->current_fixups.buf;
2539 opts->current_fixup_count = 1;
2540 while ((p = strchr(p, '\n'))) {
2541 opts->current_fixup_count++;
2546 if (read_oneliner(&buf, rebase_path_squash_onto(), 0)) {
2547 if (get_oid_hex(buf.buf, &opts->squash_onto) < 0) {
2548 ret = error(_("unusable squash-onto"));
2551 opts->have_squash_onto = 1;
2555 strbuf_release(&buf);
2559 if (!file_exists(git_path_opts_file()))
2562 * The function git_parse_source(), called from git_config_from_file(),
2563 * may die() in case of a syntactically incorrect file. We do not care
2564 * about this case, though, because we wrote that file ourselves, so we
2565 * are pretty certain that it is syntactically correct.
2567 if (git_config_from_file(populate_opts_cb, git_path_opts_file(), opts) < 0)
2568 return error(_("malformed options sheet: '%s'"),
2569 git_path_opts_file());
2573 static void write_strategy_opts(struct replay_opts *opts)
2576 struct strbuf buf = STRBUF_INIT;
2578 for (i = 0; i < opts->xopts_nr; ++i)
2579 strbuf_addf(&buf, " --%s", opts->xopts[i]);
2581 write_file(rebase_path_strategy_opts(), "%s\n", buf.buf);
2582 strbuf_release(&buf);
2585 int write_basic_state(struct replay_opts *opts, const char *head_name,
2586 struct commit *onto, const char *orig_head)
2589 write_file(rebase_path_head_name(), "%s\n", head_name);
2591 write_file(rebase_path_onto(), "%s\n",
2592 oid_to_hex(&onto->object.oid));
2594 write_file(rebase_path_orig_head(), "%s\n", orig_head);
2597 write_file(rebase_path_quiet(), "%s", "");
2599 write_file(rebase_path_verbose(), "%s", "");
2601 write_file(rebase_path_strategy(), "%s\n", opts->strategy);
2602 if (opts->xopts_nr > 0)
2603 write_strategy_opts(opts);
2605 if (opts->allow_rerere_auto == RERERE_AUTOUPDATE)
2606 write_file(rebase_path_allow_rerere_autoupdate(), "--rerere-autoupdate\n");
2607 else if (opts->allow_rerere_auto == RERERE_NOAUTOUPDATE)
2608 write_file(rebase_path_allow_rerere_autoupdate(), "--no-rerere-autoupdate\n");
2611 write_file(rebase_path_gpg_sign_opt(), "-S%s\n", opts->gpg_sign);
2613 write_file(rebase_path_signoff(), "--signoff\n");
2614 if (opts->drop_redundant_commits)
2615 write_file(rebase_path_drop_redundant_commits(), "%s", "");
2616 if (opts->keep_redundant_commits)
2617 write_file(rebase_path_keep_redundant_commits(), "%s", "");
2618 if (opts->reschedule_failed_exec)
2619 write_file(rebase_path_reschedule_failed_exec(), "%s", "");
2624 static int walk_revs_populate_todo(struct todo_list *todo_list,
2625 struct replay_opts *opts)
2627 enum todo_command command = opts->action == REPLAY_PICK ?
2628 TODO_PICK : TODO_REVERT;
2629 const char *command_string = todo_command_info[command].str;
2630 const char *encoding;
2631 struct commit *commit;
2633 if (prepare_revs(opts))
2636 encoding = get_log_output_encoding();
2638 while ((commit = get_revision(opts->revs))) {
2639 struct todo_item *item = append_new_todo(todo_list);
2640 const char *commit_buffer = logmsg_reencode(commit, NULL, encoding);
2641 const char *subject;
2644 item->command = command;
2645 item->commit = commit;
2646 item->arg_offset = 0;
2648 item->offset_in_buf = todo_list->buf.len;
2649 subject_len = find_commit_subject(commit_buffer, &subject);
2650 strbuf_addf(&todo_list->buf, "%s %s %.*s\n", command_string,
2651 short_commit_name(commit), subject_len, subject);
2652 unuse_commit_buffer(commit, commit_buffer);
2656 return error(_("empty commit set passed"));
2661 static int create_seq_dir(struct repository *r)
2663 enum replay_action action;
2664 const char *in_progress_error = NULL;
2665 const char *in_progress_advice = NULL;
2666 unsigned int advise_skip = file_exists(git_path_revert_head(r)) ||
2667 file_exists(git_path_cherry_pick_head(r));
2669 if (!sequencer_get_last_command(r, &action)) {
2672 in_progress_error = _("revert is already in progress");
2673 in_progress_advice =
2674 _("try \"git revert (--continue | %s--abort | --quit)\"");
2677 in_progress_error = _("cherry-pick is already in progress");
2678 in_progress_advice =
2679 _("try \"git cherry-pick (--continue | %s--abort | --quit)\"");
2682 BUG("unexpected action in create_seq_dir");
2685 if (in_progress_error) {
2686 error("%s", in_progress_error);
2687 if (advice_sequencer_in_use)
2688 advise(in_progress_advice,
2689 advise_skip ? "--skip | " : "");
2692 if (mkdir(git_path_seq_dir(), 0777) < 0)
2693 return error_errno(_("could not create sequencer directory '%s'"),
2694 git_path_seq_dir());
2699 static int save_head(const char *head)
2701 struct lock_file head_lock = LOCK_INIT;
2702 struct strbuf buf = STRBUF_INIT;
2706 fd = hold_lock_file_for_update(&head_lock, git_path_head_file(), 0);
2708 return error_errno(_("could not lock HEAD"));
2709 strbuf_addf(&buf, "%s\n", head);
2710 written = write_in_full(fd, buf.buf, buf.len);
2711 strbuf_release(&buf);
2713 error_errno(_("could not write to '%s'"), git_path_head_file());
2714 rollback_lock_file(&head_lock);
2717 if (commit_lock_file(&head_lock) < 0)
2718 return error(_("failed to finalize '%s'"), git_path_head_file());
2722 static int rollback_is_safe(void)
2724 struct strbuf sb = STRBUF_INIT;
2725 struct object_id expected_head, actual_head;
2727 if (strbuf_read_file(&sb, git_path_abort_safety_file(), 0) >= 0) {
2729 if (get_oid_hex(sb.buf, &expected_head)) {
2730 strbuf_release(&sb);
2731 die(_("could not parse %s"), git_path_abort_safety_file());
2733 strbuf_release(&sb);
2735 else if (errno == ENOENT)
2736 oidclr(&expected_head);
2738 die_errno(_("could not read '%s'"), git_path_abort_safety_file());
2740 if (get_oid("HEAD", &actual_head))
2741 oidclr(&actual_head);
2743 return oideq(&actual_head, &expected_head);
2746 static int reset_merge(const struct object_id *oid)
2749 struct argv_array argv = ARGV_ARRAY_INIT;
2751 argv_array_pushl(&argv, "reset", "--merge", NULL);
2753 if (!is_null_oid(oid))
2754 argv_array_push(&argv, oid_to_hex(oid));
2756 ret = run_command_v_opt(argv.argv, RUN_GIT_CMD);
2757 argv_array_clear(&argv);
2762 static int rollback_single_pick(struct repository *r)
2764 struct object_id head_oid;
2766 if (!file_exists(git_path_cherry_pick_head(r)) &&
2767 !file_exists(git_path_revert_head(r)))
2768 return error(_("no cherry-pick or revert in progress"));
2769 if (read_ref_full("HEAD", 0, &head_oid, NULL))
2770 return error(_("cannot resolve HEAD"));
2771 if (is_null_oid(&head_oid))
2772 return error(_("cannot abort from a branch yet to be born"));
2773 return reset_merge(&head_oid);
2776 static int skip_single_pick(void)
2778 struct object_id head;
2780 if (read_ref_full("HEAD", 0, &head, NULL))
2781 return error(_("cannot resolve HEAD"));
2782 return reset_merge(&head);
2785 int sequencer_rollback(struct repository *r, struct replay_opts *opts)
2788 struct object_id oid;
2789 struct strbuf buf = STRBUF_INIT;
2792 f = fopen(git_path_head_file(), "r");
2793 if (!f && errno == ENOENT) {
2795 * There is no multiple-cherry-pick in progress.
2796 * If CHERRY_PICK_HEAD or REVERT_HEAD indicates
2797 * a single-cherry-pick in progress, abort that.
2799 return rollback_single_pick(r);
2802 return error_errno(_("cannot open '%s'"), git_path_head_file());
2803 if (strbuf_getline_lf(&buf, f)) {
2804 error(_("cannot read '%s': %s"), git_path_head_file(),
2805 ferror(f) ? strerror(errno) : _("unexpected end of file"));
2810 if (parse_oid_hex(buf.buf, &oid, &p) || *p != '\0') {
2811 error(_("stored pre-cherry-pick HEAD file '%s' is corrupt"),
2812 git_path_head_file());
2815 if (is_null_oid(&oid)) {
2816 error(_("cannot abort from a branch yet to be born"));
2820 if (!rollback_is_safe()) {
2821 /* Do not error, just do not rollback */
2822 warning(_("You seem to have moved HEAD. "
2823 "Not rewinding, check your HEAD!"));
2825 if (reset_merge(&oid))
2827 strbuf_release(&buf);
2828 return sequencer_remove_state(opts);
2830 strbuf_release(&buf);
2834 int sequencer_skip(struct repository *r, struct replay_opts *opts)
2836 enum replay_action action = -1;
2837 sequencer_get_last_command(r, &action);
2840 * Check whether the subcommand requested to skip the commit is actually
2841 * in progress and that it's safe to skip the commit.
2843 * opts->action tells us which subcommand requested to skip the commit.
2844 * If the corresponding .git/<ACTION>_HEAD exists, we know that the
2845 * action is in progress and we can skip the commit.
2847 * Otherwise we check that the last instruction was related to the
2848 * particular subcommand we're trying to execute and barf if that's not
2851 * Finally we check that the rollback is "safe", i.e., has the HEAD
2852 * moved? In this case, it doesn't make sense to "reset the merge" and
2853 * "skip the commit" as the user already handled this by committing. But
2854 * we'd not want to barf here, instead give advice on how to proceed. We
2855 * only need to check that when .git/<ACTION>_HEAD doesn't exist because
2856 * it gets removed when the user commits, so if it still exists we're
2857 * sure the user can't have committed before.
2859 switch (opts->action) {
2861 if (!file_exists(git_path_revert_head(r))) {
2862 if (action != REPLAY_REVERT)
2863 return error(_("no revert in progress"));
2864 if (!rollback_is_safe())
2869 if (!file_exists(git_path_cherry_pick_head(r))) {
2870 if (action != REPLAY_PICK)
2871 return error(_("no cherry-pick in progress"));
2872 if (!rollback_is_safe())
2877 BUG("unexpected action in sequencer_skip");
2880 if (skip_single_pick())
2881 return error(_("failed to skip the commit"));
2882 if (!is_directory(git_path_seq_dir()))
2885 return sequencer_continue(r, opts);
2888 error(_("there is nothing to skip"));
2890 if (advice_resolve_conflict) {
2891 advise(_("have you committed already?\n"
2892 "try \"git %s --continue\""),
2893 action == REPLAY_REVERT ? "revert" : "cherry-pick");
2898 static int save_todo(struct todo_list *todo_list, struct replay_opts *opts)
2900 struct lock_file todo_lock = LOCK_INIT;
2901 const char *todo_path = get_todo_path(opts);
2902 int next = todo_list->current, offset, fd;
2905 * rebase -i writes "git-rebase-todo" without the currently executing
2906 * command, appending it to "done" instead.
2908 if (is_rebase_i(opts))
2911 fd = hold_lock_file_for_update(&todo_lock, todo_path, 0);
2913 return error_errno(_("could not lock '%s'"), todo_path);
2914 offset = get_item_line_offset(todo_list, next);
2915 if (write_in_full(fd, todo_list->buf.buf + offset,
2916 todo_list->buf.len - offset) < 0)
2917 return error_errno(_("could not write to '%s'"), todo_path);
2918 if (commit_lock_file(&todo_lock) < 0)
2919 return error(_("failed to finalize '%s'"), todo_path);
2921 if (is_rebase_i(opts) && next > 0) {
2922 const char *done = rebase_path_done();
2923 int fd = open(done, O_CREAT | O_WRONLY | O_APPEND, 0666);
2928 if (write_in_full(fd, get_item_line(todo_list, next - 1),
2929 get_item_line_length(todo_list, next - 1))
2931 ret = error_errno(_("could not write to '%s'"), done);
2933 ret = error_errno(_("failed to finalize '%s'"), done);
2939 static int save_opts(struct replay_opts *opts)
2941 const char *opts_file = git_path_opts_file();
2944 if (opts->no_commit)
2945 res |= git_config_set_in_file_gently(opts_file,
2946 "options.no-commit", "true");
2948 res |= git_config_set_in_file_gently(opts_file,
2949 "options.edit", "true");
2950 if (opts->allow_empty)
2951 res |= git_config_set_in_file_gently(opts_file,
2952 "options.allow-empty", "true");
2953 if (opts->allow_empty_message)
2954 res |= git_config_set_in_file_gently(opts_file,
2955 "options.allow-empty-message", "true");
2956 if (opts->keep_redundant_commits)
2957 res |= git_config_set_in_file_gently(opts_file,
2958 "options.keep-redundant-commits", "true");
2960 res |= git_config_set_in_file_gently(opts_file,
2961 "options.signoff", "true");
2962 if (opts->record_origin)
2963 res |= git_config_set_in_file_gently(opts_file,
2964 "options.record-origin", "true");
2966 res |= git_config_set_in_file_gently(opts_file,
2967 "options.allow-ff", "true");
2968 if (opts->mainline) {
2969 struct strbuf buf = STRBUF_INIT;
2970 strbuf_addf(&buf, "%d", opts->mainline);
2971 res |= git_config_set_in_file_gently(opts_file,
2972 "options.mainline", buf.buf);
2973 strbuf_release(&buf);
2976 res |= git_config_set_in_file_gently(opts_file,
2977 "options.strategy", opts->strategy);
2979 res |= git_config_set_in_file_gently(opts_file,
2980 "options.gpg-sign", opts->gpg_sign);
2983 for (i = 0; i < opts->xopts_nr; i++)
2984 res |= git_config_set_multivar_in_file_gently(opts_file,
2985 "options.strategy-option",
2986 opts->xopts[i], "^$", 0);
2988 if (opts->allow_rerere_auto)
2989 res |= git_config_set_in_file_gently(opts_file,
2990 "options.allow-rerere-auto",
2991 opts->allow_rerere_auto == RERERE_AUTOUPDATE ?
2994 if (opts->explicit_cleanup)
2995 res |= git_config_set_in_file_gently(opts_file,
2996 "options.default-msg-cleanup",
2997 describe_cleanup_mode(opts->default_msg_cleanup));
3001 static int make_patch(struct repository *r,
3002 struct commit *commit,
3003 struct replay_opts *opts)
3005 struct strbuf buf = STRBUF_INIT;
3006 struct rev_info log_tree_opt;
3007 const char *subject, *p;
3010 p = short_commit_name(commit);
3011 if (write_message(p, strlen(p), rebase_path_stopped_sha(), 1) < 0)
3013 if (update_ref("rebase", "REBASE_HEAD", &commit->object.oid,
3014 NULL, REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
3015 res |= error(_("could not update %s"), "REBASE_HEAD");
3017 strbuf_addf(&buf, "%s/patch", get_dir(opts));
3018 memset(&log_tree_opt, 0, sizeof(log_tree_opt));
3019 repo_init_revisions(r, &log_tree_opt, NULL);
3020 log_tree_opt.abbrev = 0;
3021 log_tree_opt.diff = 1;
3022 log_tree_opt.diffopt.output_format = DIFF_FORMAT_PATCH;
3023 log_tree_opt.disable_stdin = 1;
3024 log_tree_opt.no_commit_id = 1;
3025 log_tree_opt.diffopt.file = fopen(buf.buf, "w");
3026 log_tree_opt.diffopt.use_color = GIT_COLOR_NEVER;
3027 if (!log_tree_opt.diffopt.file)
3028 res |= error_errno(_("could not open '%s'"), buf.buf);
3030 res |= log_tree_commit(&log_tree_opt, commit);
3031 fclose(log_tree_opt.diffopt.file);
3035 strbuf_addf(&buf, "%s/message", get_dir(opts));
3036 if (!file_exists(buf.buf)) {
3037 const char *encoding = get_commit_output_encoding();
3038 const char *commit_buffer = logmsg_reencode(commit, NULL, encoding);
3039 find_commit_subject(commit_buffer, &subject);
3040 res |= write_message(subject, strlen(subject), buf.buf, 1);
3041 unuse_commit_buffer(commit, commit_buffer);
3043 strbuf_release(&buf);
3048 static int intend_to_amend(void)
3050 struct object_id head;
3053 if (get_oid("HEAD", &head))
3054 return error(_("cannot read HEAD"));
3056 p = oid_to_hex(&head);
3057 return write_message(p, strlen(p), rebase_path_amend(), 1);
3060 static int error_with_patch(struct repository *r,
3061 struct commit *commit,
3062 const char *subject, int subject_len,
3063 struct replay_opts *opts,
3064 int exit_code, int to_amend)
3067 if (make_patch(r, commit, opts))
3069 } else if (copy_file(rebase_path_message(),
3070 git_path_merge_msg(r), 0666))
3071 return error(_("unable to copy '%s' to '%s'"),
3072 git_path_merge_msg(r), rebase_path_message());
3075 if (intend_to_amend())
3079 _("You can amend the commit now, with\n"
3081 " git commit --amend %s\n"
3083 "Once you are satisfied with your changes, run\n"
3085 " git rebase --continue\n"),
3086 gpg_sign_opt_quoted(opts));
3087 } else if (exit_code) {
3089 fprintf_ln(stderr, _("Could not apply %s... %.*s"),
3090 short_commit_name(commit), subject_len, subject);
3093 * We don't have the hash of the parent so
3094 * just print the line from the todo file.
3096 fprintf_ln(stderr, _("Could not merge %.*s"),
3097 subject_len, subject);
3103 static int error_failed_squash(struct repository *r,
3104 struct commit *commit,
3105 struct replay_opts *opts,
3107 const char *subject)
3109 if (copy_file(rebase_path_message(), rebase_path_squash_msg(), 0666))
3110 return error(_("could not copy '%s' to '%s'"),
3111 rebase_path_squash_msg(), rebase_path_message());
3112 unlink(git_path_merge_msg(r));
3113 if (copy_file(git_path_merge_msg(r), rebase_path_message(), 0666))
3114 return error(_("could not copy '%s' to '%s'"),
3115 rebase_path_message(),
3116 git_path_merge_msg(r));
3117 return error_with_patch(r, commit, subject, subject_len, opts, 1, 0);
3120 static int do_exec(struct repository *r, const char *command_line)
3122 struct argv_array child_env = ARGV_ARRAY_INIT;
3123 const char *child_argv[] = { NULL, NULL };
3126 fprintf(stderr, "Executing: %s\n", command_line);
3127 child_argv[0] = command_line;
3128 argv_array_pushf(&child_env, "GIT_DIR=%s", absolute_path(get_git_dir()));
3129 argv_array_pushf(&child_env, "GIT_WORK_TREE=%s",
3130 absolute_path(get_git_work_tree()));
3131 status = run_command_v_opt_cd_env(child_argv, RUN_USING_SHELL, NULL,
3134 /* force re-reading of the cache */
3135 if (discard_index(r->index) < 0 || repo_read_index(r) < 0)
3136 return error(_("could not read index"));
3138 dirty = require_clean_work_tree(r, "rebase", NULL, 1, 1);
3141 warning(_("execution failed: %s\n%s"
3142 "You can fix the problem, and then run\n"
3144 " git rebase --continue\n"
3147 dirty ? N_("and made changes to the index and/or the "
3148 "working tree\n") : "");
3150 /* command not found */
3153 warning(_("execution succeeded: %s\nbut "
3154 "left changes to the index and/or the working tree\n"
3155 "Commit or stash your changes, and then run\n"
3157 " git rebase --continue\n"
3158 "\n"), command_line);
3162 argv_array_clear(&child_env);
3167 static int safe_append(const char *filename, const char *fmt, ...)
3170 struct lock_file lock = LOCK_INIT;
3171 int fd = hold_lock_file_for_update(&lock, filename,
3172 LOCK_REPORT_ON_ERROR);
3173 struct strbuf buf = STRBUF_INIT;
3178 if (strbuf_read_file(&buf, filename, 0) < 0 && errno != ENOENT) {
3179 error_errno(_("could not read '%s'"), filename);
3180 rollback_lock_file(&lock);
3183 strbuf_complete(&buf, '\n');
3185 strbuf_vaddf(&buf, fmt, ap);
3188 if (write_in_full(fd, buf.buf, buf.len) < 0) {
3189 error_errno(_("could not write to '%s'"), filename);
3190 strbuf_release(&buf);
3191 rollback_lock_file(&lock);
3194 if (commit_lock_file(&lock) < 0) {
3195 strbuf_release(&buf);
3196 rollback_lock_file(&lock);
3197 return error(_("failed to finalize '%s'"), filename);
3200 strbuf_release(&buf);
3204 static int do_label(struct repository *r, const char *name, int len)
3206 struct ref_store *refs = get_main_ref_store(r);
3207 struct ref_transaction *transaction;
3208 struct strbuf ref_name = STRBUF_INIT, err = STRBUF_INIT;
3209 struct strbuf msg = STRBUF_INIT;
3211 struct object_id head_oid;
3213 if (len == 1 && *name == '#')
3214 return error(_("illegal label name: '%.*s'"), len, name);
3216 strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
3217 strbuf_addf(&msg, "rebase (label) '%.*s'", len, name);
3219 transaction = ref_store_transaction_begin(refs, &err);
3221 error("%s", err.buf);
3223 } else if (get_oid("HEAD", &head_oid)) {
3224 error(_("could not read HEAD"));
3226 } else if (ref_transaction_update(transaction, ref_name.buf, &head_oid,
3227 NULL, 0, msg.buf, &err) < 0 ||
3228 ref_transaction_commit(transaction, &err)) {
3229 error("%s", err.buf);
3232 ref_transaction_free(transaction);
3233 strbuf_release(&err);
3234 strbuf_release(&msg);
3237 ret = safe_append(rebase_path_refs_to_delete(),
3238 "%s\n", ref_name.buf);
3239 strbuf_release(&ref_name);
3244 static const char *reflog_message(struct replay_opts *opts,
3245 const char *sub_action, const char *fmt, ...);
3247 static int do_reset(struct repository *r,
3248 const char *name, int len,
3249 struct replay_opts *opts)
3251 struct strbuf ref_name = STRBUF_INIT;
3252 struct object_id oid;
3253 struct lock_file lock = LOCK_INIT;
3254 struct tree_desc desc;
3256 struct unpack_trees_options unpack_tree_opts;
3259 if (repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0)
3262 if (len == 10 && !strncmp("[new root]", name, len)) {
3263 if (!opts->have_squash_onto) {
3265 if (commit_tree("", 0, the_hash_algo->empty_tree,
3266 NULL, &opts->squash_onto,
3268 return error(_("writing fake root commit"));
3269 opts->have_squash_onto = 1;
3270 hex = oid_to_hex(&opts->squash_onto);
3271 if (write_message(hex, strlen(hex),
3272 rebase_path_squash_onto(), 0))
3273 return error(_("writing squash-onto"));
3275 oidcpy(&oid, &opts->squash_onto);
3279 /* Determine the length of the label */
3280 for (i = 0; i < len; i++)
3281 if (isspace(name[i]))
3285 strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
3286 if (get_oid(ref_name.buf, &oid) &&
3287 get_oid(ref_name.buf + strlen("refs/rewritten/"), &oid)) {
3288 error(_("could not read '%s'"), ref_name.buf);
3289 rollback_lock_file(&lock);
3290 strbuf_release(&ref_name);
3295 memset(&unpack_tree_opts, 0, sizeof(unpack_tree_opts));
3296 setup_unpack_trees_porcelain(&unpack_tree_opts, "reset");
3297 unpack_tree_opts.head_idx = 1;
3298 unpack_tree_opts.src_index = r->index;
3299 unpack_tree_opts.dst_index = r->index;
3300 unpack_tree_opts.fn = oneway_merge;
3301 unpack_tree_opts.merge = 1;
3302 unpack_tree_opts.update = 1;
3304 if (repo_read_index_unmerged(r)) {
3305 rollback_lock_file(&lock);
3306 strbuf_release(&ref_name);
3307 return error_resolve_conflict(_(action_name(opts)));
3310 if (!fill_tree_descriptor(r, &desc, &oid)) {
3311 error(_("failed to find tree of %s"), oid_to_hex(&oid));
3312 rollback_lock_file(&lock);
3313 free((void *)desc.buffer);
3314 strbuf_release(&ref_name);
3318 if (unpack_trees(1, &desc, &unpack_tree_opts)) {
3319 rollback_lock_file(&lock);
3320 free((void *)desc.buffer);
3321 strbuf_release(&ref_name);
3325 tree = parse_tree_indirect(&oid);
3326 prime_cache_tree(r, r->index, tree);
3328 if (write_locked_index(r->index, &lock, COMMIT_LOCK) < 0)
3329 ret = error(_("could not write index"));
3330 free((void *)desc.buffer);
3333 ret = update_ref(reflog_message(opts, "reset", "'%.*s'",
3334 len, name), "HEAD", &oid,
3335 NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3337 strbuf_release(&ref_name);
3341 static struct commit *lookup_label(const char *label, int len,
3344 struct commit *commit;
3347 strbuf_addf(buf, "refs/rewritten/%.*s", len, label);
3348 commit = lookup_commit_reference_by_name(buf->buf);
3350 /* fall back to non-rewritten ref or commit */
3351 strbuf_splice(buf, 0, strlen("refs/rewritten/"), "", 0);
3352 commit = lookup_commit_reference_by_name(buf->buf);
3356 error(_("could not resolve '%s'"), buf->buf);
3361 static int do_merge(struct repository *r,
3362 struct commit *commit,
3363 const char *arg, int arg_len,
3364 int flags, struct replay_opts *opts)
3366 int run_commit_flags = (flags & TODO_EDIT_MERGE_MSG) ?
3367 EDIT_MSG | VERIFY_MSG : 0;
3368 struct strbuf ref_name = STRBUF_INIT;
3369 struct commit *head_commit, *merge_commit, *i;
3370 struct commit_list *bases, *j, *reversed = NULL;
3371 struct commit_list *to_merge = NULL, **tail = &to_merge;
3372 const char *strategy = !opts->xopts_nr &&
3373 (!opts->strategy || !strcmp(opts->strategy, "recursive")) ?
3374 NULL : opts->strategy;
3375 struct merge_options o;
3376 int merge_arg_len, oneline_offset, can_fast_forward, ret, k;
3377 static struct lock_file lock;
3380 if (repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0) {
3385 head_commit = lookup_commit_reference_by_name("HEAD");
3387 ret = error(_("cannot merge without a current revision"));
3392 * For octopus merges, the arg starts with the list of revisions to be
3393 * merged. The list is optionally followed by '#' and the oneline.
3395 merge_arg_len = oneline_offset = arg_len;
3396 for (p = arg; p - arg < arg_len; p += strspn(p, " \t\n")) {
3399 if (*p == '#' && (!p[1] || isspace(p[1]))) {
3400 p += 1 + strspn(p + 1, " \t\n");
3401 oneline_offset = p - arg;
3404 k = strcspn(p, " \t\n");
3407 merge_commit = lookup_label(p, k, &ref_name);
3408 if (!merge_commit) {
3409 ret = error(_("unable to parse '%.*s'"), k, p);
3412 tail = &commit_list_insert(merge_commit, tail)->next;
3414 merge_arg_len = p - arg;
3418 ret = error(_("nothing to merge: '%.*s'"), arg_len, arg);
3422 if (opts->have_squash_onto &&
3423 oideq(&head_commit->object.oid, &opts->squash_onto)) {
3425 * When the user tells us to "merge" something into a
3426 * "[new root]", let's simply fast-forward to the merge head.
3428 rollback_lock_file(&lock);
3430 ret = error(_("octopus merge cannot be executed on "
3431 "top of a [new root]"));
3433 ret = fast_forward_to(r, &to_merge->item->object.oid,
3434 &head_commit->object.oid, 0,
3440 const char *encoding = get_commit_output_encoding();
3441 const char *message = logmsg_reencode(commit, NULL, encoding);
3446 ret = error(_("could not get commit message of '%s'"),
3447 oid_to_hex(&commit->object.oid));
3450 write_author_script(message);
3451 find_commit_subject(message, &body);
3453 ret = write_message(body, len, git_path_merge_msg(r), 0);
3454 unuse_commit_buffer(commit, message);
3456 error_errno(_("could not write '%s'"),
3457 git_path_merge_msg(r));
3461 struct strbuf buf = STRBUF_INIT;
3464 strbuf_addf(&buf, "author %s", git_author_info(0));
3465 write_author_script(buf.buf);
3468 if (oneline_offset < arg_len) {
3469 p = arg + oneline_offset;
3470 len = arg_len - oneline_offset;
3472 strbuf_addf(&buf, "Merge %s '%.*s'",
3473 to_merge->next ? "branches" : "branch",
3474 merge_arg_len, arg);
3479 ret = write_message(p, len, git_path_merge_msg(r), 0);
3480 strbuf_release(&buf);
3482 error_errno(_("could not write '%s'"),
3483 git_path_merge_msg(r));
3489 * If HEAD is not identical to the first parent of the original merge
3490 * commit, we cannot fast-forward.
3492 can_fast_forward = opts->allow_ff && commit && commit->parents &&
3493 oideq(&commit->parents->item->object.oid,
3494 &head_commit->object.oid);
3497 * If any merge head is different from the original one, we cannot
3500 if (can_fast_forward) {
3501 struct commit_list *p = commit->parents->next;
3503 for (j = to_merge; j && p; j = j->next, p = p->next)
3504 if (!oideq(&j->item->object.oid,
3505 &p->item->object.oid)) {
3506 can_fast_forward = 0;
3510 * If the number of merge heads differs from the original merge
3511 * commit, we cannot fast-forward.
3514 can_fast_forward = 0;
3517 if (can_fast_forward) {
3518 rollback_lock_file(&lock);
3519 ret = fast_forward_to(r, &commit->object.oid,
3520 &head_commit->object.oid, 0, opts);
3521 if (flags & TODO_EDIT_MERGE_MSG) {
3522 run_commit_flags |= AMEND_MSG;
3523 goto fast_forward_edit;
3528 if (strategy || to_merge->next) {
3530 struct child_process cmd = CHILD_PROCESS_INIT;
3532 if (read_env_script(&cmd.env_array)) {
3533 const char *gpg_opt = gpg_sign_opt_quoted(opts);
3535 ret = error(_(staged_changes_advice), gpg_opt, gpg_opt);
3540 argv_array_push(&cmd.args, "merge");
3541 argv_array_push(&cmd.args, "-s");
3543 argv_array_push(&cmd.args, "octopus");
3545 argv_array_push(&cmd.args, strategy);
3546 for (k = 0; k < opts->xopts_nr; k++)
3547 argv_array_pushf(&cmd.args,
3548 "-X%s", opts->xopts[k]);
3550 argv_array_push(&cmd.args, "--no-edit");
3551 argv_array_push(&cmd.args, "--no-ff");
3552 argv_array_push(&cmd.args, "--no-log");
3553 argv_array_push(&cmd.args, "--no-stat");
3554 argv_array_push(&cmd.args, "-F");
3555 argv_array_push(&cmd.args, git_path_merge_msg(r));
3557 argv_array_push(&cmd.args, opts->gpg_sign);
3559 /* Add the tips to be merged */
3560 for (j = to_merge; j; j = j->next)
3561 argv_array_push(&cmd.args,
3562 oid_to_hex(&j->item->object.oid));
3564 strbuf_release(&ref_name);
3565 unlink(git_path_cherry_pick_head(r));
3566 rollback_lock_file(&lock);
3568 rollback_lock_file(&lock);
3569 ret = run_command(&cmd);
3571 /* force re-reading of the cache */
3572 if (!ret && (discard_index(r->index) < 0 ||
3573 repo_read_index(r) < 0))
3574 ret = error(_("could not read index"));
3578 merge_commit = to_merge->item;
3579 bases = get_merge_bases(head_commit, merge_commit);
3580 if (bases && oideq(&merge_commit->object.oid,
3581 &bases->item->object.oid)) {
3583 /* skip merging an ancestor of HEAD */
3587 write_message(oid_to_hex(&merge_commit->object.oid), the_hash_algo->hexsz,
3588 git_path_merge_head(r), 0);
3589 write_message("no-ff", 5, git_path_merge_mode(r), 0);
3591 for (j = bases; j; j = j->next)
3592 commit_list_insert(j->item, &reversed);
3593 free_commit_list(bases);
3596 init_merge_options(&o, r);
3598 o.branch2 = ref_name.buf;
3599 o.buffer_output = 2;
3601 ret = merge_recursive(&o, head_commit, merge_commit, reversed, &i);
3603 fputs(o.obuf.buf, stdout);
3604 strbuf_release(&o.obuf);
3606 error(_("could not even attempt to merge '%.*s'"),
3607 merge_arg_len, arg);
3611 * The return value of merge_recursive() is 1 on clean, and 0 on
3614 * Let's reverse that, so that do_merge() returns 0 upon success and
3615 * 1 upon failed merge (keeping the return value -1 for the cases where
3616 * we will want to reschedule the `merge` command).
3620 if (r->index->cache_changed &&
3621 write_locked_index(r->index, &lock, COMMIT_LOCK)) {
3622 ret = error(_("merge: Unable to write new index file"));
3626 rollback_lock_file(&lock);
3628 repo_rerere(r, opts->allow_rerere_auto);
3631 * In case of problems, we now want to return a positive
3632 * value (a negative one would indicate that the `merge`
3633 * command needs to be rescheduled).
3636 ret = !!run_git_commit(r, git_path_merge_msg(r), opts,
3640 strbuf_release(&ref_name);
3641 rollback_lock_file(&lock);
3642 free_commit_list(to_merge);
3646 static int is_final_fixup(struct todo_list *todo_list)
3648 int i = todo_list->current;
3650 if (!is_fixup(todo_list->items[i].command))
3653 while (++i < todo_list->nr)
3654 if (is_fixup(todo_list->items[i].command))
3656 else if (!is_noop(todo_list->items[i].command))
3661 static enum todo_command peek_command(struct todo_list *todo_list, int offset)
3665 for (i = todo_list->current + offset; i < todo_list->nr; i++)
3666 if (!is_noop(todo_list->items[i].command))
3667 return todo_list->items[i].command;
3672 static int apply_autostash(struct replay_opts *opts)
3674 struct strbuf stash_sha1 = STRBUF_INIT;
3675 struct child_process child = CHILD_PROCESS_INIT;
3678 if (!read_oneliner(&stash_sha1, rebase_path_autostash(),
3679 READ_ONELINER_SKIP_IF_EMPTY)) {
3680 strbuf_release(&stash_sha1);
3683 strbuf_trim(&stash_sha1);
3686 child.no_stdout = 1;
3687 child.no_stderr = 1;
3688 argv_array_push(&child.args, "stash");
3689 argv_array_push(&child.args, "apply");
3690 argv_array_push(&child.args, stash_sha1.buf);
3691 if (!run_command(&child))
3692 fprintf(stderr, _("Applied autostash.\n"));
3694 struct child_process store = CHILD_PROCESS_INIT;
3697 argv_array_push(&store.args, "stash");
3698 argv_array_push(&store.args, "store");
3699 argv_array_push(&store.args, "-m");
3700 argv_array_push(&store.args, "autostash");
3701 argv_array_push(&store.args, "-q");
3702 argv_array_push(&store.args, stash_sha1.buf);
3703 if (run_command(&store))
3704 ret = error(_("cannot store %s"), stash_sha1.buf);
3707 _("Applying autostash resulted in conflicts.\n"
3708 "Your changes are safe in the stash.\n"
3709 "You can run \"git stash pop\" or"
3710 " \"git stash drop\" at any time.\n"));
3713 strbuf_release(&stash_sha1);
3717 static const char *reflog_message(struct replay_opts *opts,
3718 const char *sub_action, const char *fmt, ...)
3721 static struct strbuf buf = STRBUF_INIT;
3725 strbuf_addstr(&buf, action_name(opts));
3727 strbuf_addf(&buf, " (%s)", sub_action);
3729 strbuf_addstr(&buf, ": ");
3730 strbuf_vaddf(&buf, fmt, ap);
3737 static int run_git_checkout(struct repository *r, struct replay_opts *opts,
3738 const char *commit, const char *action)
3740 struct child_process cmd = CHILD_PROCESS_INIT;
3745 argv_array_push(&cmd.args, "checkout");
3746 argv_array_push(&cmd.args, commit);
3747 argv_array_pushf(&cmd.env_array, GIT_REFLOG_ACTION "=%s", action);
3750 ret = run_command(&cmd);
3752 ret = run_command_silent_on_success(&cmd);
3755 discard_index(r->index);
3760 static int checkout_onto(struct repository *r, struct replay_opts *opts,
3761 const char *onto_name, const struct object_id *onto,
3762 const char *orig_head)
3764 struct object_id oid;
3765 const char *action = reflog_message(opts, "start", "checkout %s", onto_name);
3767 if (get_oid(orig_head, &oid))
3768 return error(_("%s: not a valid OID"), orig_head);
3770 if (run_git_checkout(r, opts, oid_to_hex(onto), action)) {
3771 apply_autostash(opts);
3772 sequencer_remove_state(opts);
3773 return error(_("could not detach HEAD"));
3776 return update_ref(NULL, "ORIG_HEAD", &oid, NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3779 static int stopped_at_head(struct repository *r)
3781 struct object_id head;
3782 struct commit *commit;
3783 struct commit_message message;
3785 if (get_oid("HEAD", &head) ||
3786 !(commit = lookup_commit(r, &head)) ||
3787 parse_commit(commit) || get_message(commit, &message))
3788 fprintf(stderr, _("Stopped at HEAD\n"));
3790 fprintf(stderr, _("Stopped at %s\n"), message.label);
3791 free_message(commit, &message);
3797 static const char rescheduled_advice[] =
3798 N_("Could not execute the todo command\n"
3802 "It has been rescheduled; To edit the command before continuing, please\n"
3803 "edit the todo list first:\n"
3805 " git rebase --edit-todo\n"
3806 " git rebase --continue\n");
3808 static int pick_commits(struct repository *r,
3809 struct todo_list *todo_list,
3810 struct replay_opts *opts)
3812 int res = 0, reschedule = 0;
3814 setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
3816 assert(!(opts->signoff || opts->no_commit ||
3817 opts->record_origin || opts->edit));
3818 if (read_and_refresh_cache(r, opts))
3821 while (todo_list->current < todo_list->nr) {
3822 struct todo_item *item = todo_list->items + todo_list->current;
3823 const char *arg = todo_item_get_arg(todo_list, item);
3826 if (save_todo(todo_list, opts))
3828 if (is_rebase_i(opts)) {
3829 if (item->command != TODO_COMMENT) {
3830 FILE *f = fopen(rebase_path_msgnum(), "w");
3832 todo_list->done_nr++;
3835 fprintf(f, "%d\n", todo_list->done_nr);
3839 fprintf(stderr, "Rebasing (%d/%d)%s",
3841 todo_list->total_nr,
3842 opts->verbose ? "\n" : "\r");
3844 unlink(rebase_path_message());
3845 unlink(rebase_path_author_script());
3846 unlink(rebase_path_stopped_sha());
3847 unlink(rebase_path_amend());
3848 unlink(git_path_merge_head(r));
3849 delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
3851 if (item->command == TODO_BREAK) {
3854 return stopped_at_head(r);
3857 if (item->command <= TODO_SQUASH) {
3858 if (is_rebase_i(opts))
3859 setenv("GIT_REFLOG_ACTION", reflog_message(opts,
3860 command_to_string(item->command), NULL),
3862 res = do_pick_commit(r, item->command, item->commit,
3863 opts, is_final_fixup(todo_list),
3865 if (is_rebase_i(opts) && res < 0) {
3867 advise(_(rescheduled_advice),
3868 get_item_line_length(todo_list,
3869 todo_list->current),
3870 get_item_line(todo_list,
3871 todo_list->current));
3872 todo_list->current--;
3873 if (save_todo(todo_list, opts))
3876 if (item->command == TODO_EDIT) {
3877 struct commit *commit = item->commit;
3882 _("Stopped at %s... %.*s\n"),
3883 short_commit_name(commit),
3884 item->arg_len, arg);
3886 return error_with_patch(r, commit,
3887 arg, item->arg_len, opts, res, !res);
3889 if (is_rebase_i(opts) && !res)
3890 record_in_rewritten(&item->commit->object.oid,
3891 peek_command(todo_list, 1));
3892 if (res && is_fixup(item->command)) {
3895 return error_failed_squash(r, item->commit, opts,
3896 item->arg_len, arg);
3897 } else if (res && is_rebase_i(opts) && item->commit) {
3899 struct object_id oid;
3902 * If we are rewording and have either
3903 * fast-forwarded already, or are about to
3904 * create a new root commit, we want to amend,
3905 * otherwise we do not.
3907 if (item->command == TODO_REWORD &&
3908 !get_oid("HEAD", &oid) &&
3909 (oideq(&item->commit->object.oid, &oid) ||
3910 (opts->have_squash_onto &&
3911 oideq(&opts->squash_onto, &oid))))
3914 return res | error_with_patch(r, item->commit,
3915 arg, item->arg_len, opts,
3918 } else if (item->command == TODO_EXEC) {
3919 char *end_of_arg = (char *)(arg + item->arg_len);
3920 int saved = *end_of_arg;
3925 res = do_exec(r, arg);
3926 *end_of_arg = saved;
3929 if (opts->reschedule_failed_exec)
3933 } else if (item->command == TODO_LABEL) {
3934 if ((res = do_label(r, arg, item->arg_len)))
3936 } else if (item->command == TODO_RESET) {
3937 if ((res = do_reset(r, arg, item->arg_len, opts)))
3939 } else if (item->command == TODO_MERGE) {
3940 if ((res = do_merge(r, item->commit,
3942 item->flags, opts)) < 0)
3944 else if (item->commit)
3945 record_in_rewritten(&item->commit->object.oid,
3946 peek_command(todo_list, 1));
3948 /* failed with merge conflicts */
3949 return error_with_patch(r, item->commit,
3952 } else if (!is_noop(item->command))
3953 return error(_("unknown command %d"), item->command);
3956 advise(_(rescheduled_advice),
3957 get_item_line_length(todo_list,
3958 todo_list->current),
3959 get_item_line(todo_list, todo_list->current));
3960 todo_list->current--;
3961 if (save_todo(todo_list, opts))
3964 return error_with_patch(r,
3968 } else if (is_rebase_i(opts) && check_todo && !res) {
3971 if (stat(get_todo_path(opts), &st)) {
3972 res = error_errno(_("could not stat '%s'"),
3973 get_todo_path(opts));
3974 } else if (match_stat_data(&todo_list->stat, &st)) {
3975 /* Reread the todo file if it has changed. */
3976 todo_list_release(todo_list);
3977 if (read_populate_todo(r, todo_list, opts))
3978 res = -1; /* message was printed */
3979 /* `current` will be incremented below */
3980 todo_list->current = -1;
3984 todo_list->current++;
3989 if (is_rebase_i(opts)) {
3990 struct strbuf head_ref = STRBUF_INIT, buf = STRBUF_INIT;
3993 /* Stopped in the middle, as planned? */
3994 if (todo_list->current < todo_list->nr)
3997 if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
3998 starts_with(head_ref.buf, "refs/")) {
4000 struct object_id head, orig;
4003 if (get_oid("HEAD", &head)) {
4004 res = error(_("cannot read HEAD"));
4006 strbuf_release(&head_ref);
4007 strbuf_release(&buf);
4010 if (!read_oneliner(&buf, rebase_path_orig_head(), 0) ||
4011 get_oid_hex(buf.buf, &orig)) {
4012 res = error(_("could not read orig-head"));
4013 goto cleanup_head_ref;
4016 if (!read_oneliner(&buf, rebase_path_onto(), 0)) {
4017 res = error(_("could not read 'onto'"));
4018 goto cleanup_head_ref;
4020 msg = reflog_message(opts, "finish", "%s onto %s",
4021 head_ref.buf, buf.buf);
4022 if (update_ref(msg, head_ref.buf, &head, &orig,
4023 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR)) {
4024 res = error(_("could not update %s"),
4026 goto cleanup_head_ref;
4028 msg = reflog_message(opts, "finish", "returning to %s",
4030 if (create_symref("HEAD", head_ref.buf, msg)) {
4031 res = error(_("could not update HEAD to %s"),
4033 goto cleanup_head_ref;
4038 if (opts->verbose) {
4039 struct rev_info log_tree_opt;
4040 struct object_id orig, head;
4042 memset(&log_tree_opt, 0, sizeof(log_tree_opt));
4043 repo_init_revisions(r, &log_tree_opt, NULL);
4044 log_tree_opt.diff = 1;
4045 log_tree_opt.diffopt.output_format =
4046 DIFF_FORMAT_DIFFSTAT;
4047 log_tree_opt.disable_stdin = 1;
4049 if (read_oneliner(&buf, rebase_path_orig_head(), 0) &&
4050 !get_oid(buf.buf, &orig) &&
4051 !get_oid("HEAD", &head)) {
4052 diff_tree_oid(&orig, &head, "",
4053 &log_tree_opt.diffopt);
4054 log_tree_diff_flush(&log_tree_opt);
4057 flush_rewritten_pending();
4058 if (!stat(rebase_path_rewritten_list(), &st) &&
4060 struct child_process child = CHILD_PROCESS_INIT;
4061 const char *post_rewrite_hook =
4062 find_hook("post-rewrite");
4064 child.in = open(rebase_path_rewritten_list(), O_RDONLY);
4066 argv_array_push(&child.args, "notes");
4067 argv_array_push(&child.args, "copy");
4068 argv_array_push(&child.args, "--for-rewrite=rebase");
4069 /* we don't care if this copying failed */
4070 run_command(&child);
4072 if (post_rewrite_hook) {
4073 struct child_process hook = CHILD_PROCESS_INIT;
4075 hook.in = open(rebase_path_rewritten_list(),
4077 hook.stdout_to_stderr = 1;
4078 hook.trace2_hook_name = "post-rewrite";
4079 argv_array_push(&hook.args, post_rewrite_hook);
4080 argv_array_push(&hook.args, "rebase");
4081 /* we don't care if this hook failed */
4085 apply_autostash(opts);
4091 "Successfully rebased and updated %s.\n",
4095 strbuf_release(&buf);
4096 strbuf_release(&head_ref);
4100 * Sequence of picks finished successfully; cleanup by
4101 * removing the .git/sequencer directory
4103 return sequencer_remove_state(opts);
4106 static int continue_single_pick(struct repository *r)
4108 const char *argv[] = { "commit", NULL };
4110 if (!file_exists(git_path_cherry_pick_head(r)) &&
4111 !file_exists(git_path_revert_head(r)))
4112 return error(_("no cherry-pick or revert in progress"));
4113 return run_command_v_opt(argv, RUN_GIT_CMD);
4116 static int commit_staged_changes(struct repository *r,
4117 struct replay_opts *opts,
4118 struct todo_list *todo_list)
4120 unsigned int flags = ALLOW_EMPTY | EDIT_MSG;
4121 unsigned int final_fixup = 0, is_clean;
4123 if (has_unstaged_changes(r, 1))
4124 return error(_("cannot rebase: You have unstaged changes."));
4126 is_clean = !has_uncommitted_changes(r, 0);
4128 if (file_exists(rebase_path_amend())) {
4129 struct strbuf rev = STRBUF_INIT;
4130 struct object_id head, to_amend;
4132 if (get_oid("HEAD", &head))
4133 return error(_("cannot amend non-existing commit"));
4134 if (!read_oneliner(&rev, rebase_path_amend(), 0))
4135 return error(_("invalid file: '%s'"), rebase_path_amend());
4136 if (get_oid_hex(rev.buf, &to_amend))
4137 return error(_("invalid contents: '%s'"),
4138 rebase_path_amend());
4139 if (!is_clean && !oideq(&head, &to_amend))
4140 return error(_("\nYou have uncommitted changes in your "
4141 "working tree. Please, commit them\n"
4142 "first and then run 'git rebase "
4143 "--continue' again."));
4145 * When skipping a failed fixup/squash, we need to edit the
4146 * commit message, the current fixup list and count, and if it
4147 * was the last fixup/squash in the chain, we need to clean up
4148 * the commit message and if there was a squash, let the user
4151 if (!is_clean || !opts->current_fixup_count)
4152 ; /* this is not the final fixup */
4153 else if (!oideq(&head, &to_amend) ||
4154 !file_exists(rebase_path_stopped_sha())) {
4155 /* was a final fixup or squash done manually? */
4156 if (!is_fixup(peek_command(todo_list, 0))) {
4157 unlink(rebase_path_fixup_msg());
4158 unlink(rebase_path_squash_msg());
4159 unlink(rebase_path_current_fixups());
4160 strbuf_reset(&opts->current_fixups);
4161 opts->current_fixup_count = 0;
4164 /* we are in a fixup/squash chain */
4165 const char *p = opts->current_fixups.buf;
4166 int len = opts->current_fixups.len;
4168 opts->current_fixup_count--;
4170 BUG("Incorrect current_fixups:\n%s", p);
4171 while (len && p[len - 1] != '\n')
4173 strbuf_setlen(&opts->current_fixups, len);
4174 if (write_message(p, len, rebase_path_current_fixups(),
4176 return error(_("could not write file: '%s'"),
4177 rebase_path_current_fixups());
4180 * If a fixup/squash in a fixup/squash chain failed, the
4181 * commit message is already correct, no need to commit
4184 * Only if it is the final command in the fixup/squash
4185 * chain, and only if the chain is longer than a single
4186 * fixup/squash command (which was just skipped), do we
4187 * actually need to re-commit with a cleaned up commit
4190 if (opts->current_fixup_count > 0 &&
4191 !is_fixup(peek_command(todo_list, 0))) {
4194 * If there was not a single "squash" in the
4195 * chain, we only need to clean up the commit
4196 * message, no need to bother the user with
4197 * opening the commit message in the editor.
4199 if (!starts_with(p, "squash ") &&
4200 !strstr(p, "\nsquash "))
4201 flags = (flags & ~EDIT_MSG) | CLEANUP_MSG;
4202 } else if (is_fixup(peek_command(todo_list, 0))) {
4204 * We need to update the squash message to skip
4205 * the latest commit message.
4207 struct commit *commit;
4208 const char *path = rebase_path_squash_msg();
4209 const char *encoding = get_commit_output_encoding();
4211 if (parse_head(r, &commit) ||
4212 !(p = logmsg_reencode(commit, NULL, encoding)) ||
4213 write_message(p, strlen(p), path, 0)) {
4214 unuse_commit_buffer(commit, p);
4215 return error(_("could not write file: "
4218 unuse_commit_buffer(commit, p);
4222 strbuf_release(&rev);
4227 const char *cherry_pick_head = git_path_cherry_pick_head(r);
4229 if (file_exists(cherry_pick_head) && unlink(cherry_pick_head))
4230 return error(_("could not remove CHERRY_PICK_HEAD"));
4235 if (run_git_commit(r, final_fixup ? NULL : rebase_path_message(),
4237 return error(_("could not commit staged changes."));
4238 unlink(rebase_path_amend());
4239 unlink(git_path_merge_head(r));
4241 unlink(rebase_path_fixup_msg());
4242 unlink(rebase_path_squash_msg());
4244 if (opts->current_fixup_count > 0) {
4246 * Whether final fixup or not, we just cleaned up the commit
4249 unlink(rebase_path_current_fixups());
4250 strbuf_reset(&opts->current_fixups);
4251 opts->current_fixup_count = 0;
4256 int sequencer_continue(struct repository *r, struct replay_opts *opts)
4258 struct todo_list todo_list = TODO_LIST_INIT;
4261 if (read_and_refresh_cache(r, opts))
4264 if (read_populate_opts(opts))
4266 if (is_rebase_i(opts)) {
4267 if ((res = read_populate_todo(r, &todo_list, opts)))
4268 goto release_todo_list;
4270 if (file_exists(rebase_path_dropped())) {
4271 if ((res = todo_list_check_against_backup(r, &todo_list)))
4272 goto release_todo_list;
4274 unlink(rebase_path_dropped());
4277 if (commit_staged_changes(r, opts, &todo_list)) {
4279 goto release_todo_list;
4281 } else if (!file_exists(get_todo_path(opts)))
4282 return continue_single_pick(r);
4283 else if ((res = read_populate_todo(r, &todo_list, opts)))
4284 goto release_todo_list;
4286 if (!is_rebase_i(opts)) {
4287 /* Verify that the conflict has been resolved */
4288 if (file_exists(git_path_cherry_pick_head(r)) ||
4289 file_exists(git_path_revert_head(r))) {
4290 res = continue_single_pick(r);
4292 goto release_todo_list;
4294 if (index_differs_from(r, "HEAD", NULL, 0)) {
4295 res = error_dirty_index(r, opts);
4296 goto release_todo_list;
4298 todo_list.current++;
4299 } else if (file_exists(rebase_path_stopped_sha())) {
4300 struct strbuf buf = STRBUF_INIT;
4301 struct object_id oid;
4303 if (read_oneliner(&buf, rebase_path_stopped_sha(),
4304 READ_ONELINER_SKIP_IF_EMPTY) &&
4305 !get_oid_committish(buf.buf, &oid))
4306 record_in_rewritten(&oid, peek_command(&todo_list, 0));
4307 strbuf_release(&buf);
4310 res = pick_commits(r, &todo_list, opts);
4312 todo_list_release(&todo_list);
4316 static int single_pick(struct repository *r,
4317 struct commit *cmit,
4318 struct replay_opts *opts)
4322 setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
4323 return do_pick_commit(r, opts->action == REPLAY_PICK ?
4324 TODO_PICK : TODO_REVERT, cmit, opts, 0,
4328 int sequencer_pick_revisions(struct repository *r,
4329 struct replay_opts *opts)
4331 struct todo_list todo_list = TODO_LIST_INIT;
4332 struct object_id oid;
4336 if (read_and_refresh_cache(r, opts))
4339 for (i = 0; i < opts->revs->pending.nr; i++) {
4340 struct object_id oid;
4341 const char *name = opts->revs->pending.objects[i].name;
4343 /* This happens when using --stdin. */
4347 if (!get_oid(name, &oid)) {
4348 if (!lookup_commit_reference_gently(r, &oid, 1)) {
4349 enum object_type type = oid_object_info(r,
4352 return error(_("%s: can't cherry-pick a %s"),
4353 name, type_name(type));
4356 return error(_("%s: bad revision"), name);
4360 * If we were called as "git cherry-pick <commit>", just
4361 * cherry-pick/revert it, set CHERRY_PICK_HEAD /
4362 * REVERT_HEAD, and don't touch the sequencer state.
4363 * This means it is possible to cherry-pick in the middle
4364 * of a cherry-pick sequence.
4366 if (opts->revs->cmdline.nr == 1 &&
4367 opts->revs->cmdline.rev->whence == REV_CMD_REV &&
4368 opts->revs->no_walk &&
4369 !opts->revs->cmdline.rev->flags) {
4370 struct commit *cmit;
4371 if (prepare_revision_walk(opts->revs))
4372 return error(_("revision walk setup failed"));
4373 cmit = get_revision(opts->revs);
4375 return error(_("empty commit set passed"));
4376 if (get_revision(opts->revs))
4377 BUG("unexpected extra commit from walk");
4378 return single_pick(r, cmit, opts);
4382 * Start a new cherry-pick/ revert sequence; but
4383 * first, make sure that an existing one isn't in
4387 if (walk_revs_populate_todo(&todo_list, opts) ||
4388 create_seq_dir(r) < 0)
4390 if (get_oid("HEAD", &oid) && (opts->action == REPLAY_REVERT))
4391 return error(_("can't revert as initial commit"));
4392 if (save_head(oid_to_hex(&oid)))
4394 if (save_opts(opts))
4396 update_abort_safety_file();
4397 res = pick_commits(r, &todo_list, opts);
4398 todo_list_release(&todo_list);
4402 void append_signoff(struct strbuf *msgbuf, size_t ignore_footer, unsigned flag)
4404 unsigned no_dup_sob = flag & APPEND_SIGNOFF_DEDUP;
4405 struct strbuf sob = STRBUF_INIT;
4408 strbuf_addstr(&sob, sign_off_header);
4409 strbuf_addstr(&sob, fmt_name(WANT_COMMITTER_IDENT));
4410 strbuf_addch(&sob, '\n');
4413 strbuf_complete_line(msgbuf);
4416 * If the whole message buffer is equal to the sob, pretend that we
4417 * found a conforming footer with a matching sob
4419 if (msgbuf->len - ignore_footer == sob.len &&
4420 !strncmp(msgbuf->buf, sob.buf, sob.len))
4423 has_footer = has_conforming_footer(msgbuf, &sob, ignore_footer);
4426 const char *append_newlines = NULL;
4427 size_t len = msgbuf->len - ignore_footer;
4431 * The buffer is completely empty. Leave foom for
4432 * the title and body to be filled in by the user.
4434 append_newlines = "\n\n";
4435 } else if (len == 1) {
4437 * Buffer contains a single newline. Add another
4438 * so that we leave room for the title and body.
4440 append_newlines = "\n";
4441 } else if (msgbuf->buf[len - 2] != '\n') {
4443 * Buffer ends with a single newline. Add another
4444 * so that there is an empty line between the message
4447 append_newlines = "\n";
4448 } /* else, the buffer already ends with two newlines. */
4450 if (append_newlines)
4451 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4452 append_newlines, strlen(append_newlines));
4455 if (has_footer != 3 && (!no_dup_sob || has_footer != 2))
4456 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4459 strbuf_release(&sob);
4462 struct labels_entry {
4463 struct hashmap_entry entry;
4464 char label[FLEX_ARRAY];
4467 static int labels_cmp(const void *fndata, const struct hashmap_entry *eptr,
4468 const struct hashmap_entry *entry_or_key, const void *key)
4470 const struct labels_entry *a, *b;
4472 a = container_of(eptr, const struct labels_entry, entry);
4473 b = container_of(entry_or_key, const struct labels_entry, entry);
4475 return key ? strcmp(a->label, key) : strcmp(a->label, b->label);
4478 struct string_entry {
4479 struct oidmap_entry entry;
4480 char string[FLEX_ARRAY];
4483 struct label_state {
4484 struct oidmap commit2label;
4485 struct hashmap labels;
4489 static const char *label_oid(struct object_id *oid, const char *label,
4490 struct label_state *state)
4492 struct labels_entry *labels_entry;
4493 struct string_entry *string_entry;
4494 struct object_id dummy;
4497 string_entry = oidmap_get(&state->commit2label, oid);
4499 return string_entry->string;
4502 * For "uninteresting" commits, i.e. commits that are not to be
4503 * rebased, and which can therefore not be labeled, we use a unique
4504 * abbreviation of the commit name. This is slightly more complicated
4505 * than calling find_unique_abbrev() because we also need to make
4506 * sure that the abbreviation does not conflict with any other
4509 * We disallow "interesting" commits to be labeled by a string that
4510 * is a valid full-length hash, to ensure that we always can find an
4511 * abbreviation for any uninteresting commit's names that does not
4512 * clash with any other label.
4514 strbuf_reset(&state->buf);
4518 strbuf_grow(&state->buf, GIT_MAX_HEXSZ);
4519 label = p = state->buf.buf;
4521 find_unique_abbrev_r(p, oid, default_abbrev);
4524 * We may need to extend the abbreviated hash so that there is
4525 * no conflicting label.
4527 if (hashmap_get_from_hash(&state->labels, strihash(p), p)) {
4528 size_t i = strlen(p) + 1;
4530 oid_to_hex_r(p, oid);
4531 for (; i < the_hash_algo->hexsz; i++) {
4534 if (!hashmap_get_from_hash(&state->labels,
4541 struct strbuf *buf = &state->buf;
4544 * Sanitize labels by replacing non-alpha-numeric characters
4545 * (including white-space ones) by dashes, as they might be
4546 * illegal in file names (and hence in ref names).
4548 * Note that we retain non-ASCII UTF-8 characters (identified
4549 * via the most significant bit). They should be all acceptable
4550 * in file names. We do not validate the UTF-8 here, that's not
4551 * the job of this function.
4553 for (; *label; label++)
4554 if ((*label & 0x80) || isalnum(*label))
4555 strbuf_addch(buf, *label);
4556 /* avoid leading dash and double-dashes */
4557 else if (buf->len && buf->buf[buf->len - 1] != '-')
4558 strbuf_addch(buf, '-');
4560 strbuf_addstr(buf, "rev-");
4561 strbuf_add_unique_abbrev(buf, oid, default_abbrev);
4565 if ((buf->len == the_hash_algo->hexsz &&
4566 !get_oid_hex(label, &dummy)) ||
4567 (buf->len == 1 && *label == '#') ||
4568 hashmap_get_from_hash(&state->labels,
4569 strihash(label), label)) {
4571 * If the label already exists, or if the label is a
4572 * valid full OID, or the label is a '#' (which we use
4573 * as a separator between merge heads and oneline), we
4574 * append a dash and a number to make it unique.
4576 size_t len = buf->len;
4578 for (i = 2; ; i++) {
4579 strbuf_setlen(buf, len);
4580 strbuf_addf(buf, "-%d", i);
4581 if (!hashmap_get_from_hash(&state->labels,
4591 FLEX_ALLOC_STR(labels_entry, label, label);
4592 hashmap_entry_init(&labels_entry->entry, strihash(label));
4593 hashmap_add(&state->labels, &labels_entry->entry);
4595 FLEX_ALLOC_STR(string_entry, string, label);
4596 oidcpy(&string_entry->entry.oid, oid);
4597 oidmap_put(&state->commit2label, string_entry);
4599 return string_entry->string;
4602 static int make_script_with_merges(struct pretty_print_context *pp,
4603 struct rev_info *revs, struct strbuf *out,
4606 int rebase_cousins = flags & TODO_LIST_REBASE_COUSINS;
4607 int root_with_onto = flags & TODO_LIST_ROOT_WITH_ONTO;
4608 struct strbuf buf = STRBUF_INIT, oneline = STRBUF_INIT;
4609 struct strbuf label = STRBUF_INIT;
4610 struct commit_list *commits = NULL, **tail = &commits, *iter;
4611 struct commit_list *tips = NULL, **tips_tail = &tips;
4612 struct commit *commit;
4613 struct oidmap commit2todo = OIDMAP_INIT;
4614 struct string_entry *entry;
4615 struct oidset interesting = OIDSET_INIT, child_seen = OIDSET_INIT,
4616 shown = OIDSET_INIT;
4617 struct label_state state = { OIDMAP_INIT, { NULL }, STRBUF_INIT };
4619 int abbr = flags & TODO_LIST_ABBREVIATE_CMDS;
4620 const char *cmd_pick = abbr ? "p" : "pick",
4621 *cmd_label = abbr ? "l" : "label",
4622 *cmd_reset = abbr ? "t" : "reset",
4623 *cmd_merge = abbr ? "m" : "merge";
4625 oidmap_init(&commit2todo, 0);
4626 oidmap_init(&state.commit2label, 0);
4627 hashmap_init(&state.labels, labels_cmp, NULL, 0);
4628 strbuf_init(&state.buf, 32);
4630 if (revs->cmdline.nr && (revs->cmdline.rev[0].flags & BOTTOM)) {
4631 struct labels_entry *onto_label_entry;
4632 struct object_id *oid = &revs->cmdline.rev[0].item->oid;
4633 FLEX_ALLOC_STR(entry, string, "onto");
4634 oidcpy(&entry->entry.oid, oid);
4635 oidmap_put(&state.commit2label, entry);
4637 FLEX_ALLOC_STR(onto_label_entry, label, "onto");
4638 hashmap_entry_init(&onto_label_entry->entry, strihash("onto"));
4639 hashmap_add(&state.labels, &onto_label_entry->entry);
4644 * - get onelines for all commits
4645 * - gather all branch tips (i.e. 2nd or later parents of merges)
4646 * - label all branch tips
4648 while ((commit = get_revision(revs))) {
4649 struct commit_list *to_merge;
4650 const char *p1, *p2;
4651 struct object_id *oid;
4654 tail = &commit_list_insert(commit, tail)->next;
4655 oidset_insert(&interesting, &commit->object.oid);
4657 is_empty = is_original_commit_empty(commit);
4658 if (!is_empty && (commit->object.flags & PATCHSAME))
4661 strbuf_reset(&oneline);
4662 pretty_print_commit(pp, commit, &oneline);
4664 to_merge = commit->parents ? commit->parents->next : NULL;
4666 /* non-merge commit: easy case */
4668 strbuf_addf(&buf, "%s %s %s", cmd_pick,
4669 oid_to_hex(&commit->object.oid),
4672 FLEX_ALLOC_STR(entry, string, buf.buf);
4673 oidcpy(&entry->entry.oid, &commit->object.oid);
4674 oidmap_put(&commit2todo, entry);
4679 /* Create a label */
4680 strbuf_reset(&label);
4681 if (skip_prefix(oneline.buf, "Merge ", &p1) &&
4682 (p1 = strchr(p1, '\'')) &&
4683 (p2 = strchr(++p1, '\'')))
4684 strbuf_add(&label, p1, p2 - p1);
4685 else if (skip_prefix(oneline.buf, "Merge pull request ",
4687 (p1 = strstr(p1, " from ")))
4688 strbuf_addstr(&label, p1 + strlen(" from "));
4690 strbuf_addbuf(&label, &oneline);
4693 strbuf_addf(&buf, "%s -C %s",
4694 cmd_merge, oid_to_hex(&commit->object.oid));
4696 /* label the tips of merged branches */
4697 for (; to_merge; to_merge = to_merge->next) {
4698 oid = &to_merge->item->object.oid;
4699 strbuf_addch(&buf, ' ');
4701 if (!oidset_contains(&interesting, oid)) {
4702 strbuf_addstr(&buf, label_oid(oid, NULL,
4707 tips_tail = &commit_list_insert(to_merge->item,
4710 strbuf_addstr(&buf, label_oid(oid, label.buf, &state));
4712 strbuf_addf(&buf, " # %s", oneline.buf);
4714 FLEX_ALLOC_STR(entry, string, buf.buf);
4715 oidcpy(&entry->entry.oid, &commit->object.oid);
4716 oidmap_put(&commit2todo, entry);
4721 * - label branch points
4722 * - add HEAD to the branch tips
4724 for (iter = commits; iter; iter = iter->next) {
4725 struct commit_list *parent = iter->item->parents;
4726 for (; parent; parent = parent->next) {
4727 struct object_id *oid = &parent->item->object.oid;
4728 if (!oidset_contains(&interesting, oid))
4730 if (oidset_insert(&child_seen, oid))
4731 label_oid(oid, "branch-point", &state);
4734 /* Add HEAD as implicit "tip of branch" */
4736 tips_tail = &commit_list_insert(iter->item,
4741 * Third phase: output the todo list. This is a bit tricky, as we
4742 * want to avoid jumping back and forth between revisions. To
4743 * accomplish that goal, we walk backwards from the branch tips,
4744 * gathering commits not yet shown, reversing the list on the fly,
4745 * then outputting that list (labeling revisions as needed).
4747 strbuf_addf(out, "%s onto\n", cmd_label);
4748 for (iter = tips; iter; iter = iter->next) {
4749 struct commit_list *list = NULL, *iter2;
4751 commit = iter->item;
4752 if (oidset_contains(&shown, &commit->object.oid))
4754 entry = oidmap_get(&state.commit2label, &commit->object.oid);
4757 strbuf_addf(out, "\n%c Branch %s\n", comment_line_char, entry->string);
4759 strbuf_addch(out, '\n');
4761 while (oidset_contains(&interesting, &commit->object.oid) &&
4762 !oidset_contains(&shown, &commit->object.oid)) {
4763 commit_list_insert(commit, &list);
4764 if (!commit->parents) {
4768 commit = commit->parents->item;
4772 strbuf_addf(out, "%s %s\n", cmd_reset,
4773 rebase_cousins || root_with_onto ?
4774 "onto" : "[new root]");
4776 const char *to = NULL;
4778 entry = oidmap_get(&state.commit2label,
4779 &commit->object.oid);
4782 else if (!rebase_cousins)
4783 to = label_oid(&commit->object.oid, NULL,
4786 if (!to || !strcmp(to, "onto"))
4787 strbuf_addf(out, "%s onto\n", cmd_reset);
4789 strbuf_reset(&oneline);
4790 pretty_print_commit(pp, commit, &oneline);
4791 strbuf_addf(out, "%s %s # %s\n",
4792 cmd_reset, to, oneline.buf);
4796 for (iter2 = list; iter2; iter2 = iter2->next) {
4797 struct object_id *oid = &iter2->item->object.oid;
4798 entry = oidmap_get(&commit2todo, oid);
4799 /* only show if not already upstream */
4801 strbuf_addf(out, "%s\n", entry->string);
4802 entry = oidmap_get(&state.commit2label, oid);
4804 strbuf_addf(out, "%s %s\n",
4805 cmd_label, entry->string);
4806 oidset_insert(&shown, oid);
4809 free_commit_list(list);
4812 free_commit_list(commits);
4813 free_commit_list(tips);
4815 strbuf_release(&label);
4816 strbuf_release(&oneline);
4817 strbuf_release(&buf);
4819 oidmap_free(&commit2todo, 1);
4820 oidmap_free(&state.commit2label, 1);
4821 hashmap_free_entries(&state.labels, struct labels_entry, entry);
4822 strbuf_release(&state.buf);
4827 int sequencer_make_script(struct repository *r, struct strbuf *out, int argc,
4828 const char **argv, unsigned flags)
4830 char *format = NULL;
4831 struct pretty_print_context pp = {0};
4832 struct rev_info revs;
4833 struct commit *commit;
4834 const char *insn = flags & TODO_LIST_ABBREVIATE_CMDS ? "p" : "pick";
4835 int rebase_merges = flags & TODO_LIST_REBASE_MERGES;
4837 repo_init_revisions(r, &revs, NULL);
4838 revs.verbose_header = 1;
4840 revs.max_parents = 1;
4841 revs.cherry_mark = 1;
4844 revs.right_only = 1;
4845 revs.sort_order = REV_SORT_IN_GRAPH_ORDER;
4846 revs.topo_order = 1;
4848 revs.pretty_given = 1;
4849 git_config_get_string("rebase.instructionFormat", &format);
4850 if (!format || !*format) {
4852 format = xstrdup("%s");
4854 get_commit_format(format, &revs);
4856 pp.fmt = revs.commit_format;
4857 pp.output_encoding = get_log_output_encoding();
4859 if (setup_revisions(argc, argv, &revs, NULL) > 1)
4860 return error(_("make_script: unhandled options"));
4862 if (prepare_revision_walk(&revs) < 0)
4863 return error(_("make_script: error preparing revisions"));
4866 return make_script_with_merges(&pp, &revs, out, flags);
4868 while ((commit = get_revision(&revs))) {
4869 int is_empty = is_original_commit_empty(commit);
4871 if (!is_empty && (commit->object.flags & PATCHSAME))
4873 strbuf_addf(out, "%s %s ", insn,
4874 oid_to_hex(&commit->object.oid));
4875 pretty_print_commit(&pp, commit, out);
4876 strbuf_addch(out, '\n');
4882 * Add commands after pick and (series of) squash/fixup commands
4885 void todo_list_add_exec_commands(struct todo_list *todo_list,
4886 struct string_list *commands)
4888 struct strbuf *buf = &todo_list->buf;
4889 size_t base_offset = buf->len;
4890 int i, insert, nr = 0, alloc = 0;
4891 struct todo_item *items = NULL, *base_items = NULL;
4893 base_items = xcalloc(commands->nr, sizeof(struct todo_item));
4894 for (i = 0; i < commands->nr; i++) {
4895 size_t command_len = strlen(commands->items[i].string);
4897 strbuf_addstr(buf, commands->items[i].string);
4898 strbuf_addch(buf, '\n');
4900 base_items[i].command = TODO_EXEC;
4901 base_items[i].offset_in_buf = base_offset;
4902 base_items[i].arg_offset = base_offset + strlen("exec ");
4903 base_items[i].arg_len = command_len - strlen("exec ");
4905 base_offset += command_len + 1;
4909 * Insert <commands> after every pick. Here, fixup/squash chains
4910 * are considered part of the pick, so we insert the commands *after*
4911 * those chains if there are any.
4913 * As we insert the exec commands immediately after rearranging
4914 * any fixups and before the user edits the list, a fixup chain
4915 * can never contain comments (any comments are empty picks that
4916 * have been commented out because the user did not specify
4917 * --keep-empty). So, it is safe to insert an exec command
4918 * without looking at the command following a comment.
4921 for (i = 0; i < todo_list->nr; i++) {
4922 enum todo_command command = todo_list->items[i].command;
4923 if (insert && !is_fixup(command)) {
4924 ALLOC_GROW(items, nr + commands->nr, alloc);
4925 COPY_ARRAY(items + nr, base_items, commands->nr);
4931 ALLOC_GROW(items, nr + 1, alloc);
4932 items[nr++] = todo_list->items[i];
4934 if (command == TODO_PICK || command == TODO_MERGE)
4938 /* insert or append final <commands> */
4939 if (insert || nr == todo_list->nr) {
4940 ALLOC_GROW(items, nr + commands->nr, alloc);
4941 COPY_ARRAY(items + nr, base_items, commands->nr);
4946 FREE_AND_NULL(todo_list->items);
4947 todo_list->items = items;
4949 todo_list->alloc = alloc;
4952 static void todo_list_to_strbuf(struct repository *r, struct todo_list *todo_list,
4953 struct strbuf *buf, int num, unsigned flags)
4955 struct todo_item *item;
4956 int i, max = todo_list->nr;
4958 if (num > 0 && num < max)
4961 for (item = todo_list->items, i = 0; i < max; i++, item++) {
4962 /* if the item is not a command write it and continue */
4963 if (item->command >= TODO_COMMENT) {
4964 strbuf_addf(buf, "%.*s\n", item->arg_len,
4965 todo_item_get_arg(todo_list, item));
4969 /* add command to the buffer */
4970 if (flags & TODO_LIST_ABBREVIATE_CMDS)
4971 strbuf_addch(buf, command_to_char(item->command));
4973 strbuf_addstr(buf, command_to_string(item->command));
4977 const char *oid = flags & TODO_LIST_SHORTEN_IDS ?
4978 short_commit_name(item->commit) :
4979 oid_to_hex(&item->commit->object.oid);
4981 if (item->command == TODO_MERGE) {
4982 if (item->flags & TODO_EDIT_MERGE_MSG)
4983 strbuf_addstr(buf, " -c");
4985 strbuf_addstr(buf, " -C");
4988 strbuf_addf(buf, " %s", oid);
4991 /* add all the rest */
4993 strbuf_addch(buf, '\n');
4995 strbuf_addf(buf, " %.*s\n", item->arg_len,
4996 todo_item_get_arg(todo_list, item));
5000 int todo_list_write_to_file(struct repository *r, struct todo_list *todo_list,
5001 const char *file, const char *shortrevisions,
5002 const char *shortonto, int num, unsigned flags)
5005 struct strbuf buf = STRBUF_INIT;
5007 todo_list_to_strbuf(r, todo_list, &buf, num, flags);
5008 if (flags & TODO_LIST_APPEND_TODO_HELP)
5009 append_todo_help(count_commands(todo_list),
5010 shortrevisions, shortonto, &buf);
5012 res = write_message(buf.buf, buf.len, file, 0);
5013 strbuf_release(&buf);
5018 /* skip picking commits whose parents are unchanged */
5019 static int skip_unnecessary_picks(struct repository *r,
5020 struct todo_list *todo_list,
5021 struct object_id *base_oid)
5023 struct object_id *parent_oid;
5026 for (i = 0; i < todo_list->nr; i++) {
5027 struct todo_item *item = todo_list->items + i;
5029 if (item->command >= TODO_NOOP)
5031 if (item->command != TODO_PICK)
5033 if (parse_commit(item->commit)) {
5034 return error(_("could not parse commit '%s'"),
5035 oid_to_hex(&item->commit->object.oid));
5037 if (!item->commit->parents)
5038 break; /* root commit */
5039 if (item->commit->parents->next)
5040 break; /* merge commit */
5041 parent_oid = &item->commit->parents->item->object.oid;
5042 if (!oideq(parent_oid, base_oid))
5044 oidcpy(base_oid, &item->commit->object.oid);
5047 const char *done_path = rebase_path_done();
5049 if (todo_list_write_to_file(r, todo_list, done_path, NULL, NULL, i, 0)) {
5050 error_errno(_("could not write to '%s'"), done_path);
5054 MOVE_ARRAY(todo_list->items, todo_list->items + i, todo_list->nr - i);
5056 todo_list->current = 0;
5057 todo_list->done_nr += i;
5059 if (is_fixup(peek_command(todo_list, 0)))
5060 record_in_rewritten(base_oid, peek_command(todo_list, 0));
5066 int complete_action(struct repository *r, struct replay_opts *opts, unsigned flags,
5067 const char *shortrevisions, const char *onto_name,
5068 struct commit *onto, const char *orig_head,
5069 struct string_list *commands, unsigned autosquash,
5070 struct todo_list *todo_list)
5072 const char *shortonto, *todo_file = rebase_path_todo();
5073 struct todo_list new_todo = TODO_LIST_INIT;
5074 struct strbuf *buf = &todo_list->buf, buf2 = STRBUF_INIT;
5075 struct object_id oid = onto->object.oid;
5078 shortonto = find_unique_abbrev(&oid, DEFAULT_ABBREV);
5080 if (buf->len == 0) {
5081 struct todo_item *item = append_new_todo(todo_list);
5082 item->command = TODO_NOOP;
5083 item->commit = NULL;
5084 item->arg_len = item->arg_offset = item->flags = item->offset_in_buf = 0;
5087 if (autosquash && todo_list_rearrange_squash(todo_list))
5091 todo_list_add_exec_commands(todo_list, commands);
5093 if (count_commands(todo_list) == 0) {
5094 apply_autostash(opts);
5095 sequencer_remove_state(opts);
5097 return error(_("nothing to do"));
5100 res = edit_todo_list(r, todo_list, &new_todo, shortrevisions,
5104 else if (res == -2) {
5105 apply_autostash(opts);
5106 sequencer_remove_state(opts);
5109 } else if (res == -3) {
5110 apply_autostash(opts);
5111 sequencer_remove_state(opts);
5112 todo_list_release(&new_todo);
5114 return error(_("nothing to do"));
5115 } else if (res == -4) {
5116 checkout_onto(r, opts, onto_name, &onto->object.oid, orig_head);
5117 todo_list_release(&new_todo);
5122 /* Expand the commit IDs */
5123 todo_list_to_strbuf(r, &new_todo, &buf2, -1, 0);
5124 strbuf_swap(&new_todo.buf, &buf2);
5125 strbuf_release(&buf2);
5126 new_todo.total_nr -= new_todo.nr;
5127 if (todo_list_parse_insn_buffer(r, new_todo.buf.buf, &new_todo) < 0)
5128 BUG("invalid todo list after expanding IDs:\n%s",
5131 if (opts->allow_ff && skip_unnecessary_picks(r, &new_todo, &oid)) {
5132 todo_list_release(&new_todo);
5133 return error(_("could not skip unnecessary pick commands"));
5136 if (todo_list_write_to_file(r, &new_todo, todo_file, NULL, NULL, -1,
5137 flags & ~(TODO_LIST_SHORTEN_IDS))) {
5138 todo_list_release(&new_todo);
5139 return error_errno(_("could not write '%s'"), todo_file);
5144 if (checkout_onto(r, opts, onto_name, &oid, orig_head))
5147 if (require_clean_work_tree(r, "rebase", "", 1, 1))
5150 todo_list_write_total_nr(&new_todo);
5151 res = pick_commits(r, &new_todo, opts);
5154 todo_list_release(&new_todo);
5159 struct subject2item_entry {
5160 struct hashmap_entry entry;
5162 char subject[FLEX_ARRAY];
5165 static int subject2item_cmp(const void *fndata,
5166 const struct hashmap_entry *eptr,
5167 const struct hashmap_entry *entry_or_key,
5170 const struct subject2item_entry *a, *b;
5172 a = container_of(eptr, const struct subject2item_entry, entry);
5173 b = container_of(entry_or_key, const struct subject2item_entry, entry);
5175 return key ? strcmp(a->subject, key) : strcmp(a->subject, b->subject);
5178 define_commit_slab(commit_todo_item, struct todo_item *);
5181 * Rearrange the todo list that has both "pick commit-id msg" and "pick
5182 * commit-id fixup!/squash! msg" in it so that the latter is put immediately
5183 * after the former, and change "pick" to "fixup"/"squash".
5185 * Note that if the config has specified a custom instruction format, each log
5186 * message will have to be retrieved from the commit (as the oneline in the
5187 * script cannot be trusted) in order to normalize the autosquash arrangement.
5189 int todo_list_rearrange_squash(struct todo_list *todo_list)
5191 struct hashmap subject2item;
5192 int rearranged = 0, *next, *tail, i, nr = 0, alloc = 0;
5194 struct commit_todo_item commit_todo;
5195 struct todo_item *items = NULL;
5197 init_commit_todo_item(&commit_todo);
5199 * The hashmap maps onelines to the respective todo list index.
5201 * If any items need to be rearranged, the next[i] value will indicate
5202 * which item was moved directly after the i'th.
5204 * In that case, last[i] will indicate the index of the latest item to
5205 * be moved to appear after the i'th.
5207 hashmap_init(&subject2item, subject2item_cmp, NULL, todo_list->nr);
5208 ALLOC_ARRAY(next, todo_list->nr);
5209 ALLOC_ARRAY(tail, todo_list->nr);
5210 ALLOC_ARRAY(subjects, todo_list->nr);
5211 for (i = 0; i < todo_list->nr; i++) {
5212 struct strbuf buf = STRBUF_INIT;
5213 struct todo_item *item = todo_list->items + i;
5214 const char *commit_buffer, *subject, *p;
5217 struct subject2item_entry *entry;
5219 next[i] = tail[i] = -1;
5220 if (!item->commit || item->command == TODO_DROP) {
5225 if (is_fixup(item->command)) {
5226 clear_commit_todo_item(&commit_todo);
5227 return error(_("the script was already rearranged."));
5230 *commit_todo_item_at(&commit_todo, item->commit) = item;
5232 parse_commit(item->commit);
5233 commit_buffer = logmsg_reencode(item->commit, NULL, "UTF-8");
5234 find_commit_subject(commit_buffer, &subject);
5235 format_subject(&buf, subject, " ");
5236 subject = subjects[i] = strbuf_detach(&buf, &subject_len);
5237 unuse_commit_buffer(item->commit, commit_buffer);
5238 if ((skip_prefix(subject, "fixup! ", &p) ||
5239 skip_prefix(subject, "squash! ", &p))) {
5240 struct commit *commit2;
5245 if (!skip_prefix(p, "fixup! ", &p) &&
5246 !skip_prefix(p, "squash! ", &p))
5250 entry = hashmap_get_entry_from_hash(&subject2item,
5252 struct subject2item_entry,
5255 /* found by title */
5257 else if (!strchr(p, ' ') &&
5259 lookup_commit_reference_by_name(p)) &&
5260 *commit_todo_item_at(&commit_todo, commit2))
5261 /* found by commit name */
5262 i2 = *commit_todo_item_at(&commit_todo, commit2)
5265 /* copy can be a prefix of the commit subject */
5266 for (i2 = 0; i2 < i; i2++)
5268 starts_with(subjects[i2], p))
5276 todo_list->items[i].command =
5277 starts_with(subject, "fixup!") ?
5278 TODO_FIXUP : TODO_SQUASH;
5284 } else if (!hashmap_get_from_hash(&subject2item,
5285 strhash(subject), subject)) {
5286 FLEX_ALLOC_MEM(entry, subject, subject, subject_len);
5288 hashmap_entry_init(&entry->entry,
5289 strhash(entry->subject));
5290 hashmap_put(&subject2item, &entry->entry);
5295 for (i = 0; i < todo_list->nr; i++) {
5296 enum todo_command command = todo_list->items[i].command;
5300 * Initially, all commands are 'pick's. If it is a
5301 * fixup or a squash now, we have rearranged it.
5303 if (is_fixup(command))
5307 ALLOC_GROW(items, nr + 1, alloc);
5308 items[nr++] = todo_list->items[cur];
5313 FREE_AND_NULL(todo_list->items);
5314 todo_list->items = items;
5316 todo_list->alloc = alloc;
5321 for (i = 0; i < todo_list->nr; i++)
5324 hashmap_free_entries(&subject2item, struct subject2item_entry, entry);
5326 clear_commit_todo_item(&commit_todo);