5 #include "object-store.h"
10 #include "run-command.h"
13 #include "cache-tree.h"
17 #include "merge-recursive.h"
19 #include "argv-array.h"
23 #include "wt-status.h"
25 #include "notes-utils.h"
27 #include "unpack-trees.h"
31 #include "commit-slab.h"
33 #include "commit-reach.h"
34 #include "rebase-interactive.h"
36 #define GIT_REFLOG_ACTION "GIT_REFLOG_ACTION"
38 const char sign_off_header
[] = "Signed-off-by: ";
39 static const char cherry_picked_prefix
[] = "(cherry picked from commit ";
41 GIT_PATH_FUNC(git_path_commit_editmsg
, "COMMIT_EDITMSG")
43 GIT_PATH_FUNC(git_path_seq_dir
, "sequencer")
45 static GIT_PATH_FUNC(git_path_todo_file
, "sequencer/todo")
46 static GIT_PATH_FUNC(git_path_opts_file
, "sequencer/opts")
47 static GIT_PATH_FUNC(git_path_head_file
, "sequencer/head")
48 static GIT_PATH_FUNC(git_path_abort_safety_file
, "sequencer/abort-safety")
50 static GIT_PATH_FUNC(rebase_path
, "rebase-merge")
52 * The file containing rebase commands, comments, and empty lines.
53 * This file is created by "git rebase -i" then edited by the user. As
54 * the lines are processed, they are removed from the front of this
55 * file and written to the tail of 'done'.
57 GIT_PATH_FUNC(rebase_path_todo
, "rebase-merge/git-rebase-todo")
58 static GIT_PATH_FUNC(rebase_path_todo_backup
,
59 "rebase-merge/git-rebase-todo.backup")
62 * The rebase command lines that have already been processed. A line
63 * is moved here when it is first handled, before any associated user
66 static GIT_PATH_FUNC(rebase_path_done
, "rebase-merge/done")
68 * The file to keep track of how many commands were already processed (e.g.
71 static GIT_PATH_FUNC(rebase_path_msgnum
, "rebase-merge/msgnum")
73 * The file to keep track of how many commands are to be processed in total
74 * (e.g. for the prompt).
76 static GIT_PATH_FUNC(rebase_path_msgtotal
, "rebase-merge/end")
78 * The commit message that is planned to be used for any changes that
79 * need to be committed following a user interaction.
81 static GIT_PATH_FUNC(rebase_path_message
, "rebase-merge/message")
83 * The file into which is accumulated the suggested commit message for
84 * squash/fixup commands. When the first of a series of squash/fixups
85 * is seen, the file is created and the commit message from the
86 * previous commit and from the first squash/fixup commit are written
87 * to it. The commit message for each subsequent squash/fixup commit
88 * is appended to the file as it is processed.
90 static GIT_PATH_FUNC(rebase_path_squash_msg
, "rebase-merge/message-squash")
92 * If the current series of squash/fixups has not yet included a squash
93 * command, then this file exists and holds the commit message of the
94 * original "pick" commit. (If the series ends without a "squash"
95 * command, then this can be used as the commit message of the combined
96 * commit without opening the editor.)
98 static GIT_PATH_FUNC(rebase_path_fixup_msg
, "rebase-merge/message-fixup")
100 * This file contains the list fixup/squash commands that have been
101 * accumulated into message-fixup or message-squash so far.
103 static GIT_PATH_FUNC(rebase_path_current_fixups
, "rebase-merge/current-fixups")
105 * A script to set the GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, and
106 * GIT_AUTHOR_DATE that will be used for the commit that is currently
109 static GIT_PATH_FUNC(rebase_path_author_script
, "rebase-merge/author-script")
111 * When an "edit" rebase command is being processed, the SHA1 of the
112 * commit to be edited is recorded in this file. When "git rebase
113 * --continue" is executed, if there are any staged changes then they
114 * will be amended to the HEAD commit, but only provided the HEAD
115 * commit is still the commit to be edited. When any other rebase
116 * command is processed, this file is deleted.
118 static GIT_PATH_FUNC(rebase_path_amend
, "rebase-merge/amend")
120 * When we stop at a given patch via the "edit" command, this file contains
121 * the abbreviated commit name of the corresponding patch.
123 static GIT_PATH_FUNC(rebase_path_stopped_sha
, "rebase-merge/stopped-sha")
125 * For the post-rewrite hook, we make a list of rewritten commits and
126 * their new sha1s. The rewritten-pending list keeps the sha1s of
127 * commits that have been processed, but not committed yet,
128 * e.g. because they are waiting for a 'squash' command.
130 static GIT_PATH_FUNC(rebase_path_rewritten_list
, "rebase-merge/rewritten-list")
131 static GIT_PATH_FUNC(rebase_path_rewritten_pending
,
132 "rebase-merge/rewritten-pending")
135 * The path of the file containig the OID of the "squash onto" commit, i.e.
136 * the dummy commit used for `reset [new root]`.
138 static GIT_PATH_FUNC(rebase_path_squash_onto
, "rebase-merge/squash-onto")
141 * The path of the file listing refs that need to be deleted after the rebase
142 * finishes. This is used by the `label` command to record the need for cleanup.
144 static GIT_PATH_FUNC(rebase_path_refs_to_delete
, "rebase-merge/refs-to-delete")
147 * The following files are written by git-rebase just after parsing the
150 static GIT_PATH_FUNC(rebase_path_gpg_sign_opt
, "rebase-merge/gpg_sign_opt")
151 static GIT_PATH_FUNC(rebase_path_orig_head
, "rebase-merge/orig-head")
152 static GIT_PATH_FUNC(rebase_path_verbose
, "rebase-merge/verbose")
153 static GIT_PATH_FUNC(rebase_path_signoff
, "rebase-merge/signoff")
154 static GIT_PATH_FUNC(rebase_path_head_name
, "rebase-merge/head-name")
155 static GIT_PATH_FUNC(rebase_path_onto
, "rebase-merge/onto")
156 static GIT_PATH_FUNC(rebase_path_autostash
, "rebase-merge/autostash")
157 static GIT_PATH_FUNC(rebase_path_strategy
, "rebase-merge/strategy")
158 static GIT_PATH_FUNC(rebase_path_strategy_opts
, "rebase-merge/strategy_opts")
159 static GIT_PATH_FUNC(rebase_path_allow_rerere_autoupdate
, "rebase-merge/allow_rerere_autoupdate")
160 static GIT_PATH_FUNC(rebase_path_quiet
, "rebase-merge/quiet")
161 static GIT_PATH_FUNC(rebase_path_reschedule_failed_exec
, "rebase-merge/reschedule-failed-exec")
163 static int git_sequencer_config(const char *k
, const char *v
, void *cb
)
165 struct replay_opts
*opts
= cb
;
168 if (!strcmp(k
, "commit.cleanup")) {
171 status
= git_config_string(&s
, k
, v
);
175 if (!strcmp(s
, "verbatim"))
176 opts
->default_msg_cleanup
= COMMIT_MSG_CLEANUP_NONE
;
177 else if (!strcmp(s
, "whitespace"))
178 opts
->default_msg_cleanup
= COMMIT_MSG_CLEANUP_SPACE
;
179 else if (!strcmp(s
, "strip"))
180 opts
->default_msg_cleanup
= COMMIT_MSG_CLEANUP_ALL
;
181 else if (!strcmp(s
, "scissors"))
182 opts
->default_msg_cleanup
= COMMIT_MSG_CLEANUP_SPACE
;
184 warning(_("invalid commit message cleanup mode '%s'"),
191 if (!strcmp(k
, "commit.gpgsign")) {
192 opts
->gpg_sign
= git_config_bool(k
, v
) ? xstrdup("") : NULL
;
196 status
= git_gpg_config(k
, v
, NULL
);
200 return git_diff_basic_config(k
, v
, NULL
);
203 void sequencer_init_config(struct replay_opts
*opts
)
205 opts
->default_msg_cleanup
= COMMIT_MSG_CLEANUP_NONE
;
206 git_config(git_sequencer_config
, opts
);
209 static inline int is_rebase_i(const struct replay_opts
*opts
)
211 return opts
->action
== REPLAY_INTERACTIVE_REBASE
;
214 static const char *get_dir(const struct replay_opts
*opts
)
216 if (is_rebase_i(opts
))
217 return rebase_path();
218 return git_path_seq_dir();
221 static const char *get_todo_path(const struct replay_opts
*opts
)
223 if (is_rebase_i(opts
))
224 return rebase_path_todo();
225 return git_path_todo_file();
229 * Returns 0 for non-conforming footer
230 * Returns 1 for conforming footer
231 * Returns 2 when sob exists within conforming footer
232 * Returns 3 when sob exists within conforming footer as last entry
234 static int has_conforming_footer(struct strbuf
*sb
, struct strbuf
*sob
,
235 size_t ignore_footer
)
237 struct process_trailer_options opts
= PROCESS_TRAILER_OPTIONS_INIT
;
238 struct trailer_info info
;
240 int found_sob
= 0, found_sob_last
= 0;
244 trailer_info_get(&info
, sb
->buf
, &opts
);
246 if (info
.trailer_start
== info
.trailer_end
)
249 for (i
= 0; i
< info
.trailer_nr
; i
++)
250 if (sob
&& !strncmp(info
.trailers
[i
], sob
->buf
, sob
->len
)) {
252 if (i
== info
.trailer_nr
- 1)
256 trailer_info_release(&info
);
265 static const char *gpg_sign_opt_quoted(struct replay_opts
*opts
)
267 static struct strbuf buf
= STRBUF_INIT
;
271 sq_quotef(&buf
, "-S%s", opts
->gpg_sign
);
275 int sequencer_remove_state(struct replay_opts
*opts
)
277 struct strbuf buf
= STRBUF_INIT
;
280 if (is_rebase_i(opts
) &&
281 strbuf_read_file(&buf
, rebase_path_refs_to_delete(), 0) > 0) {
284 char *eol
= strchr(p
, '\n');
287 if (delete_ref("(rebase -i) cleanup", p
, NULL
, 0) < 0)
288 warning(_("could not delete '%s'"), p
);
295 free(opts
->gpg_sign
);
296 free(opts
->strategy
);
297 for (i
= 0; i
< opts
->xopts_nr
; i
++)
298 free(opts
->xopts
[i
]);
300 strbuf_release(&opts
->current_fixups
);
303 strbuf_addstr(&buf
, get_dir(opts
));
304 remove_dir_recursively(&buf
, 0);
305 strbuf_release(&buf
);
310 static const char *action_name(const struct replay_opts
*opts
)
312 switch (opts
->action
) {
316 return N_("cherry-pick");
317 case REPLAY_INTERACTIVE_REBASE
:
318 return N_("rebase -i");
320 die(_("unknown action: %d"), opts
->action
);
323 struct commit_message
{
330 static const char *short_commit_name(struct commit
*commit
)
332 return find_unique_abbrev(&commit
->object
.oid
, DEFAULT_ABBREV
);
335 static int get_message(struct commit
*commit
, struct commit_message
*out
)
337 const char *abbrev
, *subject
;
340 out
->message
= logmsg_reencode(commit
, NULL
, get_commit_output_encoding());
341 abbrev
= short_commit_name(commit
);
343 subject_len
= find_commit_subject(out
->message
, &subject
);
345 out
->subject
= xmemdupz(subject
, subject_len
);
346 out
->label
= xstrfmt("%s... %s", abbrev
, out
->subject
);
347 out
->parent_label
= xstrfmt("parent of %s", out
->label
);
352 static void free_message(struct commit
*commit
, struct commit_message
*msg
)
354 free(msg
->parent_label
);
357 unuse_commit_buffer(commit
, msg
->message
);
360 static void print_advice(int show_hint
, struct replay_opts
*opts
)
362 char *msg
= getenv("GIT_CHERRY_PICK_HELP");
365 fprintf(stderr
, "%s\n", msg
);
367 * A conflict has occurred but the porcelain
368 * (typically rebase --interactive) wants to take care
369 * of the commit itself so remove CHERRY_PICK_HEAD
371 unlink(git_path_cherry_pick_head(the_repository
));
377 advise(_("after resolving the conflicts, mark the corrected paths\n"
378 "with 'git add <paths>' or 'git rm <paths>'"));
380 advise(_("after resolving the conflicts, mark the corrected paths\n"
381 "with 'git add <paths>' or 'git rm <paths>'\n"
382 "and commit the result with 'git commit'"));
386 int write_message(const void *buf
, size_t len
, const char *filename
,
389 struct lock_file msg_file
= LOCK_INIT
;
391 int msg_fd
= hold_lock_file_for_update(&msg_file
, filename
, 0);
393 return error_errno(_("could not lock '%s'"), filename
);
394 if (write_in_full(msg_fd
, buf
, len
) < 0) {
395 error_errno(_("could not write to '%s'"), filename
);
396 rollback_lock_file(&msg_file
);
399 if (append_eol
&& write(msg_fd
, "\n", 1) < 0) {
400 error_errno(_("could not write eol to '%s'"), filename
);
401 rollback_lock_file(&msg_file
);
404 if (commit_lock_file(&msg_file
) < 0)
405 return error(_("failed to finalize '%s'"), filename
);
411 * Reads a file that was presumably written by a shell script, i.e. with an
412 * end-of-line marker that needs to be stripped.
414 * Note that only the last end-of-line marker is stripped, consistent with the
415 * behavior of "$(cat path)" in a shell script.
417 * Returns 1 if the file was read, 0 if it could not be read or does not exist.
419 static int read_oneliner(struct strbuf
*buf
,
420 const char *path
, int skip_if_empty
)
422 int orig_len
= buf
->len
;
424 if (!file_exists(path
))
427 if (strbuf_read_file(buf
, path
, 0) < 0) {
428 warning_errno(_("could not read '%s'"), path
);
432 if (buf
->len
> orig_len
&& buf
->buf
[buf
->len
- 1] == '\n') {
433 if (--buf
->len
> orig_len
&& buf
->buf
[buf
->len
- 1] == '\r')
435 buf
->buf
[buf
->len
] = '\0';
438 if (skip_if_empty
&& buf
->len
== orig_len
)
444 static struct tree
*empty_tree(void)
446 return lookup_tree(the_repository
, the_repository
->hash_algo
->empty_tree
);
449 static int error_dirty_index(struct replay_opts
*opts
)
451 if (read_cache_unmerged())
452 return error_resolve_conflict(_(action_name(opts
)));
454 error(_("your local changes would be overwritten by %s."),
455 _(action_name(opts
)));
457 if (advice_commit_before_merge
)
458 advise(_("commit your changes or stash them to proceed."));
462 static void update_abort_safety_file(void)
464 struct object_id head
;
466 /* Do nothing on a single-pick */
467 if (!file_exists(git_path_seq_dir()))
470 if (!get_oid("HEAD", &head
))
471 write_file(git_path_abort_safety_file(), "%s", oid_to_hex(&head
));
473 write_file(git_path_abort_safety_file(), "%s", "");
476 static int fast_forward_to(const struct object_id
*to
, const struct object_id
*from
,
477 int unborn
, struct replay_opts
*opts
)
479 struct ref_transaction
*transaction
;
480 struct strbuf sb
= STRBUF_INIT
;
481 struct strbuf err
= STRBUF_INIT
;
483 read_index(&the_index
);
484 if (checkout_fast_forward(the_repository
, from
, to
, 1))
485 return -1; /* the callee should have complained already */
487 strbuf_addf(&sb
, _("%s: fast-forward"), _(action_name(opts
)));
489 transaction
= ref_transaction_begin(&err
);
491 ref_transaction_update(transaction
, "HEAD",
492 to
, unborn
&& !is_rebase_i(opts
) ?
495 ref_transaction_commit(transaction
, &err
)) {
496 ref_transaction_free(transaction
);
497 error("%s", err
.buf
);
499 strbuf_release(&err
);
504 strbuf_release(&err
);
505 ref_transaction_free(transaction
);
506 update_abort_safety_file();
510 void append_conflicts_hint(struct strbuf
*msgbuf
)
514 strbuf_addch(msgbuf
, '\n');
515 strbuf_commented_addf(msgbuf
, "Conflicts:\n");
516 for (i
= 0; i
< active_nr
;) {
517 const struct cache_entry
*ce
= active_cache
[i
++];
519 strbuf_commented_addf(msgbuf
, "\t%s\n", ce
->name
);
520 while (i
< active_nr
&& !strcmp(ce
->name
,
521 active_cache
[i
]->name
))
527 static int do_recursive_merge(struct commit
*base
, struct commit
*next
,
528 const char *base_label
, const char *next_label
,
529 struct object_id
*head
, struct strbuf
*msgbuf
,
530 struct replay_opts
*opts
)
532 struct merge_options o
;
533 struct tree
*result
, *next_tree
, *base_tree
, *head_tree
;
536 struct lock_file index_lock
= LOCK_INIT
;
538 if (hold_locked_index(&index_lock
, LOCK_REPORT_ON_ERROR
) < 0)
543 init_merge_options(&o
);
544 o
.ancestor
= base
? base_label
: "(empty tree)";
546 o
.branch2
= next
? next_label
: "(empty tree)";
547 if (is_rebase_i(opts
))
549 o
.show_rename_progress
= 1;
551 head_tree
= parse_tree_indirect(head
);
552 next_tree
= next
? get_commit_tree(next
) : empty_tree();
553 base_tree
= base
? get_commit_tree(base
) : empty_tree();
555 for (xopt
= opts
->xopts
; xopt
!= opts
->xopts
+ opts
->xopts_nr
; xopt
++)
556 parse_merge_opt(&o
, *xopt
);
558 clean
= merge_trees(&o
,
560 next_tree
, base_tree
, &result
);
561 if (is_rebase_i(opts
) && clean
<= 0)
562 fputs(o
.obuf
.buf
, stdout
);
563 strbuf_release(&o
.obuf
);
564 diff_warn_rename_limit("merge.renamelimit", o
.needed_rename_limit
, 0);
566 rollback_lock_file(&index_lock
);
570 if (write_locked_index(&the_index
, &index_lock
,
571 COMMIT_LOCK
| SKIP_IF_UNCHANGED
))
573 * TRANSLATORS: %s will be "revert", "cherry-pick" or
576 return error(_("%s: Unable to write new index file"),
577 _(action_name(opts
)));
580 append_conflicts_hint(msgbuf
);
585 static struct object_id
*get_cache_tree_oid(void)
587 if (!active_cache_tree
)
588 active_cache_tree
= cache_tree();
590 if (!cache_tree_fully_valid(active_cache_tree
))
591 if (cache_tree_update(&the_index
, 0)) {
592 error(_("unable to update cache tree"));
596 return &active_cache_tree
->oid
;
599 static int is_index_unchanged(void)
601 struct object_id head_oid
, *cache_tree_oid
;
602 struct commit
*head_commit
;
604 if (!resolve_ref_unsafe("HEAD", RESOLVE_REF_READING
, &head_oid
, NULL
))
605 return error(_("could not resolve HEAD commit"));
607 head_commit
= lookup_commit(the_repository
, &head_oid
);
610 * If head_commit is NULL, check_commit, called from
611 * lookup_commit, would have indicated that head_commit is not
612 * a commit object already. parse_commit() will return failure
613 * without further complaints in such a case. Otherwise, if
614 * the commit is invalid, parse_commit() will complain. So
615 * there is nothing for us to say here. Just return failure.
617 if (parse_commit(head_commit
))
620 if (!(cache_tree_oid
= get_cache_tree_oid()))
623 return oideq(cache_tree_oid
, get_commit_tree_oid(head_commit
));
626 static int write_author_script(const char *message
)
628 struct strbuf buf
= STRBUF_INIT
;
633 if (!*message
|| starts_with(message
, "\n")) {
635 /* Missing 'author' line? */
636 unlink(rebase_path_author_script());
638 } else if (skip_prefix(message
, "author ", &message
))
640 else if ((eol
= strchr(message
, '\n')))
645 strbuf_addstr(&buf
, "GIT_AUTHOR_NAME='");
646 while (*message
&& *message
!= '\n' && *message
!= '\r')
647 if (skip_prefix(message
, " <", &message
))
649 else if (*message
!= '\'')
650 strbuf_addch(&buf
, *(message
++));
652 strbuf_addf(&buf
, "'\\%c'", *(message
++));
653 strbuf_addstr(&buf
, "'\nGIT_AUTHOR_EMAIL='");
654 while (*message
&& *message
!= '\n' && *message
!= '\r')
655 if (skip_prefix(message
, "> ", &message
))
657 else if (*message
!= '\'')
658 strbuf_addch(&buf
, *(message
++));
660 strbuf_addf(&buf
, "'\\%c'", *(message
++));
661 strbuf_addstr(&buf
, "'\nGIT_AUTHOR_DATE='@");
662 while (*message
&& *message
!= '\n' && *message
!= '\r')
663 if (*message
!= '\'')
664 strbuf_addch(&buf
, *(message
++));
666 strbuf_addf(&buf
, "'\\%c'", *(message
++));
667 strbuf_addch(&buf
, '\'');
668 res
= write_message(buf
.buf
, buf
.len
, rebase_path_author_script(), 1);
669 strbuf_release(&buf
);
674 * Take a series of KEY='VALUE' lines where VALUE part is
675 * sq-quoted, and append <KEY, VALUE> at the end of the string list
677 static int parse_key_value_squoted(char *buf
, struct string_list
*list
)
680 struct string_list_item
*item
;
682 char *cp
= strchr(buf
, '=');
684 np
= strchrnul(buf
, '\n');
685 return error(_("no key present in '%.*s'"),
686 (int) (np
- buf
), buf
);
688 np
= strchrnul(cp
, '\n');
690 item
= string_list_append(list
, buf
);
692 buf
= np
+ (*np
== '\n');
696 return error(_("unable to dequote value of '%s'"),
698 item
->util
= xstrdup(cp
);
704 * Reads and parses the state directory's "author-script" file, and sets name,
705 * email and date accordingly.
706 * Returns 0 on success, -1 if the file could not be parsed.
708 * The author script is of the format:
710 * GIT_AUTHOR_NAME='$author_name'
711 * GIT_AUTHOR_EMAIL='$author_email'
712 * GIT_AUTHOR_DATE='$author_date'
714 * where $author_name, $author_email and $author_date are quoted. We are strict
715 * with our parsing, as the file was meant to be eval'd in the old
716 * git-am.sh/git-rebase--interactive.sh scripts, and thus if the file differs
717 * from what this function expects, it is better to bail out than to do
718 * something that the user does not expect.
720 int read_author_script(const char *path
, char **name
, char **email
, char **date
,
723 struct strbuf buf
= STRBUF_INIT
;
724 struct string_list kv
= STRING_LIST_INIT_DUP
;
725 int retval
= -1; /* assume failure */
726 int i
, name_i
= -2, email_i
= -2, date_i
= -2, err
= 0;
728 if (strbuf_read_file(&buf
, path
, 256) <= 0) {
729 strbuf_release(&buf
);
730 if (errno
== ENOENT
&& allow_missing
)
733 return error_errno(_("could not open '%s' for reading"),
737 if (parse_key_value_squoted(buf
.buf
, &kv
))
740 for (i
= 0; i
< kv
.nr
; i
++) {
741 if (!strcmp(kv
.items
[i
].string
, "GIT_AUTHOR_NAME")) {
743 name_i
= error(_("'GIT_AUTHOR_NAME' already given"));
746 } else if (!strcmp(kv
.items
[i
].string
, "GIT_AUTHOR_EMAIL")) {
748 email_i
= error(_("'GIT_AUTHOR_EMAIL' already given"));
751 } else if (!strcmp(kv
.items
[i
].string
, "GIT_AUTHOR_DATE")) {
753 date_i
= error(_("'GIT_AUTHOR_DATE' already given"));
757 err
= error(_("unknown variable '%s'"),
762 error(_("missing 'GIT_AUTHOR_NAME'"));
764 error(_("missing 'GIT_AUTHOR_EMAIL'"));
766 error(_("missing 'GIT_AUTHOR_DATE'"));
767 if (date_i
< 0 || email_i
< 0 || date_i
< 0 || err
)
769 *name
= kv
.items
[name_i
].util
;
770 *email
= kv
.items
[email_i
].util
;
771 *date
= kv
.items
[date_i
].util
;
774 string_list_clear(&kv
, !!retval
);
775 strbuf_release(&buf
);
780 * Read a GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL AND GIT_AUTHOR_DATE from a
781 * file with shell quoting into struct argv_array. Returns -1 on
782 * error, 0 otherwise.
784 static int read_env_script(struct argv_array
*env
)
786 char *name
, *email
, *date
;
788 if (read_author_script(rebase_path_author_script(),
789 &name
, &email
, &date
, 0))
792 argv_array_pushf(env
, "GIT_AUTHOR_NAME=%s", name
);
793 argv_array_pushf(env
, "GIT_AUTHOR_EMAIL=%s", email
);
794 argv_array_pushf(env
, "GIT_AUTHOR_DATE=%s", date
);
802 static char *get_author(const char *message
)
807 a
= find_commit_header(message
, "author", &len
);
809 return xmemdupz(a
, len
);
814 /* Read author-script and return an ident line (author <email> timestamp) */
815 static const char *read_author_ident(struct strbuf
*buf
)
817 struct strbuf out
= STRBUF_INIT
;
818 char *name
, *email
, *date
;
820 if (read_author_script(rebase_path_author_script(),
821 &name
, &email
, &date
, 0))
824 /* validate date since fmt_ident() will die() on bad value */
825 if (parse_date(date
, &out
)){
826 warning(_("invalid date format '%s' in '%s'"),
827 date
, rebase_path_author_script());
828 strbuf_release(&out
);
833 strbuf_addstr(&out
, fmt_ident(name
, email
, date
, 0));
834 strbuf_swap(buf
, &out
);
835 strbuf_release(&out
);
842 static const char staged_changes_advice
[] =
843 N_("you have staged changes in your working tree\n"
844 "If these changes are meant to be squashed into the previous commit, run:\n"
846 " git commit --amend %s\n"
848 "If they are meant to go into a new commit, run:\n"
852 "In both cases, once you're done, continue with:\n"
854 " git rebase --continue\n");
856 #define ALLOW_EMPTY (1<<0)
857 #define EDIT_MSG (1<<1)
858 #define AMEND_MSG (1<<2)
859 #define CLEANUP_MSG (1<<3)
860 #define VERIFY_MSG (1<<4)
861 #define CREATE_ROOT_COMMIT (1<<5)
863 static int run_command_silent_on_success(struct child_process
*cmd
)
865 struct strbuf buf
= STRBUF_INIT
;
868 cmd
->stdout_to_stderr
= 1;
869 rc
= pipe_command(cmd
,
875 fputs(buf
.buf
, stderr
);
876 strbuf_release(&buf
);
881 * If we are cherry-pick, and if the merge did not result in
882 * hand-editing, we will hit this commit and inherit the original
883 * author date and name.
885 * If we are revert, or if our cherry-pick results in a hand merge,
886 * we had better say that the current user is responsible for that.
888 * An exception is when run_git_commit() is called during an
889 * interactive rebase: in that case, we will want to retain the
892 static int run_git_commit(const char *defmsg
, struct replay_opts
*opts
,
895 struct child_process cmd
= CHILD_PROCESS_INIT
;
898 if ((flags
& CREATE_ROOT_COMMIT
) && !(flags
& AMEND_MSG
)) {
899 struct strbuf msg
= STRBUF_INIT
, script
= STRBUF_INIT
;
900 const char *author
= NULL
;
901 struct object_id root_commit
, *cache_tree_oid
;
904 if (is_rebase_i(opts
)) {
905 author
= read_author_ident(&script
);
907 strbuf_release(&script
);
913 BUG("root commit without message");
915 if (!(cache_tree_oid
= get_cache_tree_oid()))
919 res
= strbuf_read_file(&msg
, defmsg
, 0);
922 res
= error_errno(_("could not read '%s'"), defmsg
);
924 res
= commit_tree(msg
.buf
, msg
.len
, cache_tree_oid
,
925 NULL
, &root_commit
, author
,
928 strbuf_release(&msg
);
929 strbuf_release(&script
);
931 update_ref(NULL
, "CHERRY_PICK_HEAD", &root_commit
, NULL
,
932 REF_NO_DEREF
, UPDATE_REFS_MSG_ON_ERR
);
933 res
= update_ref(NULL
, "HEAD", &root_commit
, NULL
, 0,
934 UPDATE_REFS_MSG_ON_ERR
);
936 return res
< 0 ? error(_("writing root commit")) : 0;
941 if (is_rebase_i(opts
) && read_env_script(&cmd
.env_array
)) {
942 const char *gpg_opt
= gpg_sign_opt_quoted(opts
);
944 return error(_(staged_changes_advice
),
948 argv_array_push(&cmd
.args
, "commit");
950 if (!(flags
& VERIFY_MSG
))
951 argv_array_push(&cmd
.args
, "-n");
952 if ((flags
& AMEND_MSG
))
953 argv_array_push(&cmd
.args
, "--amend");
955 argv_array_pushf(&cmd
.args
, "-S%s", opts
->gpg_sign
);
957 argv_array_pushl(&cmd
.args
, "-F", defmsg
, NULL
);
958 else if (!(flags
& EDIT_MSG
))
959 argv_array_pushl(&cmd
.args
, "-C", "HEAD", NULL
);
960 if ((flags
& CLEANUP_MSG
))
961 argv_array_push(&cmd
.args
, "--cleanup=strip");
962 if ((flags
& EDIT_MSG
))
963 argv_array_push(&cmd
.args
, "-e");
964 else if (!(flags
& CLEANUP_MSG
) &&
965 !opts
->signoff
&& !opts
->record_origin
&&
966 git_config_get_value("commit.cleanup", &value
))
967 argv_array_push(&cmd
.args
, "--cleanup=verbatim");
969 if ((flags
& ALLOW_EMPTY
))
970 argv_array_push(&cmd
.args
, "--allow-empty");
972 if (!(flags
& EDIT_MSG
))
973 argv_array_push(&cmd
.args
, "--allow-empty-message");
975 if (is_rebase_i(opts
) && !(flags
& EDIT_MSG
))
976 return run_command_silent_on_success(&cmd
);
978 return run_command(&cmd
);
981 static int rest_is_empty(const struct strbuf
*sb
, int start
)
986 /* Check if the rest is just whitespace and Signed-off-by's. */
987 for (i
= start
; i
< sb
->len
; i
++) {
988 nl
= memchr(sb
->buf
+ i
, '\n', sb
->len
- i
);
994 if (strlen(sign_off_header
) <= eol
- i
&&
995 starts_with(sb
->buf
+ i
, sign_off_header
)) {
1000 if (!isspace(sb
->buf
[i
++]))
1008 * Find out if the message in the strbuf contains only whitespace and
1009 * Signed-off-by lines.
1011 int message_is_empty(const struct strbuf
*sb
,
1012 enum commit_msg_cleanup_mode cleanup_mode
)
1014 if (cleanup_mode
== COMMIT_MSG_CLEANUP_NONE
&& sb
->len
)
1016 return rest_is_empty(sb
, 0);
1020 * See if the user edited the message in the editor or left what
1021 * was in the template intact
1023 int template_untouched(const struct strbuf
*sb
, const char *template_file
,
1024 enum commit_msg_cleanup_mode cleanup_mode
)
1026 struct strbuf tmpl
= STRBUF_INIT
;
1029 if (cleanup_mode
== COMMIT_MSG_CLEANUP_NONE
&& sb
->len
)
1032 if (!template_file
|| strbuf_read_file(&tmpl
, template_file
, 0) <= 0)
1035 strbuf_stripspace(&tmpl
, cleanup_mode
== COMMIT_MSG_CLEANUP_ALL
);
1036 if (!skip_prefix(sb
->buf
, tmpl
.buf
, &start
))
1038 strbuf_release(&tmpl
);
1039 return rest_is_empty(sb
, start
- sb
->buf
);
1042 int update_head_with_reflog(const struct commit
*old_head
,
1043 const struct object_id
*new_head
,
1044 const char *action
, const struct strbuf
*msg
,
1047 struct ref_transaction
*transaction
;
1048 struct strbuf sb
= STRBUF_INIT
;
1053 strbuf_addstr(&sb
, action
);
1054 strbuf_addstr(&sb
, ": ");
1057 nl
= strchr(msg
->buf
, '\n');
1059 strbuf_add(&sb
, msg
->buf
, nl
+ 1 - msg
->buf
);
1061 strbuf_addbuf(&sb
, msg
);
1062 strbuf_addch(&sb
, '\n');
1065 transaction
= ref_transaction_begin(err
);
1067 ref_transaction_update(transaction
, "HEAD", new_head
,
1068 old_head
? &old_head
->object
.oid
: &null_oid
,
1070 ref_transaction_commit(transaction
, err
)) {
1073 ref_transaction_free(transaction
);
1074 strbuf_release(&sb
);
1079 static int run_rewrite_hook(const struct object_id
*oldoid
,
1080 const struct object_id
*newoid
)
1082 struct child_process proc
= CHILD_PROCESS_INIT
;
1083 const char *argv
[3];
1085 struct strbuf sb
= STRBUF_INIT
;
1087 argv
[0] = find_hook("post-rewrite");
1096 proc
.stdout_to_stderr
= 1;
1098 code
= start_command(&proc
);
1101 strbuf_addf(&sb
, "%s %s\n", oid_to_hex(oldoid
), oid_to_hex(newoid
));
1102 sigchain_push(SIGPIPE
, SIG_IGN
);
1103 write_in_full(proc
.in
, sb
.buf
, sb
.len
);
1105 strbuf_release(&sb
);
1106 sigchain_pop(SIGPIPE
);
1107 return finish_command(&proc
);
1110 void commit_post_rewrite(const struct commit
*old_head
,
1111 const struct object_id
*new_head
)
1113 struct notes_rewrite_cfg
*cfg
;
1115 cfg
= init_copy_notes_for_rewrite("amend");
1117 /* we are amending, so old_head is not NULL */
1118 copy_note_for_rewrite(cfg
, &old_head
->object
.oid
, new_head
);
1119 finish_copy_notes_for_rewrite(cfg
, "Notes added by 'git commit --amend'");
1121 run_rewrite_hook(&old_head
->object
.oid
, new_head
);
1124 static int run_prepare_commit_msg_hook(struct strbuf
*msg
, const char *commit
)
1126 struct argv_array hook_env
= ARGV_ARRAY_INIT
;
1130 name
= git_path_commit_editmsg();
1131 if (write_message(msg
->buf
, msg
->len
, name
, 0))
1134 argv_array_pushf(&hook_env
, "GIT_INDEX_FILE=%s", get_index_file());
1135 argv_array_push(&hook_env
, "GIT_EDITOR=:");
1137 ret
= run_hook_le(hook_env
.argv
, "prepare-commit-msg", name
,
1138 "commit", commit
, NULL
);
1140 ret
= run_hook_le(hook_env
.argv
, "prepare-commit-msg", name
,
1143 ret
= error(_("'prepare-commit-msg' hook failed"));
1144 argv_array_clear(&hook_env
);
1149 static const char implicit_ident_advice_noconfig
[] =
1150 N_("Your name and email address were configured automatically based\n"
1151 "on your username and hostname. Please check that they are accurate.\n"
1152 "You can suppress this message by setting them explicitly. Run the\n"
1153 "following command and follow the instructions in your editor to edit\n"
1154 "your configuration file:\n"
1156 " git config --global --edit\n"
1158 "After doing this, you may fix the identity used for this commit with:\n"
1160 " git commit --amend --reset-author\n");
1162 static const char implicit_ident_advice_config
[] =
1163 N_("Your name and email address were configured automatically based\n"
1164 "on your username and hostname. Please check that they are accurate.\n"
1165 "You can suppress this message by setting them explicitly:\n"
1167 " git config --global user.name \"Your Name\"\n"
1168 " git config --global user.email you@example.com\n"
1170 "After doing this, you may fix the identity used for this commit with:\n"
1172 " git commit --amend --reset-author\n");
1174 static const char *implicit_ident_advice(void)
1176 char *user_config
= expand_user_path("~/.gitconfig", 0);
1177 char *xdg_config
= xdg_config_home("config");
1178 int config_exists
= file_exists(user_config
) || file_exists(xdg_config
);
1184 return _(implicit_ident_advice_config
);
1186 return _(implicit_ident_advice_noconfig
);
1190 void print_commit_summary(const char *prefix
, const struct object_id
*oid
,
1193 struct rev_info rev
;
1194 struct commit
*commit
;
1195 struct strbuf format
= STRBUF_INIT
;
1197 struct pretty_print_context pctx
= {0};
1198 struct strbuf author_ident
= STRBUF_INIT
;
1199 struct strbuf committer_ident
= STRBUF_INIT
;
1201 commit
= lookup_commit(the_repository
, oid
);
1203 die(_("couldn't look up newly created commit"));
1204 if (parse_commit(commit
))
1205 die(_("could not parse newly created commit"));
1207 strbuf_addstr(&format
, "format:%h] %s");
1209 format_commit_message(commit
, "%an <%ae>", &author_ident
, &pctx
);
1210 format_commit_message(commit
, "%cn <%ce>", &committer_ident
, &pctx
);
1211 if (strbuf_cmp(&author_ident
, &committer_ident
)) {
1212 strbuf_addstr(&format
, "\n Author: ");
1213 strbuf_addbuf_percentquote(&format
, &author_ident
);
1215 if (flags
& SUMMARY_SHOW_AUTHOR_DATE
) {
1216 struct strbuf date
= STRBUF_INIT
;
1218 format_commit_message(commit
, "%ad", &date
, &pctx
);
1219 strbuf_addstr(&format
, "\n Date: ");
1220 strbuf_addbuf_percentquote(&format
, &date
);
1221 strbuf_release(&date
);
1223 if (!committer_ident_sufficiently_given()) {
1224 strbuf_addstr(&format
, "\n Committer: ");
1225 strbuf_addbuf_percentquote(&format
, &committer_ident
);
1226 if (advice_implicit_identity
) {
1227 strbuf_addch(&format
, '\n');
1228 strbuf_addstr(&format
, implicit_ident_advice());
1231 strbuf_release(&author_ident
);
1232 strbuf_release(&committer_ident
);
1234 repo_init_revisions(the_repository
, &rev
, prefix
);
1235 setup_revisions(0, NULL
, &rev
, NULL
);
1238 rev
.diffopt
.output_format
=
1239 DIFF_FORMAT_SHORTSTAT
| DIFF_FORMAT_SUMMARY
;
1241 rev
.verbose_header
= 1;
1242 rev
.show_root_diff
= 1;
1243 get_commit_format(format
.buf
, &rev
);
1244 rev
.always_show_header
= 0;
1245 rev
.diffopt
.detect_rename
= DIFF_DETECT_RENAME
;
1246 rev
.diffopt
.break_opt
= 0;
1247 diff_setup_done(&rev
.diffopt
);
1249 head
= resolve_ref_unsafe("HEAD", 0, NULL
, NULL
);
1251 die_errno(_("unable to resolve HEAD after creating commit"));
1252 if (!strcmp(head
, "HEAD"))
1253 head
= _("detached HEAD");
1255 skip_prefix(head
, "refs/heads/", &head
);
1256 printf("[%s%s ", head
, (flags
& SUMMARY_INITIAL_COMMIT
) ?
1257 _(" (root-commit)") : "");
1259 if (!log_tree_commit(&rev
, commit
)) {
1260 rev
.always_show_header
= 1;
1261 rev
.use_terminator
= 1;
1262 log_tree_commit(&rev
, commit
);
1265 strbuf_release(&format
);
1268 static int parse_head(struct commit
**head
)
1270 struct commit
*current_head
;
1271 struct object_id oid
;
1273 if (get_oid("HEAD", &oid
)) {
1274 current_head
= NULL
;
1276 current_head
= lookup_commit_reference(the_repository
, &oid
);
1278 return error(_("could not parse HEAD"));
1279 if (!oideq(&oid
, ¤t_head
->object
.oid
)) {
1280 warning(_("HEAD %s is not a commit!"),
1283 if (parse_commit(current_head
))
1284 return error(_("could not parse HEAD commit"));
1286 *head
= current_head
;
1292 * Try to commit without forking 'git commit'. In some cases we need
1293 * to run 'git commit' to display an error message
1296 * -1 - error unable to commit
1298 * 1 - run 'git commit'
1300 static int try_to_commit(struct strbuf
*msg
, const char *author
,
1301 struct replay_opts
*opts
, unsigned int flags
,
1302 struct object_id
*oid
)
1304 struct object_id tree
;
1305 struct commit
*current_head
;
1306 struct commit_list
*parents
= NULL
;
1307 struct commit_extra_header
*extra
= NULL
;
1308 struct strbuf err
= STRBUF_INIT
;
1309 struct strbuf commit_msg
= STRBUF_INIT
;
1310 char *amend_author
= NULL
;
1311 const char *hook_commit
= NULL
;
1312 enum commit_msg_cleanup_mode cleanup
;
1315 if (parse_head(¤t_head
))
1318 if (flags
& AMEND_MSG
) {
1319 const char *exclude_gpgsig
[] = { "gpgsig", NULL
};
1320 const char *out_enc
= get_commit_output_encoding();
1321 const char *message
= logmsg_reencode(current_head
, NULL
,
1325 const char *orig_message
= NULL
;
1327 find_commit_subject(message
, &orig_message
);
1329 strbuf_addstr(msg
, orig_message
);
1330 hook_commit
= "HEAD";
1332 author
= amend_author
= get_author(message
);
1333 unuse_commit_buffer(current_head
, message
);
1335 res
= error(_("unable to parse commit author"));
1338 parents
= copy_commit_list(current_head
->parents
);
1339 extra
= read_commit_extra_headers(current_head
, exclude_gpgsig
);
1340 } else if (current_head
) {
1341 commit_list_insert(current_head
, &parents
);
1344 if (write_index_as_tree(&tree
, &the_index
, get_index_file(), 0, NULL
)) {
1345 res
= error(_("git write-tree failed to write a tree"));
1349 if (!(flags
& ALLOW_EMPTY
) && oideq(current_head
?
1350 get_commit_tree_oid(current_head
) :
1351 the_hash_algo
->empty_tree
, &tree
)) {
1352 res
= 1; /* run 'git commit' to display error message */
1356 if (find_hook("prepare-commit-msg")) {
1357 res
= run_prepare_commit_msg_hook(msg
, hook_commit
);
1360 if (strbuf_read_file(&commit_msg
, git_path_commit_editmsg(),
1362 res
= error_errno(_("unable to read commit message "
1364 git_path_commit_editmsg());
1370 cleanup
= (flags
& CLEANUP_MSG
) ? COMMIT_MSG_CLEANUP_ALL
:
1371 opts
->default_msg_cleanup
;
1373 if (cleanup
!= COMMIT_MSG_CLEANUP_NONE
)
1374 strbuf_stripspace(msg
, cleanup
== COMMIT_MSG_CLEANUP_ALL
);
1375 if ((flags
& EDIT_MSG
) && message_is_empty(msg
, cleanup
)) {
1376 res
= 1; /* run 'git commit' to display error message */
1382 if (commit_tree_extended(msg
->buf
, msg
->len
, &tree
, parents
,
1383 oid
, author
, opts
->gpg_sign
, extra
)) {
1384 res
= error(_("failed to write commit object"));
1388 if (update_head_with_reflog(current_head
, oid
,
1389 getenv("GIT_REFLOG_ACTION"), msg
, &err
)) {
1390 res
= error("%s", err
.buf
);
1394 if (flags
& AMEND_MSG
)
1395 commit_post_rewrite(current_head
, oid
);
1398 free_commit_extra_headers(extra
);
1399 strbuf_release(&err
);
1400 strbuf_release(&commit_msg
);
1406 static int do_commit(const char *msg_file
, const char *author
,
1407 struct replay_opts
*opts
, unsigned int flags
)
1411 if (!(flags
& EDIT_MSG
) && !(flags
& VERIFY_MSG
) &&
1412 !(flags
& CREATE_ROOT_COMMIT
)) {
1413 struct object_id oid
;
1414 struct strbuf sb
= STRBUF_INIT
;
1416 if (msg_file
&& strbuf_read_file(&sb
, msg_file
, 2048) < 0)
1417 return error_errno(_("unable to read commit message "
1421 res
= try_to_commit(msg_file
? &sb
: NULL
, author
, opts
, flags
,
1423 strbuf_release(&sb
);
1425 unlink(git_path_cherry_pick_head(the_repository
));
1426 unlink(git_path_merge_msg(the_repository
));
1427 if (!is_rebase_i(opts
))
1428 print_commit_summary(NULL
, &oid
,
1429 SUMMARY_SHOW_AUTHOR_DATE
);
1434 return run_git_commit(msg_file
, opts
, flags
);
1439 static int is_original_commit_empty(struct commit
*commit
)
1441 const struct object_id
*ptree_oid
;
1443 if (parse_commit(commit
))
1444 return error(_("could not parse commit %s"),
1445 oid_to_hex(&commit
->object
.oid
));
1446 if (commit
->parents
) {
1447 struct commit
*parent
= commit
->parents
->item
;
1448 if (parse_commit(parent
))
1449 return error(_("could not parse parent commit %s"),
1450 oid_to_hex(&parent
->object
.oid
));
1451 ptree_oid
= get_commit_tree_oid(parent
);
1453 ptree_oid
= the_hash_algo
->empty_tree
; /* commit is root */
1456 return oideq(ptree_oid
, get_commit_tree_oid(commit
));
1460 * Do we run "git commit" with "--allow-empty"?
1462 static int allow_empty(struct replay_opts
*opts
, struct commit
*commit
)
1464 int index_unchanged
, empty_commit
;
1469 * (1) we do not allow empty at all and error out.
1471 * (2) we allow ones that were initially empty, but
1472 * forbid the ones that become empty;
1474 * (3) we allow both.
1476 if (!opts
->allow_empty
)
1477 return 0; /* let "git commit" barf as necessary */
1479 index_unchanged
= is_index_unchanged();
1480 if (index_unchanged
< 0)
1481 return index_unchanged
;
1482 if (!index_unchanged
)
1483 return 0; /* we do not have to say --allow-empty */
1485 if (opts
->keep_redundant_commits
)
1488 empty_commit
= is_original_commit_empty(commit
);
1489 if (empty_commit
< 0)
1490 return empty_commit
;
1498 * Note that ordering matters in this enum. Not only must it match the mapping
1499 * below, it is also divided into several sections that matter. When adding
1500 * new commands, make sure you add it in the right section.
1503 /* commands that handle commits */
1510 /* commands that do something else than handling a single commit */
1516 /* commands that do nothing but are counted for reporting progress */
1519 /* comments (not counted for reporting progress) */
1526 } todo_command_info
[] = {
1543 static const char *command_to_string(const enum todo_command command
)
1545 if (command
< TODO_COMMENT
)
1546 return todo_command_info
[command
].str
;
1547 die(_("unknown command: %d"), command
);
1550 static char command_to_char(const enum todo_command command
)
1552 if (command
< TODO_COMMENT
&& todo_command_info
[command
].c
)
1553 return todo_command_info
[command
].c
;
1554 return comment_line_char
;
1557 static int is_noop(const enum todo_command command
)
1559 return TODO_NOOP
<= command
;
1562 static int is_fixup(enum todo_command command
)
1564 return command
== TODO_FIXUP
|| command
== TODO_SQUASH
;
1567 /* Does this command create a (non-merge) commit? */
1568 static int is_pick_or_similar(enum todo_command command
)
1583 static int update_squash_messages(enum todo_command command
,
1584 struct commit
*commit
, struct replay_opts
*opts
)
1586 struct strbuf buf
= STRBUF_INIT
;
1588 const char *message
, *body
;
1590 if (opts
->current_fixup_count
> 0) {
1591 struct strbuf header
= STRBUF_INIT
;
1594 if (strbuf_read_file(&buf
, rebase_path_squash_msg(), 9) <= 0)
1595 return error(_("could not read '%s'"),
1596 rebase_path_squash_msg());
1598 eol
= buf
.buf
[0] != comment_line_char
?
1599 buf
.buf
: strchrnul(buf
.buf
, '\n');
1601 strbuf_addf(&header
, "%c ", comment_line_char
);
1602 strbuf_addf(&header
, _("This is a combination of %d commits."),
1603 opts
->current_fixup_count
+ 2);
1604 strbuf_splice(&buf
, 0, eol
- buf
.buf
, header
.buf
, header
.len
);
1605 strbuf_release(&header
);
1607 struct object_id head
;
1608 struct commit
*head_commit
;
1609 const char *head_message
, *body
;
1611 if (get_oid("HEAD", &head
))
1612 return error(_("need a HEAD to fixup"));
1613 if (!(head_commit
= lookup_commit_reference(the_repository
, &head
)))
1614 return error(_("could not read HEAD"));
1615 if (!(head_message
= get_commit_buffer(head_commit
, NULL
)))
1616 return error(_("could not read HEAD's commit message"));
1618 find_commit_subject(head_message
, &body
);
1619 if (write_message(body
, strlen(body
),
1620 rebase_path_fixup_msg(), 0)) {
1621 unuse_commit_buffer(head_commit
, head_message
);
1622 return error(_("cannot write '%s'"),
1623 rebase_path_fixup_msg());
1626 strbuf_addf(&buf
, "%c ", comment_line_char
);
1627 strbuf_addf(&buf
, _("This is a combination of %d commits."), 2);
1628 strbuf_addf(&buf
, "\n%c ", comment_line_char
);
1629 strbuf_addstr(&buf
, _("This is the 1st commit message:"));
1630 strbuf_addstr(&buf
, "\n\n");
1631 strbuf_addstr(&buf
, body
);
1633 unuse_commit_buffer(head_commit
, head_message
);
1636 if (!(message
= get_commit_buffer(commit
, NULL
)))
1637 return error(_("could not read commit message of %s"),
1638 oid_to_hex(&commit
->object
.oid
));
1639 find_commit_subject(message
, &body
);
1641 if (command
== TODO_SQUASH
) {
1642 unlink(rebase_path_fixup_msg());
1643 strbuf_addf(&buf
, "\n%c ", comment_line_char
);
1644 strbuf_addf(&buf
, _("This is the commit message #%d:"),
1645 ++opts
->current_fixup_count
+ 1);
1646 strbuf_addstr(&buf
, "\n\n");
1647 strbuf_addstr(&buf
, body
);
1648 } else if (command
== TODO_FIXUP
) {
1649 strbuf_addf(&buf
, "\n%c ", comment_line_char
);
1650 strbuf_addf(&buf
, _("The commit message #%d will be skipped:"),
1651 ++opts
->current_fixup_count
+ 1);
1652 strbuf_addstr(&buf
, "\n\n");
1653 strbuf_add_commented_lines(&buf
, body
, strlen(body
));
1655 return error(_("unknown command: %d"), command
);
1656 unuse_commit_buffer(commit
, message
);
1658 res
= write_message(buf
.buf
, buf
.len
, rebase_path_squash_msg(), 0);
1659 strbuf_release(&buf
);
1662 strbuf_addf(&opts
->current_fixups
, "%s%s %s",
1663 opts
->current_fixups
.len
? "\n" : "",
1664 command_to_string(command
),
1665 oid_to_hex(&commit
->object
.oid
));
1666 res
= write_message(opts
->current_fixups
.buf
,
1667 opts
->current_fixups
.len
,
1668 rebase_path_current_fixups(), 0);
1674 static void flush_rewritten_pending(void) {
1675 struct strbuf buf
= STRBUF_INIT
;
1676 struct object_id newoid
;
1679 if (strbuf_read_file(&buf
, rebase_path_rewritten_pending(), (GIT_MAX_HEXSZ
+ 1) * 2) > 0 &&
1680 !get_oid("HEAD", &newoid
) &&
1681 (out
= fopen_or_warn(rebase_path_rewritten_list(), "a"))) {
1682 char *bol
= buf
.buf
, *eol
;
1685 eol
= strchrnul(bol
, '\n');
1686 fprintf(out
, "%.*s %s\n", (int)(eol
- bol
),
1687 bol
, oid_to_hex(&newoid
));
1693 unlink(rebase_path_rewritten_pending());
1695 strbuf_release(&buf
);
1698 static void record_in_rewritten(struct object_id
*oid
,
1699 enum todo_command next_command
) {
1700 FILE *out
= fopen_or_warn(rebase_path_rewritten_pending(), "a");
1705 fprintf(out
, "%s\n", oid_to_hex(oid
));
1708 if (!is_fixup(next_command
))
1709 flush_rewritten_pending();
1712 static int do_pick_commit(enum todo_command command
, struct commit
*commit
,
1713 struct replay_opts
*opts
, int final_fixup
)
1715 unsigned int flags
= opts
->edit
? EDIT_MSG
: 0;
1716 const char *msg_file
= opts
->edit
? NULL
: git_path_merge_msg(the_repository
);
1717 struct object_id head
;
1718 struct commit
*base
, *next
, *parent
;
1719 const char *base_label
, *next_label
;
1720 char *author
= NULL
;
1721 struct commit_message msg
= { NULL
, NULL
, NULL
, NULL
};
1722 struct strbuf msgbuf
= STRBUF_INIT
;
1723 int res
, unborn
= 0, allow
;
1725 if (opts
->no_commit
) {
1727 * We do not intend to commit immediately. We just want to
1728 * merge the differences in, so let's compute the tree
1729 * that represents the "current" state for merge-recursive
1732 if (write_index_as_tree(&head
, &the_index
, get_index_file(), 0, NULL
))
1733 return error(_("your index file is unmerged."));
1735 unborn
= get_oid("HEAD", &head
);
1736 /* Do we want to generate a root commit? */
1737 if (is_pick_or_similar(command
) && opts
->have_squash_onto
&&
1738 oideq(&head
, &opts
->squash_onto
)) {
1739 if (is_fixup(command
))
1740 return error(_("cannot fixup root commit"));
1741 flags
|= CREATE_ROOT_COMMIT
;
1744 oidcpy(&head
, the_hash_algo
->empty_tree
);
1745 if (index_differs_from(unborn
? empty_tree_oid_hex() : "HEAD",
1747 return error_dirty_index(opts
);
1751 if (!commit
->parents
)
1753 else if (commit
->parents
->next
) {
1754 /* Reverting or cherry-picking a merge commit */
1756 struct commit_list
*p
;
1758 if (!opts
->mainline
)
1759 return error(_("commit %s is a merge but no -m option was given."),
1760 oid_to_hex(&commit
->object
.oid
));
1762 for (cnt
= 1, p
= commit
->parents
;
1763 cnt
!= opts
->mainline
&& p
;
1766 if (cnt
!= opts
->mainline
|| !p
)
1767 return error(_("commit %s does not have parent %d"),
1768 oid_to_hex(&commit
->object
.oid
), opts
->mainline
);
1770 } else if (0 < opts
->mainline
)
1771 return error(_("mainline was specified but commit %s is not a merge."),
1772 oid_to_hex(&commit
->object
.oid
));
1774 parent
= commit
->parents
->item
;
1776 if (get_message(commit
, &msg
) != 0)
1777 return error(_("cannot get commit message for %s"),
1778 oid_to_hex(&commit
->object
.oid
));
1780 if (opts
->allow_ff
&& !is_fixup(command
) &&
1781 ((parent
&& oideq(&parent
->object
.oid
, &head
)) ||
1782 (!parent
&& unborn
))) {
1783 if (is_rebase_i(opts
))
1784 write_author_script(msg
.message
);
1785 res
= fast_forward_to(&commit
->object
.oid
, &head
, unborn
,
1787 if (res
|| command
!= TODO_REWORD
)
1789 flags
|= EDIT_MSG
| AMEND_MSG
| VERIFY_MSG
;
1791 goto fast_forward_edit
;
1793 if (parent
&& parse_commit(parent
) < 0)
1794 /* TRANSLATORS: The first %s will be a "todo" command like
1795 "revert" or "pick", the second %s a SHA1. */
1796 return error(_("%s: cannot parse parent commit %s"),
1797 command_to_string(command
),
1798 oid_to_hex(&parent
->object
.oid
));
1801 * "commit" is an existing commit. We would want to apply
1802 * the difference it introduces since its first parent "prev"
1803 * on top of the current HEAD if we are cherry-pick. Or the
1804 * reverse of it if we are revert.
1807 if (command
== TODO_REVERT
) {
1809 base_label
= msg
.label
;
1811 next_label
= msg
.parent_label
;
1812 strbuf_addstr(&msgbuf
, "Revert \"");
1813 strbuf_addstr(&msgbuf
, msg
.subject
);
1814 strbuf_addstr(&msgbuf
, "\"\n\nThis reverts commit ");
1815 strbuf_addstr(&msgbuf
, oid_to_hex(&commit
->object
.oid
));
1817 if (commit
->parents
&& commit
->parents
->next
) {
1818 strbuf_addstr(&msgbuf
, ", reversing\nchanges made to ");
1819 strbuf_addstr(&msgbuf
, oid_to_hex(&parent
->object
.oid
));
1821 strbuf_addstr(&msgbuf
, ".\n");
1826 base_label
= msg
.parent_label
;
1828 next_label
= msg
.label
;
1830 /* Append the commit log message to msgbuf. */
1831 if (find_commit_subject(msg
.message
, &p
))
1832 strbuf_addstr(&msgbuf
, p
);
1834 if (opts
->record_origin
) {
1835 strbuf_complete_line(&msgbuf
);
1836 if (!has_conforming_footer(&msgbuf
, NULL
, 0))
1837 strbuf_addch(&msgbuf
, '\n');
1838 strbuf_addstr(&msgbuf
, cherry_picked_prefix
);
1839 strbuf_addstr(&msgbuf
, oid_to_hex(&commit
->object
.oid
));
1840 strbuf_addstr(&msgbuf
, ")\n");
1842 if (!is_fixup(command
))
1843 author
= get_author(msg
.message
);
1846 if (command
== TODO_REWORD
)
1847 flags
|= EDIT_MSG
| VERIFY_MSG
;
1848 else if (is_fixup(command
)) {
1849 if (update_squash_messages(command
, commit
, opts
))
1853 msg_file
= rebase_path_squash_msg();
1854 else if (file_exists(rebase_path_fixup_msg())) {
1855 flags
|= CLEANUP_MSG
;
1856 msg_file
= rebase_path_fixup_msg();
1858 const char *dest
= git_path_squash_msg(the_repository
);
1860 if (copy_file(dest
, rebase_path_squash_msg(), 0666))
1861 return error(_("could not rename '%s' to '%s'"),
1862 rebase_path_squash_msg(), dest
);
1863 unlink(git_path_merge_msg(the_repository
));
1869 if (opts
->signoff
&& !is_fixup(command
))
1870 append_signoff(&msgbuf
, 0, 0);
1872 if (is_rebase_i(opts
) && write_author_script(msg
.message
) < 0)
1874 else if (!opts
->strategy
|| !strcmp(opts
->strategy
, "recursive") || command
== TODO_REVERT
) {
1875 res
= do_recursive_merge(base
, next
, base_label
, next_label
,
1876 &head
, &msgbuf
, opts
);
1880 res
|= write_message(msgbuf
.buf
, msgbuf
.len
,
1881 git_path_merge_msg(the_repository
), 0);
1883 struct commit_list
*common
= NULL
;
1884 struct commit_list
*remotes
= NULL
;
1886 res
= write_message(msgbuf
.buf
, msgbuf
.len
,
1887 git_path_merge_msg(the_repository
), 0);
1889 commit_list_insert(base
, &common
);
1890 commit_list_insert(next
, &remotes
);
1891 res
|= try_merge_command(the_repository
, opts
->strategy
,
1892 opts
->xopts_nr
, (const char **)opts
->xopts
,
1893 common
, oid_to_hex(&head
), remotes
);
1894 free_commit_list(common
);
1895 free_commit_list(remotes
);
1897 strbuf_release(&msgbuf
);
1900 * If the merge was clean or if it failed due to conflict, we write
1901 * CHERRY_PICK_HEAD for the subsequent invocation of commit to use.
1902 * However, if the merge did not even start, then we don't want to
1905 if (command
== TODO_PICK
&& !opts
->no_commit
&& (res
== 0 || res
== 1) &&
1906 update_ref(NULL
, "CHERRY_PICK_HEAD", &commit
->object
.oid
, NULL
,
1907 REF_NO_DEREF
, UPDATE_REFS_MSG_ON_ERR
))
1909 if (command
== TODO_REVERT
&& ((opts
->no_commit
&& res
== 0) || res
== 1) &&
1910 update_ref(NULL
, "REVERT_HEAD", &commit
->object
.oid
, NULL
,
1911 REF_NO_DEREF
, UPDATE_REFS_MSG_ON_ERR
))
1915 error(command
== TODO_REVERT
1916 ? _("could not revert %s... %s")
1917 : _("could not apply %s... %s"),
1918 short_commit_name(commit
), msg
.subject
);
1919 print_advice(res
== 1, opts
);
1920 repo_rerere(the_repository
, opts
->allow_rerere_auto
);
1924 allow
= allow_empty(opts
, commit
);
1929 flags
|= ALLOW_EMPTY
;
1930 if (!opts
->no_commit
) {
1932 if (author
|| command
== TODO_REVERT
|| (flags
& AMEND_MSG
))
1933 res
= do_commit(msg_file
, author
, opts
, flags
);
1935 res
= error(_("unable to parse commit author"));
1938 if (!res
&& final_fixup
) {
1939 unlink(rebase_path_fixup_msg());
1940 unlink(rebase_path_squash_msg());
1941 unlink(rebase_path_current_fixups());
1942 strbuf_reset(&opts
->current_fixups
);
1943 opts
->current_fixup_count
= 0;
1947 free_message(commit
, &msg
);
1949 update_abort_safety_file();
1954 static int prepare_revs(struct replay_opts
*opts
)
1957 * picking (but not reverting) ranges (but not individual revisions)
1958 * should be done in reverse
1960 if (opts
->action
== REPLAY_PICK
&& !opts
->revs
->no_walk
)
1961 opts
->revs
->reverse
^= 1;
1963 if (prepare_revision_walk(opts
->revs
))
1964 return error(_("revision walk setup failed"));
1969 static int read_and_refresh_cache(struct replay_opts
*opts
)
1971 struct lock_file index_lock
= LOCK_INIT
;
1972 int index_fd
= hold_locked_index(&index_lock
, 0);
1973 if (read_index(&the_index
) < 0) {
1974 rollback_lock_file(&index_lock
);
1975 return error(_("git %s: failed to read the index"),
1976 _(action_name(opts
)));
1978 refresh_index(&the_index
, REFRESH_QUIET
|REFRESH_UNMERGED
, NULL
, NULL
, NULL
);
1979 if (index_fd
>= 0) {
1980 if (write_locked_index(&the_index
, &index_lock
,
1981 COMMIT_LOCK
| SKIP_IF_UNCHANGED
)) {
1982 return error(_("git %s: failed to refresh the index"),
1983 _(action_name(opts
)));
1989 enum todo_item_flags
{
1990 TODO_EDIT_MERGE_MSG
= 1
1994 enum todo_command command
;
1995 struct commit
*commit
;
1999 size_t offset_in_buf
;
2004 struct todo_item
*items
;
2005 int nr
, alloc
, current
;
2006 int done_nr
, total_nr
;
2007 struct stat_data stat
;
2010 #define TODO_LIST_INIT { STRBUF_INIT }
2012 static void todo_list_release(struct todo_list
*todo_list
)
2014 strbuf_release(&todo_list
->buf
);
2015 FREE_AND_NULL(todo_list
->items
);
2016 todo_list
->nr
= todo_list
->alloc
= 0;
2019 static struct todo_item
*append_new_todo(struct todo_list
*todo_list
)
2021 ALLOC_GROW(todo_list
->items
, todo_list
->nr
+ 1, todo_list
->alloc
);
2022 return todo_list
->items
+ todo_list
->nr
++;
2025 static int parse_insn_line(struct todo_item
*item
, const char *bol
, char *eol
)
2027 struct object_id commit_oid
;
2028 char *end_of_object_name
;
2029 int i
, saved
, status
, padding
;
2034 bol
+= strspn(bol
, " \t");
2036 if (bol
== eol
|| *bol
== '\r' || *bol
== comment_line_char
) {
2037 item
->command
= TODO_COMMENT
;
2038 item
->commit
= NULL
;
2040 item
->arg_len
= eol
- bol
;
2044 for (i
= 0; i
< TODO_COMMENT
; i
++)
2045 if (skip_prefix(bol
, todo_command_info
[i
].str
, &bol
)) {
2048 } else if ((bol
+ 1 == eol
|| bol
[1] == ' ') &&
2049 *bol
== todo_command_info
[i
].c
) {
2054 if (i
>= TODO_COMMENT
)
2057 /* Eat up extra spaces/ tabs before object name */
2058 padding
= strspn(bol
, " \t");
2061 if (item
->command
== TODO_NOOP
|| item
->command
== TODO_BREAK
) {
2063 return error(_("%s does not accept arguments: '%s'"),
2064 command_to_string(item
->command
), bol
);
2065 item
->commit
= NULL
;
2067 item
->arg_len
= eol
- bol
;
2072 return error(_("missing arguments for %s"),
2073 command_to_string(item
->command
));
2075 if (item
->command
== TODO_EXEC
|| item
->command
== TODO_LABEL
||
2076 item
->command
== TODO_RESET
) {
2077 item
->commit
= NULL
;
2079 item
->arg_len
= (int)(eol
- bol
);
2083 if (item
->command
== TODO_MERGE
) {
2084 if (skip_prefix(bol
, "-C", &bol
))
2085 bol
+= strspn(bol
, " \t");
2086 else if (skip_prefix(bol
, "-c", &bol
)) {
2087 bol
+= strspn(bol
, " \t");
2088 item
->flags
|= TODO_EDIT_MERGE_MSG
;
2090 item
->flags
|= TODO_EDIT_MERGE_MSG
;
2091 item
->commit
= NULL
;
2093 item
->arg_len
= (int)(eol
- bol
);
2098 end_of_object_name
= (char *) bol
+ strcspn(bol
, " \t\n");
2099 saved
= *end_of_object_name
;
2100 *end_of_object_name
= '\0';
2101 status
= get_oid(bol
, &commit_oid
);
2102 *end_of_object_name
= saved
;
2104 item
->arg
= end_of_object_name
+ strspn(end_of_object_name
, " \t");
2105 item
->arg_len
= (int)(eol
- item
->arg
);
2110 item
->commit
= lookup_commit_reference(the_repository
, &commit_oid
);
2111 return !item
->commit
;
2114 static int parse_insn_buffer(char *buf
, struct todo_list
*todo_list
)
2116 struct todo_item
*item
;
2117 char *p
= buf
, *next_p
;
2118 int i
, res
= 0, fixup_okay
= file_exists(rebase_path_done());
2120 for (i
= 1; *p
; i
++, p
= next_p
) {
2121 char *eol
= strchrnul(p
, '\n');
2123 next_p
= *eol
? eol
+ 1 /* skip LF */ : eol
;
2125 if (p
!= eol
&& eol
[-1] == '\r')
2126 eol
--; /* strip Carriage Return */
2128 item
= append_new_todo(todo_list
);
2129 item
->offset_in_buf
= p
- todo_list
->buf
.buf
;
2130 if (parse_insn_line(item
, p
, eol
)) {
2131 res
= error(_("invalid line %d: %.*s"),
2132 i
, (int)(eol
- p
), p
);
2133 item
->command
= TODO_NOOP
;
2138 else if (is_fixup(item
->command
))
2139 return error(_("cannot '%s' without a previous commit"),
2140 command_to_string(item
->command
));
2141 else if (!is_noop(item
->command
))
2148 static int count_commands(struct todo_list
*todo_list
)
2152 for (i
= 0; i
< todo_list
->nr
; i
++)
2153 if (todo_list
->items
[i
].command
!= TODO_COMMENT
)
2159 static int get_item_line_offset(struct todo_list
*todo_list
, int index
)
2161 return index
< todo_list
->nr
?
2162 todo_list
->items
[index
].offset_in_buf
: todo_list
->buf
.len
;
2165 static const char *get_item_line(struct todo_list
*todo_list
, int index
)
2167 return todo_list
->buf
.buf
+ get_item_line_offset(todo_list
, index
);
2170 static int get_item_line_length(struct todo_list
*todo_list
, int index
)
2172 return get_item_line_offset(todo_list
, index
+ 1)
2173 - get_item_line_offset(todo_list
, index
);
2176 static ssize_t
strbuf_read_file_or_whine(struct strbuf
*sb
, const char *path
)
2181 fd
= open(path
, O_RDONLY
);
2183 return error_errno(_("could not open '%s'"), path
);
2184 len
= strbuf_read(sb
, fd
, 0);
2187 return error(_("could not read '%s'."), path
);
2191 static int read_populate_todo(struct todo_list
*todo_list
,
2192 struct replay_opts
*opts
)
2195 const char *todo_file
= get_todo_path(opts
);
2198 strbuf_reset(&todo_list
->buf
);
2199 if (strbuf_read_file_or_whine(&todo_list
->buf
, todo_file
) < 0)
2202 res
= stat(todo_file
, &st
);
2204 return error(_("could not stat '%s'"), todo_file
);
2205 fill_stat_data(&todo_list
->stat
, &st
);
2207 res
= parse_insn_buffer(todo_list
->buf
.buf
, todo_list
);
2209 if (is_rebase_i(opts
))
2210 return error(_("please fix this using "
2211 "'git rebase --edit-todo'."));
2212 return error(_("unusable instruction sheet: '%s'"), todo_file
);
2215 if (!todo_list
->nr
&&
2216 (!is_rebase_i(opts
) || !file_exists(rebase_path_done())))
2217 return error(_("no commits parsed."));
2219 if (!is_rebase_i(opts
)) {
2220 enum todo_command valid
=
2221 opts
->action
== REPLAY_PICK
? TODO_PICK
: TODO_REVERT
;
2224 for (i
= 0; i
< todo_list
->nr
; i
++)
2225 if (valid
== todo_list
->items
[i
].command
)
2227 else if (valid
== TODO_PICK
)
2228 return error(_("cannot cherry-pick during a revert."));
2230 return error(_("cannot revert during a cherry-pick."));
2233 if (is_rebase_i(opts
)) {
2234 struct todo_list done
= TODO_LIST_INIT
;
2235 FILE *f
= fopen_or_warn(rebase_path_msgtotal(), "w");
2237 if (strbuf_read_file(&done
.buf
, rebase_path_done(), 0) > 0 &&
2238 !parse_insn_buffer(done
.buf
.buf
, &done
))
2239 todo_list
->done_nr
= count_commands(&done
);
2241 todo_list
->done_nr
= 0;
2243 todo_list
->total_nr
= todo_list
->done_nr
2244 + count_commands(todo_list
);
2245 todo_list_release(&done
);
2248 fprintf(f
, "%d\n", todo_list
->total_nr
);
2256 static int git_config_string_dup(char **dest
,
2257 const char *var
, const char *value
)
2260 return config_error_nonbool(var
);
2262 *dest
= xstrdup(value
);
2266 static int populate_opts_cb(const char *key
, const char *value
, void *data
)
2268 struct replay_opts
*opts
= data
;
2273 else if (!strcmp(key
, "options.no-commit"))
2274 opts
->no_commit
= git_config_bool_or_int(key
, value
, &error_flag
);
2275 else if (!strcmp(key
, "options.edit"))
2276 opts
->edit
= git_config_bool_or_int(key
, value
, &error_flag
);
2277 else if (!strcmp(key
, "options.signoff"))
2278 opts
->signoff
= git_config_bool_or_int(key
, value
, &error_flag
);
2279 else if (!strcmp(key
, "options.record-origin"))
2280 opts
->record_origin
= git_config_bool_or_int(key
, value
, &error_flag
);
2281 else if (!strcmp(key
, "options.allow-ff"))
2282 opts
->allow_ff
= git_config_bool_or_int(key
, value
, &error_flag
);
2283 else if (!strcmp(key
, "options.mainline"))
2284 opts
->mainline
= git_config_int(key
, value
);
2285 else if (!strcmp(key
, "options.strategy"))
2286 git_config_string_dup(&opts
->strategy
, key
, value
);
2287 else if (!strcmp(key
, "options.gpg-sign"))
2288 git_config_string_dup(&opts
->gpg_sign
, key
, value
);
2289 else if (!strcmp(key
, "options.strategy-option")) {
2290 ALLOC_GROW(opts
->xopts
, opts
->xopts_nr
+ 1, opts
->xopts_alloc
);
2291 opts
->xopts
[opts
->xopts_nr
++] = xstrdup(value
);
2292 } else if (!strcmp(key
, "options.allow-rerere-auto"))
2293 opts
->allow_rerere_auto
=
2294 git_config_bool_or_int(key
, value
, &error_flag
) ?
2295 RERERE_AUTOUPDATE
: RERERE_NOAUTOUPDATE
;
2297 return error(_("invalid key: %s"), key
);
2300 return error(_("invalid value for %s: %s"), key
, value
);
2305 void parse_strategy_opts(struct replay_opts
*opts
, char *raw_opts
)
2308 char *strategy_opts_string
= raw_opts
;
2310 if (*strategy_opts_string
== ' ')
2311 strategy_opts_string
++;
2313 opts
->xopts_nr
= split_cmdline(strategy_opts_string
,
2314 (const char ***)&opts
->xopts
);
2315 for (i
= 0; i
< opts
->xopts_nr
; i
++) {
2316 const char *arg
= opts
->xopts
[i
];
2318 skip_prefix(arg
, "--", &arg
);
2319 opts
->xopts
[i
] = xstrdup(arg
);
2323 static void read_strategy_opts(struct replay_opts
*opts
, struct strbuf
*buf
)
2326 if (!read_oneliner(buf
, rebase_path_strategy(), 0))
2328 opts
->strategy
= strbuf_detach(buf
, NULL
);
2329 if (!read_oneliner(buf
, rebase_path_strategy_opts(), 0))
2332 parse_strategy_opts(opts
, buf
->buf
);
2335 static int read_populate_opts(struct replay_opts
*opts
)
2337 if (is_rebase_i(opts
)) {
2338 struct strbuf buf
= STRBUF_INIT
;
2340 if (read_oneliner(&buf
, rebase_path_gpg_sign_opt(), 1)) {
2341 if (!starts_with(buf
.buf
, "-S"))
2344 free(opts
->gpg_sign
);
2345 opts
->gpg_sign
= xstrdup(buf
.buf
+ 2);
2350 if (read_oneliner(&buf
, rebase_path_allow_rerere_autoupdate(), 1)) {
2351 if (!strcmp(buf
.buf
, "--rerere-autoupdate"))
2352 opts
->allow_rerere_auto
= RERERE_AUTOUPDATE
;
2353 else if (!strcmp(buf
.buf
, "--no-rerere-autoupdate"))
2354 opts
->allow_rerere_auto
= RERERE_NOAUTOUPDATE
;
2358 if (file_exists(rebase_path_verbose()))
2361 if (file_exists(rebase_path_signoff())) {
2366 if (file_exists(rebase_path_reschedule_failed_exec()))
2367 opts
->reschedule_failed_exec
= 1;
2369 read_strategy_opts(opts
, &buf
);
2370 strbuf_release(&buf
);
2372 if (read_oneliner(&opts
->current_fixups
,
2373 rebase_path_current_fixups(), 1)) {
2374 const char *p
= opts
->current_fixups
.buf
;
2375 opts
->current_fixup_count
= 1;
2376 while ((p
= strchr(p
, '\n'))) {
2377 opts
->current_fixup_count
++;
2382 if (read_oneliner(&buf
, rebase_path_squash_onto(), 0)) {
2383 if (get_oid_hex(buf
.buf
, &opts
->squash_onto
) < 0)
2384 return error(_("unusable squash-onto"));
2385 opts
->have_squash_onto
= 1;
2391 if (!file_exists(git_path_opts_file()))
2394 * The function git_parse_source(), called from git_config_from_file(),
2395 * may die() in case of a syntactically incorrect file. We do not care
2396 * about this case, though, because we wrote that file ourselves, so we
2397 * are pretty certain that it is syntactically correct.
2399 if (git_config_from_file(populate_opts_cb
, git_path_opts_file(), opts
) < 0)
2400 return error(_("malformed options sheet: '%s'"),
2401 git_path_opts_file());
2405 static void write_strategy_opts(struct replay_opts
*opts
)
2408 struct strbuf buf
= STRBUF_INIT
;
2410 for (i
= 0; i
< opts
->xopts_nr
; ++i
)
2411 strbuf_addf(&buf
, " --%s", opts
->xopts
[i
]);
2413 write_file(rebase_path_strategy_opts(), "%s\n", buf
.buf
);
2414 strbuf_release(&buf
);
2417 int write_basic_state(struct replay_opts
*opts
, const char *head_name
,
2418 const char *onto
, const char *orig_head
)
2420 const char *quiet
= getenv("GIT_QUIET");
2423 write_file(rebase_path_head_name(), "%s\n", head_name
);
2425 write_file(rebase_path_onto(), "%s\n", onto
);
2427 write_file(rebase_path_orig_head(), "%s\n", orig_head
);
2430 write_file(rebase_path_quiet(), "%s\n", quiet
);
2432 write_file(rebase_path_quiet(), "\n");
2435 write_file(rebase_path_verbose(), "%s", "");
2437 write_file(rebase_path_strategy(), "%s\n", opts
->strategy
);
2438 if (opts
->xopts_nr
> 0)
2439 write_strategy_opts(opts
);
2441 if (opts
->allow_rerere_auto
== RERERE_AUTOUPDATE
)
2442 write_file(rebase_path_allow_rerere_autoupdate(), "--rerere-autoupdate\n");
2443 else if (opts
->allow_rerere_auto
== RERERE_NOAUTOUPDATE
)
2444 write_file(rebase_path_allow_rerere_autoupdate(), "--no-rerere-autoupdate\n");
2447 write_file(rebase_path_gpg_sign_opt(), "-S%s\n", opts
->gpg_sign
);
2449 write_file(rebase_path_signoff(), "--signoff\n");
2450 if (opts
->reschedule_failed_exec
)
2451 write_file(rebase_path_reschedule_failed_exec(), "%s", "");
2456 static int walk_revs_populate_todo(struct todo_list
*todo_list
,
2457 struct replay_opts
*opts
)
2459 enum todo_command command
= opts
->action
== REPLAY_PICK
?
2460 TODO_PICK
: TODO_REVERT
;
2461 const char *command_string
= todo_command_info
[command
].str
;
2462 struct commit
*commit
;
2464 if (prepare_revs(opts
))
2467 while ((commit
= get_revision(opts
->revs
))) {
2468 struct todo_item
*item
= append_new_todo(todo_list
);
2469 const char *commit_buffer
= get_commit_buffer(commit
, NULL
);
2470 const char *subject
;
2473 item
->command
= command
;
2474 item
->commit
= commit
;
2477 item
->offset_in_buf
= todo_list
->buf
.len
;
2478 subject_len
= find_commit_subject(commit_buffer
, &subject
);
2479 strbuf_addf(&todo_list
->buf
, "%s %s %.*s\n", command_string
,
2480 short_commit_name(commit
), subject_len
, subject
);
2481 unuse_commit_buffer(commit
, commit_buffer
);
2485 return error(_("empty commit set passed"));
2490 static int create_seq_dir(void)
2492 if (file_exists(git_path_seq_dir())) {
2493 error(_("a cherry-pick or revert is already in progress"));
2494 advise(_("try \"git cherry-pick (--continue | --quit | --abort)\""));
2496 } else if (mkdir(git_path_seq_dir(), 0777) < 0)
2497 return error_errno(_("could not create sequencer directory '%s'"),
2498 git_path_seq_dir());
2502 static int save_head(const char *head
)
2504 struct lock_file head_lock
= LOCK_INIT
;
2505 struct strbuf buf
= STRBUF_INIT
;
2509 fd
= hold_lock_file_for_update(&head_lock
, git_path_head_file(), 0);
2511 return error_errno(_("could not lock HEAD"));
2512 strbuf_addf(&buf
, "%s\n", head
);
2513 written
= write_in_full(fd
, buf
.buf
, buf
.len
);
2514 strbuf_release(&buf
);
2516 error_errno(_("could not write to '%s'"), git_path_head_file());
2517 rollback_lock_file(&head_lock
);
2520 if (commit_lock_file(&head_lock
) < 0)
2521 return error(_("failed to finalize '%s'"), git_path_head_file());
2525 static int rollback_is_safe(void)
2527 struct strbuf sb
= STRBUF_INIT
;
2528 struct object_id expected_head
, actual_head
;
2530 if (strbuf_read_file(&sb
, git_path_abort_safety_file(), 0) >= 0) {
2532 if (get_oid_hex(sb
.buf
, &expected_head
)) {
2533 strbuf_release(&sb
);
2534 die(_("could not parse %s"), git_path_abort_safety_file());
2536 strbuf_release(&sb
);
2538 else if (errno
== ENOENT
)
2539 oidclr(&expected_head
);
2541 die_errno(_("could not read '%s'"), git_path_abort_safety_file());
2543 if (get_oid("HEAD", &actual_head
))
2544 oidclr(&actual_head
);
2546 return oideq(&actual_head
, &expected_head
);
2549 static int reset_for_rollback(const struct object_id
*oid
)
2551 const char *argv
[4]; /* reset --merge <arg> + NULL */
2554 argv
[1] = "--merge";
2555 argv
[2] = oid_to_hex(oid
);
2557 return run_command_v_opt(argv
, RUN_GIT_CMD
);
2560 static int rollback_single_pick(void)
2562 struct object_id head_oid
;
2564 if (!file_exists(git_path_cherry_pick_head(the_repository
)) &&
2565 !file_exists(git_path_revert_head(the_repository
)))
2566 return error(_("no cherry-pick or revert in progress"));
2567 if (read_ref_full("HEAD", 0, &head_oid
, NULL
))
2568 return error(_("cannot resolve HEAD"));
2569 if (is_null_oid(&head_oid
))
2570 return error(_("cannot abort from a branch yet to be born"));
2571 return reset_for_rollback(&head_oid
);
2574 int sequencer_rollback(struct replay_opts
*opts
)
2577 struct object_id oid
;
2578 struct strbuf buf
= STRBUF_INIT
;
2581 f
= fopen(git_path_head_file(), "r");
2582 if (!f
&& errno
== ENOENT
) {
2584 * There is no multiple-cherry-pick in progress.
2585 * If CHERRY_PICK_HEAD or REVERT_HEAD indicates
2586 * a single-cherry-pick in progress, abort that.
2588 return rollback_single_pick();
2591 return error_errno(_("cannot open '%s'"), git_path_head_file());
2592 if (strbuf_getline_lf(&buf
, f
)) {
2593 error(_("cannot read '%s': %s"), git_path_head_file(),
2594 ferror(f
) ? strerror(errno
) : _("unexpected end of file"));
2599 if (parse_oid_hex(buf
.buf
, &oid
, &p
) || *p
!= '\0') {
2600 error(_("stored pre-cherry-pick HEAD file '%s' is corrupt"),
2601 git_path_head_file());
2604 if (is_null_oid(&oid
)) {
2605 error(_("cannot abort from a branch yet to be born"));
2609 if (!rollback_is_safe()) {
2610 /* Do not error, just do not rollback */
2611 warning(_("You seem to have moved HEAD. "
2612 "Not rewinding, check your HEAD!"));
2614 if (reset_for_rollback(&oid
))
2616 strbuf_release(&buf
);
2617 return sequencer_remove_state(opts
);
2619 strbuf_release(&buf
);
2623 static int save_todo(struct todo_list
*todo_list
, struct replay_opts
*opts
)
2625 struct lock_file todo_lock
= LOCK_INIT
;
2626 const char *todo_path
= get_todo_path(opts
);
2627 int next
= todo_list
->current
, offset
, fd
;
2630 * rebase -i writes "git-rebase-todo" without the currently executing
2631 * command, appending it to "done" instead.
2633 if (is_rebase_i(opts
))
2636 fd
= hold_lock_file_for_update(&todo_lock
, todo_path
, 0);
2638 return error_errno(_("could not lock '%s'"), todo_path
);
2639 offset
= get_item_line_offset(todo_list
, next
);
2640 if (write_in_full(fd
, todo_list
->buf
.buf
+ offset
,
2641 todo_list
->buf
.len
- offset
) < 0)
2642 return error_errno(_("could not write to '%s'"), todo_path
);
2643 if (commit_lock_file(&todo_lock
) < 0)
2644 return error(_("failed to finalize '%s'"), todo_path
);
2646 if (is_rebase_i(opts
) && next
> 0) {
2647 const char *done
= rebase_path_done();
2648 int fd
= open(done
, O_CREAT
| O_WRONLY
| O_APPEND
, 0666);
2653 if (write_in_full(fd
, get_item_line(todo_list
, next
- 1),
2654 get_item_line_length(todo_list
, next
- 1))
2656 ret
= error_errno(_("could not write to '%s'"), done
);
2658 ret
= error_errno(_("failed to finalize '%s'"), done
);
2664 static int save_opts(struct replay_opts
*opts
)
2666 const char *opts_file
= git_path_opts_file();
2669 if (opts
->no_commit
)
2670 res
|= git_config_set_in_file_gently(opts_file
, "options.no-commit", "true");
2672 res
|= git_config_set_in_file_gently(opts_file
, "options.edit", "true");
2674 res
|= git_config_set_in_file_gently(opts_file
, "options.signoff", "true");
2675 if (opts
->record_origin
)
2676 res
|= git_config_set_in_file_gently(opts_file
, "options.record-origin", "true");
2678 res
|= git_config_set_in_file_gently(opts_file
, "options.allow-ff", "true");
2679 if (opts
->mainline
) {
2680 struct strbuf buf
= STRBUF_INIT
;
2681 strbuf_addf(&buf
, "%d", opts
->mainline
);
2682 res
|= git_config_set_in_file_gently(opts_file
, "options.mainline", buf
.buf
);
2683 strbuf_release(&buf
);
2686 res
|= git_config_set_in_file_gently(opts_file
, "options.strategy", opts
->strategy
);
2688 res
|= git_config_set_in_file_gently(opts_file
, "options.gpg-sign", opts
->gpg_sign
);
2691 for (i
= 0; i
< opts
->xopts_nr
; i
++)
2692 res
|= git_config_set_multivar_in_file_gently(opts_file
,
2693 "options.strategy-option",
2694 opts
->xopts
[i
], "^$", 0);
2696 if (opts
->allow_rerere_auto
)
2697 res
|= git_config_set_in_file_gently(opts_file
, "options.allow-rerere-auto",
2698 opts
->allow_rerere_auto
== RERERE_AUTOUPDATE
?
2703 static int make_patch(struct commit
*commit
, struct replay_opts
*opts
)
2705 struct strbuf buf
= STRBUF_INIT
;
2706 struct rev_info log_tree_opt
;
2707 const char *subject
, *p
;
2710 p
= short_commit_name(commit
);
2711 if (write_message(p
, strlen(p
), rebase_path_stopped_sha(), 1) < 0)
2713 if (update_ref("rebase", "REBASE_HEAD", &commit
->object
.oid
,
2714 NULL
, REF_NO_DEREF
, UPDATE_REFS_MSG_ON_ERR
))
2715 res
|= error(_("could not update %s"), "REBASE_HEAD");
2717 strbuf_addf(&buf
, "%s/patch", get_dir(opts
));
2718 memset(&log_tree_opt
, 0, sizeof(log_tree_opt
));
2719 repo_init_revisions(the_repository
, &log_tree_opt
, NULL
);
2720 log_tree_opt
.abbrev
= 0;
2721 log_tree_opt
.diff
= 1;
2722 log_tree_opt
.diffopt
.output_format
= DIFF_FORMAT_PATCH
;
2723 log_tree_opt
.disable_stdin
= 1;
2724 log_tree_opt
.no_commit_id
= 1;
2725 log_tree_opt
.diffopt
.file
= fopen(buf
.buf
, "w");
2726 log_tree_opt
.diffopt
.use_color
= GIT_COLOR_NEVER
;
2727 if (!log_tree_opt
.diffopt
.file
)
2728 res
|= error_errno(_("could not open '%s'"), buf
.buf
);
2730 res
|= log_tree_commit(&log_tree_opt
, commit
);
2731 fclose(log_tree_opt
.diffopt
.file
);
2735 strbuf_addf(&buf
, "%s/message", get_dir(opts
));
2736 if (!file_exists(buf
.buf
)) {
2737 const char *commit_buffer
= get_commit_buffer(commit
, NULL
);
2738 find_commit_subject(commit_buffer
, &subject
);
2739 res
|= write_message(subject
, strlen(subject
), buf
.buf
, 1);
2740 unuse_commit_buffer(commit
, commit_buffer
);
2742 strbuf_release(&buf
);
2747 static int intend_to_amend(void)
2749 struct object_id head
;
2752 if (get_oid("HEAD", &head
))
2753 return error(_("cannot read HEAD"));
2755 p
= oid_to_hex(&head
);
2756 return write_message(p
, strlen(p
), rebase_path_amend(), 1);
2759 static int error_with_patch(struct commit
*commit
,
2760 const char *subject
, int subject_len
,
2761 struct replay_opts
*opts
, int exit_code
, int to_amend
)
2764 if (make_patch(commit
, opts
))
2766 } else if (copy_file(rebase_path_message(),
2767 git_path_merge_msg(the_repository
), 0666))
2768 return error(_("unable to copy '%s' to '%s'"),
2769 git_path_merge_msg(the_repository
), rebase_path_message());
2772 if (intend_to_amend())
2776 _("You can amend the commit now, with\n"
2778 " git commit --amend %s\n"
2780 "Once you are satisfied with your changes, run\n"
2782 " git rebase --continue\n"),
2783 gpg_sign_opt_quoted(opts
));
2784 } else if (exit_code
) {
2786 fprintf_ln(stderr
, _("Could not apply %s... %.*s"),
2787 short_commit_name(commit
), subject_len
, subject
);
2790 * We don't have the hash of the parent so
2791 * just print the line from the todo file.
2793 fprintf_ln(stderr
, _("Could not merge %.*s"),
2794 subject_len
, subject
);
2800 static int error_failed_squash(struct commit
*commit
,
2801 struct replay_opts
*opts
, int subject_len
, const char *subject
)
2803 if (copy_file(rebase_path_message(), rebase_path_squash_msg(), 0666))
2804 return error(_("could not copy '%s' to '%s'"),
2805 rebase_path_squash_msg(), rebase_path_message());
2806 unlink(git_path_merge_msg(the_repository
));
2807 if (copy_file(git_path_merge_msg(the_repository
), rebase_path_message(), 0666))
2808 return error(_("could not copy '%s' to '%s'"),
2809 rebase_path_message(),
2810 git_path_merge_msg(the_repository
));
2811 return error_with_patch(commit
, subject
, subject_len
, opts
, 1, 0);
2814 static int do_exec(const char *command_line
)
2816 struct argv_array child_env
= ARGV_ARRAY_INIT
;
2817 const char *child_argv
[] = { NULL
, NULL
};
2820 fprintf(stderr
, "Executing: %s\n", command_line
);
2821 child_argv
[0] = command_line
;
2822 argv_array_pushf(&child_env
, "GIT_DIR=%s", absolute_path(get_git_dir()));
2823 argv_array_pushf(&child_env
, "GIT_WORK_TREE=%s",
2824 absolute_path(get_git_work_tree()));
2825 status
= run_command_v_opt_cd_env(child_argv
, RUN_USING_SHELL
, NULL
,
2828 /* force re-reading of the cache */
2829 if (discard_cache() < 0 || read_cache() < 0)
2830 return error(_("could not read index"));
2832 dirty
= require_clean_work_tree("rebase", NULL
, 1, 1);
2835 warning(_("execution failed: %s\n%s"
2836 "You can fix the problem, and then run\n"
2838 " git rebase --continue\n"
2841 dirty
? N_("and made changes to the index and/or the "
2842 "working tree\n") : "");
2844 /* command not found */
2847 warning(_("execution succeeded: %s\nbut "
2848 "left changes to the index and/or the working tree\n"
2849 "Commit or stash your changes, and then run\n"
2851 " git rebase --continue\n"
2852 "\n"), command_line
);
2856 argv_array_clear(&child_env
);
2861 static int safe_append(const char *filename
, const char *fmt
, ...)
2864 struct lock_file lock
= LOCK_INIT
;
2865 int fd
= hold_lock_file_for_update(&lock
, filename
,
2866 LOCK_REPORT_ON_ERROR
);
2867 struct strbuf buf
= STRBUF_INIT
;
2872 if (strbuf_read_file(&buf
, filename
, 0) < 0 && errno
!= ENOENT
) {
2873 error_errno(_("could not read '%s'"), filename
);
2874 rollback_lock_file(&lock
);
2877 strbuf_complete(&buf
, '\n');
2879 strbuf_vaddf(&buf
, fmt
, ap
);
2882 if (write_in_full(fd
, buf
.buf
, buf
.len
) < 0) {
2883 error_errno(_("could not write to '%s'"), filename
);
2884 strbuf_release(&buf
);
2885 rollback_lock_file(&lock
);
2888 if (commit_lock_file(&lock
) < 0) {
2889 strbuf_release(&buf
);
2890 rollback_lock_file(&lock
);
2891 return error(_("failed to finalize '%s'"), filename
);
2894 strbuf_release(&buf
);
2898 static int do_label(const char *name
, int len
)
2900 struct ref_store
*refs
= get_main_ref_store(the_repository
);
2901 struct ref_transaction
*transaction
;
2902 struct strbuf ref_name
= STRBUF_INIT
, err
= STRBUF_INIT
;
2903 struct strbuf msg
= STRBUF_INIT
;
2905 struct object_id head_oid
;
2907 if (len
== 1 && *name
== '#')
2908 return error(_("illegal label name: '%.*s'"), len
, name
);
2910 strbuf_addf(&ref_name
, "refs/rewritten/%.*s", len
, name
);
2911 strbuf_addf(&msg
, "rebase -i (label) '%.*s'", len
, name
);
2913 transaction
= ref_store_transaction_begin(refs
, &err
);
2915 error("%s", err
.buf
);
2917 } else if (get_oid("HEAD", &head_oid
)) {
2918 error(_("could not read HEAD"));
2920 } else if (ref_transaction_update(transaction
, ref_name
.buf
, &head_oid
,
2921 NULL
, 0, msg
.buf
, &err
) < 0 ||
2922 ref_transaction_commit(transaction
, &err
)) {
2923 error("%s", err
.buf
);
2926 ref_transaction_free(transaction
);
2927 strbuf_release(&err
);
2928 strbuf_release(&msg
);
2931 ret
= safe_append(rebase_path_refs_to_delete(),
2932 "%s\n", ref_name
.buf
);
2933 strbuf_release(&ref_name
);
2938 static const char *reflog_message(struct replay_opts
*opts
,
2939 const char *sub_action
, const char *fmt
, ...);
2941 static int do_reset(const char *name
, int len
, struct replay_opts
*opts
)
2943 struct strbuf ref_name
= STRBUF_INIT
;
2944 struct object_id oid
;
2945 struct lock_file lock
= LOCK_INIT
;
2946 struct tree_desc desc
;
2948 struct unpack_trees_options unpack_tree_opts
;
2951 if (hold_locked_index(&lock
, LOCK_REPORT_ON_ERROR
) < 0)
2954 if (len
== 10 && !strncmp("[new root]", name
, len
)) {
2955 if (!opts
->have_squash_onto
) {
2957 if (commit_tree("", 0, the_hash_algo
->empty_tree
,
2958 NULL
, &opts
->squash_onto
,
2960 return error(_("writing fake root commit"));
2961 opts
->have_squash_onto
= 1;
2962 hex
= oid_to_hex(&opts
->squash_onto
);
2963 if (write_message(hex
, strlen(hex
),
2964 rebase_path_squash_onto(), 0))
2965 return error(_("writing squash-onto"));
2967 oidcpy(&oid
, &opts
->squash_onto
);
2971 /* Determine the length of the label */
2972 for (i
= 0; i
< len
; i
++)
2973 if (isspace(name
[i
]))
2977 strbuf_addf(&ref_name
, "refs/rewritten/%.*s", len
, name
);
2978 if (get_oid(ref_name
.buf
, &oid
) &&
2979 get_oid(ref_name
.buf
+ strlen("refs/rewritten/"), &oid
)) {
2980 error(_("could not read '%s'"), ref_name
.buf
);
2981 rollback_lock_file(&lock
);
2982 strbuf_release(&ref_name
);
2987 memset(&unpack_tree_opts
, 0, sizeof(unpack_tree_opts
));
2988 setup_unpack_trees_porcelain(&unpack_tree_opts
, "reset");
2989 unpack_tree_opts
.head_idx
= 1;
2990 unpack_tree_opts
.src_index
= &the_index
;
2991 unpack_tree_opts
.dst_index
= &the_index
;
2992 unpack_tree_opts
.fn
= oneway_merge
;
2993 unpack_tree_opts
.merge
= 1;
2994 unpack_tree_opts
.update
= 1;
2996 if (read_cache_unmerged()) {
2997 rollback_lock_file(&lock
);
2998 strbuf_release(&ref_name
);
2999 return error_resolve_conflict(_(action_name(opts
)));
3002 if (!fill_tree_descriptor(&desc
, &oid
)) {
3003 error(_("failed to find tree of %s"), oid_to_hex(&oid
));
3004 rollback_lock_file(&lock
);
3005 free((void *)desc
.buffer
);
3006 strbuf_release(&ref_name
);
3010 if (unpack_trees(1, &desc
, &unpack_tree_opts
)) {
3011 rollback_lock_file(&lock
);
3012 free((void *)desc
.buffer
);
3013 strbuf_release(&ref_name
);
3017 tree
= parse_tree_indirect(&oid
);
3018 prime_cache_tree(&the_index
, tree
);
3020 if (write_locked_index(&the_index
, &lock
, COMMIT_LOCK
) < 0)
3021 ret
= error(_("could not write index"));
3022 free((void *)desc
.buffer
);
3025 ret
= update_ref(reflog_message(opts
, "reset", "'%.*s'",
3026 len
, name
), "HEAD", &oid
,
3027 NULL
, 0, UPDATE_REFS_MSG_ON_ERR
);
3029 strbuf_release(&ref_name
);
3033 static struct commit
*lookup_label(const char *label
, int len
,
3036 struct commit
*commit
;
3039 strbuf_addf(buf
, "refs/rewritten/%.*s", len
, label
);
3040 commit
= lookup_commit_reference_by_name(buf
->buf
);
3042 /* fall back to non-rewritten ref or commit */
3043 strbuf_splice(buf
, 0, strlen("refs/rewritten/"), "", 0);
3044 commit
= lookup_commit_reference_by_name(buf
->buf
);
3048 error(_("could not resolve '%s'"), buf
->buf
);
3053 static int do_merge(struct commit
*commit
, const char *arg
, int arg_len
,
3054 int flags
, struct replay_opts
*opts
)
3056 int run_commit_flags
= (flags
& TODO_EDIT_MERGE_MSG
) ?
3057 EDIT_MSG
| VERIFY_MSG
: 0;
3058 struct strbuf ref_name
= STRBUF_INIT
;
3059 struct commit
*head_commit
, *merge_commit
, *i
;
3060 struct commit_list
*bases
, *j
, *reversed
= NULL
;
3061 struct commit_list
*to_merge
= NULL
, **tail
= &to_merge
;
3062 struct merge_options o
;
3063 int merge_arg_len
, oneline_offset
, can_fast_forward
, ret
, k
;
3064 static struct lock_file lock
;
3067 if (hold_locked_index(&lock
, LOCK_REPORT_ON_ERROR
) < 0) {
3072 head_commit
= lookup_commit_reference_by_name("HEAD");
3074 ret
= error(_("cannot merge without a current revision"));
3079 * For octopus merges, the arg starts with the list of revisions to be
3080 * merged. The list is optionally followed by '#' and the oneline.
3082 merge_arg_len
= oneline_offset
= arg_len
;
3083 for (p
= arg
; p
- arg
< arg_len
; p
+= strspn(p
, " \t\n")) {
3086 if (*p
== '#' && (!p
[1] || isspace(p
[1]))) {
3087 p
+= 1 + strspn(p
+ 1, " \t\n");
3088 oneline_offset
= p
- arg
;
3091 k
= strcspn(p
, " \t\n");
3094 merge_commit
= lookup_label(p
, k
, &ref_name
);
3095 if (!merge_commit
) {
3096 ret
= error(_("unable to parse '%.*s'"), k
, p
);
3099 tail
= &commit_list_insert(merge_commit
, tail
)->next
;
3101 merge_arg_len
= p
- arg
;
3105 ret
= error(_("nothing to merge: '%.*s'"), arg_len
, arg
);
3109 if (opts
->have_squash_onto
&&
3110 oideq(&head_commit
->object
.oid
, &opts
->squash_onto
)) {
3112 * When the user tells us to "merge" something into a
3113 * "[new root]", let's simply fast-forward to the merge head.
3115 rollback_lock_file(&lock
);
3117 ret
= error(_("octopus merge cannot be executed on "
3118 "top of a [new root]"));
3120 ret
= fast_forward_to(&to_merge
->item
->object
.oid
,
3121 &head_commit
->object
.oid
, 0,
3127 const char *message
= get_commit_buffer(commit
, NULL
);
3132 ret
= error(_("could not get commit message of '%s'"),
3133 oid_to_hex(&commit
->object
.oid
));
3136 write_author_script(message
);
3137 find_commit_subject(message
, &body
);
3139 ret
= write_message(body
, len
, git_path_merge_msg(the_repository
), 0);
3140 unuse_commit_buffer(commit
, message
);
3142 error_errno(_("could not write '%s'"),
3143 git_path_merge_msg(the_repository
));
3147 struct strbuf buf
= STRBUF_INIT
;
3150 strbuf_addf(&buf
, "author %s", git_author_info(0));
3151 write_author_script(buf
.buf
);
3154 if (oneline_offset
< arg_len
) {
3155 p
= arg
+ oneline_offset
;
3156 len
= arg_len
- oneline_offset
;
3158 strbuf_addf(&buf
, "Merge %s '%.*s'",
3159 to_merge
->next
? "branches" : "branch",
3160 merge_arg_len
, arg
);
3165 ret
= write_message(p
, len
, git_path_merge_msg(the_repository
), 0);
3166 strbuf_release(&buf
);
3168 error_errno(_("could not write '%s'"),
3169 git_path_merge_msg(the_repository
));
3175 * If HEAD is not identical to the first parent of the original merge
3176 * commit, we cannot fast-forward.
3178 can_fast_forward
= opts
->allow_ff
&& commit
&& commit
->parents
&&
3179 oideq(&commit
->parents
->item
->object
.oid
,
3180 &head_commit
->object
.oid
);
3183 * If any merge head is different from the original one, we cannot
3186 if (can_fast_forward
) {
3187 struct commit_list
*p
= commit
->parents
->next
;
3189 for (j
= to_merge
; j
&& p
; j
= j
->next
, p
= p
->next
)
3190 if (!oideq(&j
->item
->object
.oid
,
3191 &p
->item
->object
.oid
)) {
3192 can_fast_forward
= 0;
3196 * If the number of merge heads differs from the original merge
3197 * commit, we cannot fast-forward.
3200 can_fast_forward
= 0;
3203 if (can_fast_forward
) {
3204 rollback_lock_file(&lock
);
3205 ret
= fast_forward_to(&commit
->object
.oid
,
3206 &head_commit
->object
.oid
, 0, opts
);
3210 if (to_merge
->next
) {
3212 struct child_process cmd
= CHILD_PROCESS_INIT
;
3214 if (read_env_script(&cmd
.env_array
)) {
3215 const char *gpg_opt
= gpg_sign_opt_quoted(opts
);
3217 ret
= error(_(staged_changes_advice
), gpg_opt
, gpg_opt
);
3222 argv_array_push(&cmd
.args
, "merge");
3223 argv_array_push(&cmd
.args
, "-s");
3224 argv_array_push(&cmd
.args
, "octopus");
3225 argv_array_push(&cmd
.args
, "--no-edit");
3226 argv_array_push(&cmd
.args
, "--no-ff");
3227 argv_array_push(&cmd
.args
, "--no-log");
3228 argv_array_push(&cmd
.args
, "--no-stat");
3229 argv_array_push(&cmd
.args
, "-F");
3230 argv_array_push(&cmd
.args
, git_path_merge_msg(the_repository
));
3232 argv_array_push(&cmd
.args
, opts
->gpg_sign
);
3234 /* Add the tips to be merged */
3235 for (j
= to_merge
; j
; j
= j
->next
)
3236 argv_array_push(&cmd
.args
,
3237 oid_to_hex(&j
->item
->object
.oid
));
3239 strbuf_release(&ref_name
);
3240 unlink(git_path_cherry_pick_head(the_repository
));
3241 rollback_lock_file(&lock
);
3243 rollback_lock_file(&lock
);
3244 ret
= run_command(&cmd
);
3246 /* force re-reading of the cache */
3247 if (!ret
&& (discard_cache() < 0 || read_cache() < 0))
3248 ret
= error(_("could not read index"));
3252 merge_commit
= to_merge
->item
;
3253 bases
= get_merge_bases(head_commit
, merge_commit
);
3254 if (bases
&& oideq(&merge_commit
->object
.oid
,
3255 &bases
->item
->object
.oid
)) {
3257 /* skip merging an ancestor of HEAD */
3261 write_message(oid_to_hex(&merge_commit
->object
.oid
), GIT_SHA1_HEXSZ
,
3262 git_path_merge_head(the_repository
), 0);
3263 write_message("no-ff", 5, git_path_merge_mode(the_repository
), 0);
3265 for (j
= bases
; j
; j
= j
->next
)
3266 commit_list_insert(j
->item
, &reversed
);
3267 free_commit_list(bases
);
3270 init_merge_options(&o
);
3272 o
.branch2
= ref_name
.buf
;
3273 o
.buffer_output
= 2;
3275 ret
= merge_recursive(&o
, head_commit
, merge_commit
, reversed
, &i
);
3277 fputs(o
.obuf
.buf
, stdout
);
3278 strbuf_release(&o
.obuf
);
3280 error(_("could not even attempt to merge '%.*s'"),
3281 merge_arg_len
, arg
);
3285 * The return value of merge_recursive() is 1 on clean, and 0 on
3288 * Let's reverse that, so that do_merge() returns 0 upon success and
3289 * 1 upon failed merge (keeping the return value -1 for the cases where
3290 * we will want to reschedule the `merge` command).
3294 if (active_cache_changed
&&
3295 write_locked_index(&the_index
, &lock
, COMMIT_LOCK
)) {
3296 ret
= error(_("merge: Unable to write new index file"));
3300 rollback_lock_file(&lock
);
3302 repo_rerere(the_repository
, opts
->allow_rerere_auto
);
3305 * In case of problems, we now want to return a positive
3306 * value (a negative one would indicate that the `merge`
3307 * command needs to be rescheduled).
3309 ret
= !!run_git_commit(git_path_merge_msg(the_repository
), opts
,
3313 strbuf_release(&ref_name
);
3314 rollback_lock_file(&lock
);
3315 free_commit_list(to_merge
);
3319 static int is_final_fixup(struct todo_list
*todo_list
)
3321 int i
= todo_list
->current
;
3323 if (!is_fixup(todo_list
->items
[i
].command
))
3326 while (++i
< todo_list
->nr
)
3327 if (is_fixup(todo_list
->items
[i
].command
))
3329 else if (!is_noop(todo_list
->items
[i
].command
))
3334 static enum todo_command
peek_command(struct todo_list
*todo_list
, int offset
)
3338 for (i
= todo_list
->current
+ offset
; i
< todo_list
->nr
; i
++)
3339 if (!is_noop(todo_list
->items
[i
].command
))
3340 return todo_list
->items
[i
].command
;
3345 static int apply_autostash(struct replay_opts
*opts
)
3347 struct strbuf stash_sha1
= STRBUF_INIT
;
3348 struct child_process child
= CHILD_PROCESS_INIT
;
3351 if (!read_oneliner(&stash_sha1
, rebase_path_autostash(), 1)) {
3352 strbuf_release(&stash_sha1
);
3355 strbuf_trim(&stash_sha1
);
3358 child
.no_stdout
= 1;
3359 child
.no_stderr
= 1;
3360 argv_array_push(&child
.args
, "stash");
3361 argv_array_push(&child
.args
, "apply");
3362 argv_array_push(&child
.args
, stash_sha1
.buf
);
3363 if (!run_command(&child
))
3364 fprintf(stderr
, _("Applied autostash.\n"));
3366 struct child_process store
= CHILD_PROCESS_INIT
;
3369 argv_array_push(&store
.args
, "stash");
3370 argv_array_push(&store
.args
, "store");
3371 argv_array_push(&store
.args
, "-m");
3372 argv_array_push(&store
.args
, "autostash");
3373 argv_array_push(&store
.args
, "-q");
3374 argv_array_push(&store
.args
, stash_sha1
.buf
);
3375 if (run_command(&store
))
3376 ret
= error(_("cannot store %s"), stash_sha1
.buf
);
3379 _("Applying autostash resulted in conflicts.\n"
3380 "Your changes are safe in the stash.\n"
3381 "You can run \"git stash pop\" or"
3382 " \"git stash drop\" at any time.\n"));
3385 strbuf_release(&stash_sha1
);
3389 static const char *reflog_message(struct replay_opts
*opts
,
3390 const char *sub_action
, const char *fmt
, ...)
3393 static struct strbuf buf
= STRBUF_INIT
;
3397 strbuf_addstr(&buf
, action_name(opts
));
3399 strbuf_addf(&buf
, " (%s)", sub_action
);
3401 strbuf_addstr(&buf
, ": ");
3402 strbuf_vaddf(&buf
, fmt
, ap
);
3409 static int run_git_checkout(struct replay_opts
*opts
, const char *commit
,
3412 struct child_process cmd
= CHILD_PROCESS_INIT
;
3416 argv_array_push(&cmd
.args
, "checkout");
3417 argv_array_push(&cmd
.args
, commit
);
3418 argv_array_pushf(&cmd
.env_array
, GIT_REFLOG_ACTION
"=%s", action
);
3421 return run_command(&cmd
);
3423 return run_command_silent_on_success(&cmd
);
3426 int prepare_branch_to_be_rebased(struct replay_opts
*opts
, const char *commit
)
3430 if (commit
&& *commit
) {
3431 action
= reflog_message(opts
, "start", "checkout %s", commit
);
3432 if (run_git_checkout(opts
, commit
, action
))
3433 return error(_("could not checkout %s"), commit
);
3439 static int checkout_onto(struct replay_opts
*opts
,
3440 const char *onto_name
, const char *onto
,
3441 const char *orig_head
)
3443 struct object_id oid
;
3444 const char *action
= reflog_message(opts
, "start", "checkout %s", onto_name
);
3446 if (get_oid(orig_head
, &oid
))
3447 return error(_("%s: not a valid OID"), orig_head
);
3449 if (run_git_checkout(opts
, onto
, action
)) {
3450 apply_autostash(opts
);
3451 sequencer_remove_state(opts
);
3452 return error(_("could not detach HEAD"));
3455 return update_ref(NULL
, "ORIG_HEAD", &oid
, NULL
, 0, UPDATE_REFS_MSG_ON_ERR
);
3458 static int stopped_at_head(void)
3460 struct object_id head
;
3461 struct commit
*commit
;
3462 struct commit_message message
;
3464 if (get_oid("HEAD", &head
) ||
3465 !(commit
= lookup_commit(the_repository
, &head
)) ||
3466 parse_commit(commit
) || get_message(commit
, &message
))
3467 fprintf(stderr
, _("Stopped at HEAD\n"));
3469 fprintf(stderr
, _("Stopped at %s\n"), message
.label
);
3470 free_message(commit
, &message
);
3476 static const char rescheduled_advice
[] =
3477 N_("Could not execute the todo command\n"
3481 "It has been rescheduled; To edit the command before continuing, please\n"
3482 "edit the todo list first:\n"
3484 " git rebase --edit-todo\n"
3485 " git rebase --continue\n");
3487 static int pick_commits(struct todo_list
*todo_list
, struct replay_opts
*opts
)
3489 int res
= 0, reschedule
= 0;
3491 setenv(GIT_REFLOG_ACTION
, action_name(opts
), 0);
3493 assert(!(opts
->signoff
|| opts
->no_commit
||
3494 opts
->record_origin
|| opts
->edit
));
3495 if (read_and_refresh_cache(opts
))
3498 while (todo_list
->current
< todo_list
->nr
) {
3499 struct todo_item
*item
= todo_list
->items
+ todo_list
->current
;
3500 if (save_todo(todo_list
, opts
))
3502 if (is_rebase_i(opts
)) {
3503 if (item
->command
!= TODO_COMMENT
) {
3504 FILE *f
= fopen(rebase_path_msgnum(), "w");
3506 todo_list
->done_nr
++;
3509 fprintf(f
, "%d\n", todo_list
->done_nr
);
3512 fprintf(stderr
, "Rebasing (%d/%d)%s",
3514 todo_list
->total_nr
,
3515 opts
->verbose
? "\n" : "\r");
3517 unlink(rebase_path_message());
3518 unlink(rebase_path_author_script());
3519 unlink(rebase_path_stopped_sha());
3520 unlink(rebase_path_amend());
3521 unlink(git_path_merge_head(the_repository
));
3522 delete_ref(NULL
, "REBASE_HEAD", NULL
, REF_NO_DEREF
);
3524 if (item
->command
== TODO_BREAK
)
3525 return stopped_at_head();
3527 if (item
->command
<= TODO_SQUASH
) {
3528 if (is_rebase_i(opts
))
3529 setenv("GIT_REFLOG_ACTION", reflog_message(opts
,
3530 command_to_string(item
->command
), NULL
),
3532 res
= do_pick_commit(item
->command
, item
->commit
,
3533 opts
, is_final_fixup(todo_list
));
3534 if (is_rebase_i(opts
) && res
< 0) {
3536 advise(_(rescheduled_advice
),
3537 get_item_line_length(todo_list
,
3538 todo_list
->current
),
3539 get_item_line(todo_list
,
3540 todo_list
->current
));
3541 todo_list
->current
--;
3542 if (save_todo(todo_list
, opts
))
3545 if (item
->command
== TODO_EDIT
) {
3546 struct commit
*commit
= item
->commit
;
3549 _("Stopped at %s... %.*s\n"),
3550 short_commit_name(commit
),
3551 item
->arg_len
, item
->arg
);
3552 return error_with_patch(commit
,
3553 item
->arg
, item
->arg_len
, opts
, res
,
3556 if (is_rebase_i(opts
) && !res
)
3557 record_in_rewritten(&item
->commit
->object
.oid
,
3558 peek_command(todo_list
, 1));
3559 if (res
&& is_fixup(item
->command
)) {
3562 return error_failed_squash(item
->commit
, opts
,
3563 item
->arg_len
, item
->arg
);
3564 } else if (res
&& is_rebase_i(opts
) && item
->commit
) {
3566 struct object_id oid
;
3569 * If we are rewording and have either
3570 * fast-forwarded already, or are about to
3571 * create a new root commit, we want to amend,
3572 * otherwise we do not.
3574 if (item
->command
== TODO_REWORD
&&
3575 !get_oid("HEAD", &oid
) &&
3576 (oideq(&item
->commit
->object
.oid
, &oid
) ||
3577 (opts
->have_squash_onto
&&
3578 oideq(&opts
->squash_onto
, &oid
))))
3581 return res
| error_with_patch(item
->commit
,
3582 item
->arg
, item
->arg_len
, opts
,
3585 } else if (item
->command
== TODO_EXEC
) {
3586 char *end_of_arg
= (char *)(item
->arg
+ item
->arg_len
);
3587 int saved
= *end_of_arg
;
3591 res
= do_exec(item
->arg
);
3592 *end_of_arg
= saved
;
3594 /* Reread the todo file if it has changed. */
3596 if (opts
->reschedule_failed_exec
)
3598 } else if (stat(get_todo_path(opts
), &st
))
3599 res
= error_errno(_("could not stat '%s'"),
3600 get_todo_path(opts
));
3601 else if (match_stat_data(&todo_list
->stat
, &st
)) {
3602 todo_list_release(todo_list
);
3603 if (read_populate_todo(todo_list
, opts
))
3604 res
= -1; /* message was printed */
3605 /* `current` will be incremented below */
3606 todo_list
->current
= -1;
3608 } else if (item
->command
== TODO_LABEL
) {
3609 if ((res
= do_label(item
->arg
, item
->arg_len
)))
3611 } else if (item
->command
== TODO_RESET
) {
3612 if ((res
= do_reset(item
->arg
, item
->arg_len
, opts
)))
3614 } else if (item
->command
== TODO_MERGE
) {
3615 if ((res
= do_merge(item
->commit
,
3616 item
->arg
, item
->arg_len
,
3617 item
->flags
, opts
)) < 0)
3619 else if (item
->commit
)
3620 record_in_rewritten(&item
->commit
->object
.oid
,
3621 peek_command(todo_list
, 1));
3623 /* failed with merge conflicts */
3624 return error_with_patch(item
->commit
,
3626 item
->arg_len
, opts
,
3628 } else if (!is_noop(item
->command
))
3629 return error(_("unknown command %d"), item
->command
);
3632 advise(_(rescheduled_advice
),
3633 get_item_line_length(todo_list
,
3634 todo_list
->current
),
3635 get_item_line(todo_list
, todo_list
->current
));
3636 todo_list
->current
--;
3637 if (save_todo(todo_list
, opts
))
3640 return error_with_patch(item
->commit
,
3642 item
->arg_len
, opts
,
3646 todo_list
->current
++;
3651 if (is_rebase_i(opts
)) {
3652 struct strbuf head_ref
= STRBUF_INIT
, buf
= STRBUF_INIT
;
3655 /* Stopped in the middle, as planned? */
3656 if (todo_list
->current
< todo_list
->nr
)
3659 if (read_oneliner(&head_ref
, rebase_path_head_name(), 0) &&
3660 starts_with(head_ref
.buf
, "refs/")) {
3662 struct object_id head
, orig
;
3665 if (get_oid("HEAD", &head
)) {
3666 res
= error(_("cannot read HEAD"));
3668 strbuf_release(&head_ref
);
3669 strbuf_release(&buf
);
3672 if (!read_oneliner(&buf
, rebase_path_orig_head(), 0) ||
3673 get_oid_hex(buf
.buf
, &orig
)) {
3674 res
= error(_("could not read orig-head"));
3675 goto cleanup_head_ref
;
3678 if (!read_oneliner(&buf
, rebase_path_onto(), 0)) {
3679 res
= error(_("could not read 'onto'"));
3680 goto cleanup_head_ref
;
3682 msg
= reflog_message(opts
, "finish", "%s onto %s",
3683 head_ref
.buf
, buf
.buf
);
3684 if (update_ref(msg
, head_ref
.buf
, &head
, &orig
,
3685 REF_NO_DEREF
, UPDATE_REFS_MSG_ON_ERR
)) {
3686 res
= error(_("could not update %s"),
3688 goto cleanup_head_ref
;
3690 msg
= reflog_message(opts
, "finish", "returning to %s",
3692 if (create_symref("HEAD", head_ref
.buf
, msg
)) {
3693 res
= error(_("could not update HEAD to %s"),
3695 goto cleanup_head_ref
;
3700 if (opts
->verbose
) {
3701 struct rev_info log_tree_opt
;
3702 struct object_id orig
, head
;
3704 memset(&log_tree_opt
, 0, sizeof(log_tree_opt
));
3705 repo_init_revisions(the_repository
, &log_tree_opt
, NULL
);
3706 log_tree_opt
.diff
= 1;
3707 log_tree_opt
.diffopt
.output_format
=
3708 DIFF_FORMAT_DIFFSTAT
;
3709 log_tree_opt
.disable_stdin
= 1;
3711 if (read_oneliner(&buf
, rebase_path_orig_head(), 0) &&
3712 !get_oid(buf
.buf
, &orig
) &&
3713 !get_oid("HEAD", &head
)) {
3714 diff_tree_oid(&orig
, &head
, "",
3715 &log_tree_opt
.diffopt
);
3716 log_tree_diff_flush(&log_tree_opt
);
3719 flush_rewritten_pending();
3720 if (!stat(rebase_path_rewritten_list(), &st
) &&
3722 struct child_process child
= CHILD_PROCESS_INIT
;
3723 const char *post_rewrite_hook
=
3724 find_hook("post-rewrite");
3726 child
.in
= open(rebase_path_rewritten_list(), O_RDONLY
);
3728 argv_array_push(&child
.args
, "notes");
3729 argv_array_push(&child
.args
, "copy");
3730 argv_array_push(&child
.args
, "--for-rewrite=rebase");
3731 /* we don't care if this copying failed */
3732 run_command(&child
);
3734 if (post_rewrite_hook
) {
3735 struct child_process hook
= CHILD_PROCESS_INIT
;
3737 hook
.in
= open(rebase_path_rewritten_list(),
3739 hook
.stdout_to_stderr
= 1;
3740 argv_array_push(&hook
.args
, post_rewrite_hook
);
3741 argv_array_push(&hook
.args
, "rebase");
3742 /* we don't care if this hook failed */
3746 apply_autostash(opts
);
3748 fprintf(stderr
, "Successfully rebased and updated %s.\n",
3751 strbuf_release(&buf
);
3752 strbuf_release(&head_ref
);
3756 * Sequence of picks finished successfully; cleanup by
3757 * removing the .git/sequencer directory
3759 return sequencer_remove_state(opts
);
3762 static int continue_single_pick(void)
3764 const char *argv
[] = { "commit", NULL
};
3766 if (!file_exists(git_path_cherry_pick_head(the_repository
)) &&
3767 !file_exists(git_path_revert_head(the_repository
)))
3768 return error(_("no cherry-pick or revert in progress"));
3769 return run_command_v_opt(argv
, RUN_GIT_CMD
);
3772 static int commit_staged_changes(struct replay_opts
*opts
,
3773 struct todo_list
*todo_list
)
3775 unsigned int flags
= ALLOW_EMPTY
| EDIT_MSG
;
3776 unsigned int final_fixup
= 0, is_clean
;
3778 if (has_unstaged_changes(1))
3779 return error(_("cannot rebase: You have unstaged changes."));
3781 is_clean
= !has_uncommitted_changes(0);
3783 if (file_exists(rebase_path_amend())) {
3784 struct strbuf rev
= STRBUF_INIT
;
3785 struct object_id head
, to_amend
;
3787 if (get_oid("HEAD", &head
))
3788 return error(_("cannot amend non-existing commit"));
3789 if (!read_oneliner(&rev
, rebase_path_amend(), 0))
3790 return error(_("invalid file: '%s'"), rebase_path_amend());
3791 if (get_oid_hex(rev
.buf
, &to_amend
))
3792 return error(_("invalid contents: '%s'"),
3793 rebase_path_amend());
3794 if (!is_clean
&& !oideq(&head
, &to_amend
))
3795 return error(_("\nYou have uncommitted changes in your "
3796 "working tree. Please, commit them\n"
3797 "first and then run 'git rebase "
3798 "--continue' again."));
3800 * When skipping a failed fixup/squash, we need to edit the
3801 * commit message, the current fixup list and count, and if it
3802 * was the last fixup/squash in the chain, we need to clean up
3803 * the commit message and if there was a squash, let the user
3806 if (!is_clean
|| !opts
->current_fixup_count
)
3807 ; /* this is not the final fixup */
3808 else if (!oideq(&head
, &to_amend
) ||
3809 !file_exists(rebase_path_stopped_sha())) {
3810 /* was a final fixup or squash done manually? */
3811 if (!is_fixup(peek_command(todo_list
, 0))) {
3812 unlink(rebase_path_fixup_msg());
3813 unlink(rebase_path_squash_msg());
3814 unlink(rebase_path_current_fixups());
3815 strbuf_reset(&opts
->current_fixups
);
3816 opts
->current_fixup_count
= 0;
3819 /* we are in a fixup/squash chain */
3820 const char *p
= opts
->current_fixups
.buf
;
3821 int len
= opts
->current_fixups
.len
;
3823 opts
->current_fixup_count
--;
3825 BUG("Incorrect current_fixups:\n%s", p
);
3826 while (len
&& p
[len
- 1] != '\n')
3828 strbuf_setlen(&opts
->current_fixups
, len
);
3829 if (write_message(p
, len
, rebase_path_current_fixups(),
3831 return error(_("could not write file: '%s'"),
3832 rebase_path_current_fixups());
3835 * If a fixup/squash in a fixup/squash chain failed, the
3836 * commit message is already correct, no need to commit
3839 * Only if it is the final command in the fixup/squash
3840 * chain, and only if the chain is longer than a single
3841 * fixup/squash command (which was just skipped), do we
3842 * actually need to re-commit with a cleaned up commit
3845 if (opts
->current_fixup_count
> 0 &&
3846 !is_fixup(peek_command(todo_list
, 0))) {
3849 * If there was not a single "squash" in the
3850 * chain, we only need to clean up the commit
3851 * message, no need to bother the user with
3852 * opening the commit message in the editor.
3854 if (!starts_with(p
, "squash ") &&
3855 !strstr(p
, "\nsquash "))
3856 flags
= (flags
& ~EDIT_MSG
) | CLEANUP_MSG
;
3857 } else if (is_fixup(peek_command(todo_list
, 0))) {
3859 * We need to update the squash message to skip
3860 * the latest commit message.
3862 struct commit
*commit
;
3863 const char *path
= rebase_path_squash_msg();
3865 if (parse_head(&commit
) ||
3866 !(p
= get_commit_buffer(commit
, NULL
)) ||
3867 write_message(p
, strlen(p
), path
, 0)) {
3868 unuse_commit_buffer(commit
, p
);
3869 return error(_("could not write file: "
3872 unuse_commit_buffer(commit
, p
);
3876 strbuf_release(&rev
);
3881 const char *cherry_pick_head
= git_path_cherry_pick_head(the_repository
);
3883 if (file_exists(cherry_pick_head
) && unlink(cherry_pick_head
))
3884 return error(_("could not remove CHERRY_PICK_HEAD"));
3889 if (run_git_commit(final_fixup
? NULL
: rebase_path_message(),
3891 return error(_("could not commit staged changes."));
3892 unlink(rebase_path_amend());
3893 unlink(git_path_merge_head(the_repository
));
3895 unlink(rebase_path_fixup_msg());
3896 unlink(rebase_path_squash_msg());
3898 if (opts
->current_fixup_count
> 0) {
3900 * Whether final fixup or not, we just cleaned up the commit
3903 unlink(rebase_path_current_fixups());
3904 strbuf_reset(&opts
->current_fixups
);
3905 opts
->current_fixup_count
= 0;
3910 int sequencer_continue(struct replay_opts
*opts
)
3912 struct todo_list todo_list
= TODO_LIST_INIT
;
3915 if (read_and_refresh_cache(opts
))
3918 if (read_populate_opts(opts
))
3920 if (is_rebase_i(opts
)) {
3921 if ((res
= read_populate_todo(&todo_list
, opts
)))
3922 goto release_todo_list
;
3923 if (commit_staged_changes(opts
, &todo_list
))
3925 } else if (!file_exists(get_todo_path(opts
)))
3926 return continue_single_pick();
3927 else if ((res
= read_populate_todo(&todo_list
, opts
)))
3928 goto release_todo_list
;
3930 if (!is_rebase_i(opts
)) {
3931 /* Verify that the conflict has been resolved */
3932 if (file_exists(git_path_cherry_pick_head(the_repository
)) ||
3933 file_exists(git_path_revert_head(the_repository
))) {
3934 res
= continue_single_pick();
3936 goto release_todo_list
;
3938 if (index_differs_from("HEAD", NULL
, 0)) {
3939 res
= error_dirty_index(opts
);
3940 goto release_todo_list
;
3942 todo_list
.current
++;
3943 } else if (file_exists(rebase_path_stopped_sha())) {
3944 struct strbuf buf
= STRBUF_INIT
;
3945 struct object_id oid
;
3947 if (read_oneliner(&buf
, rebase_path_stopped_sha(), 1) &&
3948 !get_oid_committish(buf
.buf
, &oid
))
3949 record_in_rewritten(&oid
, peek_command(&todo_list
, 0));
3950 strbuf_release(&buf
);
3953 res
= pick_commits(&todo_list
, opts
);
3955 todo_list_release(&todo_list
);
3959 static int single_pick(struct commit
*cmit
, struct replay_opts
*opts
)
3961 setenv(GIT_REFLOG_ACTION
, action_name(opts
), 0);
3962 return do_pick_commit(opts
->action
== REPLAY_PICK
?
3963 TODO_PICK
: TODO_REVERT
, cmit
, opts
, 0);
3966 int sequencer_pick_revisions(struct replay_opts
*opts
)
3968 struct todo_list todo_list
= TODO_LIST_INIT
;
3969 struct object_id oid
;
3973 if (read_and_refresh_cache(opts
))
3976 for (i
= 0; i
< opts
->revs
->pending
.nr
; i
++) {
3977 struct object_id oid
;
3978 const char *name
= opts
->revs
->pending
.objects
[i
].name
;
3980 /* This happens when using --stdin. */
3984 if (!get_oid(name
, &oid
)) {
3985 if (!lookup_commit_reference_gently(the_repository
, &oid
, 1)) {
3986 enum object_type type
= oid_object_info(the_repository
,
3989 return error(_("%s: can't cherry-pick a %s"),
3990 name
, type_name(type
));
3993 return error(_("%s: bad revision"), name
);
3997 * If we were called as "git cherry-pick <commit>", just
3998 * cherry-pick/revert it, set CHERRY_PICK_HEAD /
3999 * REVERT_HEAD, and don't touch the sequencer state.
4000 * This means it is possible to cherry-pick in the middle
4001 * of a cherry-pick sequence.
4003 if (opts
->revs
->cmdline
.nr
== 1 &&
4004 opts
->revs
->cmdline
.rev
->whence
== REV_CMD_REV
&&
4005 opts
->revs
->no_walk
&&
4006 !opts
->revs
->cmdline
.rev
->flags
) {
4007 struct commit
*cmit
;
4008 if (prepare_revision_walk(opts
->revs
))
4009 return error(_("revision walk setup failed"));
4010 cmit
= get_revision(opts
->revs
);
4012 return error(_("empty commit set passed"));
4013 if (get_revision(opts
->revs
))
4014 BUG("unexpected extra commit from walk");
4015 return single_pick(cmit
, opts
);
4019 * Start a new cherry-pick/ revert sequence; but
4020 * first, make sure that an existing one isn't in
4024 if (walk_revs_populate_todo(&todo_list
, opts
) ||
4025 create_seq_dir() < 0)
4027 if (get_oid("HEAD", &oid
) && (opts
->action
== REPLAY_REVERT
))
4028 return error(_("can't revert as initial commit"));
4029 if (save_head(oid_to_hex(&oid
)))
4031 if (save_opts(opts
))
4033 update_abort_safety_file();
4034 res
= pick_commits(&todo_list
, opts
);
4035 todo_list_release(&todo_list
);
4039 void append_signoff(struct strbuf
*msgbuf
, size_t ignore_footer
, unsigned flag
)
4041 unsigned no_dup_sob
= flag
& APPEND_SIGNOFF_DEDUP
;
4042 struct strbuf sob
= STRBUF_INIT
;
4045 strbuf_addstr(&sob
, sign_off_header
);
4046 strbuf_addstr(&sob
, fmt_name(getenv("GIT_COMMITTER_NAME"),
4047 getenv("GIT_COMMITTER_EMAIL")));
4048 strbuf_addch(&sob
, '\n');
4051 strbuf_complete_line(msgbuf
);
4054 * If the whole message buffer is equal to the sob, pretend that we
4055 * found a conforming footer with a matching sob
4057 if (msgbuf
->len
- ignore_footer
== sob
.len
&&
4058 !strncmp(msgbuf
->buf
, sob
.buf
, sob
.len
))
4061 has_footer
= has_conforming_footer(msgbuf
, &sob
, ignore_footer
);
4064 const char *append_newlines
= NULL
;
4065 size_t len
= msgbuf
->len
- ignore_footer
;
4069 * The buffer is completely empty. Leave foom for
4070 * the title and body to be filled in by the user.
4072 append_newlines
= "\n\n";
4073 } else if (len
== 1) {
4075 * Buffer contains a single newline. Add another
4076 * so that we leave room for the title and body.
4078 append_newlines
= "\n";
4079 } else if (msgbuf
->buf
[len
- 2] != '\n') {
4081 * Buffer ends with a single newline. Add another
4082 * so that there is an empty line between the message
4085 append_newlines
= "\n";
4086 } /* else, the buffer already ends with two newlines. */
4088 if (append_newlines
)
4089 strbuf_splice(msgbuf
, msgbuf
->len
- ignore_footer
, 0,
4090 append_newlines
, strlen(append_newlines
));
4093 if (has_footer
!= 3 && (!no_dup_sob
|| has_footer
!= 2))
4094 strbuf_splice(msgbuf
, msgbuf
->len
- ignore_footer
, 0,
4097 strbuf_release(&sob
);
4100 struct labels_entry
{
4101 struct hashmap_entry entry
;
4102 char label
[FLEX_ARRAY
];
4105 static int labels_cmp(const void *fndata
, const struct labels_entry
*a
,
4106 const struct labels_entry
*b
, const void *key
)
4108 return key
? strcmp(a
->label
, key
) : strcmp(a
->label
, b
->label
);
4111 struct string_entry
{
4112 struct oidmap_entry entry
;
4113 char string
[FLEX_ARRAY
];
4116 struct label_state
{
4117 struct oidmap commit2label
;
4118 struct hashmap labels
;
4122 static const char *label_oid(struct object_id
*oid
, const char *label
,
4123 struct label_state
*state
)
4125 struct labels_entry
*labels_entry
;
4126 struct string_entry
*string_entry
;
4127 struct object_id dummy
;
4131 string_entry
= oidmap_get(&state
->commit2label
, oid
);
4133 return string_entry
->string
;
4136 * For "uninteresting" commits, i.e. commits that are not to be
4137 * rebased, and which can therefore not be labeled, we use a unique
4138 * abbreviation of the commit name. This is slightly more complicated
4139 * than calling find_unique_abbrev() because we also need to make
4140 * sure that the abbreviation does not conflict with any other
4143 * We disallow "interesting" commits to be labeled by a string that
4144 * is a valid full-length hash, to ensure that we always can find an
4145 * abbreviation for any uninteresting commit's names that does not
4146 * clash with any other label.
4151 strbuf_reset(&state
->buf
);
4152 strbuf_grow(&state
->buf
, GIT_SHA1_HEXSZ
);
4153 label
= p
= state
->buf
.buf
;
4155 find_unique_abbrev_r(p
, oid
, default_abbrev
);
4158 * We may need to extend the abbreviated hash so that there is
4159 * no conflicting label.
4161 if (hashmap_get_from_hash(&state
->labels
, strihash(p
), p
)) {
4162 size_t i
= strlen(p
) + 1;
4164 oid_to_hex_r(p
, oid
);
4165 for (; i
< GIT_SHA1_HEXSZ
; i
++) {
4168 if (!hashmap_get_from_hash(&state
->labels
,
4174 } else if (((len
= strlen(label
)) == the_hash_algo
->hexsz
&&
4175 !get_oid_hex(label
, &dummy
)) ||
4176 (len
== 1 && *label
== '#') ||
4177 hashmap_get_from_hash(&state
->labels
,
4178 strihash(label
), label
)) {
4180 * If the label already exists, or if the label is a valid full
4181 * OID, or the label is a '#' (which we use as a separator
4182 * between merge heads and oneline), we append a dash and a
4183 * number to make it unique.
4185 struct strbuf
*buf
= &state
->buf
;
4188 strbuf_add(buf
, label
, len
);
4190 for (i
= 2; ; i
++) {
4191 strbuf_setlen(buf
, len
);
4192 strbuf_addf(buf
, "-%d", i
);
4193 if (!hashmap_get_from_hash(&state
->labels
,
4202 FLEX_ALLOC_STR(labels_entry
, label
, label
);
4203 hashmap_entry_init(labels_entry
, strihash(label
));
4204 hashmap_add(&state
->labels
, labels_entry
);
4206 FLEX_ALLOC_STR(string_entry
, string
, label
);
4207 oidcpy(&string_entry
->entry
.oid
, oid
);
4208 oidmap_put(&state
->commit2label
, string_entry
);
4210 return string_entry
->string
;
4213 static int make_script_with_merges(struct pretty_print_context
*pp
,
4214 struct rev_info
*revs
, FILE *out
,
4217 int keep_empty
= flags
& TODO_LIST_KEEP_EMPTY
;
4218 int rebase_cousins
= flags
& TODO_LIST_REBASE_COUSINS
;
4219 struct strbuf buf
= STRBUF_INIT
, oneline
= STRBUF_INIT
;
4220 struct strbuf label
= STRBUF_INIT
;
4221 struct commit_list
*commits
= NULL
, **tail
= &commits
, *iter
;
4222 struct commit_list
*tips
= NULL
, **tips_tail
= &tips
;
4223 struct commit
*commit
;
4224 struct oidmap commit2todo
= OIDMAP_INIT
;
4225 struct string_entry
*entry
;
4226 struct oidset interesting
= OIDSET_INIT
, child_seen
= OIDSET_INIT
,
4227 shown
= OIDSET_INIT
;
4228 struct label_state state
= { OIDMAP_INIT
, { NULL
}, STRBUF_INIT
};
4230 int abbr
= flags
& TODO_LIST_ABBREVIATE_CMDS
;
4231 const char *cmd_pick
= abbr
? "p" : "pick",
4232 *cmd_label
= abbr
? "l" : "label",
4233 *cmd_reset
= abbr
? "t" : "reset",
4234 *cmd_merge
= abbr
? "m" : "merge";
4236 oidmap_init(&commit2todo
, 0);
4237 oidmap_init(&state
.commit2label
, 0);
4238 hashmap_init(&state
.labels
, (hashmap_cmp_fn
) labels_cmp
, NULL
, 0);
4239 strbuf_init(&state
.buf
, 32);
4241 if (revs
->cmdline
.nr
&& (revs
->cmdline
.rev
[0].flags
& BOTTOM
)) {
4242 struct object_id
*oid
= &revs
->cmdline
.rev
[0].item
->oid
;
4243 FLEX_ALLOC_STR(entry
, string
, "onto");
4244 oidcpy(&entry
->entry
.oid
, oid
);
4245 oidmap_put(&state
.commit2label
, entry
);
4250 * - get onelines for all commits
4251 * - gather all branch tips (i.e. 2nd or later parents of merges)
4252 * - label all branch tips
4254 while ((commit
= get_revision(revs
))) {
4255 struct commit_list
*to_merge
;
4256 const char *p1
, *p2
;
4257 struct object_id
*oid
;
4260 tail
= &commit_list_insert(commit
, tail
)->next
;
4261 oidset_insert(&interesting
, &commit
->object
.oid
);
4263 is_empty
= is_original_commit_empty(commit
);
4264 if (!is_empty
&& (commit
->object
.flags
& PATCHSAME
))
4267 strbuf_reset(&oneline
);
4268 pretty_print_commit(pp
, commit
, &oneline
);
4270 to_merge
= commit
->parents
? commit
->parents
->next
: NULL
;
4272 /* non-merge commit: easy case */
4274 if (!keep_empty
&& is_empty
)
4275 strbuf_addf(&buf
, "%c ", comment_line_char
);
4276 strbuf_addf(&buf
, "%s %s %s", cmd_pick
,
4277 oid_to_hex(&commit
->object
.oid
),
4280 FLEX_ALLOC_STR(entry
, string
, buf
.buf
);
4281 oidcpy(&entry
->entry
.oid
, &commit
->object
.oid
);
4282 oidmap_put(&commit2todo
, entry
);
4287 /* Create a label */
4288 strbuf_reset(&label
);
4289 if (skip_prefix(oneline
.buf
, "Merge ", &p1
) &&
4290 (p1
= strchr(p1
, '\'')) &&
4291 (p2
= strchr(++p1
, '\'')))
4292 strbuf_add(&label
, p1
, p2
- p1
);
4293 else if (skip_prefix(oneline
.buf
, "Merge pull request ",
4295 (p1
= strstr(p1
, " from ")))
4296 strbuf_addstr(&label
, p1
+ strlen(" from "));
4298 strbuf_addbuf(&label
, &oneline
);
4300 for (p1
= label
.buf
; *p1
; p1
++)
4305 strbuf_addf(&buf
, "%s -C %s",
4306 cmd_merge
, oid_to_hex(&commit
->object
.oid
));
4308 /* label the tips of merged branches */
4309 for (; to_merge
; to_merge
= to_merge
->next
) {
4310 oid
= &to_merge
->item
->object
.oid
;
4311 strbuf_addch(&buf
, ' ');
4313 if (!oidset_contains(&interesting
, oid
)) {
4314 strbuf_addstr(&buf
, label_oid(oid
, NULL
,
4319 tips_tail
= &commit_list_insert(to_merge
->item
,
4322 strbuf_addstr(&buf
, label_oid(oid
, label
.buf
, &state
));
4324 strbuf_addf(&buf
, " # %s", oneline
.buf
);
4326 FLEX_ALLOC_STR(entry
, string
, buf
.buf
);
4327 oidcpy(&entry
->entry
.oid
, &commit
->object
.oid
);
4328 oidmap_put(&commit2todo
, entry
);
4333 * - label branch points
4334 * - add HEAD to the branch tips
4336 for (iter
= commits
; iter
; iter
= iter
->next
) {
4337 struct commit_list
*parent
= iter
->item
->parents
;
4338 for (; parent
; parent
= parent
->next
) {
4339 struct object_id
*oid
= &parent
->item
->object
.oid
;
4340 if (!oidset_contains(&interesting
, oid
))
4342 if (oidset_insert(&child_seen
, oid
))
4343 label_oid(oid
, "branch-point", &state
);
4346 /* Add HEAD as implict "tip of branch" */
4348 tips_tail
= &commit_list_insert(iter
->item
,
4353 * Third phase: output the todo list. This is a bit tricky, as we
4354 * want to avoid jumping back and forth between revisions. To
4355 * accomplish that goal, we walk backwards from the branch tips,
4356 * gathering commits not yet shown, reversing the list on the fly,
4357 * then outputting that list (labeling revisions as needed).
4359 fprintf(out
, "%s onto\n", cmd_label
);
4360 for (iter
= tips
; iter
; iter
= iter
->next
) {
4361 struct commit_list
*list
= NULL
, *iter2
;
4363 commit
= iter
->item
;
4364 if (oidset_contains(&shown
, &commit
->object
.oid
))
4366 entry
= oidmap_get(&state
.commit2label
, &commit
->object
.oid
);
4369 fprintf(out
, "\n%c Branch %s\n", comment_line_char
, entry
->string
);
4373 while (oidset_contains(&interesting
, &commit
->object
.oid
) &&
4374 !oidset_contains(&shown
, &commit
->object
.oid
)) {
4375 commit_list_insert(commit
, &list
);
4376 if (!commit
->parents
) {
4380 commit
= commit
->parents
->item
;
4384 fprintf(out
, "%s %s\n", cmd_reset
,
4385 rebase_cousins
? "onto" : "[new root]");
4387 const char *to
= NULL
;
4389 entry
= oidmap_get(&state
.commit2label
,
4390 &commit
->object
.oid
);
4393 else if (!rebase_cousins
)
4394 to
= label_oid(&commit
->object
.oid
, NULL
,
4397 if (!to
|| !strcmp(to
, "onto"))
4398 fprintf(out
, "%s onto\n", cmd_reset
);
4400 strbuf_reset(&oneline
);
4401 pretty_print_commit(pp
, commit
, &oneline
);
4402 fprintf(out
, "%s %s # %s\n",
4403 cmd_reset
, to
, oneline
.buf
);
4407 for (iter2
= list
; iter2
; iter2
= iter2
->next
) {
4408 struct object_id
*oid
= &iter2
->item
->object
.oid
;
4409 entry
= oidmap_get(&commit2todo
, oid
);
4410 /* only show if not already upstream */
4412 fprintf(out
, "%s\n", entry
->string
);
4413 entry
= oidmap_get(&state
.commit2label
, oid
);
4415 fprintf(out
, "%s %s\n",
4416 cmd_label
, entry
->string
);
4417 oidset_insert(&shown
, oid
);
4420 free_commit_list(list
);
4423 free_commit_list(commits
);
4424 free_commit_list(tips
);
4426 strbuf_release(&label
);
4427 strbuf_release(&oneline
);
4428 strbuf_release(&buf
);
4430 oidmap_free(&commit2todo
, 1);
4431 oidmap_free(&state
.commit2label
, 1);
4432 hashmap_free(&state
.labels
, 1);
4433 strbuf_release(&state
.buf
);
4438 int sequencer_make_script(FILE *out
, int argc
, const char **argv
,
4441 char *format
= NULL
;
4442 struct pretty_print_context pp
= {0};
4443 struct strbuf buf
= STRBUF_INIT
;
4444 struct rev_info revs
;
4445 struct commit
*commit
;
4446 int keep_empty
= flags
& TODO_LIST_KEEP_EMPTY
;
4447 const char *insn
= flags
& TODO_LIST_ABBREVIATE_CMDS
? "p" : "pick";
4448 int rebase_merges
= flags
& TODO_LIST_REBASE_MERGES
;
4450 repo_init_revisions(the_repository
, &revs
, NULL
);
4451 revs
.verbose_header
= 1;
4453 revs
.max_parents
= 1;
4454 revs
.cherry_mark
= 1;
4457 revs
.right_only
= 1;
4458 revs
.sort_order
= REV_SORT_IN_GRAPH_ORDER
;
4459 revs
.topo_order
= 1;
4461 revs
.pretty_given
= 1;
4462 git_config_get_string("rebase.instructionFormat", &format
);
4463 if (!format
|| !*format
) {
4465 format
= xstrdup("%s");
4467 get_commit_format(format
, &revs
);
4469 pp
.fmt
= revs
.commit_format
;
4470 pp
.output_encoding
= get_log_output_encoding();
4472 if (setup_revisions(argc
, argv
, &revs
, NULL
) > 1)
4473 return error(_("make_script: unhandled options"));
4475 if (prepare_revision_walk(&revs
) < 0)
4476 return error(_("make_script: error preparing revisions"));
4479 return make_script_with_merges(&pp
, &revs
, out
, flags
);
4481 while ((commit
= get_revision(&revs
))) {
4482 int is_empty
= is_original_commit_empty(commit
);
4484 if (!is_empty
&& (commit
->object
.flags
& PATCHSAME
))
4487 if (!keep_empty
&& is_empty
)
4488 strbuf_addf(&buf
, "%c ", comment_line_char
);
4489 strbuf_addf(&buf
, "%s %s ", insn
,
4490 oid_to_hex(&commit
->object
.oid
));
4491 pretty_print_commit(&pp
, commit
, &buf
);
4492 strbuf_addch(&buf
, '\n');
4493 fputs(buf
.buf
, out
);
4495 strbuf_release(&buf
);
4500 * Add commands after pick and (series of) squash/fixup commands
4503 int sequencer_add_exec_commands(const char *commands
)
4505 const char *todo_file
= rebase_path_todo();
4506 struct todo_list todo_list
= TODO_LIST_INIT
;
4507 struct strbuf
*buf
= &todo_list
.buf
;
4508 size_t offset
= 0, commands_len
= strlen(commands
);
4511 if (strbuf_read_file(&todo_list
.buf
, todo_file
, 0) < 0)
4512 return error(_("could not read '%s'."), todo_file
);
4514 if (parse_insn_buffer(todo_list
.buf
.buf
, &todo_list
)) {
4515 todo_list_release(&todo_list
);
4516 return error(_("unusable todo list: '%s'"), todo_file
);
4520 * Insert <commands> after every pick. Here, fixup/squash chains
4521 * are considered part of the pick, so we insert the commands *after*
4522 * those chains if there are any.
4525 for (i
= 0; i
< todo_list
.nr
; i
++) {
4526 enum todo_command command
= todo_list
.items
[i
].command
;
4529 /* skip fixup/squash chains */
4530 if (command
== TODO_COMMENT
)
4532 else if (is_fixup(command
)) {
4537 todo_list
.items
[insert
].offset_in_buf
+
4538 offset
, commands
, commands_len
);
4539 offset
+= commands_len
;
4543 if (command
== TODO_PICK
|| command
== TODO_MERGE
)
4547 /* insert or append final <commands> */
4548 if (insert
>= 0 && insert
< todo_list
.nr
)
4549 strbuf_insert(buf
, todo_list
.items
[insert
].offset_in_buf
+
4550 offset
, commands
, commands_len
);
4551 else if (insert
>= 0 || !offset
)
4552 strbuf_add(buf
, commands
, commands_len
);
4554 i
= write_message(buf
->buf
, buf
->len
, todo_file
, 0);
4555 todo_list_release(&todo_list
);
4559 int transform_todos(unsigned flags
)
4561 const char *todo_file
= rebase_path_todo();
4562 struct todo_list todo_list
= TODO_LIST_INIT
;
4563 struct strbuf buf
= STRBUF_INIT
;
4564 struct todo_item
*item
;
4567 if (strbuf_read_file(&todo_list
.buf
, todo_file
, 0) < 0)
4568 return error(_("could not read '%s'."), todo_file
);
4570 if (parse_insn_buffer(todo_list
.buf
.buf
, &todo_list
)) {
4571 todo_list_release(&todo_list
);
4572 return error(_("unusable todo list: '%s'"), todo_file
);
4575 for (item
= todo_list
.items
, i
= 0; i
< todo_list
.nr
; i
++, item
++) {
4576 /* if the item is not a command write it and continue */
4577 if (item
->command
>= TODO_COMMENT
) {
4578 strbuf_addf(&buf
, "%.*s\n", item
->arg_len
, item
->arg
);
4582 /* add command to the buffer */
4583 if (flags
& TODO_LIST_ABBREVIATE_CMDS
)
4584 strbuf_addch(&buf
, command_to_char(item
->command
));
4586 strbuf_addstr(&buf
, command_to_string(item
->command
));
4590 const char *oid
= flags
& TODO_LIST_SHORTEN_IDS
?
4591 short_commit_name(item
->commit
) :
4592 oid_to_hex(&item
->commit
->object
.oid
);
4594 if (item
->command
== TODO_MERGE
) {
4595 if (item
->flags
& TODO_EDIT_MERGE_MSG
)
4596 strbuf_addstr(&buf
, " -c");
4598 strbuf_addstr(&buf
, " -C");
4601 strbuf_addf(&buf
, " %s", oid
);
4604 /* add all the rest */
4606 strbuf_addch(&buf
, '\n');
4608 strbuf_addf(&buf
, " %.*s\n", item
->arg_len
, item
->arg
);
4611 i
= write_message(buf
.buf
, buf
.len
, todo_file
, 0);
4612 todo_list_release(&todo_list
);
4616 enum missing_commit_check_level
get_missing_commit_check_level(void)
4620 if (git_config_get_value("rebase.missingcommitscheck", &value
) ||
4621 !strcasecmp("ignore", value
))
4622 return MISSING_COMMIT_CHECK_IGNORE
;
4623 if (!strcasecmp("warn", value
))
4624 return MISSING_COMMIT_CHECK_WARN
;
4625 if (!strcasecmp("error", value
))
4626 return MISSING_COMMIT_CHECK_ERROR
;
4627 warning(_("unrecognized setting %s for option "
4628 "rebase.missingCommitsCheck. Ignoring."), value
);
4629 return MISSING_COMMIT_CHECK_IGNORE
;
4632 define_commit_slab(commit_seen
, unsigned char);
4634 * Check if the user dropped some commits by mistake
4635 * Behaviour determined by rebase.missingCommitsCheck.
4636 * Check if there is an unrecognized command or a
4637 * bad SHA-1 in a command.
4639 int check_todo_list(void)
4641 enum missing_commit_check_level check_level
= get_missing_commit_check_level();
4642 struct strbuf todo_file
= STRBUF_INIT
;
4643 struct todo_list todo_list
= TODO_LIST_INIT
;
4644 struct strbuf missing
= STRBUF_INIT
;
4645 int advise_to_edit_todo
= 0, res
= 0, i
;
4646 struct commit_seen commit_seen
;
4648 init_commit_seen(&commit_seen
);
4650 strbuf_addstr(&todo_file
, rebase_path_todo());
4651 if (strbuf_read_file_or_whine(&todo_list
.buf
, todo_file
.buf
) < 0) {
4655 advise_to_edit_todo
= res
=
4656 parse_insn_buffer(todo_list
.buf
.buf
, &todo_list
);
4658 if (res
|| check_level
== MISSING_COMMIT_CHECK_IGNORE
)
4661 /* Mark the commits in git-rebase-todo as seen */
4662 for (i
= 0; i
< todo_list
.nr
; i
++) {
4663 struct commit
*commit
= todo_list
.items
[i
].commit
;
4665 *commit_seen_at(&commit_seen
, commit
) = 1;
4668 todo_list_release(&todo_list
);
4669 strbuf_addstr(&todo_file
, ".backup");
4670 if (strbuf_read_file_or_whine(&todo_list
.buf
, todo_file
.buf
) < 0) {
4674 strbuf_release(&todo_file
);
4675 res
= !!parse_insn_buffer(todo_list
.buf
.buf
, &todo_list
);
4677 /* Find commits in git-rebase-todo.backup yet unseen */
4678 for (i
= todo_list
.nr
- 1; i
>= 0; i
--) {
4679 struct todo_item
*item
= todo_list
.items
+ i
;
4680 struct commit
*commit
= item
->commit
;
4681 if (commit
&& !*commit_seen_at(&commit_seen
, commit
)) {
4682 strbuf_addf(&missing
, " - %s %.*s\n",
4683 short_commit_name(commit
),
4684 item
->arg_len
, item
->arg
);
4685 *commit_seen_at(&commit_seen
, commit
) = 1;
4689 /* Warn about missing commits */
4693 if (check_level
== MISSING_COMMIT_CHECK_ERROR
)
4694 advise_to_edit_todo
= res
= 1;
4697 _("Warning: some commits may have been dropped accidentally.\n"
4698 "Dropped commits (newer to older):\n"));
4700 /* Make the list user-friendly and display */
4701 fputs(missing
.buf
, stderr
);
4702 strbuf_release(&missing
);
4704 fprintf(stderr
, _("To avoid this message, use \"drop\" to "
4705 "explicitly remove a commit.\n\n"
4706 "Use 'git config rebase.missingCommitsCheck' to change "
4707 "the level of warnings.\n"
4708 "The possible behaviours are: ignore, warn, error.\n\n"));
4711 clear_commit_seen(&commit_seen
);
4712 strbuf_release(&todo_file
);
4713 todo_list_release(&todo_list
);
4715 if (advise_to_edit_todo
)
4717 _("You can fix this with 'git rebase --edit-todo' "
4718 "and then run 'git rebase --continue'.\n"
4719 "Or you can abort the rebase with 'git rebase"
4725 static int rewrite_file(const char *path
, const char *buf
, size_t len
)
4728 int fd
= open(path
, O_WRONLY
| O_TRUNC
);
4730 return error_errno(_("could not open '%s' for writing"), path
);
4731 if (write_in_full(fd
, buf
, len
) < 0)
4732 rc
= error_errno(_("could not write to '%s'"), path
);
4733 if (close(fd
) && !rc
)
4734 rc
= error_errno(_("could not close '%s'"), path
);
4738 /* skip picking commits whose parents are unchanged */
4739 static int skip_unnecessary_picks(struct object_id
*output_oid
)
4741 const char *todo_file
= rebase_path_todo();
4742 struct strbuf buf
= STRBUF_INIT
;
4743 struct todo_list todo_list
= TODO_LIST_INIT
;
4744 struct object_id
*parent_oid
;
4747 if (!read_oneliner(&buf
, rebase_path_onto(), 0))
4748 return error(_("could not read 'onto'"));
4749 if (get_oid(buf
.buf
, output_oid
)) {
4750 strbuf_release(&buf
);
4751 return error(_("need a HEAD to fixup"));
4753 strbuf_release(&buf
);
4755 if (strbuf_read_file_or_whine(&todo_list
.buf
, todo_file
) < 0)
4757 if (parse_insn_buffer(todo_list
.buf
.buf
, &todo_list
) < 0) {
4758 todo_list_release(&todo_list
);
4762 for (i
= 0; i
< todo_list
.nr
; i
++) {
4763 struct todo_item
*item
= todo_list
.items
+ i
;
4765 if (item
->command
>= TODO_NOOP
)
4767 if (item
->command
!= TODO_PICK
)
4769 if (parse_commit(item
->commit
)) {
4770 todo_list_release(&todo_list
);
4771 return error(_("could not parse commit '%s'"),
4772 oid_to_hex(&item
->commit
->object
.oid
));
4774 if (!item
->commit
->parents
)
4775 break; /* root commit */
4776 if (item
->commit
->parents
->next
)
4777 break; /* merge commit */
4778 parent_oid
= &item
->commit
->parents
->item
->object
.oid
;
4779 if (!oideq(parent_oid
, output_oid
))
4781 oidcpy(output_oid
, &item
->commit
->object
.oid
);
4784 int offset
= get_item_line_offset(&todo_list
, i
);
4785 const char *done_path
= rebase_path_done();
4787 fd
= open(done_path
, O_CREAT
| O_WRONLY
| O_APPEND
, 0666);
4789 error_errno(_("could not open '%s' for writing"),
4791 todo_list_release(&todo_list
);
4794 if (write_in_full(fd
, todo_list
.buf
.buf
, offset
) < 0) {
4795 error_errno(_("could not write to '%s'"), done_path
);
4796 todo_list_release(&todo_list
);
4802 if (rewrite_file(rebase_path_todo(), todo_list
.buf
.buf
+ offset
,
4803 todo_list
.buf
.len
- offset
) < 0) {
4804 todo_list_release(&todo_list
);
4808 todo_list
.current
= i
;
4809 if (is_fixup(peek_command(&todo_list
, 0)))
4810 record_in_rewritten(output_oid
, peek_command(&todo_list
, 0));
4813 todo_list_release(&todo_list
);
4818 int complete_action(struct replay_opts
*opts
, unsigned flags
,
4819 const char *shortrevisions
, const char *onto_name
,
4820 const char *onto
, const char *orig_head
, const char *cmd
,
4821 unsigned autosquash
)
4823 const char *shortonto
, *todo_file
= rebase_path_todo();
4824 struct todo_list todo_list
= TODO_LIST_INIT
;
4825 struct strbuf
*buf
= &(todo_list
.buf
);
4826 struct object_id oid
;
4829 get_oid(onto
, &oid
);
4830 shortonto
= find_unique_abbrev(&oid
, DEFAULT_ABBREV
);
4832 if (!lstat(todo_file
, &st
) && st
.st_size
== 0 &&
4833 write_message("noop\n", 5, todo_file
, 0))
4836 if (autosquash
&& rearrange_squash())
4840 sequencer_add_exec_commands(cmd
);
4842 if (strbuf_read_file(buf
, todo_file
, 0) < 0)
4843 return error_errno(_("could not read '%s'."), todo_file
);
4845 if (parse_insn_buffer(buf
->buf
, &todo_list
)) {
4846 todo_list_release(&todo_list
);
4847 return error(_("unusable todo list: '%s'"), todo_file
);
4850 if (count_commands(&todo_list
) == 0) {
4851 apply_autostash(opts
);
4852 sequencer_remove_state(opts
);
4853 todo_list_release(&todo_list
);
4855 return error(_("nothing to do"));
4858 strbuf_addch(buf
, '\n');
4859 strbuf_commented_addf(buf
, Q_("Rebase %s onto %s (%d command)",
4860 "Rebase %s onto %s (%d commands)",
4861 count_commands(&todo_list
)),
4862 shortrevisions
, shortonto
, count_commands(&todo_list
));
4863 append_todo_help(0, flags
& TODO_LIST_KEEP_EMPTY
, buf
);
4865 if (write_message(buf
->buf
, buf
->len
, todo_file
, 0)) {
4866 todo_list_release(&todo_list
);
4870 if (copy_file(rebase_path_todo_backup(), todo_file
, 0666))
4871 return error(_("could not copy '%s' to '%s'."), todo_file
,
4872 rebase_path_todo_backup());
4874 if (transform_todos(flags
| TODO_LIST_SHORTEN_IDS
))
4875 return error(_("could not transform the todo list"));
4879 if (launch_sequence_editor(todo_file
, buf
, NULL
)) {
4880 apply_autostash(opts
);
4881 sequencer_remove_state(opts
);
4882 todo_list_release(&todo_list
);
4887 strbuf_stripspace(buf
, 1);
4888 if (buf
->len
== 0) {
4889 apply_autostash(opts
);
4890 sequencer_remove_state(opts
);
4891 todo_list_release(&todo_list
);
4893 return error(_("nothing to do"));
4896 todo_list_release(&todo_list
);
4898 if (check_todo_list()) {
4899 checkout_onto(opts
, onto_name
, onto
, orig_head
);
4903 if (transform_todos(flags
& ~(TODO_LIST_SHORTEN_IDS
)))
4904 return error(_("could not transform the todo list"));
4906 if (opts
->allow_ff
&& skip_unnecessary_picks(&oid
))
4907 return error(_("could not skip unnecessary pick commands"));
4909 if (checkout_onto(opts
, onto_name
, oid_to_hex(&oid
), orig_head
))
4912 if (require_clean_work_tree("rebase", "", 1, 1))
4915 return sequencer_continue(opts
);
4918 struct subject2item_entry
{
4919 struct hashmap_entry entry
;
4921 char subject
[FLEX_ARRAY
];
4924 static int subject2item_cmp(const void *fndata
,
4925 const struct subject2item_entry
*a
,
4926 const struct subject2item_entry
*b
, const void *key
)
4928 return key
? strcmp(a
->subject
, key
) : strcmp(a
->subject
, b
->subject
);
4931 define_commit_slab(commit_todo_item
, struct todo_item
*);
4934 * Rearrange the todo list that has both "pick commit-id msg" and "pick
4935 * commit-id fixup!/squash! msg" in it so that the latter is put immediately
4936 * after the former, and change "pick" to "fixup"/"squash".
4938 * Note that if the config has specified a custom instruction format, each log
4939 * message will have to be retrieved from the commit (as the oneline in the
4940 * script cannot be trusted) in order to normalize the autosquash arrangement.
4942 int rearrange_squash(void)
4944 const char *todo_file
= rebase_path_todo();
4945 struct todo_list todo_list
= TODO_LIST_INIT
;
4946 struct hashmap subject2item
;
4947 int res
= 0, rearranged
= 0, *next
, *tail
, i
;
4949 struct commit_todo_item commit_todo
;
4951 if (strbuf_read_file_or_whine(&todo_list
.buf
, todo_file
) < 0)
4953 if (parse_insn_buffer(todo_list
.buf
.buf
, &todo_list
) < 0) {
4954 todo_list_release(&todo_list
);
4958 init_commit_todo_item(&commit_todo
);
4960 * The hashmap maps onelines to the respective todo list index.
4962 * If any items need to be rearranged, the next[i] value will indicate
4963 * which item was moved directly after the i'th.
4965 * In that case, last[i] will indicate the index of the latest item to
4966 * be moved to appear after the i'th.
4968 hashmap_init(&subject2item
, (hashmap_cmp_fn
) subject2item_cmp
,
4969 NULL
, todo_list
.nr
);
4970 ALLOC_ARRAY(next
, todo_list
.nr
);
4971 ALLOC_ARRAY(tail
, todo_list
.nr
);
4972 ALLOC_ARRAY(subjects
, todo_list
.nr
);
4973 for (i
= 0; i
< todo_list
.nr
; i
++) {
4974 struct strbuf buf
= STRBUF_INIT
;
4975 struct todo_item
*item
= todo_list
.items
+ i
;
4976 const char *commit_buffer
, *subject
, *p
;
4979 struct subject2item_entry
*entry
;
4981 next
[i
] = tail
[i
] = -1;
4982 if (!item
->commit
|| item
->command
== TODO_DROP
) {
4987 if (is_fixup(item
->command
)) {
4988 todo_list_release(&todo_list
);
4989 clear_commit_todo_item(&commit_todo
);
4990 return error(_("the script was already rearranged."));
4993 *commit_todo_item_at(&commit_todo
, item
->commit
) = item
;
4995 parse_commit(item
->commit
);
4996 commit_buffer
= get_commit_buffer(item
->commit
, NULL
);
4997 find_commit_subject(commit_buffer
, &subject
);
4998 format_subject(&buf
, subject
, " ");
4999 subject
= subjects
[i
] = strbuf_detach(&buf
, &subject_len
);
5000 unuse_commit_buffer(item
->commit
, commit_buffer
);
5001 if ((skip_prefix(subject
, "fixup! ", &p
) ||
5002 skip_prefix(subject
, "squash! ", &p
))) {
5003 struct commit
*commit2
;
5008 if (!skip_prefix(p
, "fixup! ", &p
) &&
5009 !skip_prefix(p
, "squash! ", &p
))
5013 if ((entry
= hashmap_get_from_hash(&subject2item
,
5015 /* found by title */
5017 else if (!strchr(p
, ' ') &&
5019 lookup_commit_reference_by_name(p
)) &&
5020 *commit_todo_item_at(&commit_todo
, commit2
))
5021 /* found by commit name */
5022 i2
= *commit_todo_item_at(&commit_todo
, commit2
)
5025 /* copy can be a prefix of the commit subject */
5026 for (i2
= 0; i2
< i
; i2
++)
5028 starts_with(subjects
[i2
], p
))
5036 todo_list
.items
[i
].command
=
5037 starts_with(subject
, "fixup!") ?
5038 TODO_FIXUP
: TODO_SQUASH
;
5044 } else if (!hashmap_get_from_hash(&subject2item
,
5045 strhash(subject
), subject
)) {
5046 FLEX_ALLOC_MEM(entry
, subject
, subject
, subject_len
);
5048 hashmap_entry_init(entry
, strhash(entry
->subject
));
5049 hashmap_put(&subject2item
, entry
);
5054 struct strbuf buf
= STRBUF_INIT
;
5056 for (i
= 0; i
< todo_list
.nr
; i
++) {
5057 enum todo_command command
= todo_list
.items
[i
].command
;
5061 * Initially, all commands are 'pick's. If it is a
5062 * fixup or a squash now, we have rearranged it.
5064 if (is_fixup(command
))
5069 get_item_line(&todo_list
, cur
);
5071 get_item_line(&todo_list
, cur
+ 1);
5073 /* replace 'pick', by 'fixup' or 'squash' */
5074 command
= todo_list
.items
[cur
].command
;
5075 if (is_fixup(command
)) {
5077 todo_command_info
[command
].str
);
5078 bol
+= strcspn(bol
, " \t");
5081 strbuf_add(&buf
, bol
, eol
- bol
);
5087 res
= rewrite_file(todo_file
, buf
.buf
, buf
.len
);
5088 strbuf_release(&buf
);
5093 for (i
= 0; i
< todo_list
.nr
; i
++)
5096 hashmap_free(&subject2item
, 1);
5097 todo_list_release(&todo_list
);
5099 clear_commit_todo_item(&commit_todo
);