1 #include "git-compat-util.h"
6 #include "environment.h"
11 #include "object-file.h"
12 #include "object-name.h"
13 #include "object-store-ll.h"
17 #include "sequencer.h"
18 #include "run-command.h"
21 #include "cache-tree.h"
27 #include "merge-ort.h"
28 #include "merge-ort-wrappers.h"
30 #include "sparse-index.h"
35 #include "wt-status.h"
37 #include "notes-utils.h"
39 #include "unpack-trees.h"
42 #include "commit-slab.h"
44 #include "commit-reach.h"
45 #include "rebase-interactive.h"
49 #define GIT_REFLOG_ACTION "GIT_REFLOG_ACTION"
52 * To accommodate common filesystem limitations, where the loose refs' file
53 * names must not exceed `NAME_MAX`, the labels generated by `git rebase
54 * --rebase-merges` need to be truncated if the corresponding commit subjects
56 * Add some margin to stay clear from reaching `NAME_MAX`.
58 #define GIT_MAX_LABEL_LENGTH ((NAME_MAX) - (LOCK_SUFFIX_LEN) - 16)
60 static const char sign_off_header
[] = "Signed-off-by: ";
61 static const char cherry_picked_prefix
[] = "(cherry picked from commit ";
63 GIT_PATH_FUNC(git_path_commit_editmsg
, "COMMIT_EDITMSG")
65 static GIT_PATH_FUNC(git_path_seq_dir
, "sequencer")
67 static GIT_PATH_FUNC(git_path_todo_file
, "sequencer/todo")
68 static GIT_PATH_FUNC(git_path_opts_file
, "sequencer/opts")
69 static GIT_PATH_FUNC(git_path_head_file
, "sequencer/head")
70 static GIT_PATH_FUNC(git_path_abort_safety_file
, "sequencer/abort-safety")
72 static GIT_PATH_FUNC(rebase_path
, "rebase-merge")
74 * The file containing rebase commands, comments, and empty lines.
75 * This file is created by "git rebase -i" then edited by the user. As
76 * the lines are processed, they are removed from the front of this
77 * file and written to the tail of 'done'.
79 GIT_PATH_FUNC(rebase_path_todo
, "rebase-merge/git-rebase-todo")
80 GIT_PATH_FUNC(rebase_path_todo_backup
, "rebase-merge/git-rebase-todo.backup")
82 GIT_PATH_FUNC(rebase_path_dropped
, "rebase-merge/dropped")
85 * The rebase command lines that have already been processed. A line
86 * is moved here when it is first handled, before any associated user
89 static GIT_PATH_FUNC(rebase_path_done
, "rebase-merge/done")
91 * The file to keep track of how many commands were already processed (e.g.
94 static GIT_PATH_FUNC(rebase_path_msgnum
, "rebase-merge/msgnum")
96 * The file to keep track of how many commands are to be processed in total
97 * (e.g. for the prompt).
99 static GIT_PATH_FUNC(rebase_path_msgtotal
, "rebase-merge/end")
101 * The commit message that is planned to be used for any changes that
102 * need to be committed following a user interaction.
104 static GIT_PATH_FUNC(rebase_path_message
, "rebase-merge/message")
106 * The file into which is accumulated the suggested commit message for
107 * squash/fixup commands. When the first of a series of squash/fixups
108 * is seen, the file is created and the commit message from the
109 * previous commit and from the first squash/fixup commit are written
110 * to it. The commit message for each subsequent squash/fixup commit
111 * is appended to the file as it is processed.
113 static GIT_PATH_FUNC(rebase_path_squash_msg
, "rebase-merge/message-squash")
115 * If the current series of squash/fixups has not yet included a squash
116 * command, then this file exists and holds the commit message of the
117 * original "pick" commit. (If the series ends without a "squash"
118 * command, then this can be used as the commit message of the combined
119 * commit without opening the editor.)
121 static GIT_PATH_FUNC(rebase_path_fixup_msg
, "rebase-merge/message-fixup")
123 * This file contains the list fixup/squash commands that have been
124 * accumulated into message-fixup or message-squash so far.
126 static GIT_PATH_FUNC(rebase_path_current_fixups
, "rebase-merge/current-fixups")
128 * A script to set the GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, and
129 * GIT_AUTHOR_DATE that will be used for the commit that is currently
132 static GIT_PATH_FUNC(rebase_path_author_script
, "rebase-merge/author-script")
134 * When an "edit" rebase command is being processed, the SHA1 of the
135 * commit to be edited is recorded in this file. When "git rebase
136 * --continue" is executed, if there are any staged changes then they
137 * will be amended to the HEAD commit, but only provided the HEAD
138 * commit is still the commit to be edited. When any other rebase
139 * command is processed, this file is deleted.
141 static GIT_PATH_FUNC(rebase_path_amend
, "rebase-merge/amend")
143 * When we stop at a given patch via the "edit" command, this file contains
144 * the commit object name of the corresponding patch.
146 static GIT_PATH_FUNC(rebase_path_stopped_sha
, "rebase-merge/stopped-sha")
148 * When we stop for the user to resolve conflicts this file contains
149 * the patch of the commit that is being picked.
151 static GIT_PATH_FUNC(rebase_path_patch
, "rebase-merge/patch")
153 * For the post-rewrite hook, we make a list of rewritten commits and
154 * their new sha1s. The rewritten-pending list keeps the sha1s of
155 * commits that have been processed, but not committed yet,
156 * e.g. because they are waiting for a 'squash' command.
158 static GIT_PATH_FUNC(rebase_path_rewritten_list
, "rebase-merge/rewritten-list")
159 static GIT_PATH_FUNC(rebase_path_rewritten_pending
,
160 "rebase-merge/rewritten-pending")
163 * The path of the file containing the OID of the "squash onto" commit, i.e.
164 * the dummy commit used for `reset [new root]`.
166 static GIT_PATH_FUNC(rebase_path_squash_onto
, "rebase-merge/squash-onto")
169 * The path of the file listing refs that need to be deleted after the rebase
170 * finishes. This is used by the `label` command to record the need for cleanup.
172 static GIT_PATH_FUNC(rebase_path_refs_to_delete
, "rebase-merge/refs-to-delete")
175 * The update-refs file stores a list of refs that will be updated at the end
176 * of the rebase sequence. The 'update-ref <ref>' commands in the todo file
177 * update the OIDs for the refs in this file, but the refs are not updated
178 * until the end of the rebase sequence.
180 * rebase_path_update_refs() returns the path to this file for a given
181 * worktree directory. For the current worktree, pass the_repository->gitdir.
183 static char *rebase_path_update_refs(const char *wt_git_dir
)
185 return xstrfmt("%s/rebase-merge/update-refs", wt_git_dir
);
189 * The following files are written by git-rebase just after parsing the
192 static GIT_PATH_FUNC(rebase_path_gpg_sign_opt
, "rebase-merge/gpg_sign_opt")
193 static GIT_PATH_FUNC(rebase_path_cdate_is_adate
, "rebase-merge/cdate_is_adate")
194 static GIT_PATH_FUNC(rebase_path_ignore_date
, "rebase-merge/ignore_date")
195 static GIT_PATH_FUNC(rebase_path_orig_head
, "rebase-merge/orig-head")
196 static GIT_PATH_FUNC(rebase_path_verbose
, "rebase-merge/verbose")
197 static GIT_PATH_FUNC(rebase_path_quiet
, "rebase-merge/quiet")
198 static GIT_PATH_FUNC(rebase_path_signoff
, "rebase-merge/signoff")
199 static GIT_PATH_FUNC(rebase_path_head_name
, "rebase-merge/head-name")
200 static GIT_PATH_FUNC(rebase_path_onto
, "rebase-merge/onto")
201 static GIT_PATH_FUNC(rebase_path_autostash
, "rebase-merge/autostash")
202 static GIT_PATH_FUNC(rebase_path_strategy
, "rebase-merge/strategy")
203 static GIT_PATH_FUNC(rebase_path_strategy_opts
, "rebase-merge/strategy_opts")
204 static GIT_PATH_FUNC(rebase_path_allow_rerere_autoupdate
, "rebase-merge/allow_rerere_autoupdate")
205 static GIT_PATH_FUNC(rebase_path_reschedule_failed_exec
, "rebase-merge/reschedule-failed-exec")
206 static GIT_PATH_FUNC(rebase_path_no_reschedule_failed_exec
, "rebase-merge/no-reschedule-failed-exec")
207 static GIT_PATH_FUNC(rebase_path_drop_redundant_commits
, "rebase-merge/drop_redundant_commits")
208 static GIT_PATH_FUNC(rebase_path_keep_redundant_commits
, "rebase-merge/keep_redundant_commits")
211 * A 'struct update_refs_record' represents a value in the update-refs
212 * list. We use a string_list to map refs to these (before, after) pairs.
214 struct update_ref_record
{
215 struct object_id before
;
216 struct object_id after
;
219 static struct update_ref_record
*init_update_ref_record(const char *ref
)
221 struct update_ref_record
*rec
;
223 CALLOC_ARRAY(rec
, 1);
225 oidcpy(&rec
->before
, null_oid());
226 oidcpy(&rec
->after
, null_oid());
228 /* This may fail, but that's fine, we will keep the null OID. */
229 read_ref(ref
, &rec
->before
);
234 static int git_sequencer_config(const char *k
, const char *v
,
235 const struct config_context
*ctx
, void *cb
)
237 struct replay_opts
*opts
= cb
;
239 if (!strcmp(k
, "commit.cleanup")) {
241 return config_error_nonbool(k
);
243 if (!strcmp(v
, "verbatim")) {
244 opts
->default_msg_cleanup
= COMMIT_MSG_CLEANUP_NONE
;
245 opts
->explicit_cleanup
= 1;
246 } else if (!strcmp(v
, "whitespace")) {
247 opts
->default_msg_cleanup
= COMMIT_MSG_CLEANUP_SPACE
;
248 opts
->explicit_cleanup
= 1;
249 } else if (!strcmp(v
, "strip")) {
250 opts
->default_msg_cleanup
= COMMIT_MSG_CLEANUP_ALL
;
251 opts
->explicit_cleanup
= 1;
252 } else if (!strcmp(v
, "scissors")) {
253 opts
->default_msg_cleanup
= COMMIT_MSG_CLEANUP_SCISSORS
;
254 opts
->explicit_cleanup
= 1;
256 warning(_("invalid commit message cleanup mode '%s'"),
263 if (!strcmp(k
, "commit.gpgsign")) {
264 opts
->gpg_sign
= git_config_bool(k
, v
) ? xstrdup("") : NULL
;
268 if (!opts
->default_strategy
&& !strcmp(k
, "pull.twohead")) {
269 int ret
= git_config_string((const char**)&opts
->default_strategy
, k
, v
);
272 * pull.twohead is allowed to be multi-valued; we only
273 * care about the first value.
275 char *tmp
= strchr(opts
->default_strategy
, ' ');
282 if (opts
->action
== REPLAY_REVERT
&& !strcmp(k
, "revert.reference"))
283 opts
->commit_use_reference
= git_config_bool(k
, v
);
285 return git_diff_basic_config(k
, v
, ctx
, NULL
);
288 void sequencer_init_config(struct replay_opts
*opts
)
290 opts
->default_msg_cleanup
= COMMIT_MSG_CLEANUP_NONE
;
291 git_config(git_sequencer_config
, opts
);
294 static inline int is_rebase_i(const struct replay_opts
*opts
)
296 return opts
->action
== REPLAY_INTERACTIVE_REBASE
;
299 static const char *get_dir(const struct replay_opts
*opts
)
301 if (is_rebase_i(opts
))
302 return rebase_path();
303 return git_path_seq_dir();
306 static const char *get_todo_path(const struct replay_opts
*opts
)
308 if (is_rebase_i(opts
))
309 return rebase_path_todo();
310 return git_path_todo_file();
314 * Returns 0 for non-conforming footer
315 * Returns 1 for conforming footer
316 * Returns 2 when sob exists within conforming footer
317 * Returns 3 when sob exists within conforming footer as last entry
319 static int has_conforming_footer(struct strbuf
*sb
, struct strbuf
*sob
,
320 size_t ignore_footer
)
322 struct process_trailer_options opts
= PROCESS_TRAILER_OPTIONS_INIT
;
323 struct trailer_info info
;
325 int found_sob
= 0, found_sob_last
= 0;
331 saved_char
= sb
->buf
[sb
->len
- ignore_footer
];
332 sb
->buf
[sb
->len
- ignore_footer
] = '\0';
335 trailer_info_get(&opts
, sb
->buf
, &info
);
338 sb
->buf
[sb
->len
- ignore_footer
] = saved_char
;
340 if (info
.trailer_block_start
== info
.trailer_block_end
)
343 for (i
= 0; i
< info
.trailer_nr
; i
++)
344 if (sob
&& !strncmp(info
.trailers
[i
], sob
->buf
, sob
->len
)) {
346 if (i
== info
.trailer_nr
- 1)
350 trailer_info_release(&info
);
359 static const char *gpg_sign_opt_quoted(struct replay_opts
*opts
)
361 static struct strbuf buf
= STRBUF_INIT
;
365 sq_quotef(&buf
, "-S%s", opts
->gpg_sign
);
369 void replay_opts_release(struct replay_opts
*opts
)
371 free(opts
->gpg_sign
);
372 free(opts
->reflog_action
);
373 free(opts
->default_strategy
);
374 free(opts
->strategy
);
375 strvec_clear (&opts
->xopts
);
376 strbuf_release(&opts
->current_fixups
);
378 release_revisions(opts
->revs
);
382 int sequencer_remove_state(struct replay_opts
*opts
)
384 struct strbuf buf
= STRBUF_INIT
;
387 if (is_rebase_i(opts
) &&
388 strbuf_read_file(&buf
, rebase_path_refs_to_delete(), 0) > 0) {
391 char *eol
= strchr(p
, '\n');
394 if (delete_ref("(rebase) cleanup", p
, NULL
, 0) < 0) {
395 warning(_("could not delete '%s'"), p
);
405 strbuf_addstr(&buf
, get_dir(opts
));
406 if (remove_dir_recursively(&buf
, 0))
407 ret
= error(_("could not remove '%s'"), buf
.buf
);
408 strbuf_release(&buf
);
413 static const char *action_name(const struct replay_opts
*opts
)
415 switch (opts
->action
) {
419 return N_("cherry-pick");
420 case REPLAY_INTERACTIVE_REBASE
:
423 die(_("unknown action: %d"), opts
->action
);
426 struct commit_message
{
433 static const char *short_commit_name(struct repository
*r
, struct commit
*commit
)
435 return repo_find_unique_abbrev(r
, &commit
->object
.oid
, DEFAULT_ABBREV
);
438 static int get_message(struct commit
*commit
, struct commit_message
*out
)
440 const char *abbrev
, *subject
;
443 out
->message
= repo_logmsg_reencode(the_repository
, commit
, NULL
,
444 get_commit_output_encoding());
445 abbrev
= short_commit_name(the_repository
, commit
);
447 subject_len
= find_commit_subject(out
->message
, &subject
);
449 out
->subject
= xmemdupz(subject
, subject_len
);
450 out
->label
= xstrfmt("%s (%s)", abbrev
, out
->subject
);
451 out
->parent_label
= xstrfmt("parent of %s", out
->label
);
456 static void free_message(struct commit
*commit
, struct commit_message
*msg
)
458 free(msg
->parent_label
);
461 repo_unuse_commit_buffer(the_repository
, commit
, msg
->message
);
464 const char *rebase_resolvemsg
=
465 N_("Resolve all conflicts manually, mark them as resolved with\n"
466 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
467 "You can instead skip this commit: run \"git rebase --skip\".\n"
468 "To abort and get back to the state before \"git rebase\", run "
469 "\"git rebase --abort\".");
471 static void print_advice(struct repository
*r
, int show_hint
,
472 struct replay_opts
*opts
)
476 if (is_rebase_i(opts
))
477 msg
= rebase_resolvemsg
;
479 msg
= getenv("GIT_CHERRY_PICK_HELP");
482 advise_if_enabled(ADVICE_MERGE_CONFLICT
, "%s", msg
);
484 * A conflict has occurred but the porcelain
485 * (typically rebase --interactive) wants to take care
486 * of the commit itself so remove CHERRY_PICK_HEAD
488 refs_delete_ref(get_main_ref_store(r
), "", "CHERRY_PICK_HEAD",
495 advise_if_enabled(ADVICE_MERGE_CONFLICT
,
496 _("after resolving the conflicts, mark the corrected paths\n"
497 "with 'git add <paths>' or 'git rm <paths>'"));
498 else if (opts
->action
== REPLAY_PICK
)
499 advise_if_enabled(ADVICE_MERGE_CONFLICT
,
500 _("After resolving the conflicts, mark them with\n"
501 "\"git add/rm <pathspec>\", then run\n"
502 "\"git cherry-pick --continue\".\n"
503 "You can instead skip this commit with \"git cherry-pick --skip\".\n"
504 "To abort and get back to the state before \"git cherry-pick\",\n"
505 "run \"git cherry-pick --abort\"."));
506 else if (opts
->action
== REPLAY_REVERT
)
507 advise_if_enabled(ADVICE_MERGE_CONFLICT
,
508 _("After resolving the conflicts, mark them with\n"
509 "\"git add/rm <pathspec>\", then run\n"
510 "\"git revert --continue\".\n"
511 "You can instead skip this commit with \"git revert --skip\".\n"
512 "To abort and get back to the state before \"git revert\",\n"
513 "run \"git revert --abort\"."));
515 BUG("unexpected pick action in print_advice()");
519 static int write_message(const void *buf
, size_t len
, const char *filename
,
522 struct lock_file msg_file
= LOCK_INIT
;
524 int msg_fd
= hold_lock_file_for_update(&msg_file
, filename
, 0);
526 return error_errno(_("could not lock '%s'"), filename
);
527 if (write_in_full(msg_fd
, buf
, len
) < 0) {
528 error_errno(_("could not write to '%s'"), filename
);
529 rollback_lock_file(&msg_file
);
532 if (append_eol
&& write(msg_fd
, "\n", 1) < 0) {
533 error_errno(_("could not write eol to '%s'"), filename
);
534 rollback_lock_file(&msg_file
);
537 if (commit_lock_file(&msg_file
) < 0)
538 return error(_("failed to finalize '%s'"), filename
);
543 int read_oneliner(struct strbuf
*buf
,
544 const char *path
, unsigned flags
)
546 int orig_len
= buf
->len
;
548 if (strbuf_read_file(buf
, path
, 0) < 0) {
549 if ((flags
& READ_ONELINER_WARN_MISSING
) ||
550 (errno
!= ENOENT
&& errno
!= ENOTDIR
))
551 warning_errno(_("could not read '%s'"), path
);
555 if (buf
->len
> orig_len
&& buf
->buf
[buf
->len
- 1] == '\n') {
556 if (--buf
->len
> orig_len
&& buf
->buf
[buf
->len
- 1] == '\r')
558 buf
->buf
[buf
->len
] = '\0';
561 if ((flags
& READ_ONELINER_SKIP_IF_EMPTY
) && buf
->len
== orig_len
)
567 static struct tree
*empty_tree(struct repository
*r
)
569 return lookup_tree(r
, the_hash_algo
->empty_tree
);
572 static int error_dirty_index(struct repository
*repo
, struct replay_opts
*opts
)
574 if (repo_read_index_unmerged(repo
))
575 return error_resolve_conflict(action_name(opts
));
577 error(_("your local changes would be overwritten by %s."),
578 _(action_name(opts
)));
580 if (advice_enabled(ADVICE_COMMIT_BEFORE_MERGE
))
581 advise(_("commit your changes or stash them to proceed."));
585 static void update_abort_safety_file(void)
587 struct object_id head
;
589 /* Do nothing on a single-pick */
590 if (!file_exists(git_path_seq_dir()))
593 if (!repo_get_oid(the_repository
, "HEAD", &head
))
594 write_file(git_path_abort_safety_file(), "%s", oid_to_hex(&head
));
596 write_file(git_path_abort_safety_file(), "%s", "");
599 static int fast_forward_to(struct repository
*r
,
600 const struct object_id
*to
,
601 const struct object_id
*from
,
603 struct replay_opts
*opts
)
605 struct ref_transaction
*transaction
;
606 struct strbuf sb
= STRBUF_INIT
;
607 struct strbuf err
= STRBUF_INIT
;
610 if (checkout_fast_forward(r
, from
, to
, 1))
611 return -1; /* the callee should have complained already */
613 strbuf_addf(&sb
, "%s: fast-forward", action_name(opts
));
615 transaction
= ref_transaction_begin(&err
);
617 ref_transaction_update(transaction
, "HEAD",
618 to
, unborn
&& !is_rebase_i(opts
) ?
621 ref_transaction_commit(transaction
, &err
)) {
622 ref_transaction_free(transaction
);
623 error("%s", err
.buf
);
625 strbuf_release(&err
);
630 strbuf_release(&err
);
631 ref_transaction_free(transaction
);
632 update_abort_safety_file();
636 enum commit_msg_cleanup_mode
get_cleanup_mode(const char *cleanup_arg
,
639 if (!cleanup_arg
|| !strcmp(cleanup_arg
, "default"))
640 return use_editor
? COMMIT_MSG_CLEANUP_ALL
:
641 COMMIT_MSG_CLEANUP_SPACE
;
642 else if (!strcmp(cleanup_arg
, "verbatim"))
643 return COMMIT_MSG_CLEANUP_NONE
;
644 else if (!strcmp(cleanup_arg
, "whitespace"))
645 return COMMIT_MSG_CLEANUP_SPACE
;
646 else if (!strcmp(cleanup_arg
, "strip"))
647 return COMMIT_MSG_CLEANUP_ALL
;
648 else if (!strcmp(cleanup_arg
, "scissors"))
649 return use_editor
? COMMIT_MSG_CLEANUP_SCISSORS
:
650 COMMIT_MSG_CLEANUP_SPACE
;
652 die(_("Invalid cleanup mode %s"), cleanup_arg
);
656 * NB using int rather than enum cleanup_mode to stop clang's
657 * -Wtautological-constant-out-of-range-compare complaining that the comparison
660 static const char *describe_cleanup_mode(int cleanup_mode
)
662 static const char *modes
[] = { "whitespace",
667 if (cleanup_mode
< ARRAY_SIZE(modes
))
668 return modes
[cleanup_mode
];
670 BUG("invalid cleanup_mode provided (%d)", cleanup_mode
);
673 void append_conflicts_hint(struct index_state
*istate
,
674 struct strbuf
*msgbuf
, enum commit_msg_cleanup_mode cleanup_mode
)
678 if (cleanup_mode
== COMMIT_MSG_CLEANUP_SCISSORS
) {
679 strbuf_addch(msgbuf
, '\n');
680 wt_status_append_cut_line(msgbuf
);
681 strbuf_addstr(msgbuf
, comment_line_str
);
684 strbuf_addch(msgbuf
, '\n');
685 strbuf_commented_addf(msgbuf
, comment_line_str
, "Conflicts:\n");
686 for (i
= 0; i
< istate
->cache_nr
;) {
687 const struct cache_entry
*ce
= istate
->cache
[i
++];
689 strbuf_commented_addf(msgbuf
, comment_line_str
,
691 while (i
< istate
->cache_nr
&&
692 !strcmp(ce
->name
, istate
->cache
[i
]->name
))
698 static int do_recursive_merge(struct repository
*r
,
699 struct commit
*base
, struct commit
*next
,
700 const char *base_label
, const char *next_label
,
701 struct object_id
*head
, struct strbuf
*msgbuf
,
702 struct replay_opts
*opts
)
704 struct merge_options o
;
705 struct merge_result result
;
706 struct tree
*next_tree
, *base_tree
, *head_tree
;
707 int clean
, show_output
;
709 struct lock_file index_lock
= LOCK_INIT
;
711 if (repo_hold_locked_index(r
, &index_lock
, LOCK_REPORT_ON_ERROR
) < 0)
716 init_merge_options(&o
, r
);
717 o
.ancestor
= base
? base_label
: "(empty tree)";
719 o
.branch2
= next
? next_label
: "(empty tree)";
720 if (is_rebase_i(opts
))
722 o
.show_rename_progress
= 1;
724 head_tree
= parse_tree_indirect(head
);
726 return error(_("unable to read tree (%s)"), oid_to_hex(head
));
727 next_tree
= next
? repo_get_commit_tree(r
, next
) : empty_tree(r
);
728 base_tree
= base
? repo_get_commit_tree(r
, base
) : empty_tree(r
);
730 for (i
= 0; i
< opts
->xopts
.nr
; i
++)
731 parse_merge_opt(&o
, opts
->xopts
.v
[i
]);
733 if (!opts
->strategy
|| !strcmp(opts
->strategy
, "ort")) {
734 memset(&result
, 0, sizeof(result
));
735 merge_incore_nonrecursive(&o
, base_tree
, head_tree
, next_tree
,
737 show_output
= !is_rebase_i(opts
) || !result
.clean
;
739 * TODO: merge_switch_to_result will update index/working tree;
740 * we only really want to do that if !result.clean || this is
741 * the final patch to be picked. But determining this is the
742 * final patch would take some work, and "head_tree" would need
743 * to be replace with the tree the index matched before we
744 * started doing any picks.
746 merge_switch_to_result(&o
, head_tree
, &result
, 1, show_output
);
747 clean
= result
.clean
;
749 ensure_full_index(r
->index
);
750 clean
= merge_trees(&o
, head_tree
, next_tree
, base_tree
);
751 if (is_rebase_i(opts
) && clean
<= 0)
752 fputs(o
.obuf
.buf
, stdout
);
753 strbuf_release(&o
.obuf
);
756 rollback_lock_file(&index_lock
);
760 if (write_locked_index(r
->index
, &index_lock
,
761 COMMIT_LOCK
| SKIP_IF_UNCHANGED
))
763 * TRANSLATORS: %s will be "revert", "cherry-pick" or
766 return error(_("%s: Unable to write new index file"),
767 _(action_name(opts
)));
770 append_conflicts_hint(r
->index
, msgbuf
,
771 opts
->default_msg_cleanup
);
776 static struct object_id
*get_cache_tree_oid(struct index_state
*istate
)
778 if (!cache_tree_fully_valid(istate
->cache_tree
))
779 if (cache_tree_update(istate
, 0)) {
780 error(_("unable to update cache tree"));
784 return &istate
->cache_tree
->oid
;
787 static int is_index_unchanged(struct repository
*r
)
789 struct object_id head_oid
, *cache_tree_oid
;
790 const struct object_id
*head_tree_oid
;
791 struct commit
*head_commit
;
792 struct index_state
*istate
= r
->index
;
793 const char *head_name
;
795 if (!resolve_ref_unsafe("HEAD", RESOLVE_REF_READING
, &head_oid
, NULL
)) {
796 /* Check to see if this is an unborn branch */
797 head_name
= resolve_ref_unsafe("HEAD",
798 RESOLVE_REF_READING
| RESOLVE_REF_NO_RECURSE
,
801 !starts_with(head_name
, "refs/heads/") ||
802 !is_null_oid(&head_oid
))
803 return error(_("could not resolve HEAD commit"));
804 head_tree_oid
= the_hash_algo
->empty_tree
;
806 head_commit
= lookup_commit(r
, &head_oid
);
809 * If head_commit is NULL, check_commit, called from
810 * lookup_commit, would have indicated that head_commit is not
811 * a commit object already. repo_parse_commit() will return failure
812 * without further complaints in such a case. Otherwise, if
813 * the commit is invalid, repo_parse_commit() will complain. So
814 * there is nothing for us to say here. Just return failure.
816 if (repo_parse_commit(r
, head_commit
))
819 head_tree_oid
= get_commit_tree_oid(head_commit
);
822 if (!(cache_tree_oid
= get_cache_tree_oid(istate
)))
825 return oideq(cache_tree_oid
, head_tree_oid
);
828 static int write_author_script(const char *message
)
830 struct strbuf buf
= STRBUF_INIT
;
835 if (!*message
|| starts_with(message
, "\n")) {
837 /* Missing 'author' line? */
838 unlink(rebase_path_author_script());
840 } else if (skip_prefix(message
, "author ", &message
))
842 else if ((eol
= strchr(message
, '\n')))
847 strbuf_addstr(&buf
, "GIT_AUTHOR_NAME='");
848 while (*message
&& *message
!= '\n' && *message
!= '\r')
849 if (skip_prefix(message
, " <", &message
))
851 else if (*message
!= '\'')
852 strbuf_addch(&buf
, *(message
++));
854 strbuf_addf(&buf
, "'\\%c'", *(message
++));
855 strbuf_addstr(&buf
, "'\nGIT_AUTHOR_EMAIL='");
856 while (*message
&& *message
!= '\n' && *message
!= '\r')
857 if (skip_prefix(message
, "> ", &message
))
859 else if (*message
!= '\'')
860 strbuf_addch(&buf
, *(message
++));
862 strbuf_addf(&buf
, "'\\%c'", *(message
++));
863 strbuf_addstr(&buf
, "'\nGIT_AUTHOR_DATE='@");
864 while (*message
&& *message
!= '\n' && *message
!= '\r')
865 if (*message
!= '\'')
866 strbuf_addch(&buf
, *(message
++));
868 strbuf_addf(&buf
, "'\\%c'", *(message
++));
869 strbuf_addch(&buf
, '\'');
870 res
= write_message(buf
.buf
, buf
.len
, rebase_path_author_script(), 1);
871 strbuf_release(&buf
);
876 * Take a series of KEY='VALUE' lines where VALUE part is
877 * sq-quoted, and append <KEY, VALUE> at the end of the string list
879 static int parse_key_value_squoted(char *buf
, struct string_list
*list
)
882 struct string_list_item
*item
;
884 char *cp
= strchr(buf
, '=');
886 np
= strchrnul(buf
, '\n');
887 return error(_("no key present in '%.*s'"),
888 (int) (np
- buf
), buf
);
890 np
= strchrnul(cp
, '\n');
892 item
= string_list_append(list
, buf
);
894 buf
= np
+ (*np
== '\n');
898 return error(_("unable to dequote value of '%s'"),
900 item
->util
= xstrdup(cp
);
906 * Reads and parses the state directory's "author-script" file, and sets name,
907 * email and date accordingly.
908 * Returns 0 on success, -1 if the file could not be parsed.
910 * The author script is of the format:
912 * GIT_AUTHOR_NAME='$author_name'
913 * GIT_AUTHOR_EMAIL='$author_email'
914 * GIT_AUTHOR_DATE='$author_date'
916 * where $author_name, $author_email and $author_date are quoted. We are strict
917 * with our parsing, as the file was meant to be eval'd in the now-removed
918 * git-am.sh/git-rebase--interactive.sh scripts, and thus if the file differs
919 * from what this function expects, it is better to bail out than to do
920 * something that the user does not expect.
922 int read_author_script(const char *path
, char **name
, char **email
, char **date
,
925 struct strbuf buf
= STRBUF_INIT
;
926 struct string_list kv
= STRING_LIST_INIT_DUP
;
927 int retval
= -1; /* assume failure */
928 int i
, name_i
= -2, email_i
= -2, date_i
= -2, err
= 0;
930 if (strbuf_read_file(&buf
, path
, 256) <= 0) {
931 strbuf_release(&buf
);
932 if (errno
== ENOENT
&& allow_missing
)
935 return error_errno(_("could not open '%s' for reading"),
939 if (parse_key_value_squoted(buf
.buf
, &kv
))
942 for (i
= 0; i
< kv
.nr
; i
++) {
943 if (!strcmp(kv
.items
[i
].string
, "GIT_AUTHOR_NAME")) {
945 name_i
= error(_("'GIT_AUTHOR_NAME' already given"));
948 } else if (!strcmp(kv
.items
[i
].string
, "GIT_AUTHOR_EMAIL")) {
950 email_i
= error(_("'GIT_AUTHOR_EMAIL' already given"));
953 } else if (!strcmp(kv
.items
[i
].string
, "GIT_AUTHOR_DATE")) {
955 date_i
= error(_("'GIT_AUTHOR_DATE' already given"));
959 err
= error(_("unknown variable '%s'"),
964 error(_("missing 'GIT_AUTHOR_NAME'"));
966 error(_("missing 'GIT_AUTHOR_EMAIL'"));
968 error(_("missing 'GIT_AUTHOR_DATE'"));
969 if (name_i
< 0 || email_i
< 0 || date_i
< 0 || err
)
971 *name
= kv
.items
[name_i
].util
;
972 *email
= kv
.items
[email_i
].util
;
973 *date
= kv
.items
[date_i
].util
;
976 string_list_clear(&kv
, !!retval
);
977 strbuf_release(&buf
);
982 * Read a GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL AND GIT_AUTHOR_DATE from a
983 * file with shell quoting into struct strvec. Returns -1 on
984 * error, 0 otherwise.
986 static int read_env_script(struct strvec
*env
)
988 char *name
, *email
, *date
;
990 if (read_author_script(rebase_path_author_script(),
991 &name
, &email
, &date
, 0))
994 strvec_pushf(env
, "GIT_AUTHOR_NAME=%s", name
);
995 strvec_pushf(env
, "GIT_AUTHOR_EMAIL=%s", email
);
996 strvec_pushf(env
, "GIT_AUTHOR_DATE=%s", date
);
1004 static char *get_author(const char *message
)
1009 a
= find_commit_header(message
, "author", &len
);
1011 return xmemdupz(a
, len
);
1016 static const char *author_date_from_env(const struct strvec
*env
)
1021 for (i
= 0; i
< env
->nr
; i
++)
1022 if (skip_prefix(env
->v
[i
],
1023 "GIT_AUTHOR_DATE=", &date
))
1026 * If GIT_AUTHOR_DATE is missing we should have already errored out when
1027 * reading the script
1029 BUG("GIT_AUTHOR_DATE missing from author script");
1032 static const char staged_changes_advice
[] =
1033 N_("you have staged changes in your working tree\n"
1034 "If these changes are meant to be squashed into the previous commit, run:\n"
1036 " git commit --amend %s\n"
1038 "If they are meant to go into a new commit, run:\n"
1042 "In both cases, once you're done, continue with:\n"
1044 " git rebase --continue\n");
1046 #define ALLOW_EMPTY (1<<0)
1047 #define EDIT_MSG (1<<1)
1048 #define AMEND_MSG (1<<2)
1049 #define CLEANUP_MSG (1<<3)
1050 #define VERIFY_MSG (1<<4)
1051 #define CREATE_ROOT_COMMIT (1<<5)
1052 #define VERBATIM_MSG (1<<6)
1054 static int run_command_silent_on_success(struct child_process
*cmd
)
1056 struct strbuf buf
= STRBUF_INIT
;
1059 cmd
->stdout_to_stderr
= 1;
1060 rc
= pipe_command(cmd
,
1066 fputs(buf
.buf
, stderr
);
1067 strbuf_release(&buf
);
1072 * If we are cherry-pick, and if the merge did not result in
1073 * hand-editing, we will hit this commit and inherit the original
1074 * author date and name.
1076 * If we are revert, or if our cherry-pick results in a hand merge,
1077 * we had better say that the current user is responsible for that.
1079 * An exception is when run_git_commit() is called during an
1080 * interactive rebase: in that case, we will want to retain the
1083 static int run_git_commit(const char *defmsg
,
1084 struct replay_opts
*opts
,
1087 struct child_process cmd
= CHILD_PROCESS_INIT
;
1089 if ((flags
& CLEANUP_MSG
) && (flags
& VERBATIM_MSG
))
1090 BUG("CLEANUP_MSG and VERBATIM_MSG are mutually exclusive");
1094 if (is_rebase_i(opts
) &&
1095 ((opts
->committer_date_is_author_date
&& !opts
->ignore_date
) ||
1096 !(!defmsg
&& (flags
& AMEND_MSG
))) &&
1097 read_env_script(&cmd
.env
)) {
1098 const char *gpg_opt
= gpg_sign_opt_quoted(opts
);
1100 return error(_(staged_changes_advice
),
1104 strvec_pushf(&cmd
.env
, GIT_REFLOG_ACTION
"=%s", opts
->reflog_message
);
1106 if (opts
->committer_date_is_author_date
)
1107 strvec_pushf(&cmd
.env
, "GIT_COMMITTER_DATE=%s",
1110 author_date_from_env(&cmd
.env
));
1111 if (opts
->ignore_date
)
1112 strvec_push(&cmd
.env
, "GIT_AUTHOR_DATE=");
1114 strvec_push(&cmd
.args
, "commit");
1116 if (!(flags
& VERIFY_MSG
))
1117 strvec_push(&cmd
.args
, "-n");
1118 if ((flags
& AMEND_MSG
))
1119 strvec_push(&cmd
.args
, "--amend");
1121 strvec_pushf(&cmd
.args
, "-S%s", opts
->gpg_sign
);
1123 strvec_push(&cmd
.args
, "--no-gpg-sign");
1125 strvec_pushl(&cmd
.args
, "-F", defmsg
, NULL
);
1126 else if (!(flags
& EDIT_MSG
))
1127 strvec_pushl(&cmd
.args
, "-C", "HEAD", NULL
);
1128 if ((flags
& CLEANUP_MSG
))
1129 strvec_push(&cmd
.args
, "--cleanup=strip");
1130 if ((flags
& VERBATIM_MSG
))
1131 strvec_push(&cmd
.args
, "--cleanup=verbatim");
1132 if ((flags
& EDIT_MSG
))
1133 strvec_push(&cmd
.args
, "-e");
1134 else if (!(flags
& CLEANUP_MSG
) &&
1135 !opts
->signoff
&& !opts
->record_origin
&&
1136 !opts
->explicit_cleanup
)
1137 strvec_push(&cmd
.args
, "--cleanup=verbatim");
1139 if ((flags
& ALLOW_EMPTY
))
1140 strvec_push(&cmd
.args
, "--allow-empty");
1142 if (!(flags
& EDIT_MSG
))
1143 strvec_push(&cmd
.args
, "--allow-empty-message");
1145 if (is_rebase_i(opts
) && !(flags
& EDIT_MSG
))
1146 return run_command_silent_on_success(&cmd
);
1148 return run_command(&cmd
);
1151 static int rest_is_empty(const struct strbuf
*sb
, int start
)
1156 /* Check if the rest is just whitespace and Signed-off-by's. */
1157 for (i
= start
; i
< sb
->len
; i
++) {
1158 nl
= memchr(sb
->buf
+ i
, '\n', sb
->len
- i
);
1164 if (strlen(sign_off_header
) <= eol
- i
&&
1165 starts_with(sb
->buf
+ i
, sign_off_header
)) {
1170 if (!isspace(sb
->buf
[i
++]))
1177 void cleanup_message(struct strbuf
*msgbuf
,
1178 enum commit_msg_cleanup_mode cleanup_mode
, int verbose
)
1180 if (verbose
|| /* Truncate the message just before the diff, if any. */
1181 cleanup_mode
== COMMIT_MSG_CLEANUP_SCISSORS
)
1182 strbuf_setlen(msgbuf
, wt_status_locate_end(msgbuf
->buf
, msgbuf
->len
));
1183 if (cleanup_mode
!= COMMIT_MSG_CLEANUP_NONE
)
1184 strbuf_stripspace(msgbuf
,
1185 cleanup_mode
== COMMIT_MSG_CLEANUP_ALL
? comment_line_str
: NULL
);
1189 * Find out if the message in the strbuf contains only whitespace and
1190 * Signed-off-by lines.
1192 int message_is_empty(const struct strbuf
*sb
,
1193 enum commit_msg_cleanup_mode cleanup_mode
)
1195 if (cleanup_mode
== COMMIT_MSG_CLEANUP_NONE
&& sb
->len
)
1197 return rest_is_empty(sb
, 0);
1201 * See if the user edited the message in the editor or left what
1202 * was in the template intact
1204 int template_untouched(const struct strbuf
*sb
, const char *template_file
,
1205 enum commit_msg_cleanup_mode cleanup_mode
)
1207 struct strbuf tmpl
= STRBUF_INIT
;
1210 if (cleanup_mode
== COMMIT_MSG_CLEANUP_NONE
&& sb
->len
)
1213 if (!template_file
|| strbuf_read_file(&tmpl
, template_file
, 0) <= 0)
1216 strbuf_stripspace(&tmpl
,
1217 cleanup_mode
== COMMIT_MSG_CLEANUP_ALL
? comment_line_str
: NULL
);
1218 if (!skip_prefix(sb
->buf
, tmpl
.buf
, &start
))
1220 strbuf_release(&tmpl
);
1221 return rest_is_empty(sb
, start
- sb
->buf
);
1224 int update_head_with_reflog(const struct commit
*old_head
,
1225 const struct object_id
*new_head
,
1226 const char *action
, const struct strbuf
*msg
,
1229 struct ref_transaction
*transaction
;
1230 struct strbuf sb
= STRBUF_INIT
;
1235 strbuf_addstr(&sb
, action
);
1236 strbuf_addstr(&sb
, ": ");
1239 nl
= strchr(msg
->buf
, '\n');
1241 strbuf_add(&sb
, msg
->buf
, nl
+ 1 - msg
->buf
);
1243 strbuf_addbuf(&sb
, msg
);
1244 strbuf_addch(&sb
, '\n');
1247 transaction
= ref_transaction_begin(err
);
1249 ref_transaction_update(transaction
, "HEAD", new_head
,
1250 old_head
? &old_head
->object
.oid
: null_oid(),
1252 ref_transaction_commit(transaction
, err
)) {
1255 ref_transaction_free(transaction
);
1256 strbuf_release(&sb
);
1261 static int run_rewrite_hook(const struct object_id
*oldoid
,
1262 const struct object_id
*newoid
)
1264 struct child_process proc
= CHILD_PROCESS_INIT
;
1266 struct strbuf sb
= STRBUF_INIT
;
1267 const char *hook_path
= find_hook("post-rewrite");
1272 strvec_pushl(&proc
.args
, hook_path
, "amend", NULL
);
1274 proc
.stdout_to_stderr
= 1;
1275 proc
.trace2_hook_name
= "post-rewrite";
1277 code
= start_command(&proc
);
1280 strbuf_addf(&sb
, "%s %s\n", oid_to_hex(oldoid
), oid_to_hex(newoid
));
1281 sigchain_push(SIGPIPE
, SIG_IGN
);
1282 write_in_full(proc
.in
, sb
.buf
, sb
.len
);
1284 strbuf_release(&sb
);
1285 sigchain_pop(SIGPIPE
);
1286 return finish_command(&proc
);
1289 void commit_post_rewrite(struct repository
*r
,
1290 const struct commit
*old_head
,
1291 const struct object_id
*new_head
)
1293 struct notes_rewrite_cfg
*cfg
;
1295 cfg
= init_copy_notes_for_rewrite("amend");
1297 /* we are amending, so old_head is not NULL */
1298 copy_note_for_rewrite(cfg
, &old_head
->object
.oid
, new_head
);
1299 finish_copy_notes_for_rewrite(r
, cfg
, "Notes added by 'git commit --amend'");
1301 run_rewrite_hook(&old_head
->object
.oid
, new_head
);
1304 static int run_prepare_commit_msg_hook(struct repository
*r
,
1309 const char *name
, *arg1
= NULL
, *arg2
= NULL
;
1311 name
= git_path_commit_editmsg();
1312 if (write_message(msg
->buf
, msg
->len
, name
, 0))
1321 if (run_commit_hook(0, r
->index_file
, NULL
, "prepare-commit-msg", name
,
1323 ret
= error(_("'prepare-commit-msg' hook failed"));
1328 static const char implicit_ident_advice_noconfig
[] =
1329 N_("Your name and email address were configured automatically based\n"
1330 "on your username and hostname. Please check that they are accurate.\n"
1331 "You can suppress this message by setting them explicitly. Run the\n"
1332 "following command and follow the instructions in your editor to edit\n"
1333 "your configuration file:\n"
1335 " git config --global --edit\n"
1337 "After doing this, you may fix the identity used for this commit with:\n"
1339 " git commit --amend --reset-author\n");
1341 static const char implicit_ident_advice_config
[] =
1342 N_("Your name and email address were configured automatically based\n"
1343 "on your username and hostname. Please check that they are accurate.\n"
1344 "You can suppress this message by setting them explicitly:\n"
1346 " git config --global user.name \"Your Name\"\n"
1347 " git config --global user.email you@example.com\n"
1349 "After doing this, you may fix the identity used for this commit with:\n"
1351 " git commit --amend --reset-author\n");
1353 static const char *implicit_ident_advice(void)
1355 char *user_config
= interpolate_path("~/.gitconfig", 0);
1356 char *xdg_config
= xdg_config_home("config");
1357 int config_exists
= file_exists(user_config
) || file_exists(xdg_config
);
1363 return _(implicit_ident_advice_config
);
1365 return _(implicit_ident_advice_noconfig
);
1369 void print_commit_summary(struct repository
*r
,
1371 const struct object_id
*oid
,
1374 struct rev_info rev
;
1375 struct commit
*commit
;
1376 struct strbuf format
= STRBUF_INIT
;
1378 struct pretty_print_context pctx
= {0};
1379 struct strbuf author_ident
= STRBUF_INIT
;
1380 struct strbuf committer_ident
= STRBUF_INIT
;
1381 struct ref_store
*refs
;
1383 commit
= lookup_commit(r
, oid
);
1385 die(_("couldn't look up newly created commit"));
1386 if (repo_parse_commit(r
, commit
))
1387 die(_("could not parse newly created commit"));
1389 strbuf_addstr(&format
, "format:%h] %s");
1391 repo_format_commit_message(r
, commit
, "%an <%ae>", &author_ident
,
1393 repo_format_commit_message(r
, commit
, "%cn <%ce>", &committer_ident
,
1395 if (strbuf_cmp(&author_ident
, &committer_ident
)) {
1396 strbuf_addstr(&format
, "\n Author: ");
1397 strbuf_addbuf_percentquote(&format
, &author_ident
);
1399 if (flags
& SUMMARY_SHOW_AUTHOR_DATE
) {
1400 struct strbuf date
= STRBUF_INIT
;
1402 repo_format_commit_message(r
, commit
, "%ad", &date
, &pctx
);
1403 strbuf_addstr(&format
, "\n Date: ");
1404 strbuf_addbuf_percentquote(&format
, &date
);
1405 strbuf_release(&date
);
1407 if (!committer_ident_sufficiently_given()) {
1408 strbuf_addstr(&format
, "\n Committer: ");
1409 strbuf_addbuf_percentquote(&format
, &committer_ident
);
1410 if (advice_enabled(ADVICE_IMPLICIT_IDENTITY
)) {
1411 strbuf_addch(&format
, '\n');
1412 strbuf_addstr(&format
, implicit_ident_advice());
1415 strbuf_release(&author_ident
);
1416 strbuf_release(&committer_ident
);
1418 repo_init_revisions(r
, &rev
, prefix
);
1419 setup_revisions(0, NULL
, &rev
, NULL
);
1422 rev
.diffopt
.output_format
=
1423 DIFF_FORMAT_SHORTSTAT
| DIFF_FORMAT_SUMMARY
;
1425 rev
.verbose_header
= 1;
1426 rev
.show_root_diff
= 1;
1427 get_commit_format(format
.buf
, &rev
);
1428 rev
.always_show_header
= 0;
1429 rev
.diffopt
.detect_rename
= DIFF_DETECT_RENAME
;
1430 diff_setup_done(&rev
.diffopt
);
1432 refs
= get_main_ref_store(r
);
1433 head
= refs_resolve_ref_unsafe(refs
, "HEAD", 0, NULL
, NULL
);
1435 die(_("unable to resolve HEAD after creating commit"));
1436 if (!strcmp(head
, "HEAD"))
1437 head
= _("detached HEAD");
1439 skip_prefix(head
, "refs/heads/", &head
);
1440 printf("[%s%s ", head
, (flags
& SUMMARY_INITIAL_COMMIT
) ?
1441 _(" (root-commit)") : "");
1443 if (!log_tree_commit(&rev
, commit
)) {
1444 rev
.always_show_header
= 1;
1445 rev
.use_terminator
= 1;
1446 log_tree_commit(&rev
, commit
);
1449 release_revisions(&rev
);
1450 strbuf_release(&format
);
1453 static int parse_head(struct repository
*r
, struct commit
**head
)
1455 struct commit
*current_head
;
1456 struct object_id oid
;
1458 if (repo_get_oid(r
, "HEAD", &oid
)) {
1459 current_head
= NULL
;
1461 current_head
= lookup_commit_reference(r
, &oid
);
1463 return error(_("could not parse HEAD"));
1464 if (!oideq(&oid
, ¤t_head
->object
.oid
)) {
1465 warning(_("HEAD %s is not a commit!"),
1468 if (repo_parse_commit(r
, current_head
))
1469 return error(_("could not parse HEAD commit"));
1471 *head
= current_head
;
1477 * Try to commit without forking 'git commit'. In some cases we need
1478 * to run 'git commit' to display an error message
1481 * -1 - error unable to commit
1483 * 1 - run 'git commit'
1485 static int try_to_commit(struct repository
*r
,
1486 struct strbuf
*msg
, const char *author
,
1487 struct replay_opts
*opts
, unsigned int flags
,
1488 struct object_id
*oid
)
1490 struct object_id tree
;
1491 struct commit
*current_head
= NULL
;
1492 struct commit_list
*parents
= NULL
;
1493 struct commit_extra_header
*extra
= NULL
;
1494 struct strbuf err
= STRBUF_INIT
;
1495 struct strbuf commit_msg
= STRBUF_INIT
;
1496 char *amend_author
= NULL
;
1497 const char *committer
= NULL
;
1498 const char *hook_commit
= NULL
;
1499 enum commit_msg_cleanup_mode cleanup
;
1502 if ((flags
& CLEANUP_MSG
) && (flags
& VERBATIM_MSG
))
1503 BUG("CLEANUP_MSG and VERBATIM_MSG are mutually exclusive");
1505 if (parse_head(r
, ¤t_head
))
1508 if (flags
& AMEND_MSG
) {
1509 const char *exclude_gpgsig
[] = { "gpgsig", "gpgsig-sha256", NULL
};
1510 const char *out_enc
= get_commit_output_encoding();
1511 const char *message
= repo_logmsg_reencode(r
, current_head
,
1515 const char *orig_message
= NULL
;
1517 find_commit_subject(message
, &orig_message
);
1519 strbuf_addstr(msg
, orig_message
);
1520 hook_commit
= "HEAD";
1522 author
= amend_author
= get_author(message
);
1523 repo_unuse_commit_buffer(r
, current_head
,
1526 res
= error(_("unable to parse commit author"));
1529 parents
= copy_commit_list(current_head
->parents
);
1530 extra
= read_commit_extra_headers(current_head
, exclude_gpgsig
);
1531 } else if (current_head
&&
1532 (!(flags
& CREATE_ROOT_COMMIT
) || (flags
& AMEND_MSG
))) {
1533 commit_list_insert(current_head
, &parents
);
1536 if (write_index_as_tree(&tree
, r
->index
, r
->index_file
, 0, NULL
)) {
1537 res
= error(_("git write-tree failed to write a tree"));
1541 if (!(flags
& ALLOW_EMPTY
)) {
1542 struct commit
*first_parent
= current_head
;
1544 if (flags
& AMEND_MSG
) {
1545 if (current_head
->parents
) {
1546 first_parent
= current_head
->parents
->item
;
1547 if (repo_parse_commit(r
, first_parent
)) {
1548 res
= error(_("could not parse HEAD commit"));
1552 first_parent
= NULL
;
1555 if (oideq(first_parent
1556 ? get_commit_tree_oid(first_parent
)
1557 : the_hash_algo
->empty_tree
,
1559 res
= 1; /* run 'git commit' to display error message */
1564 if (hook_exists("prepare-commit-msg")) {
1565 res
= run_prepare_commit_msg_hook(r
, msg
, hook_commit
);
1568 if (strbuf_read_file(&commit_msg
, git_path_commit_editmsg(),
1570 res
= error_errno(_("unable to read commit message "
1572 git_path_commit_editmsg());
1578 if (flags
& CLEANUP_MSG
)
1579 cleanup
= COMMIT_MSG_CLEANUP_ALL
;
1580 else if (flags
& VERBATIM_MSG
)
1581 cleanup
= COMMIT_MSG_CLEANUP_NONE
;
1582 else if ((opts
->signoff
|| opts
->record_origin
) &&
1583 !opts
->explicit_cleanup
)
1584 cleanup
= COMMIT_MSG_CLEANUP_SPACE
;
1586 cleanup
= opts
->default_msg_cleanup
;
1588 if (cleanup
!= COMMIT_MSG_CLEANUP_NONE
)
1589 strbuf_stripspace(msg
,
1590 cleanup
== COMMIT_MSG_CLEANUP_ALL
? comment_line_str
: NULL
);
1591 if ((flags
& EDIT_MSG
) && message_is_empty(msg
, cleanup
)) {
1592 res
= 1; /* run 'git commit' to display error message */
1596 if (opts
->committer_date_is_author_date
) {
1597 struct ident_split id
;
1598 struct strbuf date
= STRBUF_INIT
;
1600 if (!opts
->ignore_date
) {
1601 if (split_ident_line(&id
, author
, (int)strlen(author
)) < 0) {
1602 res
= error(_("invalid author identity '%s'"),
1606 if (!id
.date_begin
) {
1608 "corrupt author: missing date information"));
1611 strbuf_addf(&date
, "@%.*s %.*s",
1612 (int)(id
.date_end
- id
.date_begin
),
1614 (int)(id
.tz_end
- id
.tz_begin
),
1619 committer
= fmt_ident(getenv("GIT_COMMITTER_NAME"),
1620 getenv("GIT_COMMITTER_EMAIL"),
1621 WANT_COMMITTER_IDENT
,
1622 opts
->ignore_date
? NULL
: date
.buf
,
1624 strbuf_release(&date
);
1629 if (opts
->ignore_date
) {
1630 struct ident_split id
;
1633 if (split_ident_line(&id
, author
, strlen(author
)) < 0) {
1634 error(_("invalid author identity '%s'"), author
);
1637 name
= xmemdupz(id
.name_begin
, id
.name_end
- id
.name_begin
);
1638 email
= xmemdupz(id
.mail_begin
, id
.mail_end
- id
.mail_begin
);
1639 author
= fmt_ident(name
, email
, WANT_AUTHOR_IDENT
, NULL
,
1645 if (commit_tree_extended(msg
->buf
, msg
->len
, &tree
, parents
, oid
,
1646 author
, committer
, opts
->gpg_sign
, extra
)) {
1647 res
= error(_("failed to write commit object"));
1651 if (update_head_with_reflog(current_head
, oid
, opts
->reflog_message
,
1653 res
= error("%s", err
.buf
);
1657 run_commit_hook(0, r
->index_file
, NULL
, "post-commit", NULL
);
1658 if (flags
& AMEND_MSG
)
1659 commit_post_rewrite(r
, current_head
, oid
);
1662 free_commit_extra_headers(extra
);
1663 strbuf_release(&err
);
1664 strbuf_release(&commit_msg
);
1670 static int write_rebase_head(struct object_id
*oid
)
1672 if (update_ref("rebase", "REBASE_HEAD", oid
,
1673 NULL
, REF_NO_DEREF
, UPDATE_REFS_MSG_ON_ERR
))
1674 return error(_("could not update %s"), "REBASE_HEAD");
1679 static int do_commit(struct repository
*r
,
1680 const char *msg_file
, const char *author
,
1681 struct replay_opts
*opts
, unsigned int flags
,
1682 struct object_id
*oid
)
1686 if (!(flags
& EDIT_MSG
) && !(flags
& VERIFY_MSG
)) {
1687 struct object_id oid
;
1688 struct strbuf sb
= STRBUF_INIT
;
1690 if (msg_file
&& strbuf_read_file(&sb
, msg_file
, 2048) < 0)
1691 return error_errno(_("unable to read commit message "
1695 res
= try_to_commit(r
, msg_file
? &sb
: NULL
,
1696 author
, opts
, flags
, &oid
);
1697 strbuf_release(&sb
);
1699 refs_delete_ref(get_main_ref_store(r
), "",
1700 "CHERRY_PICK_HEAD", NULL
, REF_NO_DEREF
);
1701 unlink(git_path_merge_msg(r
));
1702 if (!is_rebase_i(opts
))
1703 print_commit_summary(r
, NULL
, &oid
,
1704 SUMMARY_SHOW_AUTHOR_DATE
);
1709 if (is_rebase_i(opts
) && oid
)
1710 if (write_rebase_head(oid
))
1712 return run_git_commit(msg_file
, opts
, flags
);
1718 static int is_original_commit_empty(struct commit
*commit
)
1720 const struct object_id
*ptree_oid
;
1722 if (repo_parse_commit(the_repository
, commit
))
1723 return error(_("could not parse commit %s"),
1724 oid_to_hex(&commit
->object
.oid
));
1725 if (commit
->parents
) {
1726 struct commit
*parent
= commit
->parents
->item
;
1727 if (repo_parse_commit(the_repository
, parent
))
1728 return error(_("could not parse parent commit %s"),
1729 oid_to_hex(&parent
->object
.oid
));
1730 ptree_oid
= get_commit_tree_oid(parent
);
1732 ptree_oid
= the_hash_algo
->empty_tree
; /* commit is root */
1735 return oideq(ptree_oid
, get_commit_tree_oid(commit
));
1739 * Should empty commits be allowed? Return status:
1740 * <0: Error in is_index_unchanged(r) or is_original_commit_empty(commit)
1741 * 0: Halt on empty commit
1742 * 1: Allow empty commit
1743 * 2: Drop empty commit
1745 static int allow_empty(struct repository
*r
,
1746 struct replay_opts
*opts
,
1747 struct commit
*commit
)
1749 int index_unchanged
, originally_empty
;
1752 * For a commit that is initially empty, allow_empty determines if it
1753 * should be kept or not
1755 * For a commit that becomes empty, keep_redundant_commits and
1756 * drop_redundant_commits determine whether the commit should be kept or
1757 * dropped. If neither is specified, halt.
1759 index_unchanged
= is_index_unchanged(r
);
1760 if (index_unchanged
< 0)
1761 return index_unchanged
;
1762 if (!index_unchanged
)
1763 return 0; /* we do not have to say --allow-empty */
1765 originally_empty
= is_original_commit_empty(commit
);
1766 if (originally_empty
< 0)
1767 return originally_empty
;
1768 if (originally_empty
)
1769 return opts
->allow_empty
;
1770 else if (opts
->keep_redundant_commits
)
1772 else if (opts
->drop_redundant_commits
)
1781 } todo_command_info
[] = {
1782 [TODO_PICK
] = { 'p', "pick" },
1783 [TODO_REVERT
] = { 0, "revert" },
1784 [TODO_EDIT
] = { 'e', "edit" },
1785 [TODO_REWORD
] = { 'r', "reword" },
1786 [TODO_FIXUP
] = { 'f', "fixup" },
1787 [TODO_SQUASH
] = { 's', "squash" },
1788 [TODO_EXEC
] = { 'x', "exec" },
1789 [TODO_BREAK
] = { 'b', "break" },
1790 [TODO_LABEL
] = { 'l', "label" },
1791 [TODO_RESET
] = { 't', "reset" },
1792 [TODO_MERGE
] = { 'm', "merge" },
1793 [TODO_UPDATE_REF
] = { 'u', "update-ref" },
1794 [TODO_NOOP
] = { 0, "noop" },
1795 [TODO_DROP
] = { 'd', "drop" },
1796 [TODO_COMMENT
] = { 0, NULL
},
1799 static const char *command_to_string(const enum todo_command command
)
1801 if (command
< TODO_COMMENT
)
1802 return todo_command_info
[command
].str
;
1803 if (command
== TODO_COMMENT
)
1804 return comment_line_str
;
1805 die(_("unknown command: %d"), command
);
1808 static char command_to_char(const enum todo_command command
)
1810 if (command
< TODO_COMMENT
)
1811 return todo_command_info
[command
].c
;
1815 static int is_noop(const enum todo_command command
)
1817 return TODO_NOOP
<= command
;
1820 static int is_fixup(enum todo_command command
)
1822 return command
== TODO_FIXUP
|| command
== TODO_SQUASH
;
1825 /* Does this command create a (non-merge) commit? */
1826 static int is_pick_or_similar(enum todo_command command
)
1841 enum todo_item_flags
{
1842 TODO_EDIT_MERGE_MSG
= (1 << 0),
1843 TODO_REPLACE_FIXUP_MSG
= (1 << 1),
1844 TODO_EDIT_FIXUP_MSG
= (1 << 2),
1847 static const char first_commit_msg_str
[] = N_("This is the 1st commit message:");
1848 static const char nth_commit_msg_fmt
[] = N_("This is the commit message #%d:");
1849 static const char skip_first_commit_msg_str
[] = N_("The 1st commit message will be skipped:");
1850 static const char skip_nth_commit_msg_fmt
[] = N_("The commit message #%d will be skipped:");
1851 static const char combined_commit_msg_fmt
[] = N_("This is a combination of %d commits.");
1853 static int is_fixup_flag(enum todo_command command
, unsigned flag
)
1855 return command
== TODO_FIXUP
&& ((flag
& TODO_REPLACE_FIXUP_MSG
) ||
1856 (flag
& TODO_EDIT_FIXUP_MSG
));
1860 * Wrapper around strbuf_add_commented_lines() which avoids double
1861 * commenting commit subjects.
1863 static void add_commented_lines(struct strbuf
*buf
, const void *str
, size_t len
)
1865 const char *s
= str
;
1866 while (starts_with_mem(s
, len
, comment_line_str
)) {
1868 const char *n
= memchr(s
, '\n', len
);
1873 strbuf_add(buf
, s
, count
);
1877 strbuf_add_commented_lines(buf
, s
, len
, comment_line_str
);
1880 /* Does the current fixup chain contain a squash command? */
1881 static int seen_squash(struct replay_opts
*opts
)
1883 return starts_with(opts
->current_fixups
.buf
, "squash") ||
1884 strstr(opts
->current_fixups
.buf
, "\nsquash");
1887 static void update_comment_bufs(struct strbuf
*buf1
, struct strbuf
*buf2
, int n
)
1889 strbuf_setlen(buf1
, 2);
1890 strbuf_addf(buf1
, _(nth_commit_msg_fmt
), n
);
1891 strbuf_addch(buf1
, '\n');
1892 strbuf_setlen(buf2
, 2);
1893 strbuf_addf(buf2
, _(skip_nth_commit_msg_fmt
), n
);
1894 strbuf_addch(buf2
, '\n');
1898 * Comment out any un-commented commit messages, updating the message comments
1899 * to say they will be skipped but do not comment out the empty lines that
1900 * surround commit messages and their comments.
1902 static void update_squash_message_for_fixup(struct strbuf
*msg
)
1904 void (*copy_lines
)(struct strbuf
*, const void *, size_t) = strbuf_add
;
1905 struct strbuf buf1
= STRBUF_INIT
, buf2
= STRBUF_INIT
;
1906 const char *s
, *start
;
1908 size_t orig_msg_len
;
1911 strbuf_addf(&buf1
, "# %s\n", _(first_commit_msg_str
));
1912 strbuf_addf(&buf2
, "# %s\n", _(skip_first_commit_msg_str
));
1913 s
= start
= orig_msg
= strbuf_detach(msg
, &orig_msg_len
);
1917 if (skip_prefix(s
, buf1
.buf
, &next
)) {
1919 * Copy the last message, preserving the blank line
1920 * preceding the current line
1922 off
= (s
> start
+ 1 && s
[-2] == '\n') ? 1 : 0;
1923 copy_lines(msg
, start
, s
- start
- off
);
1925 strbuf_addch(msg
, '\n');
1927 * The next message needs to be commented out but the
1928 * message header is already commented out so just copy
1929 * it and the blank line that follows it.
1931 strbuf_addbuf(msg
, &buf2
);
1933 strbuf_addch(msg
, *next
++);
1935 copy_lines
= add_commented_lines
;
1936 update_comment_bufs(&buf1
, &buf2
, ++i
);
1937 } else if (skip_prefix(s
, buf2
.buf
, &next
)) {
1938 off
= (s
> start
+ 1 && s
[-2] == '\n') ? 1 : 0;
1939 copy_lines(msg
, start
, s
- start
- off
);
1942 copy_lines
= strbuf_add
;
1943 update_comment_bufs(&buf1
, &buf2
, ++i
);
1945 s
= strchr(s
, '\n');
1950 copy_lines(msg
, start
, orig_msg_len
- (start
- orig_msg
));
1952 strbuf_release(&buf1
);
1953 strbuf_release(&buf2
);
1956 static int append_squash_message(struct strbuf
*buf
, const char *body
,
1957 enum todo_command command
, struct replay_opts
*opts
,
1960 const char *fixup_msg
;
1961 size_t commented_len
= 0, fixup_off
;
1963 * amend is non-interactive and not normally used with fixup!
1964 * or squash! commits, so only comment out those subjects when
1965 * squashing commit messages.
1967 if (starts_with(body
, "amend!") ||
1968 ((command
== TODO_SQUASH
|| seen_squash(opts
)) &&
1969 (starts_with(body
, "squash!") || starts_with(body
, "fixup!"))))
1970 commented_len
= commit_subject_length(body
);
1972 strbuf_addf(buf
, "\n%s ", comment_line_str
);
1973 strbuf_addf(buf
, _(nth_commit_msg_fmt
),
1974 ++opts
->current_fixup_count
+ 1);
1975 strbuf_addstr(buf
, "\n\n");
1976 strbuf_add_commented_lines(buf
, body
, commented_len
, comment_line_str
);
1977 /* buf->buf may be reallocated so store an offset into the buffer */
1978 fixup_off
= buf
->len
;
1979 strbuf_addstr(buf
, body
+ commented_len
);
1981 /* fixup -C after squash behaves like squash */
1982 if (is_fixup_flag(command
, flag
) && !seen_squash(opts
)) {
1984 * We're replacing the commit message so we need to
1985 * append the Signed-off-by: trailer if the user
1986 * requested '--signoff'.
1989 append_signoff(buf
, 0, 0);
1991 if ((command
== TODO_FIXUP
) &&
1992 (flag
& TODO_REPLACE_FIXUP_MSG
) &&
1993 (file_exists(rebase_path_fixup_msg()) ||
1994 !file_exists(rebase_path_squash_msg()))) {
1995 fixup_msg
= skip_blank_lines(buf
->buf
+ fixup_off
);
1996 if (write_message(fixup_msg
, strlen(fixup_msg
),
1997 rebase_path_fixup_msg(), 0) < 0)
1998 return error(_("cannot write '%s'"),
1999 rebase_path_fixup_msg());
2001 unlink(rebase_path_fixup_msg());
2004 unlink(rebase_path_fixup_msg());
2010 static int update_squash_messages(struct repository
*r
,
2011 enum todo_command command
,
2012 struct commit
*commit
,
2013 struct replay_opts
*opts
,
2016 struct strbuf buf
= STRBUF_INIT
;
2018 const char *message
, *body
;
2019 const char *encoding
= get_commit_output_encoding();
2021 if (opts
->current_fixup_count
> 0) {
2022 struct strbuf header
= STRBUF_INIT
;
2025 if (strbuf_read_file(&buf
, rebase_path_squash_msg(), 9) <= 0)
2026 return error(_("could not read '%s'"),
2027 rebase_path_squash_msg());
2029 eol
= !starts_with(buf
.buf
, comment_line_str
) ?
2030 buf
.buf
: strchrnul(buf
.buf
, '\n');
2032 strbuf_addf(&header
, "%s ", comment_line_str
);
2033 strbuf_addf(&header
, _(combined_commit_msg_fmt
),
2034 opts
->current_fixup_count
+ 2);
2035 strbuf_splice(&buf
, 0, eol
- buf
.buf
, header
.buf
, header
.len
);
2036 strbuf_release(&header
);
2037 if (is_fixup_flag(command
, flag
) && !seen_squash(opts
))
2038 update_squash_message_for_fixup(&buf
);
2040 struct object_id head
;
2041 struct commit
*head_commit
;
2042 const char *head_message
, *body
;
2044 if (repo_get_oid(r
, "HEAD", &head
))
2045 return error(_("need a HEAD to fixup"));
2046 if (!(head_commit
= lookup_commit_reference(r
, &head
)))
2047 return error(_("could not read HEAD"));
2048 if (!(head_message
= repo_logmsg_reencode(r
, head_commit
, NULL
,
2050 return error(_("could not read HEAD's commit message"));
2052 find_commit_subject(head_message
, &body
);
2053 if (command
== TODO_FIXUP
&& !flag
&& write_message(body
, strlen(body
),
2054 rebase_path_fixup_msg(), 0) < 0) {
2055 repo_unuse_commit_buffer(r
, head_commit
, head_message
);
2056 return error(_("cannot write '%s'"), rebase_path_fixup_msg());
2058 strbuf_addf(&buf
, "%s ", comment_line_str
);
2059 strbuf_addf(&buf
, _(combined_commit_msg_fmt
), 2);
2060 strbuf_addf(&buf
, "\n%s ", comment_line_str
);
2061 strbuf_addstr(&buf
, is_fixup_flag(command
, flag
) ?
2062 _(skip_first_commit_msg_str
) :
2063 _(first_commit_msg_str
));
2064 strbuf_addstr(&buf
, "\n\n");
2065 if (is_fixup_flag(command
, flag
))
2066 strbuf_add_commented_lines(&buf
, body
, strlen(body
),
2069 strbuf_addstr(&buf
, body
);
2071 repo_unuse_commit_buffer(r
, head_commit
, head_message
);
2074 if (!(message
= repo_logmsg_reencode(r
, commit
, NULL
, encoding
)))
2075 return error(_("could not read commit message of %s"),
2076 oid_to_hex(&commit
->object
.oid
));
2077 find_commit_subject(message
, &body
);
2079 if (command
== TODO_SQUASH
|| is_fixup_flag(command
, flag
)) {
2080 res
= append_squash_message(&buf
, body
, command
, opts
, flag
);
2081 } else if (command
== TODO_FIXUP
) {
2082 strbuf_addf(&buf
, "\n%s ", comment_line_str
);
2083 strbuf_addf(&buf
, _(skip_nth_commit_msg_fmt
),
2084 ++opts
->current_fixup_count
+ 1);
2085 strbuf_addstr(&buf
, "\n\n");
2086 strbuf_add_commented_lines(&buf
, body
, strlen(body
),
2089 return error(_("unknown command: %d"), command
);
2090 repo_unuse_commit_buffer(r
, commit
, message
);
2093 res
= write_message(buf
.buf
, buf
.len
, rebase_path_squash_msg(),
2095 strbuf_release(&buf
);
2098 strbuf_addf(&opts
->current_fixups
, "%s%s %s",
2099 opts
->current_fixups
.len
? "\n" : "",
2100 command_to_string(command
),
2101 oid_to_hex(&commit
->object
.oid
));
2102 res
= write_message(opts
->current_fixups
.buf
,
2103 opts
->current_fixups
.len
,
2104 rebase_path_current_fixups(), 0);
2110 static void flush_rewritten_pending(void)
2112 struct strbuf buf
= STRBUF_INIT
;
2113 struct object_id newoid
;
2116 if (strbuf_read_file(&buf
, rebase_path_rewritten_pending(), (GIT_MAX_HEXSZ
+ 1) * 2) > 0 &&
2117 !repo_get_oid(the_repository
, "HEAD", &newoid
) &&
2118 (out
= fopen_or_warn(rebase_path_rewritten_list(), "a"))) {
2119 char *bol
= buf
.buf
, *eol
;
2122 eol
= strchrnul(bol
, '\n');
2123 fprintf(out
, "%.*s %s\n", (int)(eol
- bol
),
2124 bol
, oid_to_hex(&newoid
));
2130 unlink(rebase_path_rewritten_pending());
2132 strbuf_release(&buf
);
2135 static void record_in_rewritten(struct object_id
*oid
,
2136 enum todo_command next_command
)
2138 FILE *out
= fopen_or_warn(rebase_path_rewritten_pending(), "a");
2143 fprintf(out
, "%s\n", oid_to_hex(oid
));
2146 if (!is_fixup(next_command
))
2147 flush_rewritten_pending();
2150 static int should_edit(struct replay_opts
*opts
) {
2153 * Note that we only handle the case of non-conflicted
2154 * commits; continue_single_pick() handles the conflicted
2155 * commits itself instead of calling this function.
2157 return (opts
->action
== REPLAY_REVERT
&& isatty(0)) ? 1 : 0;
2161 static void refer_to_commit(struct replay_opts
*opts
,
2162 struct strbuf
*msgbuf
, struct commit
*commit
)
2164 if (opts
->commit_use_reference
) {
2165 struct pretty_print_context ctx
= {
2166 .abbrev
= DEFAULT_ABBREV
,
2167 .date_mode
.type
= DATE_SHORT
,
2169 repo_format_commit_message(the_repository
, commit
,
2170 "%h (%s, %ad)", msgbuf
, &ctx
);
2172 strbuf_addstr(msgbuf
, oid_to_hex(&commit
->object
.oid
));
2176 static int do_pick_commit(struct repository
*r
,
2177 struct todo_item
*item
,
2178 struct replay_opts
*opts
,
2179 int final_fixup
, int *check_todo
)
2181 unsigned int flags
= should_edit(opts
) ? EDIT_MSG
: 0;
2182 const char *msg_file
= should_edit(opts
) ? NULL
: git_path_merge_msg(r
);
2183 struct object_id head
;
2184 struct commit
*base
, *next
, *parent
;
2185 const char *base_label
, *next_label
;
2186 char *author
= NULL
;
2187 struct commit_message msg
= { NULL
, NULL
, NULL
, NULL
};
2188 struct strbuf msgbuf
= STRBUF_INIT
;
2189 int res
, unborn
= 0, reword
= 0, allow
, drop_commit
;
2190 enum todo_command command
= item
->command
;
2191 struct commit
*commit
= item
->commit
;
2193 if (opts
->no_commit
) {
2195 * We do not intend to commit immediately. We just want to
2196 * merge the differences in, so let's compute the tree
2197 * that represents the "current" state for the merge machinery
2200 if (write_index_as_tree(&head
, r
->index
, r
->index_file
, 0, NULL
))
2201 return error(_("your index file is unmerged."));
2203 unborn
= repo_get_oid(r
, "HEAD", &head
);
2204 /* Do we want to generate a root commit? */
2205 if (is_pick_or_similar(command
) && opts
->have_squash_onto
&&
2206 oideq(&head
, &opts
->squash_onto
)) {
2207 if (is_fixup(command
))
2208 return error(_("cannot fixup root commit"));
2209 flags
|= CREATE_ROOT_COMMIT
;
2212 oidcpy(&head
, the_hash_algo
->empty_tree
);
2213 if (index_differs_from(r
, unborn
? empty_tree_oid_hex() : "HEAD",
2215 return error_dirty_index(r
, opts
);
2217 discard_index(r
->index
);
2219 if (!commit
->parents
)
2221 else if (commit
->parents
->next
) {
2222 /* Reverting or cherry-picking a merge commit */
2224 struct commit_list
*p
;
2226 if (!opts
->mainline
)
2227 return error(_("commit %s is a merge but no -m option was given."),
2228 oid_to_hex(&commit
->object
.oid
));
2230 for (cnt
= 1, p
= commit
->parents
;
2231 cnt
!= opts
->mainline
&& p
;
2234 if (cnt
!= opts
->mainline
|| !p
)
2235 return error(_("commit %s does not have parent %d"),
2236 oid_to_hex(&commit
->object
.oid
), opts
->mainline
);
2238 } else if (1 < opts
->mainline
)
2240 * Non-first parent explicitly specified as mainline for
2243 return error(_("commit %s does not have parent %d"),
2244 oid_to_hex(&commit
->object
.oid
), opts
->mainline
);
2246 parent
= commit
->parents
->item
;
2248 if (get_message(commit
, &msg
) != 0)
2249 return error(_("cannot get commit message for %s"),
2250 oid_to_hex(&commit
->object
.oid
));
2252 if (opts
->allow_ff
&& !is_fixup(command
) &&
2253 ((parent
&& oideq(&parent
->object
.oid
, &head
)) ||
2254 (!parent
&& unborn
))) {
2255 if (is_rebase_i(opts
))
2256 write_author_script(msg
.message
);
2257 res
= fast_forward_to(r
, &commit
->object
.oid
, &head
, unborn
,
2259 if (res
|| command
!= TODO_REWORD
)
2263 goto fast_forward_edit
;
2265 if (parent
&& repo_parse_commit(r
, parent
) < 0)
2266 /* TRANSLATORS: The first %s will be a "todo" command like
2267 "revert" or "pick", the second %s a SHA1. */
2268 return error(_("%s: cannot parse parent commit %s"),
2269 command_to_string(command
),
2270 oid_to_hex(&parent
->object
.oid
));
2273 * "commit" is an existing commit. We would want to apply
2274 * the difference it introduces since its first parent "prev"
2275 * on top of the current HEAD if we are cherry-pick. Or the
2276 * reverse of it if we are revert.
2279 if (command
== TODO_REVERT
) {
2280 const char *orig_subject
;
2283 base_label
= msg
.label
;
2285 next_label
= msg
.parent_label
;
2286 if (opts
->commit_use_reference
) {
2287 strbuf_addstr(&msgbuf
,
2288 "# *** SAY WHY WE ARE REVERTING ON THE TITLE LINE ***");
2289 } else if (skip_prefix(msg
.subject
, "Revert \"", &orig_subject
) &&
2291 * We don't touch pre-existing repeated reverts, because
2292 * theoretically these can be nested arbitrarily deeply,
2293 * thus requiring excessive complexity to deal with.
2295 !starts_with(orig_subject
, "Revert \"")) {
2296 strbuf_addstr(&msgbuf
, "Reapply \"");
2297 strbuf_addstr(&msgbuf
, orig_subject
);
2299 strbuf_addstr(&msgbuf
, "Revert \"");
2300 strbuf_addstr(&msgbuf
, msg
.subject
);
2301 strbuf_addstr(&msgbuf
, "\"");
2303 strbuf_addstr(&msgbuf
, "\n\nThis reverts commit ");
2304 refer_to_commit(opts
, &msgbuf
, commit
);
2306 if (commit
->parents
&& commit
->parents
->next
) {
2307 strbuf_addstr(&msgbuf
, ", reversing\nchanges made to ");
2308 refer_to_commit(opts
, &msgbuf
, parent
);
2310 strbuf_addstr(&msgbuf
, ".\n");
2315 base_label
= msg
.parent_label
;
2317 next_label
= msg
.label
;
2319 /* Append the commit log message to msgbuf. */
2320 if (find_commit_subject(msg
.message
, &p
))
2321 strbuf_addstr(&msgbuf
, p
);
2323 if (opts
->record_origin
) {
2324 strbuf_complete_line(&msgbuf
);
2325 if (!has_conforming_footer(&msgbuf
, NULL
, 0))
2326 strbuf_addch(&msgbuf
, '\n');
2327 strbuf_addstr(&msgbuf
, cherry_picked_prefix
);
2328 strbuf_addstr(&msgbuf
, oid_to_hex(&commit
->object
.oid
));
2329 strbuf_addstr(&msgbuf
, ")\n");
2331 if (!is_fixup(command
))
2332 author
= get_author(msg
.message
);
2335 if (command
== TODO_REWORD
)
2337 else if (is_fixup(command
)) {
2338 if (update_squash_messages(r
, command
, commit
,
2339 opts
, item
->flags
)) {
2345 msg_file
= rebase_path_squash_msg();
2346 else if (file_exists(rebase_path_fixup_msg())) {
2347 flags
|= VERBATIM_MSG
;
2348 msg_file
= rebase_path_fixup_msg();
2350 const char *dest
= git_path_squash_msg(r
);
2352 if (copy_file(dest
, rebase_path_squash_msg(), 0666)) {
2353 res
= error(_("could not copy '%s' to '%s'"),
2354 rebase_path_squash_msg(), dest
);
2357 unlink(git_path_merge_msg(r
));
2363 if (opts
->signoff
&& !is_fixup(command
))
2364 append_signoff(&msgbuf
, 0, 0);
2366 if (is_rebase_i(opts
) && write_author_script(msg
.message
) < 0)
2368 else if (!opts
->strategy
||
2369 !strcmp(opts
->strategy
, "recursive") ||
2370 !strcmp(opts
->strategy
, "ort") ||
2371 command
== TODO_REVERT
) {
2372 res
= do_recursive_merge(r
, base
, next
, base_label
, next_label
,
2373 &head
, &msgbuf
, opts
);
2377 res
|= write_message(msgbuf
.buf
, msgbuf
.len
,
2378 git_path_merge_msg(r
), 0);
2380 struct commit_list
*common
= NULL
;
2381 struct commit_list
*remotes
= NULL
;
2383 res
= write_message(msgbuf
.buf
, msgbuf
.len
,
2384 git_path_merge_msg(r
), 0);
2386 commit_list_insert(base
, &common
);
2387 commit_list_insert(next
, &remotes
);
2388 res
|= try_merge_command(r
, opts
->strategy
,
2389 opts
->xopts
.nr
, opts
->xopts
.v
,
2390 common
, oid_to_hex(&head
), remotes
);
2391 free_commit_list(common
);
2392 free_commit_list(remotes
);
2396 * If the merge was clean or if it failed due to conflict, we write
2397 * CHERRY_PICK_HEAD for the subsequent invocation of commit to use.
2398 * However, if the merge did not even start, then we don't want to
2401 if ((command
== TODO_PICK
|| command
== TODO_REWORD
||
2402 command
== TODO_EDIT
) && !opts
->no_commit
&&
2403 (res
== 0 || res
== 1) &&
2404 update_ref(NULL
, "CHERRY_PICK_HEAD", &commit
->object
.oid
, NULL
,
2405 REF_NO_DEREF
, UPDATE_REFS_MSG_ON_ERR
))
2407 if (command
== TODO_REVERT
&& ((opts
->no_commit
&& res
== 0) || res
== 1) &&
2408 update_ref(NULL
, "REVERT_HEAD", &commit
->object
.oid
, NULL
,
2409 REF_NO_DEREF
, UPDATE_REFS_MSG_ON_ERR
))
2413 error(command
== TODO_REVERT
2414 ? _("could not revert %s... %s")
2415 : _("could not apply %s... %s"),
2416 short_commit_name(r
, commit
), msg
.subject
);
2417 print_advice(r
, res
== 1, opts
);
2418 repo_rerere(r
, opts
->allow_rerere_auto
);
2423 allow
= allow_empty(r
, opts
, commit
);
2427 } else if (allow
== 1) {
2428 flags
|= ALLOW_EMPTY
;
2429 } else if (allow
== 2) {
2431 refs_delete_ref(get_main_ref_store(r
), "", "CHERRY_PICK_HEAD",
2432 NULL
, REF_NO_DEREF
);
2433 unlink(git_path_merge_msg(r
));
2434 refs_delete_ref(get_main_ref_store(r
), "", "AUTO_MERGE",
2435 NULL
, REF_NO_DEREF
);
2437 _("dropping %s %s -- patch contents already upstream\n"),
2438 oid_to_hex(&commit
->object
.oid
), msg
.subject
);
2439 } /* else allow == 0 and there's nothing special to do */
2440 if (!opts
->no_commit
&& !drop_commit
) {
2441 if (author
|| command
== TODO_REVERT
|| (flags
& AMEND_MSG
))
2442 res
= do_commit(r
, msg_file
, author
, opts
, flags
,
2443 commit
? &commit
->object
.oid
: NULL
);
2445 res
= error(_("unable to parse commit author"));
2446 *check_todo
= !!(flags
& EDIT_MSG
);
2447 if (!res
&& reword
) {
2449 res
= run_git_commit(NULL
, opts
, EDIT_MSG
|
2450 VERIFY_MSG
| AMEND_MSG
|
2451 (flags
& ALLOW_EMPTY
));
2457 if (!res
&& final_fixup
) {
2458 unlink(rebase_path_fixup_msg());
2459 unlink(rebase_path_squash_msg());
2460 unlink(rebase_path_current_fixups());
2461 strbuf_reset(&opts
->current_fixups
);
2462 opts
->current_fixup_count
= 0;
2466 free_message(commit
, &msg
);
2468 strbuf_release(&msgbuf
);
2469 update_abort_safety_file();
2474 static int prepare_revs(struct replay_opts
*opts
)
2477 * picking (but not reverting) ranges (but not individual revisions)
2478 * should be done in reverse
2480 if (opts
->action
== REPLAY_PICK
&& !opts
->revs
->no_walk
)
2481 opts
->revs
->reverse
^= 1;
2483 if (prepare_revision_walk(opts
->revs
))
2484 return error(_("revision walk setup failed"));
2489 static int read_and_refresh_cache(struct repository
*r
,
2490 struct replay_opts
*opts
)
2492 struct lock_file index_lock
= LOCK_INIT
;
2493 int index_fd
= repo_hold_locked_index(r
, &index_lock
, 0);
2494 if (repo_read_index(r
) < 0) {
2495 rollback_lock_file(&index_lock
);
2496 return error(_("git %s: failed to read the index"),
2499 refresh_index(r
->index
, REFRESH_QUIET
|REFRESH_UNMERGED
, NULL
, NULL
, NULL
);
2501 if (index_fd
>= 0) {
2502 if (write_locked_index(r
->index
, &index_lock
,
2503 COMMIT_LOCK
| SKIP_IF_UNCHANGED
)) {
2504 return error(_("git %s: failed to refresh the index"),
2510 * If we are resolving merges in any way other than "ort", then
2511 * expand the sparse index.
2513 if (opts
->strategy
&& strcmp(opts
->strategy
, "ort"))
2514 ensure_full_index(r
->index
);
2518 void todo_list_release(struct todo_list
*todo_list
)
2520 strbuf_release(&todo_list
->buf
);
2521 FREE_AND_NULL(todo_list
->items
);
2522 todo_list
->nr
= todo_list
->alloc
= 0;
2525 static struct todo_item
*append_new_todo(struct todo_list
*todo_list
)
2527 ALLOC_GROW(todo_list
->items
, todo_list
->nr
+ 1, todo_list
->alloc
);
2528 return todo_list
->items
+ todo_list
->nr
++;
2531 const char *todo_item_get_arg(struct todo_list
*todo_list
,
2532 struct todo_item
*item
)
2534 return todo_list
->buf
.buf
+ item
->arg_offset
;
2537 static int is_command(enum todo_command command
, const char **bol
)
2539 const char *str
= todo_command_info
[command
].str
;
2540 const char nick
= todo_command_info
[command
].c
;
2541 const char *p
= *bol
;
2543 return (skip_prefix(p
, str
, &p
) || (nick
&& *p
++ == nick
)) &&
2544 (*p
== ' ' || *p
== '\t' || *p
== '\n' || *p
== '\r' || !*p
) &&
2548 static int check_label_or_ref_arg(enum todo_command command
, const char *arg
)
2553 * '#' is not a valid label as the merge command uses it to
2554 * separate merge parents from the commit subject.
2556 if (!strcmp(arg
, "#") ||
2557 check_refname_format(arg
, REFNAME_ALLOW_ONELEVEL
))
2558 return error(_("'%s' is not a valid label"), arg
);
2561 case TODO_UPDATE_REF
:
2562 if (check_refname_format(arg
, REFNAME_ALLOW_ONELEVEL
))
2563 return error(_("'%s' is not a valid refname"), arg
);
2564 if (check_refname_format(arg
, 0))
2565 return error(_("update-ref requires a fully qualified "
2566 "refname e.g. refs/heads/%s"), arg
);
2570 BUG("unexpected todo_command");
2576 static int parse_insn_line(struct repository
*r
, struct todo_item
*item
,
2577 const char *buf
, const char *bol
, char *eol
)
2579 struct object_id commit_oid
;
2580 char *end_of_object_name
;
2581 int i
, saved
, status
, padding
;
2586 bol
+= strspn(bol
, " \t");
2588 if (bol
== eol
|| *bol
== '\r' || starts_with_mem(bol
, eol
- bol
, comment_line_str
)) {
2589 item
->command
= TODO_COMMENT
;
2590 item
->commit
= NULL
;
2591 item
->arg_offset
= bol
- buf
;
2592 item
->arg_len
= eol
- bol
;
2596 for (i
= 0; i
< TODO_COMMENT
; i
++)
2597 if (is_command(i
, &bol
)) {
2601 if (i
>= TODO_COMMENT
)
2602 return error(_("invalid command '%.*s'"),
2603 (int)strcspn(bol
, " \t\r\n"), bol
);
2605 /* Eat up extra spaces/ tabs before object name */
2606 padding
= strspn(bol
, " \t");
2609 if (item
->command
== TODO_NOOP
|| item
->command
== TODO_BREAK
) {
2611 return error(_("%s does not accept arguments: '%s'"),
2612 command_to_string(item
->command
), bol
);
2613 item
->commit
= NULL
;
2614 item
->arg_offset
= bol
- buf
;
2615 item
->arg_len
= eol
- bol
;
2620 return error(_("missing arguments for %s"),
2621 command_to_string(item
->command
));
2623 if (item
->command
== TODO_EXEC
|| item
->command
== TODO_LABEL
||
2624 item
->command
== TODO_RESET
|| item
->command
== TODO_UPDATE_REF
) {
2627 item
->commit
= NULL
;
2628 item
->arg_offset
= bol
- buf
;
2629 item
->arg_len
= (int)(eol
- bol
);
2630 if (item
->command
== TODO_LABEL
||
2631 item
->command
== TODO_UPDATE_REF
) {
2634 ret
= check_label_or_ref_arg(item
->command
, bol
);
2640 if (item
->command
== TODO_FIXUP
) {
2641 if (skip_prefix(bol
, "-C", &bol
)) {
2642 bol
+= strspn(bol
, " \t");
2643 item
->flags
|= TODO_REPLACE_FIXUP_MSG
;
2644 } else if (skip_prefix(bol
, "-c", &bol
)) {
2645 bol
+= strspn(bol
, " \t");
2646 item
->flags
|= TODO_EDIT_FIXUP_MSG
;
2650 if (item
->command
== TODO_MERGE
) {
2651 if (skip_prefix(bol
, "-C", &bol
))
2652 bol
+= strspn(bol
, " \t");
2653 else if (skip_prefix(bol
, "-c", &bol
)) {
2654 bol
+= strspn(bol
, " \t");
2655 item
->flags
|= TODO_EDIT_MERGE_MSG
;
2657 item
->flags
|= TODO_EDIT_MERGE_MSG
;
2658 item
->commit
= NULL
;
2659 item
->arg_offset
= bol
- buf
;
2660 item
->arg_len
= (int)(eol
- bol
);
2665 end_of_object_name
= (char *) bol
+ strcspn(bol
, " \t\n");
2666 saved
= *end_of_object_name
;
2667 *end_of_object_name
= '\0';
2668 status
= repo_get_oid(r
, bol
, &commit_oid
);
2670 error(_("could not parse '%s'"), bol
); /* return later */
2671 *end_of_object_name
= saved
;
2673 bol
= end_of_object_name
+ strspn(end_of_object_name
, " \t");
2674 item
->arg_offset
= bol
- buf
;
2675 item
->arg_len
= (int)(eol
- bol
);
2680 item
->commit
= lookup_commit_reference(r
, &commit_oid
);
2681 return item
->commit
? 0 : -1;
2684 int sequencer_get_last_command(struct repository
*r UNUSED
, enum replay_action
*action
)
2686 const char *todo_file
, *bol
;
2687 struct strbuf buf
= STRBUF_INIT
;
2690 todo_file
= git_path_todo_file();
2691 if (strbuf_read_file(&buf
, todo_file
, 0) < 0) {
2692 if (errno
== ENOENT
|| errno
== ENOTDIR
)
2695 return error_errno("unable to open '%s'", todo_file
);
2697 bol
= buf
.buf
+ strspn(buf
.buf
, " \t\r\n");
2698 if (is_command(TODO_PICK
, &bol
) && (*bol
== ' ' || *bol
== '\t'))
2699 *action
= REPLAY_PICK
;
2700 else if (is_command(TODO_REVERT
, &bol
) &&
2701 (*bol
== ' ' || *bol
== '\t'))
2702 *action
= REPLAY_REVERT
;
2706 strbuf_release(&buf
);
2711 int todo_list_parse_insn_buffer(struct repository
*r
, char *buf
,
2712 struct todo_list
*todo_list
)
2714 struct todo_item
*item
;
2715 char *p
= buf
, *next_p
;
2716 int i
, res
= 0, fixup_okay
= file_exists(rebase_path_done());
2718 todo_list
->current
= todo_list
->nr
= todo_list
->total_nr
= 0;
2720 for (i
= 1; *p
; i
++, p
= next_p
) {
2721 char *eol
= strchrnul(p
, '\n');
2723 next_p
= *eol
? eol
+ 1 /* skip LF */ : eol
;
2725 if (p
!= eol
&& eol
[-1] == '\r')
2726 eol
--; /* strip Carriage Return */
2728 item
= append_new_todo(todo_list
);
2729 item
->offset_in_buf
= p
- todo_list
->buf
.buf
;
2730 if (parse_insn_line(r
, item
, buf
, p
, eol
)) {
2731 res
= error(_("invalid line %d: %.*s"),
2732 i
, (int)(eol
- p
), p
);
2733 item
->command
= TODO_COMMENT
+ 1;
2734 item
->arg_offset
= p
- buf
;
2735 item
->arg_len
= (int)(eol
- p
);
2736 item
->commit
= NULL
;
2739 if (item
->command
!= TODO_COMMENT
)
2740 todo_list
->total_nr
++;
2744 else if (is_fixup(item
->command
))
2745 res
= error(_("cannot '%s' without a previous commit"),
2746 command_to_string(item
->command
));
2747 else if (!is_noop(item
->command
))
2754 static int count_commands(struct todo_list
*todo_list
)
2758 for (i
= 0; i
< todo_list
->nr
; i
++)
2759 if (todo_list
->items
[i
].command
!= TODO_COMMENT
)
2765 static int get_item_line_offset(struct todo_list
*todo_list
, int index
)
2767 return index
< todo_list
->nr
?
2768 todo_list
->items
[index
].offset_in_buf
: todo_list
->buf
.len
;
2771 static const char *get_item_line(struct todo_list
*todo_list
, int index
)
2773 return todo_list
->buf
.buf
+ get_item_line_offset(todo_list
, index
);
2776 static int get_item_line_length(struct todo_list
*todo_list
, int index
)
2778 return get_item_line_offset(todo_list
, index
+ 1)
2779 - get_item_line_offset(todo_list
, index
);
2782 static ssize_t
strbuf_read_file_or_whine(struct strbuf
*sb
, const char *path
)
2787 fd
= open(path
, O_RDONLY
);
2789 return error_errno(_("could not open '%s'"), path
);
2790 len
= strbuf_read(sb
, fd
, 0);
2793 return error(_("could not read '%s'."), path
);
2797 static int have_finished_the_last_pick(void)
2799 struct strbuf buf
= STRBUF_INIT
;
2801 const char *todo_path
= git_path_todo_file();
2804 if (strbuf_read_file(&buf
, todo_path
, 0) < 0) {
2805 if (errno
== ENOENT
) {
2808 error_errno("unable to open '%s'", todo_path
);
2812 /* If there is only one line then we are done */
2813 eol
= strchr(buf
.buf
, '\n');
2814 if (!eol
|| !eol
[1])
2817 strbuf_release(&buf
);
2822 void sequencer_post_commit_cleanup(struct repository
*r
, int verbose
)
2824 struct replay_opts opts
= REPLAY_OPTS_INIT
;
2825 int need_cleanup
= 0;
2827 if (refs_ref_exists(get_main_ref_store(r
), "CHERRY_PICK_HEAD")) {
2828 if (!refs_delete_ref(get_main_ref_store(r
), "",
2829 "CHERRY_PICK_HEAD", NULL
, REF_NO_DEREF
) &&
2831 warning(_("cancelling a cherry picking in progress"));
2832 opts
.action
= REPLAY_PICK
;
2836 if (refs_ref_exists(get_main_ref_store(r
), "REVERT_HEAD")) {
2837 if (!refs_delete_ref(get_main_ref_store(r
), "", "REVERT_HEAD",
2838 NULL
, REF_NO_DEREF
) &&
2840 warning(_("cancelling a revert in progress"));
2841 opts
.action
= REPLAY_REVERT
;
2845 refs_delete_ref(get_main_ref_store(r
), "", "AUTO_MERGE",
2846 NULL
, REF_NO_DEREF
);
2851 if (!have_finished_the_last_pick())
2854 sequencer_remove_state(&opts
);
2857 static void todo_list_write_total_nr(struct todo_list
*todo_list
)
2859 FILE *f
= fopen_or_warn(rebase_path_msgtotal(), "w");
2862 fprintf(f
, "%d\n", todo_list
->total_nr
);
2867 static int read_populate_todo(struct repository
*r
,
2868 struct todo_list
*todo_list
,
2869 struct replay_opts
*opts
)
2871 const char *todo_file
= get_todo_path(opts
);
2874 strbuf_reset(&todo_list
->buf
);
2875 if (strbuf_read_file_or_whine(&todo_list
->buf
, todo_file
) < 0)
2878 res
= todo_list_parse_insn_buffer(r
, todo_list
->buf
.buf
, todo_list
);
2880 if (is_rebase_i(opts
))
2881 return error(_("please fix this using "
2882 "'git rebase --edit-todo'."));
2883 return error(_("unusable instruction sheet: '%s'"), todo_file
);
2886 if (!todo_list
->nr
&&
2887 (!is_rebase_i(opts
) || !file_exists(rebase_path_done())))
2888 return error(_("no commits parsed."));
2890 if (!is_rebase_i(opts
)) {
2891 enum todo_command valid
=
2892 opts
->action
== REPLAY_PICK
? TODO_PICK
: TODO_REVERT
;
2895 for (i
= 0; i
< todo_list
->nr
; i
++)
2896 if (valid
== todo_list
->items
[i
].command
)
2898 else if (valid
== TODO_PICK
)
2899 return error(_("cannot cherry-pick during a revert."));
2901 return error(_("cannot revert during a cherry-pick."));
2904 if (is_rebase_i(opts
)) {
2905 struct todo_list done
= TODO_LIST_INIT
;
2907 if (strbuf_read_file(&done
.buf
, rebase_path_done(), 0) > 0 &&
2908 !todo_list_parse_insn_buffer(r
, done
.buf
.buf
, &done
))
2909 todo_list
->done_nr
= count_commands(&done
);
2911 todo_list
->done_nr
= 0;
2913 todo_list
->total_nr
= todo_list
->done_nr
2914 + count_commands(todo_list
);
2915 todo_list_release(&done
);
2917 todo_list_write_total_nr(todo_list
);
2923 static int git_config_string_dup(char **dest
,
2924 const char *var
, const char *value
)
2927 return config_error_nonbool(var
);
2929 *dest
= xstrdup(value
);
2933 static int populate_opts_cb(const char *key
, const char *value
,
2934 const struct config_context
*ctx
,
2937 struct replay_opts
*opts
= data
;
2942 else if (!strcmp(key
, "options.no-commit"))
2943 opts
->no_commit
= git_config_bool_or_int(key
, value
, ctx
->kvi
, &error_flag
);
2944 else if (!strcmp(key
, "options.edit"))
2945 opts
->edit
= git_config_bool_or_int(key
, value
, ctx
->kvi
, &error_flag
);
2946 else if (!strcmp(key
, "options.allow-empty"))
2948 git_config_bool_or_int(key
, value
, ctx
->kvi
, &error_flag
);
2949 else if (!strcmp(key
, "options.allow-empty-message"))
2950 opts
->allow_empty_message
=
2951 git_config_bool_or_int(key
, value
, ctx
->kvi
, &error_flag
);
2952 else if (!strcmp(key
, "options.drop-redundant-commits"))
2953 opts
->drop_redundant_commits
=
2954 git_config_bool_or_int(key
, value
, ctx
->kvi
, &error_flag
);
2955 else if (!strcmp(key
, "options.keep-redundant-commits"))
2956 opts
->keep_redundant_commits
=
2957 git_config_bool_or_int(key
, value
, ctx
->kvi
, &error_flag
);
2958 else if (!strcmp(key
, "options.signoff"))
2959 opts
->signoff
= git_config_bool_or_int(key
, value
, ctx
->kvi
, &error_flag
);
2960 else if (!strcmp(key
, "options.record-origin"))
2961 opts
->record_origin
= git_config_bool_or_int(key
, value
, ctx
->kvi
, &error_flag
);
2962 else if (!strcmp(key
, "options.allow-ff"))
2963 opts
->allow_ff
= git_config_bool_or_int(key
, value
, ctx
->kvi
, &error_flag
);
2964 else if (!strcmp(key
, "options.mainline"))
2965 opts
->mainline
= git_config_int(key
, value
, ctx
->kvi
);
2966 else if (!strcmp(key
, "options.strategy"))
2967 git_config_string_dup(&opts
->strategy
, key
, value
);
2968 else if (!strcmp(key
, "options.gpg-sign"))
2969 git_config_string_dup(&opts
->gpg_sign
, key
, value
);
2970 else if (!strcmp(key
, "options.strategy-option")) {
2971 strvec_push(&opts
->xopts
, value
);
2972 } else if (!strcmp(key
, "options.allow-rerere-auto"))
2973 opts
->allow_rerere_auto
=
2974 git_config_bool_or_int(key
, value
, ctx
->kvi
, &error_flag
) ?
2975 RERERE_AUTOUPDATE
: RERERE_NOAUTOUPDATE
;
2976 else if (!strcmp(key
, "options.default-msg-cleanup")) {
2977 opts
->explicit_cleanup
= 1;
2978 opts
->default_msg_cleanup
= get_cleanup_mode(value
, 1);
2980 return error(_("invalid key: %s"), key
);
2983 return error(_("invalid value for '%s': '%s'"), key
, value
);
2988 static void parse_strategy_opts(struct replay_opts
*opts
, char *raw_opts
)
2993 char *strategy_opts_string
= raw_opts
;
2995 if (*strategy_opts_string
== ' ')
2996 strategy_opts_string
++;
2998 count
= split_cmdline(strategy_opts_string
, &argv
);
3000 BUG("could not split '%s': %s", strategy_opts_string
,
3001 split_cmdline_strerror(count
));
3002 for (i
= 0; i
< count
; i
++) {
3003 const char *arg
= argv
[i
];
3005 skip_prefix(arg
, "--", &arg
);
3006 strvec_push(&opts
->xopts
, arg
);
3011 static void read_strategy_opts(struct replay_opts
*opts
, struct strbuf
*buf
)
3014 if (!read_oneliner(buf
, rebase_path_strategy(), 0))
3016 opts
->strategy
= strbuf_detach(buf
, NULL
);
3017 if (!read_oneliner(buf
, rebase_path_strategy_opts(), 0))
3020 parse_strategy_opts(opts
, buf
->buf
);
3023 static int read_populate_opts(struct replay_opts
*opts
)
3025 if (is_rebase_i(opts
)) {
3026 struct strbuf buf
= STRBUF_INIT
;
3029 if (read_oneliner(&buf
, rebase_path_gpg_sign_opt(),
3030 READ_ONELINER_SKIP_IF_EMPTY
)) {
3031 if (!starts_with(buf
.buf
, "-S"))
3034 free(opts
->gpg_sign
);
3035 opts
->gpg_sign
= xstrdup(buf
.buf
+ 2);
3040 if (read_oneliner(&buf
, rebase_path_allow_rerere_autoupdate(),
3041 READ_ONELINER_SKIP_IF_EMPTY
)) {
3042 if (!strcmp(buf
.buf
, "--rerere-autoupdate"))
3043 opts
->allow_rerere_auto
= RERERE_AUTOUPDATE
;
3044 else if (!strcmp(buf
.buf
, "--no-rerere-autoupdate"))
3045 opts
->allow_rerere_auto
= RERERE_NOAUTOUPDATE
;
3049 if (file_exists(rebase_path_verbose()))
3052 if (file_exists(rebase_path_quiet()))
3055 if (file_exists(rebase_path_signoff())) {
3060 if (file_exists(rebase_path_cdate_is_adate())) {
3062 opts
->committer_date_is_author_date
= 1;
3065 if (file_exists(rebase_path_ignore_date())) {
3067 opts
->ignore_date
= 1;
3070 if (file_exists(rebase_path_reschedule_failed_exec()))
3071 opts
->reschedule_failed_exec
= 1;
3072 else if (file_exists(rebase_path_no_reschedule_failed_exec()))
3073 opts
->reschedule_failed_exec
= 0;
3075 if (file_exists(rebase_path_drop_redundant_commits()))
3076 opts
->drop_redundant_commits
= 1;
3078 if (file_exists(rebase_path_keep_redundant_commits()))
3079 opts
->keep_redundant_commits
= 1;
3081 read_strategy_opts(opts
, &buf
);
3084 if (read_oneliner(&opts
->current_fixups
,
3085 rebase_path_current_fixups(),
3086 READ_ONELINER_SKIP_IF_EMPTY
)) {
3087 const char *p
= opts
->current_fixups
.buf
;
3088 opts
->current_fixup_count
= 1;
3089 while ((p
= strchr(p
, '\n'))) {
3090 opts
->current_fixup_count
++;
3095 if (read_oneliner(&buf
, rebase_path_squash_onto(), 0)) {
3096 if (repo_get_oid_committish(the_repository
, buf
.buf
, &opts
->squash_onto
) < 0) {
3097 ret
= error(_("unusable squash-onto"));
3100 opts
->have_squash_onto
= 1;
3104 strbuf_release(&buf
);
3108 if (!file_exists(git_path_opts_file()))
3111 * The function git_parse_source(), called from git_config_from_file(),
3112 * may die() in case of a syntactically incorrect file. We do not care
3113 * about this case, though, because we wrote that file ourselves, so we
3114 * are pretty certain that it is syntactically correct.
3116 if (git_config_from_file(populate_opts_cb
, git_path_opts_file(), opts
) < 0)
3117 return error(_("malformed options sheet: '%s'"),
3118 git_path_opts_file());
3122 static void write_strategy_opts(struct replay_opts
*opts
)
3124 struct strbuf buf
= STRBUF_INIT
;
3127 * Quote strategy options so that they can be read correctly
3128 * by split_cmdline().
3130 quote_cmdline(&buf
, opts
->xopts
.v
);
3131 write_file(rebase_path_strategy_opts(), "%s\n", buf
.buf
);
3132 strbuf_release(&buf
);
3135 int write_basic_state(struct replay_opts
*opts
, const char *head_name
,
3136 struct commit
*onto
, const struct object_id
*orig_head
)
3139 write_file(rebase_path_head_name(), "%s\n", head_name
);
3141 write_file(rebase_path_onto(), "%s\n",
3142 oid_to_hex(&onto
->object
.oid
));
3144 write_file(rebase_path_orig_head(), "%s\n",
3145 oid_to_hex(orig_head
));
3148 write_file(rebase_path_quiet(), "%s", "");
3150 write_file(rebase_path_verbose(), "%s", "");
3152 write_file(rebase_path_strategy(), "%s\n", opts
->strategy
);
3153 if (opts
->xopts
.nr
> 0)
3154 write_strategy_opts(opts
);
3156 if (opts
->allow_rerere_auto
== RERERE_AUTOUPDATE
)
3157 write_file(rebase_path_allow_rerere_autoupdate(), "--rerere-autoupdate\n");
3158 else if (opts
->allow_rerere_auto
== RERERE_NOAUTOUPDATE
)
3159 write_file(rebase_path_allow_rerere_autoupdate(), "--no-rerere-autoupdate\n");
3162 write_file(rebase_path_gpg_sign_opt(), "-S%s\n", opts
->gpg_sign
);
3164 write_file(rebase_path_signoff(), "--signoff\n");
3165 if (opts
->drop_redundant_commits
)
3166 write_file(rebase_path_drop_redundant_commits(), "%s", "");
3167 if (opts
->keep_redundant_commits
)
3168 write_file(rebase_path_keep_redundant_commits(), "%s", "");
3169 if (opts
->committer_date_is_author_date
)
3170 write_file(rebase_path_cdate_is_adate(), "%s", "");
3171 if (opts
->ignore_date
)
3172 write_file(rebase_path_ignore_date(), "%s", "");
3173 if (opts
->reschedule_failed_exec
)
3174 write_file(rebase_path_reschedule_failed_exec(), "%s", "");
3176 write_file(rebase_path_no_reschedule_failed_exec(), "%s", "");
3181 static int walk_revs_populate_todo(struct todo_list
*todo_list
,
3182 struct replay_opts
*opts
)
3184 enum todo_command command
= opts
->action
== REPLAY_PICK
?
3185 TODO_PICK
: TODO_REVERT
;
3186 const char *command_string
= todo_command_info
[command
].str
;
3187 const char *encoding
;
3188 struct commit
*commit
;
3190 if (prepare_revs(opts
))
3193 encoding
= get_log_output_encoding();
3195 while ((commit
= get_revision(opts
->revs
))) {
3196 struct todo_item
*item
= append_new_todo(todo_list
);
3197 const char *commit_buffer
= repo_logmsg_reencode(the_repository
,
3200 const char *subject
;
3203 item
->command
= command
;
3204 item
->commit
= commit
;
3205 item
->arg_offset
= 0;
3207 item
->offset_in_buf
= todo_list
->buf
.len
;
3208 subject_len
= find_commit_subject(commit_buffer
, &subject
);
3209 strbuf_addf(&todo_list
->buf
, "%s %s %.*s\n", command_string
,
3210 short_commit_name(the_repository
, commit
),
3211 subject_len
, subject
);
3212 repo_unuse_commit_buffer(the_repository
, commit
,
3217 return error(_("empty commit set passed"));
3222 static int create_seq_dir(struct repository
*r
)
3224 enum replay_action action
;
3225 const char *in_progress_error
= NULL
;
3226 const char *in_progress_advice
= NULL
;
3227 unsigned int advise_skip
=
3228 refs_ref_exists(get_main_ref_store(r
), "REVERT_HEAD") ||
3229 refs_ref_exists(get_main_ref_store(r
), "CHERRY_PICK_HEAD");
3231 if (!sequencer_get_last_command(r
, &action
)) {
3234 in_progress_error
= _("revert is already in progress");
3235 in_progress_advice
=
3236 _("try \"git revert (--continue | %s--abort | --quit)\"");
3239 in_progress_error
= _("cherry-pick is already in progress");
3240 in_progress_advice
=
3241 _("try \"git cherry-pick (--continue | %s--abort | --quit)\"");
3244 BUG("unexpected action in create_seq_dir");
3247 if (in_progress_error
) {
3248 error("%s", in_progress_error
);
3249 if (advice_enabled(ADVICE_SEQUENCER_IN_USE
))
3250 advise(in_progress_advice
,
3251 advise_skip
? "--skip | " : "");
3254 if (mkdir(git_path_seq_dir(), 0777) < 0)
3255 return error_errno(_("could not create sequencer directory '%s'"),
3256 git_path_seq_dir());
3261 static int save_head(const char *head
)
3263 return write_message(head
, strlen(head
), git_path_head_file(), 1);
3266 static int rollback_is_safe(void)
3268 struct strbuf sb
= STRBUF_INIT
;
3269 struct object_id expected_head
, actual_head
;
3271 if (strbuf_read_file(&sb
, git_path_abort_safety_file(), 0) >= 0) {
3273 if (get_oid_hex(sb
.buf
, &expected_head
)) {
3274 strbuf_release(&sb
);
3275 die(_("could not parse %s"), git_path_abort_safety_file());
3277 strbuf_release(&sb
);
3279 else if (errno
== ENOENT
)
3280 oidclr(&expected_head
);
3282 die_errno(_("could not read '%s'"), git_path_abort_safety_file());
3284 if (repo_get_oid(the_repository
, "HEAD", &actual_head
))
3285 oidclr(&actual_head
);
3287 return oideq(&actual_head
, &expected_head
);
3290 static int reset_merge(const struct object_id
*oid
)
3292 struct child_process cmd
= CHILD_PROCESS_INIT
;
3295 strvec_pushl(&cmd
.args
, "reset", "--merge", NULL
);
3297 if (!is_null_oid(oid
))
3298 strvec_push(&cmd
.args
, oid_to_hex(oid
));
3300 return run_command(&cmd
);
3303 static int rollback_single_pick(struct repository
*r
)
3305 struct object_id head_oid
;
3307 if (!refs_ref_exists(get_main_ref_store(r
), "CHERRY_PICK_HEAD") &&
3308 !refs_ref_exists(get_main_ref_store(r
), "REVERT_HEAD"))
3309 return error(_("no cherry-pick or revert in progress"));
3310 if (read_ref_full("HEAD", 0, &head_oid
, NULL
))
3311 return error(_("cannot resolve HEAD"));
3312 if (is_null_oid(&head_oid
))
3313 return error(_("cannot abort from a branch yet to be born"));
3314 return reset_merge(&head_oid
);
3317 static int skip_single_pick(void)
3319 struct object_id head
;
3321 if (read_ref_full("HEAD", 0, &head
, NULL
))
3322 return error(_("cannot resolve HEAD"));
3323 return reset_merge(&head
);
3326 int sequencer_rollback(struct repository
*r
, struct replay_opts
*opts
)
3329 struct object_id oid
;
3330 struct strbuf buf
= STRBUF_INIT
;
3333 f
= fopen(git_path_head_file(), "r");
3334 if (!f
&& errno
== ENOENT
) {
3336 * There is no multiple-cherry-pick in progress.
3337 * If CHERRY_PICK_HEAD or REVERT_HEAD indicates
3338 * a single-cherry-pick in progress, abort that.
3340 return rollback_single_pick(r
);
3343 return error_errno(_("cannot open '%s'"), git_path_head_file());
3344 if (strbuf_getline_lf(&buf
, f
)) {
3345 error(_("cannot read '%s': %s"), git_path_head_file(),
3346 ferror(f
) ? strerror(errno
) : _("unexpected end of file"));
3351 if (parse_oid_hex(buf
.buf
, &oid
, &p
) || *p
!= '\0') {
3352 error(_("stored pre-cherry-pick HEAD file '%s' is corrupt"),
3353 git_path_head_file());
3356 if (is_null_oid(&oid
)) {
3357 error(_("cannot abort from a branch yet to be born"));
3361 if (!rollback_is_safe()) {
3362 /* Do not error, just do not rollback */
3363 warning(_("You seem to have moved HEAD. "
3364 "Not rewinding, check your HEAD!"));
3366 if (reset_merge(&oid
))
3368 strbuf_release(&buf
);
3369 return sequencer_remove_state(opts
);
3371 strbuf_release(&buf
);
3375 int sequencer_skip(struct repository
*r
, struct replay_opts
*opts
)
3377 enum replay_action action
= -1;
3378 sequencer_get_last_command(r
, &action
);
3381 * Check whether the subcommand requested to skip the commit is actually
3382 * in progress and that it's safe to skip the commit.
3384 * opts->action tells us which subcommand requested to skip the commit.
3385 * If the corresponding .git/<ACTION>_HEAD exists, we know that the
3386 * action is in progress and we can skip the commit.
3388 * Otherwise we check that the last instruction was related to the
3389 * particular subcommand we're trying to execute and barf if that's not
3392 * Finally we check that the rollback is "safe", i.e., has the HEAD
3393 * moved? In this case, it doesn't make sense to "reset the merge" and
3394 * "skip the commit" as the user already handled this by committing. But
3395 * we'd not want to barf here, instead give advice on how to proceed. We
3396 * only need to check that when .git/<ACTION>_HEAD doesn't exist because
3397 * it gets removed when the user commits, so if it still exists we're
3398 * sure the user can't have committed before.
3400 switch (opts
->action
) {
3402 if (!refs_ref_exists(get_main_ref_store(r
), "REVERT_HEAD")) {
3403 if (action
!= REPLAY_REVERT
)
3404 return error(_("no revert in progress"));
3405 if (!rollback_is_safe())
3410 if (!refs_ref_exists(get_main_ref_store(r
),
3411 "CHERRY_PICK_HEAD")) {
3412 if (action
!= REPLAY_PICK
)
3413 return error(_("no cherry-pick in progress"));
3414 if (!rollback_is_safe())
3419 BUG("unexpected action in sequencer_skip");
3422 if (skip_single_pick())
3423 return error(_("failed to skip the commit"));
3424 if (!is_directory(git_path_seq_dir()))
3427 return sequencer_continue(r
, opts
);
3430 error(_("there is nothing to skip"));
3432 if (advice_enabled(ADVICE_RESOLVE_CONFLICT
)) {
3433 advise(_("have you committed already?\n"
3434 "try \"git %s --continue\""),
3435 action
== REPLAY_REVERT
? "revert" : "cherry-pick");
3440 static int save_todo(struct todo_list
*todo_list
, struct replay_opts
*opts
,
3443 struct lock_file todo_lock
= LOCK_INIT
;
3444 const char *todo_path
= get_todo_path(opts
);
3445 int next
= todo_list
->current
, offset
, fd
;
3448 * rebase -i writes "git-rebase-todo" without the currently executing
3449 * command, appending it to "done" instead.
3451 if (is_rebase_i(opts
) && !reschedule
)
3454 fd
= hold_lock_file_for_update(&todo_lock
, todo_path
, 0);
3456 return error_errno(_("could not lock '%s'"), todo_path
);
3457 offset
= get_item_line_offset(todo_list
, next
);
3458 if (write_in_full(fd
, todo_list
->buf
.buf
+ offset
,
3459 todo_list
->buf
.len
- offset
) < 0)
3460 return error_errno(_("could not write to '%s'"), todo_path
);
3461 if (commit_lock_file(&todo_lock
) < 0)
3462 return error(_("failed to finalize '%s'"), todo_path
);
3464 if (is_rebase_i(opts
) && !reschedule
&& next
> 0) {
3465 const char *done
= rebase_path_done();
3466 int fd
= open(done
, O_CREAT
| O_WRONLY
| O_APPEND
, 0666);
3471 if (write_in_full(fd
, get_item_line(todo_list
, next
- 1),
3472 get_item_line_length(todo_list
, next
- 1))
3474 ret
= error_errno(_("could not write to '%s'"), done
);
3476 ret
= error_errno(_("failed to finalize '%s'"), done
);
3482 static int save_opts(struct replay_opts
*opts
)
3484 const char *opts_file
= git_path_opts_file();
3487 if (opts
->no_commit
)
3488 res
|= git_config_set_in_file_gently(opts_file
,
3489 "options.no-commit", NULL
, "true");
3490 if (opts
->edit
>= 0)
3491 res
|= git_config_set_in_file_gently(opts_file
, "options.edit", NULL
,
3492 opts
->edit
? "true" : "false");
3493 if (opts
->allow_empty
)
3494 res
|= git_config_set_in_file_gently(opts_file
,
3495 "options.allow-empty", NULL
, "true");
3496 if (opts
->allow_empty_message
)
3497 res
|= git_config_set_in_file_gently(opts_file
,
3498 "options.allow-empty-message", NULL
, "true");
3499 if (opts
->drop_redundant_commits
)
3500 res
|= git_config_set_in_file_gently(opts_file
,
3501 "options.drop-redundant-commits", NULL
, "true");
3502 if (opts
->keep_redundant_commits
)
3503 res
|= git_config_set_in_file_gently(opts_file
,
3504 "options.keep-redundant-commits", NULL
, "true");
3506 res
|= git_config_set_in_file_gently(opts_file
,
3507 "options.signoff", NULL
, "true");
3508 if (opts
->record_origin
)
3509 res
|= git_config_set_in_file_gently(opts_file
,
3510 "options.record-origin", NULL
, "true");
3512 res
|= git_config_set_in_file_gently(opts_file
,
3513 "options.allow-ff", NULL
, "true");
3514 if (opts
->mainline
) {
3515 struct strbuf buf
= STRBUF_INIT
;
3516 strbuf_addf(&buf
, "%d", opts
->mainline
);
3517 res
|= git_config_set_in_file_gently(opts_file
,
3518 "options.mainline", NULL
, buf
.buf
);
3519 strbuf_release(&buf
);
3522 res
|= git_config_set_in_file_gently(opts_file
,
3523 "options.strategy", NULL
, opts
->strategy
);
3525 res
|= git_config_set_in_file_gently(opts_file
,
3526 "options.gpg-sign", NULL
, opts
->gpg_sign
);
3527 for (size_t i
= 0; i
< opts
->xopts
.nr
; i
++)
3528 res
|= git_config_set_multivar_in_file_gently(opts_file
,
3529 "options.strategy-option",
3530 opts
->xopts
.v
[i
], "^$", NULL
, 0);
3531 if (opts
->allow_rerere_auto
)
3532 res
|= git_config_set_in_file_gently(opts_file
,
3533 "options.allow-rerere-auto", NULL
,
3534 opts
->allow_rerere_auto
== RERERE_AUTOUPDATE
?
3537 if (opts
->explicit_cleanup
)
3538 res
|= git_config_set_in_file_gently(opts_file
,
3539 "options.default-msg-cleanup", NULL
,
3540 describe_cleanup_mode(opts
->default_msg_cleanup
));
3544 static int make_patch(struct repository
*r
,
3545 struct commit
*commit
,
3546 struct replay_opts
*opts
)
3548 struct rev_info log_tree_opt
;
3549 const char *subject
;
3550 char hex
[GIT_MAX_HEXSZ
+ 1];
3553 if (!is_rebase_i(opts
))
3554 BUG("make_patch should only be called when rebasing");
3556 oid_to_hex_r(hex
, &commit
->object
.oid
);
3557 if (write_message(hex
, strlen(hex
), rebase_path_stopped_sha(), 1) < 0)
3559 res
|= write_rebase_head(&commit
->object
.oid
);
3561 memset(&log_tree_opt
, 0, sizeof(log_tree_opt
));
3562 repo_init_revisions(r
, &log_tree_opt
, NULL
);
3563 log_tree_opt
.abbrev
= 0;
3564 log_tree_opt
.diff
= 1;
3565 log_tree_opt
.diffopt
.output_format
= DIFF_FORMAT_PATCH
;
3566 log_tree_opt
.disable_stdin
= 1;
3567 log_tree_opt
.no_commit_id
= 1;
3568 log_tree_opt
.diffopt
.file
= fopen(rebase_path_patch(), "w");
3569 log_tree_opt
.diffopt
.use_color
= GIT_COLOR_NEVER
;
3570 if (!log_tree_opt
.diffopt
.file
)
3571 res
|= error_errno(_("could not open '%s'"),
3572 rebase_path_patch());
3574 res
|= log_tree_commit(&log_tree_opt
, commit
);
3575 fclose(log_tree_opt
.diffopt
.file
);
3578 if (!file_exists(rebase_path_message())) {
3579 const char *encoding
= get_commit_output_encoding();
3580 const char *commit_buffer
= repo_logmsg_reencode(r
,
3583 find_commit_subject(commit_buffer
, &subject
);
3584 res
|= write_message(subject
, strlen(subject
), rebase_path_message(), 1);
3585 repo_unuse_commit_buffer(r
, commit
,
3588 release_revisions(&log_tree_opt
);
3593 static int intend_to_amend(void)
3595 struct object_id head
;
3598 if (repo_get_oid(the_repository
, "HEAD", &head
))
3599 return error(_("cannot read HEAD"));
3601 p
= oid_to_hex(&head
);
3602 return write_message(p
, strlen(p
), rebase_path_amend(), 1);
3605 static int error_with_patch(struct repository
*r
,
3606 struct commit
*commit
,
3607 const char *subject
, int subject_len
,
3608 struct replay_opts
*opts
,
3609 int exit_code
, int to_amend
)
3612 if (make_patch(r
, commit
, opts
))
3614 } else if (copy_file(rebase_path_message(),
3615 git_path_merge_msg(r
), 0666))
3616 return error(_("unable to copy '%s' to '%s'"),
3617 git_path_merge_msg(r
), rebase_path_message());
3620 if (intend_to_amend())
3624 _("You can amend the commit now, with\n"
3626 " git commit --amend %s\n"
3628 "Once you are satisfied with your changes, run\n"
3630 " git rebase --continue\n"),
3631 gpg_sign_opt_quoted(opts
));
3632 } else if (exit_code
) {
3634 fprintf_ln(stderr
, _("Could not apply %s... %.*s"),
3635 short_commit_name(r
, commit
), subject_len
, subject
);
3638 * We don't have the hash of the parent so
3639 * just print the line from the todo file.
3641 fprintf_ln(stderr
, _("Could not merge %.*s"),
3642 subject_len
, subject
);
3648 static int error_failed_squash(struct repository
*r
,
3649 struct commit
*commit
,
3650 struct replay_opts
*opts
,
3652 const char *subject
)
3654 if (copy_file(rebase_path_message(), rebase_path_squash_msg(), 0666))
3655 return error(_("could not copy '%s' to '%s'"),
3656 rebase_path_squash_msg(), rebase_path_message());
3657 unlink(git_path_merge_msg(r
));
3658 if (copy_file(git_path_merge_msg(r
), rebase_path_message(), 0666))
3659 return error(_("could not copy '%s' to '%s'"),
3660 rebase_path_message(),
3661 git_path_merge_msg(r
));
3662 return error_with_patch(r
, commit
, subject
, subject_len
, opts
, 1, 0);
3665 static int do_exec(struct repository
*r
, const char *command_line
)
3667 struct child_process cmd
= CHILD_PROCESS_INIT
;
3670 fprintf(stderr
, _("Executing: %s\n"), command_line
);
3672 strvec_push(&cmd
.args
, command_line
);
3673 strvec_push(&cmd
.env
, "GIT_CHERRY_PICK_HELP");
3674 status
= run_command(&cmd
);
3676 /* force re-reading of the cache */
3677 discard_index(r
->index
);
3678 if (repo_read_index(r
) < 0)
3679 return error(_("could not read index"));
3681 dirty
= require_clean_work_tree(r
, "rebase", NULL
, 1, 1);
3684 warning(_("execution failed: %s\n%s"
3685 "You can fix the problem, and then run\n"
3687 " git rebase --continue\n"
3690 dirty
? _("and made changes to the index and/or the "
3691 "working tree.\n") : "");
3693 /* command not found */
3696 warning(_("execution succeeded: %s\nbut "
3697 "left changes to the index and/or the working tree.\n"
3698 "Commit or stash your changes, and then run\n"
3700 " git rebase --continue\n"
3701 "\n"), command_line
);
3708 __attribute__((format (printf
, 2, 3)))
3709 static int safe_append(const char *filename
, const char *fmt
, ...)
3712 struct lock_file lock
= LOCK_INIT
;
3713 int fd
= hold_lock_file_for_update(&lock
, filename
,
3714 LOCK_REPORT_ON_ERROR
);
3715 struct strbuf buf
= STRBUF_INIT
;
3720 if (strbuf_read_file(&buf
, filename
, 0) < 0 && errno
!= ENOENT
) {
3721 error_errno(_("could not read '%s'"), filename
);
3722 rollback_lock_file(&lock
);
3725 strbuf_complete(&buf
, '\n');
3727 strbuf_vaddf(&buf
, fmt
, ap
);
3730 if (write_in_full(fd
, buf
.buf
, buf
.len
) < 0) {
3731 error_errno(_("could not write to '%s'"), filename
);
3732 strbuf_release(&buf
);
3733 rollback_lock_file(&lock
);
3736 if (commit_lock_file(&lock
) < 0) {
3737 strbuf_release(&buf
);
3738 return error(_("failed to finalize '%s'"), filename
);
3741 strbuf_release(&buf
);
3745 static int do_label(struct repository
*r
, const char *name
, int len
)
3747 struct ref_store
*refs
= get_main_ref_store(r
);
3748 struct ref_transaction
*transaction
;
3749 struct strbuf ref_name
= STRBUF_INIT
, err
= STRBUF_INIT
;
3750 struct strbuf msg
= STRBUF_INIT
;
3752 struct object_id head_oid
;
3754 if (len
== 1 && *name
== '#')
3755 return error(_("illegal label name: '%.*s'"), len
, name
);
3757 strbuf_addf(&ref_name
, "refs/rewritten/%.*s", len
, name
);
3758 strbuf_addf(&msg
, "rebase (label) '%.*s'", len
, name
);
3760 transaction
= ref_store_transaction_begin(refs
, &err
);
3762 error("%s", err
.buf
);
3764 } else if (repo_get_oid(r
, "HEAD", &head_oid
)) {
3765 error(_("could not read HEAD"));
3767 } else if (ref_transaction_update(transaction
, ref_name
.buf
, &head_oid
,
3768 NULL
, 0, msg
.buf
, &err
) < 0 ||
3769 ref_transaction_commit(transaction
, &err
)) {
3770 error("%s", err
.buf
);
3773 ref_transaction_free(transaction
);
3774 strbuf_release(&err
);
3775 strbuf_release(&msg
);
3778 ret
= safe_append(rebase_path_refs_to_delete(),
3779 "%s\n", ref_name
.buf
);
3780 strbuf_release(&ref_name
);
3785 static const char *sequencer_reflog_action(struct replay_opts
*opts
)
3787 if (!opts
->reflog_action
) {
3788 opts
->reflog_action
= getenv(GIT_REFLOG_ACTION
);
3789 opts
->reflog_action
=
3790 xstrdup(opts
->reflog_action
? opts
->reflog_action
3791 : action_name(opts
));
3794 return opts
->reflog_action
;
3797 __attribute__((format (printf
, 3, 4)))
3798 static const char *reflog_message(struct replay_opts
*opts
,
3799 const char *sub_action
, const char *fmt
, ...)
3802 static struct strbuf buf
= STRBUF_INIT
;
3806 strbuf_addstr(&buf
, sequencer_reflog_action(opts
));
3808 strbuf_addf(&buf
, " (%s)", sub_action
);
3810 strbuf_addstr(&buf
, ": ");
3811 strbuf_vaddf(&buf
, fmt
, ap
);
3818 static struct commit
*lookup_label(struct repository
*r
, const char *label
,
3819 int len
, struct strbuf
*buf
)
3821 struct commit
*commit
;
3822 struct object_id oid
;
3825 strbuf_addf(buf
, "refs/rewritten/%.*s", len
, label
);
3826 if (!read_ref(buf
->buf
, &oid
)) {
3827 commit
= lookup_commit_object(r
, &oid
);
3829 /* fall back to non-rewritten ref or commit */
3830 strbuf_splice(buf
, 0, strlen("refs/rewritten/"), "", 0);
3831 commit
= lookup_commit_reference_by_name(buf
->buf
);
3835 error(_("could not resolve '%s'"), buf
->buf
);
3840 static int do_reset(struct repository
*r
,
3841 const char *name
, int len
,
3842 struct replay_opts
*opts
)
3844 struct strbuf ref_name
= STRBUF_INIT
;
3845 struct object_id oid
;
3846 struct lock_file lock
= LOCK_INIT
;
3847 struct tree_desc desc
= { 0 };
3849 struct unpack_trees_options unpack_tree_opts
= { 0 };
3852 if (repo_hold_locked_index(r
, &lock
, LOCK_REPORT_ON_ERROR
) < 0)
3855 if (len
== 10 && !strncmp("[new root]", name
, len
)) {
3856 if (!opts
->have_squash_onto
) {
3858 if (commit_tree("", 0, the_hash_algo
->empty_tree
,
3859 NULL
, &opts
->squash_onto
,
3861 return error(_("writing fake root commit"));
3862 opts
->have_squash_onto
= 1;
3863 hex
= oid_to_hex(&opts
->squash_onto
);
3864 if (write_message(hex
, strlen(hex
),
3865 rebase_path_squash_onto(), 0))
3866 return error(_("writing squash-onto"));
3868 oidcpy(&oid
, &opts
->squash_onto
);
3871 struct commit
*commit
;
3873 /* Determine the length of the label */
3874 for (i
= 0; i
< len
; i
++)
3875 if (isspace(name
[i
]))
3879 commit
= lookup_label(r
, name
, len
, &ref_name
);
3884 oid
= commit
->object
.oid
;
3887 setup_unpack_trees_porcelain(&unpack_tree_opts
, "reset");
3888 unpack_tree_opts
.head_idx
= 1;
3889 unpack_tree_opts
.src_index
= r
->index
;
3890 unpack_tree_opts
.dst_index
= r
->index
;
3891 unpack_tree_opts
.fn
= oneway_merge
;
3892 unpack_tree_opts
.merge
= 1;
3893 unpack_tree_opts
.update
= 1;
3894 unpack_tree_opts
.preserve_ignored
= 0; /* FIXME: !overwrite_ignore */
3895 unpack_tree_opts
.skip_cache_tree_update
= 1;
3896 init_checkout_metadata(&unpack_tree_opts
.meta
, name
, &oid
, NULL
);
3898 if (repo_read_index_unmerged(r
)) {
3899 ret
= error_resolve_conflict(action_name(opts
));
3903 if (!fill_tree_descriptor(r
, &desc
, &oid
)) {
3904 ret
= error(_("failed to find tree of %s"), oid_to_hex(&oid
));
3908 if (unpack_trees(1, &desc
, &unpack_tree_opts
)) {
3913 tree
= parse_tree_indirect(&oid
);
3915 return error(_("unable to read tree (%s)"), oid_to_hex(&oid
));
3916 prime_cache_tree(r
, r
->index
, tree
);
3918 if (write_locked_index(r
->index
, &lock
, COMMIT_LOCK
) < 0)
3919 ret
= error(_("could not write index"));
3922 ret
= update_ref(reflog_message(opts
, "reset", "'%.*s'",
3923 len
, name
), "HEAD", &oid
,
3924 NULL
, 0, UPDATE_REFS_MSG_ON_ERR
);
3926 free((void *)desc
.buffer
);
3928 rollback_lock_file(&lock
);
3929 strbuf_release(&ref_name
);
3930 clear_unpack_trees_porcelain(&unpack_tree_opts
);
3934 static int do_merge(struct repository
*r
,
3935 struct commit
*commit
,
3936 const char *arg
, int arg_len
,
3937 int flags
, int *check_todo
, struct replay_opts
*opts
)
3939 int run_commit_flags
= 0;
3940 struct strbuf ref_name
= STRBUF_INIT
;
3941 struct commit
*head_commit
, *merge_commit
, *i
;
3942 struct commit_list
*bases
= NULL
, *j
;
3943 struct commit_list
*to_merge
= NULL
, **tail
= &to_merge
;
3944 const char *strategy
= !opts
->xopts
.nr
&&
3946 !strcmp(opts
->strategy
, "recursive") ||
3947 !strcmp(opts
->strategy
, "ort")) ?
3948 NULL
: opts
->strategy
;
3949 struct merge_options o
;
3950 int merge_arg_len
, oneline_offset
, can_fast_forward
, ret
, k
;
3951 static struct lock_file lock
;
3954 if (repo_hold_locked_index(r
, &lock
, LOCK_REPORT_ON_ERROR
) < 0) {
3959 head_commit
= lookup_commit_reference_by_name("HEAD");
3961 ret
= error(_("cannot merge without a current revision"));
3966 * For octopus merges, the arg starts with the list of revisions to be
3967 * merged. The list is optionally followed by '#' and the oneline.
3969 merge_arg_len
= oneline_offset
= arg_len
;
3970 for (p
= arg
; p
- arg
< arg_len
; p
+= strspn(p
, " \t\n")) {
3973 if (*p
== '#' && (!p
[1] || isspace(p
[1]))) {
3974 p
+= 1 + strspn(p
+ 1, " \t\n");
3975 oneline_offset
= p
- arg
;
3978 k
= strcspn(p
, " \t\n");
3981 merge_commit
= lookup_label(r
, p
, k
, &ref_name
);
3982 if (!merge_commit
) {
3983 ret
= error(_("unable to parse '%.*s'"), k
, p
);
3986 tail
= &commit_list_insert(merge_commit
, tail
)->next
;
3988 merge_arg_len
= p
- arg
;
3992 ret
= error(_("nothing to merge: '%.*s'"), arg_len
, arg
);
3996 if (opts
->have_squash_onto
&&
3997 oideq(&head_commit
->object
.oid
, &opts
->squash_onto
)) {
3999 * When the user tells us to "merge" something into a
4000 * "[new root]", let's simply fast-forward to the merge head.
4002 rollback_lock_file(&lock
);
4004 ret
= error(_("octopus merge cannot be executed on "
4005 "top of a [new root]"));
4007 ret
= fast_forward_to(r
, &to_merge
->item
->object
.oid
,
4008 &head_commit
->object
.oid
, 0,
4014 * If HEAD is not identical to the first parent of the original merge
4015 * commit, we cannot fast-forward.
4017 can_fast_forward
= opts
->allow_ff
&& commit
&& commit
->parents
&&
4018 oideq(&commit
->parents
->item
->object
.oid
,
4019 &head_commit
->object
.oid
);
4022 * If any merge head is different from the original one, we cannot
4025 if (can_fast_forward
) {
4026 struct commit_list
*p
= commit
->parents
->next
;
4028 for (j
= to_merge
; j
&& p
; j
= j
->next
, p
= p
->next
)
4029 if (!oideq(&j
->item
->object
.oid
,
4030 &p
->item
->object
.oid
)) {
4031 can_fast_forward
= 0;
4035 * If the number of merge heads differs from the original merge
4036 * commit, we cannot fast-forward.
4039 can_fast_forward
= 0;
4042 if (can_fast_forward
) {
4043 rollback_lock_file(&lock
);
4044 ret
= fast_forward_to(r
, &commit
->object
.oid
,
4045 &head_commit
->object
.oid
, 0, opts
);
4046 if (flags
& TODO_EDIT_MERGE_MSG
)
4047 goto fast_forward_edit
;
4053 const char *encoding
= get_commit_output_encoding();
4054 const char *message
= repo_logmsg_reencode(r
, commit
, NULL
,
4060 ret
= error(_("could not get commit message of '%s'"),
4061 oid_to_hex(&commit
->object
.oid
));
4064 write_author_script(message
);
4065 find_commit_subject(message
, &body
);
4067 ret
= write_message(body
, len
, git_path_merge_msg(r
), 0);
4068 repo_unuse_commit_buffer(r
, commit
, message
);
4070 error_errno(_("could not write '%s'"),
4071 git_path_merge_msg(r
));
4075 struct strbuf buf
= STRBUF_INIT
;
4078 strbuf_addf(&buf
, "author %s", git_author_info(0));
4079 write_author_script(buf
.buf
);
4082 if (oneline_offset
< arg_len
) {
4083 p
= arg
+ oneline_offset
;
4084 len
= arg_len
- oneline_offset
;
4086 strbuf_addf(&buf
, "Merge %s '%.*s'",
4087 to_merge
->next
? "branches" : "branch",
4088 merge_arg_len
, arg
);
4093 ret
= write_message(p
, len
, git_path_merge_msg(r
), 0);
4094 strbuf_release(&buf
);
4096 error_errno(_("could not write '%s'"),
4097 git_path_merge_msg(r
));
4102 if (strategy
|| to_merge
->next
) {
4104 struct child_process cmd
= CHILD_PROCESS_INIT
;
4106 if (read_env_script(&cmd
.env
)) {
4107 const char *gpg_opt
= gpg_sign_opt_quoted(opts
);
4109 ret
= error(_(staged_changes_advice
), gpg_opt
, gpg_opt
);
4113 if (opts
->committer_date_is_author_date
)
4114 strvec_pushf(&cmd
.env
, "GIT_COMMITTER_DATE=%s",
4117 author_date_from_env(&cmd
.env
));
4118 if (opts
->ignore_date
)
4119 strvec_push(&cmd
.env
, "GIT_AUTHOR_DATE=");
4122 strvec_push(&cmd
.args
, "merge");
4123 strvec_push(&cmd
.args
, "-s");
4125 strvec_push(&cmd
.args
, "octopus");
4127 strvec_push(&cmd
.args
, strategy
);
4128 for (k
= 0; k
< opts
->xopts
.nr
; k
++)
4129 strvec_pushf(&cmd
.args
,
4130 "-X%s", opts
->xopts
.v
[k
]);
4132 if (!(flags
& TODO_EDIT_MERGE_MSG
))
4133 strvec_push(&cmd
.args
, "--no-edit");
4135 strvec_push(&cmd
.args
, "--edit");
4136 strvec_push(&cmd
.args
, "--no-ff");
4137 strvec_push(&cmd
.args
, "--no-log");
4138 strvec_push(&cmd
.args
, "--no-stat");
4139 strvec_push(&cmd
.args
, "-F");
4140 strvec_push(&cmd
.args
, git_path_merge_msg(r
));
4142 strvec_pushf(&cmd
.args
, "-S%s", opts
->gpg_sign
);
4144 strvec_push(&cmd
.args
, "--no-gpg-sign");
4146 /* Add the tips to be merged */
4147 for (j
= to_merge
; j
; j
= j
->next
)
4148 strvec_push(&cmd
.args
,
4149 oid_to_hex(&j
->item
->object
.oid
));
4151 strbuf_release(&ref_name
);
4152 refs_delete_ref(get_main_ref_store(r
), "", "CHERRY_PICK_HEAD",
4153 NULL
, REF_NO_DEREF
);
4154 rollback_lock_file(&lock
);
4156 ret
= run_command(&cmd
);
4158 /* force re-reading of the cache */
4160 discard_index(r
->index
);
4161 if (repo_read_index(r
) < 0)
4162 ret
= error(_("could not read index"));
4167 merge_commit
= to_merge
->item
;
4168 if (repo_get_merge_bases(r
, head_commit
, merge_commit
, &bases
) < 0) {
4173 if (bases
&& oideq(&merge_commit
->object
.oid
,
4174 &bases
->item
->object
.oid
)) {
4176 /* skip merging an ancestor of HEAD */
4180 write_message(oid_to_hex(&merge_commit
->object
.oid
), the_hash_algo
->hexsz
,
4181 git_path_merge_head(r
), 0);
4182 write_message("no-ff", 5, git_path_merge_mode(r
), 0);
4184 bases
= reverse_commit_list(bases
);
4187 init_merge_options(&o
, r
);
4189 o
.branch2
= ref_name
.buf
;
4190 o
.buffer_output
= 2;
4192 if (!opts
->strategy
|| !strcmp(opts
->strategy
, "ort")) {
4194 * TODO: Should use merge_incore_recursive() and
4195 * merge_switch_to_result(), skipping the call to
4196 * merge_switch_to_result() when we don't actually need to
4197 * update the index and working copy immediately.
4199 ret
= merge_ort_recursive(&o
,
4200 head_commit
, merge_commit
, bases
,
4203 ret
= merge_recursive(&o
, head_commit
, merge_commit
, bases
,
4207 fputs(o
.obuf
.buf
, stdout
);
4208 strbuf_release(&o
.obuf
);
4210 error(_("could not even attempt to merge '%.*s'"),
4211 merge_arg_len
, arg
);
4212 unlink(git_path_merge_msg(r
));
4216 * The return value of merge_recursive() is 1 on clean, and 0 on
4219 * Let's reverse that, so that do_merge() returns 0 upon success and
4220 * 1 upon failed merge (keeping the return value -1 for the cases where
4221 * we will want to reschedule the `merge` command).
4225 if (r
->index
->cache_changed
&&
4226 write_locked_index(r
->index
, &lock
, COMMIT_LOCK
)) {
4227 ret
= error(_("merge: Unable to write new index file"));
4231 rollback_lock_file(&lock
);
4233 repo_rerere(r
, opts
->allow_rerere_auto
);
4236 * In case of problems, we now want to return a positive
4237 * value (a negative one would indicate that the `merge`
4238 * command needs to be rescheduled).
4240 ret
= !!run_git_commit(git_path_merge_msg(r
), opts
,
4243 if (!ret
&& flags
& TODO_EDIT_MERGE_MSG
) {
4246 run_commit_flags
|= AMEND_MSG
| EDIT_MSG
| VERIFY_MSG
;
4247 ret
= !!run_git_commit(NULL
, opts
, run_commit_flags
);
4252 strbuf_release(&ref_name
);
4253 rollback_lock_file(&lock
);
4254 free_commit_list(to_merge
);
4258 static int write_update_refs_state(struct string_list
*refs_to_oids
)
4261 struct lock_file lock
= LOCK_INIT
;
4263 struct string_list_item
*item
;
4266 path
= rebase_path_update_refs(the_repository
->gitdir
);
4268 if (!refs_to_oids
->nr
) {
4269 if (unlink(path
) && errno
!= ENOENT
)
4270 result
= error_errno(_("could not unlink: %s"), path
);
4274 if (safe_create_leading_directories(path
)) {
4275 result
= error(_("unable to create leading directories of %s"),
4280 if (hold_lock_file_for_update(&lock
, path
, 0) < 0) {
4281 result
= error(_("another 'rebase' process appears to be running; "
4282 "'%s.lock' already exists"),
4287 fp
= fdopen_lock_file(&lock
, "w");
4289 result
= error_errno(_("could not open '%s' for writing"), path
);
4290 rollback_lock_file(&lock
);
4294 for_each_string_list_item(item
, refs_to_oids
) {
4295 struct update_ref_record
*rec
= item
->util
;
4296 fprintf(fp
, "%s\n%s\n%s\n", item
->string
,
4297 oid_to_hex(&rec
->before
), oid_to_hex(&rec
->after
));
4300 result
= commit_lock_file(&lock
);
4308 * Parse the update-refs file for the current rebase, then remove the
4309 * refs that do not appear in the todo_list (and have not had updated
4310 * values stored) and add refs that are in the todo_list but not
4311 * represented in the update-refs file.
4313 * If there are changes to the update-refs list, then write the new state
4316 void todo_list_filter_update_refs(struct repository
*r
,
4317 struct todo_list
*todo_list
)
4321 struct string_list update_refs
= STRING_LIST_INIT_DUP
;
4323 sequencer_get_update_refs_state(r
->gitdir
, &update_refs
);
4326 * For each item in the update_refs list, if it has no updated
4327 * value and does not appear in the todo_list, then remove it
4328 * from the update_refs list.
4330 for (i
= 0; i
< update_refs
.nr
; i
++) {
4333 const char *ref
= update_refs
.items
[i
].string
;
4334 size_t reflen
= strlen(ref
);
4335 struct update_ref_record
*rec
= update_refs
.items
[i
].util
;
4337 /* OID already stored as updated. */
4338 if (!is_null_oid(&rec
->after
))
4341 for (j
= 0; !found
&& j
< todo_list
->nr
; j
++) {
4342 struct todo_item
*item
= &todo_list
->items
[j
];
4343 const char *arg
= todo_list
->buf
.buf
+ item
->arg_offset
;
4345 if (item
->command
!= TODO_UPDATE_REF
)
4348 if (item
->arg_len
!= reflen
||
4349 strncmp(arg
, ref
, reflen
))
4356 free(update_refs
.items
[i
].string
);
4357 free(update_refs
.items
[i
].util
);
4360 MOVE_ARRAY(update_refs
.items
+ i
, update_refs
.items
+ i
+ 1, update_refs
.nr
- i
);
4368 * For each todo_item, check if its ref is in the update_refs list.
4369 * If not, then add it as an un-updated ref.
4371 for (i
= 0; i
< todo_list
->nr
; i
++) {
4372 struct todo_item
*item
= &todo_list
->items
[i
];
4373 const char *arg
= todo_list
->buf
.buf
+ item
->arg_offset
;
4376 if (item
->command
!= TODO_UPDATE_REF
)
4379 for (j
= 0; !found
&& j
< update_refs
.nr
; j
++) {
4380 const char *ref
= update_refs
.items
[j
].string
;
4382 found
= strlen(ref
) == item
->arg_len
&&
4383 !strncmp(ref
, arg
, item
->arg_len
);
4387 struct string_list_item
*inserted
;
4388 struct strbuf argref
= STRBUF_INIT
;
4390 strbuf_add(&argref
, arg
, item
->arg_len
);
4391 inserted
= string_list_insert(&update_refs
, argref
.buf
);
4392 inserted
->util
= init_update_ref_record(argref
.buf
);
4393 strbuf_release(&argref
);
4399 write_update_refs_state(&update_refs
);
4400 string_list_clear(&update_refs
, 1);
4403 static int do_update_ref(struct repository
*r
, const char *refname
)
4405 struct string_list_item
*item
;
4406 struct string_list list
= STRING_LIST_INIT_DUP
;
4408 if (sequencer_get_update_refs_state(r
->gitdir
, &list
))
4411 for_each_string_list_item(item
, &list
) {
4412 if (!strcmp(item
->string
, refname
)) {
4413 struct update_ref_record
*rec
= item
->util
;
4414 if (read_ref("HEAD", &rec
->after
))
4420 write_update_refs_state(&list
);
4421 string_list_clear(&list
, 1);
4425 static int do_update_refs(struct repository
*r
, int quiet
)
4428 struct string_list_item
*item
;
4429 struct string_list refs_to_oids
= STRING_LIST_INIT_DUP
;
4430 struct ref_store
*refs
= get_main_ref_store(r
);
4431 struct strbuf update_msg
= STRBUF_INIT
;
4432 struct strbuf error_msg
= STRBUF_INIT
;
4434 if ((res
= sequencer_get_update_refs_state(r
->gitdir
, &refs_to_oids
)))
4437 for_each_string_list_item(item
, &refs_to_oids
) {
4438 struct update_ref_record
*rec
= item
->util
;
4441 loop_res
= refs_update_ref(refs
, "rewritten during rebase",
4443 &rec
->after
, &rec
->before
,
4444 0, UPDATE_REFS_MSG_ON_ERR
);
4451 strbuf_addf(&error_msg
, "\t%s\n", item
->string
);
4453 strbuf_addf(&update_msg
, "\t%s\n", item
->string
);
4457 (update_msg
.len
|| error_msg
.len
)) {
4459 _("Updated the following refs with %s:\n%s"),
4465 _("Failed to update the following refs with %s:\n%s"),
4470 string_list_clear(&refs_to_oids
, 1);
4471 strbuf_release(&update_msg
);
4472 strbuf_release(&error_msg
);
4476 static int is_final_fixup(struct todo_list
*todo_list
)
4478 int i
= todo_list
->current
;
4480 if (!is_fixup(todo_list
->items
[i
].command
))
4483 while (++i
< todo_list
->nr
)
4484 if (is_fixup(todo_list
->items
[i
].command
))
4486 else if (!is_noop(todo_list
->items
[i
].command
))
4491 static enum todo_command
peek_command(struct todo_list
*todo_list
, int offset
)
4495 for (i
= todo_list
->current
+ offset
; i
< todo_list
->nr
; i
++)
4496 if (!is_noop(todo_list
->items
[i
].command
))
4497 return todo_list
->items
[i
].command
;
4502 static void create_autostash_internal(struct repository
*r
,
4504 const char *refname
)
4506 struct strbuf buf
= STRBUF_INIT
;
4507 struct lock_file lock_file
= LOCK_INIT
;
4510 if (path
&& refname
)
4511 BUG("can only pass path or refname");
4513 fd
= repo_hold_locked_index(r
, &lock_file
, 0);
4514 refresh_index(r
->index
, REFRESH_QUIET
, NULL
, NULL
, NULL
);
4516 repo_update_index_if_able(r
, &lock_file
);
4517 rollback_lock_file(&lock_file
);
4519 if (has_unstaged_changes(r
, 1) ||
4520 has_uncommitted_changes(r
, 1)) {
4521 struct child_process stash
= CHILD_PROCESS_INIT
;
4522 struct reset_head_opts ropts
= { .flags
= RESET_HEAD_HARD
};
4523 struct object_id oid
;
4525 strvec_pushl(&stash
.args
,
4526 "stash", "create", "autostash", NULL
);
4530 if (capture_command(&stash
, &buf
, GIT_MAX_HEXSZ
))
4531 die(_("Cannot autostash"));
4532 strbuf_trim_trailing_newline(&buf
);
4533 if (repo_get_oid(r
, buf
.buf
, &oid
))
4534 die(_("Unexpected stash response: '%s'"),
4537 strbuf_add_unique_abbrev(&buf
, &oid
, DEFAULT_ABBREV
);
4540 if (safe_create_leading_directories_const(path
))
4541 die(_("Could not create directory for '%s'"),
4543 write_file(path
, "%s", oid_to_hex(&oid
));
4545 refs_update_ref(get_main_ref_store(r
), "", refname
,
4546 &oid
, null_oid(), 0, UPDATE_REFS_DIE_ON_ERR
);
4549 printf(_("Created autostash: %s\n"), buf
.buf
);
4550 if (reset_head(r
, &ropts
) < 0)
4551 die(_("could not reset --hard"));
4552 discard_index(r
->index
);
4553 if (repo_read_index(r
) < 0)
4554 die(_("could not read index"));
4556 strbuf_release(&buf
);
4559 void create_autostash(struct repository
*r
, const char *path
)
4561 create_autostash_internal(r
, path
, NULL
);
4564 void create_autostash_ref(struct repository
*r
, const char *refname
)
4566 create_autostash_internal(r
, NULL
, refname
);
4569 static int apply_save_autostash_oid(const char *stash_oid
, int attempt_apply
)
4571 struct child_process child
= CHILD_PROCESS_INIT
;
4574 if (attempt_apply
) {
4576 child
.no_stdout
= 1;
4577 child
.no_stderr
= 1;
4578 strvec_push(&child
.args
, "stash");
4579 strvec_push(&child
.args
, "apply");
4580 strvec_push(&child
.args
, stash_oid
);
4581 ret
= run_command(&child
);
4584 if (attempt_apply
&& !ret
)
4585 fprintf(stderr
, _("Applied autostash.\n"));
4587 struct child_process store
= CHILD_PROCESS_INIT
;
4590 strvec_push(&store
.args
, "stash");
4591 strvec_push(&store
.args
, "store");
4592 strvec_push(&store
.args
, "-m");
4593 strvec_push(&store
.args
, "autostash");
4594 strvec_push(&store
.args
, "-q");
4595 strvec_push(&store
.args
, stash_oid
);
4596 if (run_command(&store
))
4597 ret
= error(_("cannot store %s"), stash_oid
);
4601 "Your changes are safe in the stash.\n"
4602 "You can run \"git stash pop\" or"
4603 " \"git stash drop\" at any time.\n"),
4605 _("Applying autostash resulted in conflicts.") :
4606 _("Autostash exists; creating a new stash entry."));
4612 static int apply_save_autostash(const char *path
, int attempt_apply
)
4614 struct strbuf stash_oid
= STRBUF_INIT
;
4617 if (!read_oneliner(&stash_oid
, path
,
4618 READ_ONELINER_SKIP_IF_EMPTY
)) {
4619 strbuf_release(&stash_oid
);
4622 strbuf_trim(&stash_oid
);
4624 ret
= apply_save_autostash_oid(stash_oid
.buf
, attempt_apply
);
4627 strbuf_release(&stash_oid
);
4631 int save_autostash(const char *path
)
4633 return apply_save_autostash(path
, 0);
4636 int apply_autostash(const char *path
)
4638 return apply_save_autostash(path
, 1);
4641 int apply_autostash_oid(const char *stash_oid
)
4643 return apply_save_autostash_oid(stash_oid
, 1);
4646 static int apply_save_autostash_ref(struct repository
*r
, const char *refname
,
4649 struct object_id stash_oid
;
4650 char stash_oid_hex
[GIT_MAX_HEXSZ
+ 1];
4653 if (!refs_ref_exists(get_main_ref_store(r
), refname
))
4656 if (!refs_resolve_ref_unsafe(get_main_ref_store(r
), refname
,
4657 RESOLVE_REF_READING
, &stash_oid
, &flag
))
4659 if (flag
& REF_ISSYMREF
)
4660 return error(_("autostash reference is a symref"));
4662 oid_to_hex_r(stash_oid_hex
, &stash_oid
);
4663 ret
= apply_save_autostash_oid(stash_oid_hex
, attempt_apply
);
4665 refs_delete_ref(get_main_ref_store(r
), "", refname
,
4666 &stash_oid
, REF_NO_DEREF
);
4671 int save_autostash_ref(struct repository
*r
, const char *refname
)
4673 return apply_save_autostash_ref(r
, refname
, 0);
4676 int apply_autostash_ref(struct repository
*r
, const char *refname
)
4678 return apply_save_autostash_ref(r
, refname
, 1);
4681 static int checkout_onto(struct repository
*r
, struct replay_opts
*opts
,
4682 const char *onto_name
, const struct object_id
*onto
,
4683 const struct object_id
*orig_head
)
4685 struct reset_head_opts ropts
= {
4687 .orig_head
= orig_head
,
4688 .flags
= RESET_HEAD_DETACH
| RESET_ORIG_HEAD
|
4689 RESET_HEAD_RUN_POST_CHECKOUT_HOOK
,
4690 .head_msg
= reflog_message(opts
, "start", "checkout %s",
4692 .default_reflog_action
= sequencer_reflog_action(opts
)
4694 if (reset_head(r
, &ropts
)) {
4695 apply_autostash(rebase_path_autostash());
4696 sequencer_remove_state(opts
);
4697 return error(_("could not detach HEAD"));
4703 static int stopped_at_head(struct repository
*r
)
4705 struct object_id head
;
4706 struct commit
*commit
;
4707 struct commit_message message
;
4709 if (repo_get_oid(r
, "HEAD", &head
) ||
4710 !(commit
= lookup_commit(r
, &head
)) ||
4711 repo_parse_commit(r
, commit
) || get_message(commit
, &message
))
4712 fprintf(stderr
, _("Stopped at HEAD\n"));
4714 fprintf(stderr
, _("Stopped at %s\n"), message
.label
);
4715 free_message(commit
, &message
);
4721 static int reread_todo_if_changed(struct repository
*r
,
4722 struct todo_list
*todo_list
,
4723 struct replay_opts
*opts
)
4726 struct strbuf buf
= STRBUF_INIT
;
4728 if (strbuf_read_file_or_whine(&buf
, get_todo_path(opts
)) < 0)
4730 offset
= get_item_line_offset(todo_list
, todo_list
->current
+ 1);
4731 if (buf
.len
!= todo_list
->buf
.len
- offset
||
4732 memcmp(buf
.buf
, todo_list
->buf
.buf
+ offset
, buf
.len
)) {
4733 /* Reread the todo file if it has changed. */
4734 todo_list_release(todo_list
);
4735 if (read_populate_todo(r
, todo_list
, opts
))
4736 return -1; /* message was printed */
4737 /* `current` will be incremented on return */
4738 todo_list
->current
= -1;
4740 strbuf_release(&buf
);
4745 static const char rescheduled_advice
[] =
4746 N_("Could not execute the todo command\n"
4750 "It has been rescheduled; To edit the command before continuing, please\n"
4751 "edit the todo list first:\n"
4753 " git rebase --edit-todo\n"
4754 " git rebase --continue\n");
4756 static int pick_one_commit(struct repository
*r
,
4757 struct todo_list
*todo_list
,
4758 struct replay_opts
*opts
,
4759 int *check_todo
, int* reschedule
)
4762 struct todo_item
*item
= todo_list
->items
+ todo_list
->current
;
4763 const char *arg
= todo_item_get_arg(todo_list
, item
);
4764 if (is_rebase_i(opts
))
4765 opts
->reflog_message
= reflog_message(
4766 opts
, command_to_string(item
->command
), NULL
);
4768 res
= do_pick_commit(r
, item
, opts
, is_final_fixup(todo_list
),
4770 if (is_rebase_i(opts
) && res
< 0) {
4775 if (item
->command
== TODO_EDIT
) {
4776 struct commit
*commit
= item
->commit
;
4780 fprintf(stderr
, _("Stopped at %s... %.*s\n"),
4781 short_commit_name(r
, commit
), item
->arg_len
, arg
);
4783 return error_with_patch(r
, commit
,
4784 arg
, item
->arg_len
, opts
, res
, !res
);
4786 if (is_rebase_i(opts
) && !res
)
4787 record_in_rewritten(&item
->commit
->object
.oid
,
4788 peek_command(todo_list
, 1));
4789 if (res
&& is_fixup(item
->command
)) {
4792 return error_failed_squash(r
, item
->commit
, opts
,
4793 item
->arg_len
, arg
);
4794 } else if (res
&& is_rebase_i(opts
) && item
->commit
) {
4796 struct object_id oid
;
4799 * If we are rewording and have either
4800 * fast-forwarded already, or are about to
4801 * create a new root commit, we want to amend,
4802 * otherwise we do not.
4804 if (item
->command
== TODO_REWORD
&&
4805 !repo_get_oid(r
, "HEAD", &oid
) &&
4806 (oideq(&item
->commit
->object
.oid
, &oid
) ||
4807 (opts
->have_squash_onto
&&
4808 oideq(&opts
->squash_onto
, &oid
))))
4811 return res
| error_with_patch(r
, item
->commit
,
4812 arg
, item
->arg_len
, opts
,
4818 static int pick_commits(struct repository
*r
,
4819 struct todo_list
*todo_list
,
4820 struct replay_opts
*opts
)
4822 int res
= 0, reschedule
= 0;
4824 opts
->reflog_message
= sequencer_reflog_action(opts
);
4826 assert(!(opts
->signoff
|| opts
->no_commit
||
4827 opts
->record_origin
|| should_edit(opts
) ||
4828 opts
->committer_date_is_author_date
||
4829 opts
->ignore_date
));
4830 if (read_and_refresh_cache(r
, opts
))
4833 unlink(rebase_path_message());
4834 unlink(rebase_path_stopped_sha());
4835 unlink(rebase_path_amend());
4836 unlink(rebase_path_patch());
4838 while (todo_list
->current
< todo_list
->nr
) {
4839 struct todo_item
*item
= todo_list
->items
+ todo_list
->current
;
4840 const char *arg
= todo_item_get_arg(todo_list
, item
);
4843 if (save_todo(todo_list
, opts
, reschedule
))
4845 if (is_rebase_i(opts
)) {
4846 if (item
->command
!= TODO_COMMENT
) {
4847 FILE *f
= fopen(rebase_path_msgnum(), "w");
4849 todo_list
->done_nr
++;
4852 fprintf(f
, "%d\n", todo_list
->done_nr
);
4856 fprintf(stderr
, _("Rebasing (%d/%d)%s"),
4858 todo_list
->total_nr
,
4859 opts
->verbose
? "\n" : "\r");
4861 unlink(rebase_path_author_script());
4862 unlink(git_path_merge_head(r
));
4863 refs_delete_ref(get_main_ref_store(r
), "", "AUTO_MERGE",
4864 NULL
, REF_NO_DEREF
);
4865 refs_delete_ref(get_main_ref_store(r
), "", "REBASE_HEAD",
4866 NULL
, REF_NO_DEREF
);
4868 if (item
->command
== TODO_BREAK
) {
4871 return stopped_at_head(r
);
4874 if (item
->command
<= TODO_SQUASH
) {
4875 res
= pick_one_commit(r
, todo_list
, opts
, &check_todo
,
4877 if (!res
&& item
->command
== TODO_EDIT
)
4879 } else if (item
->command
== TODO_EXEC
) {
4880 char *end_of_arg
= (char *)(arg
+ item
->arg_len
);
4881 int saved
= *end_of_arg
;
4886 res
= do_exec(r
, arg
);
4887 *end_of_arg
= saved
;
4890 if (opts
->reschedule_failed_exec
)
4894 } else if (item
->command
== TODO_LABEL
) {
4895 if ((res
= do_label(r
, arg
, item
->arg_len
)))
4897 } else if (item
->command
== TODO_RESET
) {
4898 if ((res
= do_reset(r
, arg
, item
->arg_len
, opts
)))
4900 } else if (item
->command
== TODO_MERGE
) {
4901 if ((res
= do_merge(r
, item
->commit
, arg
, item
->arg_len
,
4902 item
->flags
, &check_todo
, opts
)) < 0)
4904 else if (item
->commit
)
4905 record_in_rewritten(&item
->commit
->object
.oid
,
4906 peek_command(todo_list
, 1));
4908 /* failed with merge conflicts */
4909 return error_with_patch(r
, item
->commit
,
4912 } else if (item
->command
== TODO_UPDATE_REF
) {
4913 struct strbuf ref
= STRBUF_INIT
;
4914 strbuf_add(&ref
, arg
, item
->arg_len
);
4915 if ((res
= do_update_ref(r
, ref
.buf
)))
4917 strbuf_release(&ref
);
4918 } else if (!is_noop(item
->command
))
4919 return error(_("unknown command %d"), item
->command
);
4922 advise(_(rescheduled_advice
),
4923 get_item_line_length(todo_list
,
4924 todo_list
->current
),
4925 get_item_line(todo_list
, todo_list
->current
));
4926 if (save_todo(todo_list
, opts
, reschedule
))
4929 write_rebase_head(&item
->commit
->object
.oid
);
4930 } else if (is_rebase_i(opts
) && check_todo
&& !res
&&
4931 reread_todo_if_changed(r
, todo_list
, opts
)) {
4938 todo_list
->current
++;
4941 if (is_rebase_i(opts
)) {
4942 struct strbuf head_ref
= STRBUF_INIT
, buf
= STRBUF_INIT
;
4945 if (read_oneliner(&head_ref
, rebase_path_head_name(), 0) &&
4946 starts_with(head_ref
.buf
, "refs/")) {
4948 struct object_id head
, orig
;
4951 if (repo_get_oid(r
, "HEAD", &head
)) {
4952 res
= error(_("cannot read HEAD"));
4954 strbuf_release(&head_ref
);
4955 strbuf_release(&buf
);
4958 if (!read_oneliner(&buf
, rebase_path_orig_head(), 0) ||
4959 get_oid_hex(buf
.buf
, &orig
)) {
4960 res
= error(_("could not read orig-head"));
4961 goto cleanup_head_ref
;
4964 if (!read_oneliner(&buf
, rebase_path_onto(), 0)) {
4965 res
= error(_("could not read 'onto'"));
4966 goto cleanup_head_ref
;
4968 msg
= reflog_message(opts
, "finish", "%s onto %s",
4969 head_ref
.buf
, buf
.buf
);
4970 if (update_ref(msg
, head_ref
.buf
, &head
, &orig
,
4971 REF_NO_DEREF
, UPDATE_REFS_MSG_ON_ERR
)) {
4972 res
= error(_("could not update %s"),
4974 goto cleanup_head_ref
;
4976 msg
= reflog_message(opts
, "finish", "returning to %s",
4978 if (create_symref("HEAD", head_ref
.buf
, msg
)) {
4979 res
= error(_("could not update HEAD to %s"),
4981 goto cleanup_head_ref
;
4986 if (opts
->verbose
) {
4987 struct rev_info log_tree_opt
;
4988 struct object_id orig
, head
;
4990 memset(&log_tree_opt
, 0, sizeof(log_tree_opt
));
4991 repo_init_revisions(r
, &log_tree_opt
, NULL
);
4992 log_tree_opt
.diff
= 1;
4993 log_tree_opt
.diffopt
.output_format
=
4994 DIFF_FORMAT_DIFFSTAT
;
4995 log_tree_opt
.disable_stdin
= 1;
4997 if (read_oneliner(&buf
, rebase_path_orig_head(), 0) &&
4998 !repo_get_oid(r
, buf
.buf
, &orig
) &&
4999 !repo_get_oid(r
, "HEAD", &head
)) {
5000 diff_tree_oid(&orig
, &head
, "",
5001 &log_tree_opt
.diffopt
);
5002 log_tree_diff_flush(&log_tree_opt
);
5004 release_revisions(&log_tree_opt
);
5006 flush_rewritten_pending();
5007 if (!stat(rebase_path_rewritten_list(), &st
) &&
5009 struct child_process child
= CHILD_PROCESS_INIT
;
5010 struct run_hooks_opt hook_opt
= RUN_HOOKS_OPT_INIT
;
5012 child
.in
= open(rebase_path_rewritten_list(), O_RDONLY
);
5014 strvec_push(&child
.args
, "notes");
5015 strvec_push(&child
.args
, "copy");
5016 strvec_push(&child
.args
, "--for-rewrite=rebase");
5017 /* we don't care if this copying failed */
5018 run_command(&child
);
5020 hook_opt
.path_to_stdin
= rebase_path_rewritten_list();
5021 strvec_push(&hook_opt
.args
, "rebase");
5022 run_hooks_opt("post-rewrite", &hook_opt
);
5024 apply_autostash(rebase_path_autostash());
5030 _("Successfully rebased and updated %s.\n"),
5034 strbuf_release(&buf
);
5035 strbuf_release(&head_ref
);
5037 if (do_update_refs(r
, opts
->quiet
))
5042 * Sequence of picks finished successfully; cleanup by
5043 * removing the .git/sequencer directory
5045 return sequencer_remove_state(opts
);
5048 static int continue_single_pick(struct repository
*r
, struct replay_opts
*opts
)
5050 struct child_process cmd
= CHILD_PROCESS_INIT
;
5052 if (!refs_ref_exists(get_main_ref_store(r
), "CHERRY_PICK_HEAD") &&
5053 !refs_ref_exists(get_main_ref_store(r
), "REVERT_HEAD"))
5054 return error(_("no cherry-pick or revert in progress"));
5057 strvec_push(&cmd
.args
, "commit");
5060 * continue_single_pick() handles the case of recovering from a
5061 * conflict. should_edit() doesn't handle that case; for a conflict,
5062 * we want to edit if the user asked for it, or if they didn't specify
5063 * and stdin is a tty.
5065 if (!opts
->edit
|| (opts
->edit
< 0 && !isatty(0)))
5067 * Include --cleanup=strip as well because we don't want the
5068 * "# Conflicts:" messages.
5070 strvec_pushl(&cmd
.args
, "--no-edit", "--cleanup=strip", NULL
);
5072 return run_command(&cmd
);
5075 static int commit_staged_changes(struct repository
*r
,
5076 struct replay_opts
*opts
,
5077 struct todo_list
*todo_list
)
5079 unsigned int flags
= ALLOW_EMPTY
| EDIT_MSG
;
5080 unsigned int final_fixup
= 0, is_clean
;
5082 if (has_unstaged_changes(r
, 1))
5083 return error(_("cannot rebase: You have unstaged changes."));
5085 is_clean
= !has_uncommitted_changes(r
, 0);
5087 if (!is_clean
&& !file_exists(rebase_path_message())) {
5088 const char *gpg_opt
= gpg_sign_opt_quoted(opts
);
5090 return error(_(staged_changes_advice
), gpg_opt
, gpg_opt
);
5092 if (file_exists(rebase_path_amend())) {
5093 struct strbuf rev
= STRBUF_INIT
;
5094 struct object_id head
, to_amend
;
5096 if (repo_get_oid(r
, "HEAD", &head
))
5097 return error(_("cannot amend non-existing commit"));
5098 if (!read_oneliner(&rev
, rebase_path_amend(), 0))
5099 return error(_("invalid file: '%s'"), rebase_path_amend());
5100 if (get_oid_hex(rev
.buf
, &to_amend
))
5101 return error(_("invalid contents: '%s'"),
5102 rebase_path_amend());
5103 if (!is_clean
&& !oideq(&head
, &to_amend
))
5104 return error(_("\nYou have uncommitted changes in your "
5105 "working tree. Please, commit them\n"
5106 "first and then run 'git rebase "
5107 "--continue' again."));
5109 * When skipping a failed fixup/squash, we need to edit the
5110 * commit message, the current fixup list and count, and if it
5111 * was the last fixup/squash in the chain, we need to clean up
5112 * the commit message and if there was a squash, let the user
5115 if (!is_clean
|| !opts
->current_fixup_count
)
5116 ; /* this is not the final fixup */
5117 else if (!oideq(&head
, &to_amend
) ||
5118 !file_exists(rebase_path_stopped_sha())) {
5119 /* was a final fixup or squash done manually? */
5120 if (!is_fixup(peek_command(todo_list
, 0))) {
5121 unlink(rebase_path_fixup_msg());
5122 unlink(rebase_path_squash_msg());
5123 unlink(rebase_path_current_fixups());
5124 strbuf_reset(&opts
->current_fixups
);
5125 opts
->current_fixup_count
= 0;
5128 /* we are in a fixup/squash chain */
5129 const char *p
= opts
->current_fixups
.buf
;
5130 int len
= opts
->current_fixups
.len
;
5132 opts
->current_fixup_count
--;
5134 BUG("Incorrect current_fixups:\n%s", p
);
5135 while (len
&& p
[len
- 1] != '\n')
5137 strbuf_setlen(&opts
->current_fixups
, len
);
5138 if (write_message(p
, len
, rebase_path_current_fixups(),
5140 return error(_("could not write file: '%s'"),
5141 rebase_path_current_fixups());
5144 * If a fixup/squash in a fixup/squash chain failed, the
5145 * commit message is already correct, no need to commit
5148 * Only if it is the final command in the fixup/squash
5149 * chain, and only if the chain is longer than a single
5150 * fixup/squash command (which was just skipped), do we
5151 * actually need to re-commit with a cleaned up commit
5154 if (opts
->current_fixup_count
> 0 &&
5155 !is_fixup(peek_command(todo_list
, 0))) {
5158 * If there was not a single "squash" in the
5159 * chain, we only need to clean up the commit
5160 * message, no need to bother the user with
5161 * opening the commit message in the editor.
5163 if (!starts_with(p
, "squash ") &&
5164 !strstr(p
, "\nsquash "))
5165 flags
= (flags
& ~EDIT_MSG
) | CLEANUP_MSG
;
5166 } else if (is_fixup(peek_command(todo_list
, 0))) {
5168 * We need to update the squash message to skip
5169 * the latest commit message.
5172 struct commit
*commit
;
5174 const char *path
= rebase_path_squash_msg();
5175 const char *encoding
= get_commit_output_encoding();
5177 if (parse_head(r
, &commit
))
5178 return error(_("could not parse HEAD"));
5180 p
= repo_logmsg_reencode(r
, commit
, NULL
, encoding
);
5182 res
= error(_("could not parse commit %s"),
5183 oid_to_hex(&commit
->object
.oid
));
5184 goto unuse_commit_buffer
;
5186 find_commit_subject(p
, &msg
);
5187 if (write_message(msg
, strlen(msg
), path
, 0)) {
5188 res
= error(_("could not write file: "
5190 goto unuse_commit_buffer
;
5192 unuse_commit_buffer
:
5193 repo_unuse_commit_buffer(r
, commit
, p
);
5199 strbuf_release(&rev
);
5204 if (refs_ref_exists(get_main_ref_store(r
),
5205 "CHERRY_PICK_HEAD") &&
5206 refs_delete_ref(get_main_ref_store(r
), "",
5207 "CHERRY_PICK_HEAD", NULL
, REF_NO_DEREF
))
5208 return error(_("could not remove CHERRY_PICK_HEAD"));
5209 if (unlink(git_path_merge_msg(r
)) && errno
!= ENOENT
)
5210 return error_errno(_("could not remove '%s'"),
5211 git_path_merge_msg(r
));
5216 if (run_git_commit(final_fixup
? NULL
: rebase_path_message(),
5218 return error(_("could not commit staged changes."));
5219 unlink(rebase_path_amend());
5220 unlink(git_path_merge_head(r
));
5221 refs_delete_ref(get_main_ref_store(r
), "", "AUTO_MERGE",
5222 NULL
, REF_NO_DEREF
);
5224 unlink(rebase_path_fixup_msg());
5225 unlink(rebase_path_squash_msg());
5227 if (opts
->current_fixup_count
> 0) {
5229 * Whether final fixup or not, we just cleaned up the commit
5232 unlink(rebase_path_current_fixups());
5233 strbuf_reset(&opts
->current_fixups
);
5234 opts
->current_fixup_count
= 0;
5239 int sequencer_continue(struct repository
*r
, struct replay_opts
*opts
)
5241 struct todo_list todo_list
= TODO_LIST_INIT
;
5244 if (read_and_refresh_cache(r
, opts
))
5247 if (read_populate_opts(opts
))
5249 if (is_rebase_i(opts
)) {
5250 if ((res
= read_populate_todo(r
, &todo_list
, opts
)))
5251 goto release_todo_list
;
5253 if (file_exists(rebase_path_dropped())) {
5254 if ((res
= todo_list_check_against_backup(r
, &todo_list
)))
5255 goto release_todo_list
;
5257 unlink(rebase_path_dropped());
5260 opts
->reflog_message
= reflog_message(opts
, "continue", NULL
);
5261 if (commit_staged_changes(r
, opts
, &todo_list
)) {
5263 goto release_todo_list
;
5265 } else if (!file_exists(get_todo_path(opts
)))
5266 return continue_single_pick(r
, opts
);
5267 else if ((res
= read_populate_todo(r
, &todo_list
, opts
)))
5268 goto release_todo_list
;
5270 if (!is_rebase_i(opts
)) {
5271 /* Verify that the conflict has been resolved */
5272 if (refs_ref_exists(get_main_ref_store(r
),
5273 "CHERRY_PICK_HEAD") ||
5274 refs_ref_exists(get_main_ref_store(r
), "REVERT_HEAD")) {
5275 res
= continue_single_pick(r
, opts
);
5277 goto release_todo_list
;
5279 if (index_differs_from(r
, "HEAD", NULL
, 0)) {
5280 res
= error_dirty_index(r
, opts
);
5281 goto release_todo_list
;
5283 todo_list
.current
++;
5284 } else if (file_exists(rebase_path_stopped_sha())) {
5285 struct strbuf buf
= STRBUF_INIT
;
5286 struct object_id oid
;
5288 if (read_oneliner(&buf
, rebase_path_stopped_sha(),
5289 READ_ONELINER_SKIP_IF_EMPTY
) &&
5290 !get_oid_hex(buf
.buf
, &oid
))
5291 record_in_rewritten(&oid
, peek_command(&todo_list
, 0));
5292 strbuf_release(&buf
);
5295 res
= pick_commits(r
, &todo_list
, opts
);
5297 todo_list_release(&todo_list
);
5301 static int single_pick(struct repository
*r
,
5302 struct commit
*cmit
,
5303 struct replay_opts
*opts
)
5306 struct todo_item item
;
5308 item
.command
= opts
->action
== REPLAY_PICK
?
5309 TODO_PICK
: TODO_REVERT
;
5312 opts
->reflog_message
= sequencer_reflog_action(opts
);
5313 return do_pick_commit(r
, &item
, opts
, 0, &check_todo
);
5316 int sequencer_pick_revisions(struct repository
*r
,
5317 struct replay_opts
*opts
)
5319 struct todo_list todo_list
= TODO_LIST_INIT
;
5320 struct object_id oid
;
5324 if (read_and_refresh_cache(r
, opts
))
5327 for (i
= 0; i
< opts
->revs
->pending
.nr
; i
++) {
5328 struct object_id oid
;
5329 const char *name
= opts
->revs
->pending
.objects
[i
].name
;
5331 /* This happens when using --stdin. */
5335 if (!repo_get_oid(r
, name
, &oid
)) {
5336 if (!lookup_commit_reference_gently(r
, &oid
, 1)) {
5337 enum object_type type
= oid_object_info(r
,
5340 return error(_("%s: can't cherry-pick a %s"),
5341 name
, type_name(type
));
5344 return error(_("%s: bad revision"), name
);
5348 * If we were called as "git cherry-pick <commit>", just
5349 * cherry-pick/revert it, set CHERRY_PICK_HEAD /
5350 * REVERT_HEAD, and don't touch the sequencer state.
5351 * This means it is possible to cherry-pick in the middle
5352 * of a cherry-pick sequence.
5354 if (opts
->revs
->cmdline
.nr
== 1 &&
5355 opts
->revs
->cmdline
.rev
->whence
== REV_CMD_REV
&&
5356 opts
->revs
->no_walk
&&
5357 !opts
->revs
->cmdline
.rev
->flags
) {
5358 struct commit
*cmit
;
5359 if (prepare_revision_walk(opts
->revs
))
5360 return error(_("revision walk setup failed"));
5361 cmit
= get_revision(opts
->revs
);
5363 return error(_("empty commit set passed"));
5364 if (get_revision(opts
->revs
))
5365 BUG("unexpected extra commit from walk");
5366 return single_pick(r
, cmit
, opts
);
5370 * Start a new cherry-pick/ revert sequence; but
5371 * first, make sure that an existing one isn't in
5375 if (walk_revs_populate_todo(&todo_list
, opts
) ||
5376 create_seq_dir(r
) < 0)
5378 if (repo_get_oid(r
, "HEAD", &oid
) && (opts
->action
== REPLAY_REVERT
))
5379 return error(_("can't revert as initial commit"));
5380 if (save_head(oid_to_hex(&oid
)))
5382 if (save_opts(opts
))
5384 update_abort_safety_file();
5385 res
= pick_commits(r
, &todo_list
, opts
);
5386 todo_list_release(&todo_list
);
5390 void append_signoff(struct strbuf
*msgbuf
, size_t ignore_footer
, unsigned flag
)
5392 unsigned no_dup_sob
= flag
& APPEND_SIGNOFF_DEDUP
;
5393 struct strbuf sob
= STRBUF_INIT
;
5396 strbuf_addstr(&sob
, sign_off_header
);
5397 strbuf_addstr(&sob
, fmt_name(WANT_COMMITTER_IDENT
));
5398 strbuf_addch(&sob
, '\n');
5401 strbuf_complete_line(msgbuf
);
5404 * If the whole message buffer is equal to the sob, pretend that we
5405 * found a conforming footer with a matching sob
5407 if (msgbuf
->len
- ignore_footer
== sob
.len
&&
5408 !strncmp(msgbuf
->buf
, sob
.buf
, sob
.len
))
5411 has_footer
= has_conforming_footer(msgbuf
, &sob
, ignore_footer
);
5414 const char *append_newlines
= NULL
;
5415 size_t len
= msgbuf
->len
- ignore_footer
;
5419 * The buffer is completely empty. Leave foom for
5420 * the title and body to be filled in by the user.
5422 append_newlines
= "\n\n";
5423 } else if (len
== 1) {
5425 * Buffer contains a single newline. Add another
5426 * so that we leave room for the title and body.
5428 append_newlines
= "\n";
5429 } else if (msgbuf
->buf
[len
- 2] != '\n') {
5431 * Buffer ends with a single newline. Add another
5432 * so that there is an empty line between the message
5435 append_newlines
= "\n";
5436 } /* else, the buffer already ends with two newlines. */
5438 if (append_newlines
)
5439 strbuf_splice(msgbuf
, msgbuf
->len
- ignore_footer
, 0,
5440 append_newlines
, strlen(append_newlines
));
5443 if (has_footer
!= 3 && (!no_dup_sob
|| has_footer
!= 2))
5444 strbuf_splice(msgbuf
, msgbuf
->len
- ignore_footer
, 0,
5447 strbuf_release(&sob
);
5450 struct labels_entry
{
5451 struct hashmap_entry entry
;
5452 char label
[FLEX_ARRAY
];
5455 static int labels_cmp(const void *fndata UNUSED
,
5456 const struct hashmap_entry
*eptr
,
5457 const struct hashmap_entry
*entry_or_key
, const void *key
)
5459 const struct labels_entry
*a
, *b
;
5461 a
= container_of(eptr
, const struct labels_entry
, entry
);
5462 b
= container_of(entry_or_key
, const struct labels_entry
, entry
);
5464 return key
? strcmp(a
->label
, key
) : strcmp(a
->label
, b
->label
);
5467 struct string_entry
{
5468 struct oidmap_entry entry
;
5469 char string
[FLEX_ARRAY
];
5472 struct label_state
{
5473 struct oidmap commit2label
;
5474 struct hashmap labels
;
5476 int max_label_length
;
5479 static const char *label_oid(struct object_id
*oid
, const char *label
,
5480 struct label_state
*state
)
5482 struct labels_entry
*labels_entry
;
5483 struct string_entry
*string_entry
;
5484 struct object_id dummy
;
5487 string_entry
= oidmap_get(&state
->commit2label
, oid
);
5489 return string_entry
->string
;
5492 * For "uninteresting" commits, i.e. commits that are not to be
5493 * rebased, and which can therefore not be labeled, we use a unique
5494 * abbreviation of the commit name. This is slightly more complicated
5495 * than calling repo_find_unique_abbrev() because we also need to make
5496 * sure that the abbreviation does not conflict with any other
5499 * We disallow "interesting" commits to be labeled by a string that
5500 * is a valid full-length hash, to ensure that we always can find an
5501 * abbreviation for any uninteresting commit's names that does not
5502 * clash with any other label.
5504 strbuf_reset(&state
->buf
);
5508 strbuf_grow(&state
->buf
, GIT_MAX_HEXSZ
);
5509 label
= p
= state
->buf
.buf
;
5511 repo_find_unique_abbrev_r(the_repository
, p
, oid
,
5515 * We may need to extend the abbreviated hash so that there is
5516 * no conflicting label.
5518 if (hashmap_get_from_hash(&state
->labels
, strihash(p
), p
)) {
5519 size_t i
= strlen(p
) + 1;
5521 oid_to_hex_r(p
, oid
);
5522 for (; i
< the_hash_algo
->hexsz
; i
++) {
5525 if (!hashmap_get_from_hash(&state
->labels
,
5532 struct strbuf
*buf
= &state
->buf
;
5533 int label_is_utf8
= 1; /* start with this assumption */
5534 size_t max_len
= buf
->len
+ state
->max_label_length
;
5537 * Sanitize labels by replacing non-alpha-numeric characters
5538 * (including white-space ones) by dashes, as they might be
5539 * illegal in file names (and hence in ref names).
5541 * Note that we retain non-ASCII UTF-8 characters (identified
5542 * via the most significant bit). They should be all acceptable
5545 * As we will use the labels as names of (loose) refs, it is
5546 * vital that the name not be longer than the maximum component
5547 * size of the file system (`NAME_MAX`). We are careful to
5548 * truncate the label accordingly, allowing for the `.lock`
5549 * suffix and for the label to be UTF-8 encoded (i.e. we avoid
5550 * truncating in the middle of a character).
5552 for (; *label
&& buf
->len
+ 1 < max_len
; label
++)
5553 if (isalnum(*label
) ||
5554 (!label_is_utf8
&& (*label
& 0x80)))
5555 strbuf_addch(buf
, *label
);
5556 else if (*label
& 0x80) {
5557 const char *p
= label
;
5559 utf8_width(&p
, NULL
);
5561 if (buf
->len
+ (p
- label
) > max_len
)
5563 strbuf_add(buf
, label
, p
- label
);
5567 strbuf_addch(buf
, *label
);
5569 /* avoid leading dash and double-dashes */
5570 } else if (buf
->len
&& buf
->buf
[buf
->len
- 1] != '-')
5571 strbuf_addch(buf
, '-');
5573 strbuf_addstr(buf
, "rev-");
5574 strbuf_add_unique_abbrev(buf
, oid
, default_abbrev
);
5578 if ((buf
->len
== the_hash_algo
->hexsz
&&
5579 !get_oid_hex(label
, &dummy
)) ||
5580 (buf
->len
== 1 && *label
== '#') ||
5581 hashmap_get_from_hash(&state
->labels
,
5582 strihash(label
), label
)) {
5584 * If the label already exists, or if the label is a
5585 * valid full OID, or the label is a '#' (which we use
5586 * as a separator between merge heads and oneline), we
5587 * append a dash and a number to make it unique.
5589 size_t len
= buf
->len
;
5591 for (i
= 2; ; i
++) {
5592 strbuf_setlen(buf
, len
);
5593 strbuf_addf(buf
, "-%d", i
);
5594 if (!hashmap_get_from_hash(&state
->labels
,
5604 FLEX_ALLOC_STR(labels_entry
, label
, label
);
5605 hashmap_entry_init(&labels_entry
->entry
, strihash(label
));
5606 hashmap_add(&state
->labels
, &labels_entry
->entry
);
5608 FLEX_ALLOC_STR(string_entry
, string
, label
);
5609 oidcpy(&string_entry
->entry
.oid
, oid
);
5610 oidmap_put(&state
->commit2label
, string_entry
);
5612 return string_entry
->string
;
5615 static int make_script_with_merges(struct pretty_print_context
*pp
,
5616 struct rev_info
*revs
, struct strbuf
*out
,
5619 int keep_empty
= flags
& TODO_LIST_KEEP_EMPTY
;
5620 int rebase_cousins
= flags
& TODO_LIST_REBASE_COUSINS
;
5621 int root_with_onto
= flags
& TODO_LIST_ROOT_WITH_ONTO
;
5622 int skipped_commit
= 0;
5623 struct strbuf buf
= STRBUF_INIT
, oneline
= STRBUF_INIT
;
5624 struct strbuf label
= STRBUF_INIT
;
5625 struct commit_list
*commits
= NULL
, **tail
= &commits
, *iter
;
5626 struct commit_list
*tips
= NULL
, **tips_tail
= &tips
;
5627 struct commit
*commit
;
5628 struct oidmap commit2todo
= OIDMAP_INIT
;
5629 struct string_entry
*entry
;
5630 struct oidset interesting
= OIDSET_INIT
, child_seen
= OIDSET_INIT
,
5631 shown
= OIDSET_INIT
;
5632 struct label_state state
=
5633 { OIDMAP_INIT
, { NULL
}, STRBUF_INIT
, GIT_MAX_LABEL_LENGTH
};
5635 int abbr
= flags
& TODO_LIST_ABBREVIATE_CMDS
;
5636 const char *cmd_pick
= abbr
? "p" : "pick",
5637 *cmd_label
= abbr
? "l" : "label",
5638 *cmd_reset
= abbr
? "t" : "reset",
5639 *cmd_merge
= abbr
? "m" : "merge";
5641 git_config_get_int("rebase.maxlabellength", &state
.max_label_length
);
5643 oidmap_init(&commit2todo
, 0);
5644 oidmap_init(&state
.commit2label
, 0);
5645 hashmap_init(&state
.labels
, labels_cmp
, NULL
, 0);
5646 strbuf_init(&state
.buf
, 32);
5648 if (revs
->cmdline
.nr
&& (revs
->cmdline
.rev
[0].flags
& BOTTOM
)) {
5649 struct labels_entry
*onto_label_entry
;
5650 struct object_id
*oid
= &revs
->cmdline
.rev
[0].item
->oid
;
5651 FLEX_ALLOC_STR(entry
, string
, "onto");
5652 oidcpy(&entry
->entry
.oid
, oid
);
5653 oidmap_put(&state
.commit2label
, entry
);
5655 FLEX_ALLOC_STR(onto_label_entry
, label
, "onto");
5656 hashmap_entry_init(&onto_label_entry
->entry
, strihash("onto"));
5657 hashmap_add(&state
.labels
, &onto_label_entry
->entry
);
5662 * - get onelines for all commits
5663 * - gather all branch tips (i.e. 2nd or later parents of merges)
5664 * - label all branch tips
5666 while ((commit
= get_revision(revs
))) {
5667 struct commit_list
*to_merge
;
5668 const char *p1
, *p2
;
5669 struct object_id
*oid
;
5672 tail
= &commit_list_insert(commit
, tail
)->next
;
5673 oidset_insert(&interesting
, &commit
->object
.oid
);
5675 is_empty
= is_original_commit_empty(commit
);
5676 if (!is_empty
&& (commit
->object
.flags
& PATCHSAME
)) {
5677 if (flags
& TODO_LIST_WARN_SKIPPED_CHERRY_PICKS
)
5678 warning(_("skipped previously applied commit %s"),
5679 short_commit_name(the_repository
, commit
));
5683 if (is_empty
&& !keep_empty
)
5686 strbuf_reset(&oneline
);
5687 pretty_print_commit(pp
, commit
, &oneline
);
5689 to_merge
= commit
->parents
? commit
->parents
->next
: NULL
;
5691 /* non-merge commit: easy case */
5693 strbuf_addf(&buf
, "%s %s %s", cmd_pick
,
5694 oid_to_hex(&commit
->object
.oid
),
5697 strbuf_addf(&buf
, " %s empty",
5700 FLEX_ALLOC_STR(entry
, string
, buf
.buf
);
5701 oidcpy(&entry
->entry
.oid
, &commit
->object
.oid
);
5702 oidmap_put(&commit2todo
, entry
);
5707 /* Create a label */
5708 strbuf_reset(&label
);
5709 if (skip_prefix(oneline
.buf
, "Merge ", &p1
) &&
5710 (p1
= strchr(p1
, '\'')) &&
5711 (p2
= strchr(++p1
, '\'')))
5712 strbuf_add(&label
, p1
, p2
- p1
);
5713 else if (skip_prefix(oneline
.buf
, "Merge pull request ",
5715 (p1
= strstr(p1
, " from ")))
5716 strbuf_addstr(&label
, p1
+ strlen(" from "));
5718 strbuf_addbuf(&label
, &oneline
);
5721 strbuf_addf(&buf
, "%s -C %s",
5722 cmd_merge
, oid_to_hex(&commit
->object
.oid
));
5724 /* label the tips of merged branches */
5725 for (; to_merge
; to_merge
= to_merge
->next
) {
5726 oid
= &to_merge
->item
->object
.oid
;
5727 strbuf_addch(&buf
, ' ');
5729 if (!oidset_contains(&interesting
, oid
)) {
5730 strbuf_addstr(&buf
, label_oid(oid
, NULL
,
5735 tips_tail
= &commit_list_insert(to_merge
->item
,
5738 strbuf_addstr(&buf
, label_oid(oid
, label
.buf
, &state
));
5740 strbuf_addf(&buf
, " # %s", oneline
.buf
);
5742 FLEX_ALLOC_STR(entry
, string
, buf
.buf
);
5743 oidcpy(&entry
->entry
.oid
, &commit
->object
.oid
);
5744 oidmap_put(&commit2todo
, entry
);
5747 advise_if_enabled(ADVICE_SKIPPED_CHERRY_PICKS
,
5748 _("use --reapply-cherry-picks to include skipped commits"));
5752 * - label branch points
5753 * - add HEAD to the branch tips
5755 for (iter
= commits
; iter
; iter
= iter
->next
) {
5756 struct commit_list
*parent
= iter
->item
->parents
;
5757 for (; parent
; parent
= parent
->next
) {
5758 struct object_id
*oid
= &parent
->item
->object
.oid
;
5759 if (!oidset_contains(&interesting
, oid
))
5761 if (oidset_insert(&child_seen
, oid
))
5762 label_oid(oid
, "branch-point", &state
);
5765 /* Add HEAD as implicit "tip of branch" */
5767 tips_tail
= &commit_list_insert(iter
->item
,
5772 * Third phase: output the todo list. This is a bit tricky, as we
5773 * want to avoid jumping back and forth between revisions. To
5774 * accomplish that goal, we walk backwards from the branch tips,
5775 * gathering commits not yet shown, reversing the list on the fly,
5776 * then outputting that list (labeling revisions as needed).
5778 strbuf_addf(out
, "%s onto\n", cmd_label
);
5779 for (iter
= tips
; iter
; iter
= iter
->next
) {
5780 struct commit_list
*list
= NULL
, *iter2
;
5782 commit
= iter
->item
;
5783 if (oidset_contains(&shown
, &commit
->object
.oid
))
5785 entry
= oidmap_get(&state
.commit2label
, &commit
->object
.oid
);
5788 strbuf_addf(out
, "\n%s Branch %s\n", comment_line_str
, entry
->string
);
5790 strbuf_addch(out
, '\n');
5792 while (oidset_contains(&interesting
, &commit
->object
.oid
) &&
5793 !oidset_contains(&shown
, &commit
->object
.oid
)) {
5794 commit_list_insert(commit
, &list
);
5795 if (!commit
->parents
) {
5799 commit
= commit
->parents
->item
;
5803 strbuf_addf(out
, "%s %s\n", cmd_reset
,
5804 rebase_cousins
|| root_with_onto
?
5805 "onto" : "[new root]");
5807 const char *to
= NULL
;
5809 entry
= oidmap_get(&state
.commit2label
,
5810 &commit
->object
.oid
);
5813 else if (!rebase_cousins
)
5814 to
= label_oid(&commit
->object
.oid
, NULL
,
5817 if (!to
|| !strcmp(to
, "onto"))
5818 strbuf_addf(out
, "%s onto\n", cmd_reset
);
5820 strbuf_reset(&oneline
);
5821 pretty_print_commit(pp
, commit
, &oneline
);
5822 strbuf_addf(out
, "%s %s # %s\n",
5823 cmd_reset
, to
, oneline
.buf
);
5827 for (iter2
= list
; iter2
; iter2
= iter2
->next
) {
5828 struct object_id
*oid
= &iter2
->item
->object
.oid
;
5829 entry
= oidmap_get(&commit2todo
, oid
);
5830 /* only show if not already upstream */
5832 strbuf_addf(out
, "%s\n", entry
->string
);
5833 entry
= oidmap_get(&state
.commit2label
, oid
);
5835 strbuf_addf(out
, "%s %s\n",
5836 cmd_label
, entry
->string
);
5837 oidset_insert(&shown
, oid
);
5840 free_commit_list(list
);
5843 free_commit_list(commits
);
5844 free_commit_list(tips
);
5846 strbuf_release(&label
);
5847 strbuf_release(&oneline
);
5848 strbuf_release(&buf
);
5850 oidmap_free(&commit2todo
, 1);
5851 oidmap_free(&state
.commit2label
, 1);
5852 hashmap_clear_and_free(&state
.labels
, struct labels_entry
, entry
);
5853 strbuf_release(&state
.buf
);
5858 int sequencer_make_script(struct repository
*r
, struct strbuf
*out
, int argc
,
5859 const char **argv
, unsigned flags
)
5861 char *format
= NULL
;
5862 struct pretty_print_context pp
= {0};
5863 struct rev_info revs
;
5864 struct commit
*commit
;
5865 int keep_empty
= flags
& TODO_LIST_KEEP_EMPTY
;
5866 const char *insn
= flags
& TODO_LIST_ABBREVIATE_CMDS
? "p" : "pick";
5867 int rebase_merges
= flags
& TODO_LIST_REBASE_MERGES
;
5868 int reapply_cherry_picks
= flags
& TODO_LIST_REAPPLY_CHERRY_PICKS
;
5869 int skipped_commit
= 0;
5872 repo_init_revisions(r
, &revs
, NULL
);
5873 revs
.verbose_header
= 1;
5875 revs
.max_parents
= 1;
5876 revs
.cherry_mark
= !reapply_cherry_picks
;
5879 revs
.right_only
= 1;
5880 revs
.sort_order
= REV_SORT_IN_GRAPH_ORDER
;
5881 revs
.topo_order
= 1;
5883 revs
.pretty_given
= 1;
5884 git_config_get_string("rebase.instructionFormat", &format
);
5885 if (!format
|| !*format
) {
5887 format
= xstrdup("%s");
5889 get_commit_format(format
, &revs
);
5891 pp
.fmt
= revs
.commit_format
;
5892 pp
.output_encoding
= get_log_output_encoding();
5894 if (setup_revisions(argc
, argv
, &revs
, NULL
) > 1) {
5895 ret
= error(_("make_script: unhandled options"));
5899 if (prepare_revision_walk(&revs
) < 0) {
5900 ret
= error(_("make_script: error preparing revisions"));
5904 if (rebase_merges
) {
5905 ret
= make_script_with_merges(&pp
, &revs
, out
, flags
);
5909 while ((commit
= get_revision(&revs
))) {
5910 int is_empty
= is_original_commit_empty(commit
);
5912 if (!is_empty
&& (commit
->object
.flags
& PATCHSAME
)) {
5913 if (flags
& TODO_LIST_WARN_SKIPPED_CHERRY_PICKS
)
5914 warning(_("skipped previously applied commit %s"),
5915 short_commit_name(r
, commit
));
5919 if (is_empty
&& !keep_empty
)
5921 strbuf_addf(out
, "%s %s ", insn
,
5922 oid_to_hex(&commit
->object
.oid
));
5923 pretty_print_commit(&pp
, commit
, out
);
5925 strbuf_addf(out
, " %s empty", comment_line_str
);
5926 strbuf_addch(out
, '\n');
5929 advise_if_enabled(ADVICE_SKIPPED_CHERRY_PICKS
,
5930 _("use --reapply-cherry-picks to include skipped commits"));
5932 release_revisions(&revs
);
5937 * Add commands after pick and (series of) squash/fixup commands
5940 static void todo_list_add_exec_commands(struct todo_list
*todo_list
,
5941 struct string_list
*commands
)
5943 struct strbuf
*buf
= &todo_list
->buf
;
5944 size_t base_offset
= buf
->len
;
5945 int i
, insert
, nr
= 0, alloc
= 0;
5946 struct todo_item
*items
= NULL
, *base_items
= NULL
;
5948 CALLOC_ARRAY(base_items
, commands
->nr
);
5949 for (i
= 0; i
< commands
->nr
; i
++) {
5950 size_t command_len
= strlen(commands
->items
[i
].string
);
5952 strbuf_addstr(buf
, commands
->items
[i
].string
);
5953 strbuf_addch(buf
, '\n');
5955 base_items
[i
].command
= TODO_EXEC
;
5956 base_items
[i
].offset_in_buf
= base_offset
;
5957 base_items
[i
].arg_offset
= base_offset
;
5958 base_items
[i
].arg_len
= command_len
;
5960 base_offset
+= command_len
+ 1;
5964 * Insert <commands> after every pick. Here, fixup/squash chains
5965 * are considered part of the pick, so we insert the commands *after*
5966 * those chains if there are any.
5968 * As we insert the exec commands immediately after rearranging
5969 * any fixups and before the user edits the list, a fixup chain
5970 * can never contain comments (any comments are empty picks that
5971 * have been commented out because the user did not specify
5972 * --keep-empty). So, it is safe to insert an exec command
5973 * without looking at the command following a comment.
5976 for (i
= 0; i
< todo_list
->nr
; i
++) {
5977 enum todo_command command
= todo_list
->items
[i
].command
;
5978 if (insert
&& !is_fixup(command
)) {
5979 ALLOC_GROW(items
, nr
+ commands
->nr
, alloc
);
5980 COPY_ARRAY(items
+ nr
, base_items
, commands
->nr
);
5986 ALLOC_GROW(items
, nr
+ 1, alloc
);
5987 items
[nr
++] = todo_list
->items
[i
];
5989 if (command
== TODO_PICK
|| command
== TODO_MERGE
)
5993 /* insert or append final <commands> */
5995 ALLOC_GROW(items
, nr
+ commands
->nr
, alloc
);
5996 COPY_ARRAY(items
+ nr
, base_items
, commands
->nr
);
6001 FREE_AND_NULL(todo_list
->items
);
6002 todo_list
->items
= items
;
6004 todo_list
->alloc
= alloc
;
6007 static void todo_list_to_strbuf(struct repository
*r
,
6008 struct todo_list
*todo_list
,
6009 struct strbuf
*buf
, int num
, unsigned flags
)
6011 struct todo_item
*item
;
6012 int i
, max
= todo_list
->nr
;
6014 if (num
> 0 && num
< max
)
6017 for (item
= todo_list
->items
, i
= 0; i
< max
; i
++, item
++) {
6020 /* if the item is not a command write it and continue */
6021 if (item
->command
>= TODO_COMMENT
) {
6022 strbuf_addf(buf
, "%.*s\n", item
->arg_len
,
6023 todo_item_get_arg(todo_list
, item
));
6027 /* add command to the buffer */
6028 cmd
= command_to_char(item
->command
);
6029 if ((flags
& TODO_LIST_ABBREVIATE_CMDS
) && cmd
)
6030 strbuf_addch(buf
, cmd
);
6032 strbuf_addstr(buf
, command_to_string(item
->command
));
6036 const char *oid
= flags
& TODO_LIST_SHORTEN_IDS
?
6037 short_commit_name(r
, item
->commit
) :
6038 oid_to_hex(&item
->commit
->object
.oid
);
6040 if (item
->command
== TODO_FIXUP
) {
6041 if (item
->flags
& TODO_EDIT_FIXUP_MSG
)
6042 strbuf_addstr(buf
, " -c");
6043 else if (item
->flags
& TODO_REPLACE_FIXUP_MSG
) {
6044 strbuf_addstr(buf
, " -C");
6048 if (item
->command
== TODO_MERGE
) {
6049 if (item
->flags
& TODO_EDIT_MERGE_MSG
)
6050 strbuf_addstr(buf
, " -c");
6052 strbuf_addstr(buf
, " -C");
6055 strbuf_addf(buf
, " %s", oid
);
6058 /* add all the rest */
6060 strbuf_addch(buf
, '\n');
6062 strbuf_addf(buf
, " %.*s\n", item
->arg_len
,
6063 todo_item_get_arg(todo_list
, item
));
6067 int todo_list_write_to_file(struct repository
*r
, struct todo_list
*todo_list
,
6068 const char *file
, const char *shortrevisions
,
6069 const char *shortonto
, int num
, unsigned flags
)
6072 struct strbuf buf
= STRBUF_INIT
;
6074 todo_list_to_strbuf(r
, todo_list
, &buf
, num
, flags
);
6075 if (flags
& TODO_LIST_APPEND_TODO_HELP
)
6076 append_todo_help(count_commands(todo_list
),
6077 shortrevisions
, shortonto
, &buf
);
6079 res
= write_message(buf
.buf
, buf
.len
, file
, 0);
6080 strbuf_release(&buf
);
6085 /* skip picking commits whose parents are unchanged */
6086 static int skip_unnecessary_picks(struct repository
*r
,
6087 struct todo_list
*todo_list
,
6088 struct object_id
*base_oid
)
6090 struct object_id
*parent_oid
;
6093 for (i
= 0; i
< todo_list
->nr
; i
++) {
6094 struct todo_item
*item
= todo_list
->items
+ i
;
6096 if (item
->command
>= TODO_NOOP
)
6098 if (item
->command
!= TODO_PICK
)
6100 if (repo_parse_commit(r
, item
->commit
)) {
6101 return error(_("could not parse commit '%s'"),
6102 oid_to_hex(&item
->commit
->object
.oid
));
6104 if (!item
->commit
->parents
)
6105 break; /* root commit */
6106 if (item
->commit
->parents
->next
)
6107 break; /* merge commit */
6108 parent_oid
= &item
->commit
->parents
->item
->object
.oid
;
6109 if (!oideq(parent_oid
, base_oid
))
6111 oidcpy(base_oid
, &item
->commit
->object
.oid
);
6114 const char *done_path
= rebase_path_done();
6116 if (todo_list_write_to_file(r
, todo_list
, done_path
, NULL
, NULL
, i
, 0)) {
6117 error_errno(_("could not write to '%s'"), done_path
);
6121 MOVE_ARRAY(todo_list
->items
, todo_list
->items
+ i
, todo_list
->nr
- i
);
6123 todo_list
->current
= 0;
6124 todo_list
->done_nr
+= i
;
6126 if (is_fixup(peek_command(todo_list
, 0)))
6127 record_in_rewritten(base_oid
, peek_command(todo_list
, 0));
6133 struct todo_add_branch_context
{
6134 struct todo_item
*items
;
6138 struct commit
*commit
;
6139 struct string_list refs_to_oids
;
6142 static int add_decorations_to_list(const struct commit
*commit
,
6143 struct todo_add_branch_context
*ctx
)
6145 const struct name_decoration
*decoration
= get_name_decoration(&commit
->object
);
6146 const char *head_ref
= resolve_ref_unsafe("HEAD",
6147 RESOLVE_REF_READING
,
6151 while (decoration
) {
6152 struct todo_item
*item
;
6154 size_t base_offset
= ctx
->buf
->len
;
6157 * If the branch is the current HEAD, then it will be
6158 * updated by the default rebase behavior.
6160 if (head_ref
&& !strcmp(head_ref
, decoration
->name
)) {
6161 decoration
= decoration
->next
;
6165 ALLOC_GROW(ctx
->items
,
6168 item
= &ctx
->items
[ctx
->items_nr
];
6169 memset(item
, 0, sizeof(*item
));
6171 /* If the branch is checked out, then leave a comment instead. */
6172 if ((path
= branch_checked_out(decoration
->name
))) {
6173 item
->command
= TODO_COMMENT
;
6174 strbuf_addf(ctx
->buf
, "# Ref %s checked out at '%s'\n",
6175 decoration
->name
, path
);
6177 struct string_list_item
*sti
;
6178 item
->command
= TODO_UPDATE_REF
;
6179 strbuf_addf(ctx
->buf
, "%s\n", decoration
->name
);
6181 sti
= string_list_insert(&ctx
->refs_to_oids
,
6183 sti
->util
= init_update_ref_record(decoration
->name
);
6186 item
->offset_in_buf
= base_offset
;
6187 item
->arg_offset
= base_offset
;
6188 item
->arg_len
= ctx
->buf
->len
- base_offset
;
6191 decoration
= decoration
->next
;
6198 * For each 'pick' command, find out if the commit has a decoration in
6199 * refs/heads/. If so, then add a 'label for-update-refs/' command.
6201 static int todo_list_add_update_ref_commands(struct todo_list
*todo_list
)
6204 static struct string_list decorate_refs_exclude
= STRING_LIST_INIT_NODUP
;
6205 static struct string_list decorate_refs_exclude_config
= STRING_LIST_INIT_NODUP
;
6206 static struct string_list decorate_refs_include
= STRING_LIST_INIT_NODUP
;
6207 struct decoration_filter decoration_filter
= {
6208 .include_ref_pattern
= &decorate_refs_include
,
6209 .exclude_ref_pattern
= &decorate_refs_exclude
,
6210 .exclude_ref_config_pattern
= &decorate_refs_exclude_config
,
6212 struct todo_add_branch_context ctx
= {
6213 .buf
= &todo_list
->buf
,
6214 .refs_to_oids
= STRING_LIST_INIT_DUP
,
6217 ctx
.items_alloc
= 2 * todo_list
->nr
+ 1;
6218 ALLOC_ARRAY(ctx
.items
, ctx
.items_alloc
);
6220 string_list_append(&decorate_refs_include
, "refs/heads/");
6221 load_ref_decorations(&decoration_filter
, 0);
6223 for (i
= 0; i
< todo_list
->nr
; ) {
6224 struct todo_item
*item
= &todo_list
->items
[i
];
6226 /* insert ith item into new list */
6227 ALLOC_GROW(ctx
.items
,
6231 ctx
.items
[ctx
.items_nr
++] = todo_list
->items
[i
++];
6234 ctx
.commit
= item
->commit
;
6235 add_decorations_to_list(item
->commit
, &ctx
);
6239 res
= write_update_refs_state(&ctx
.refs_to_oids
);
6241 string_list_clear(&ctx
.refs_to_oids
, 1);
6244 /* we failed, so clean up the new list. */
6249 free(todo_list
->items
);
6250 todo_list
->items
= ctx
.items
;
6251 todo_list
->nr
= ctx
.items_nr
;
6252 todo_list
->alloc
= ctx
.items_alloc
;
6257 int complete_action(struct repository
*r
, struct replay_opts
*opts
, unsigned flags
,
6258 const char *shortrevisions
, const char *onto_name
,
6259 struct commit
*onto
, const struct object_id
*orig_head
,
6260 struct string_list
*commands
, unsigned autosquash
,
6261 unsigned update_refs
,
6262 struct todo_list
*todo_list
)
6264 char shortonto
[GIT_MAX_HEXSZ
+ 1];
6265 const char *todo_file
= rebase_path_todo();
6266 struct todo_list new_todo
= TODO_LIST_INIT
;
6267 struct strbuf
*buf
= &todo_list
->buf
, buf2
= STRBUF_INIT
;
6268 struct object_id oid
= onto
->object
.oid
;
6271 repo_find_unique_abbrev_r(r
, shortonto
, &oid
,
6274 if (buf
->len
== 0) {
6275 struct todo_item
*item
= append_new_todo(todo_list
);
6276 item
->command
= TODO_NOOP
;
6277 item
->commit
= NULL
;
6278 item
->arg_len
= item
->arg_offset
= item
->flags
= item
->offset_in_buf
= 0;
6281 if (update_refs
&& todo_list_add_update_ref_commands(todo_list
))
6284 if (autosquash
&& todo_list_rearrange_squash(todo_list
))
6288 todo_list_add_exec_commands(todo_list
, commands
);
6290 if (count_commands(todo_list
) == 0) {
6291 apply_autostash(rebase_path_autostash());
6292 sequencer_remove_state(opts
);
6294 return error(_("nothing to do"));
6297 res
= edit_todo_list(r
, todo_list
, &new_todo
, shortrevisions
,
6301 else if (res
== -2) {
6302 apply_autostash(rebase_path_autostash());
6303 sequencer_remove_state(opts
);
6306 } else if (res
== -3) {
6307 apply_autostash(rebase_path_autostash());
6308 sequencer_remove_state(opts
);
6309 todo_list_release(&new_todo
);
6311 return error(_("nothing to do"));
6312 } else if (res
== -4) {
6313 checkout_onto(r
, opts
, onto_name
, &onto
->object
.oid
, orig_head
);
6314 todo_list_release(&new_todo
);
6319 /* Expand the commit IDs */
6320 todo_list_to_strbuf(r
, &new_todo
, &buf2
, -1, 0);
6321 strbuf_swap(&new_todo
.buf
, &buf2
);
6322 strbuf_release(&buf2
);
6323 /* Nothing is done yet, and we're reparsing, so let's reset the count */
6324 new_todo
.total_nr
= 0;
6325 if (todo_list_parse_insn_buffer(r
, new_todo
.buf
.buf
, &new_todo
) < 0)
6326 BUG("invalid todo list after expanding IDs:\n%s",
6329 if (opts
->allow_ff
&& skip_unnecessary_picks(r
, &new_todo
, &oid
)) {
6330 todo_list_release(&new_todo
);
6331 return error(_("could not skip unnecessary pick commands"));
6334 if (todo_list_write_to_file(r
, &new_todo
, todo_file
, NULL
, NULL
, -1,
6335 flags
& ~(TODO_LIST_SHORTEN_IDS
))) {
6336 todo_list_release(&new_todo
);
6337 return error_errno(_("could not write '%s'"), todo_file
);
6342 if (checkout_onto(r
, opts
, onto_name
, &oid
, orig_head
))
6345 if (require_clean_work_tree(r
, "rebase", NULL
, 1, 1))
6348 todo_list_write_total_nr(&new_todo
);
6349 res
= pick_commits(r
, &new_todo
, opts
);
6352 todo_list_release(&new_todo
);
6357 struct subject2item_entry
{
6358 struct hashmap_entry entry
;
6360 char subject
[FLEX_ARRAY
];
6363 static int subject2item_cmp(const void *fndata UNUSED
,
6364 const struct hashmap_entry
*eptr
,
6365 const struct hashmap_entry
*entry_or_key
,
6368 const struct subject2item_entry
*a
, *b
;
6370 a
= container_of(eptr
, const struct subject2item_entry
, entry
);
6371 b
= container_of(entry_or_key
, const struct subject2item_entry
, entry
);
6373 return key
? strcmp(a
->subject
, key
) : strcmp(a
->subject
, b
->subject
);
6376 define_commit_slab(commit_todo_item
, struct todo_item
*);
6378 static int skip_fixupish(const char *subject
, const char **p
) {
6379 return skip_prefix(subject
, "fixup! ", p
) ||
6380 skip_prefix(subject
, "amend! ", p
) ||
6381 skip_prefix(subject
, "squash! ", p
);
6385 * Rearrange the todo list that has both "pick commit-id msg" and "pick
6386 * commit-id fixup!/squash! msg" in it so that the latter is put immediately
6387 * after the former, and change "pick" to "fixup"/"squash".
6389 * Note that if the config has specified a custom instruction format, each log
6390 * message will have to be retrieved from the commit (as the oneline in the
6391 * script cannot be trusted) in order to normalize the autosquash arrangement.
6393 int todo_list_rearrange_squash(struct todo_list
*todo_list
)
6395 struct hashmap subject2item
;
6396 int rearranged
= 0, *next
, *tail
, i
, nr
= 0;
6398 struct commit_todo_item commit_todo
;
6399 struct todo_item
*items
= NULL
;
6401 init_commit_todo_item(&commit_todo
);
6403 * The hashmap maps onelines to the respective todo list index.
6405 * If any items need to be rearranged, the next[i] value will indicate
6406 * which item was moved directly after the i'th.
6408 * In that case, last[i] will indicate the index of the latest item to
6409 * be moved to appear after the i'th.
6411 hashmap_init(&subject2item
, subject2item_cmp
, NULL
, todo_list
->nr
);
6412 ALLOC_ARRAY(next
, todo_list
->nr
);
6413 ALLOC_ARRAY(tail
, todo_list
->nr
);
6414 ALLOC_ARRAY(subjects
, todo_list
->nr
);
6415 for (i
= 0; i
< todo_list
->nr
; i
++) {
6416 struct strbuf buf
= STRBUF_INIT
;
6417 struct todo_item
*item
= todo_list
->items
+ i
;
6418 const char *commit_buffer
, *subject
, *p
;
6421 struct subject2item_entry
*entry
;
6423 next
[i
] = tail
[i
] = -1;
6424 if (!item
->commit
|| item
->command
== TODO_DROP
) {
6429 if (is_fixup(item
->command
)) {
6430 clear_commit_todo_item(&commit_todo
);
6431 return error(_("the script was already rearranged."));
6434 repo_parse_commit(the_repository
, item
->commit
);
6435 commit_buffer
= repo_logmsg_reencode(the_repository
,
6438 find_commit_subject(commit_buffer
, &subject
);
6439 format_subject(&buf
, subject
, " ");
6440 subject
= subjects
[i
] = strbuf_detach(&buf
, &subject_len
);
6441 repo_unuse_commit_buffer(the_repository
, item
->commit
,
6443 if (skip_fixupish(subject
, &p
)) {
6444 struct commit
*commit2
;
6449 if (!skip_fixupish(p
, &p
))
6453 entry
= hashmap_get_entry_from_hash(&subject2item
,
6455 struct subject2item_entry
,
6458 /* found by title */
6460 else if (!strchr(p
, ' ') &&
6462 lookup_commit_reference_by_name(p
)) &&
6463 *commit_todo_item_at(&commit_todo
, commit2
))
6464 /* found by commit name */
6465 i2
= *commit_todo_item_at(&commit_todo
, commit2
)
6468 /* copy can be a prefix of the commit subject */
6469 for (i2
= 0; i2
< i
; i2
++)
6471 starts_with(subjects
[i2
], p
))
6479 if (starts_with(subject
, "fixup!")) {
6480 todo_list
->items
[i
].command
= TODO_FIXUP
;
6481 } else if (starts_with(subject
, "amend!")) {
6482 todo_list
->items
[i
].command
= TODO_FIXUP
;
6483 todo_list
->items
[i
].flags
= TODO_REPLACE_FIXUP_MSG
;
6485 todo_list
->items
[i
].command
= TODO_SQUASH
;
6491 next
[i
] = next
[tail
[i2
]];
6495 } else if (!hashmap_get_from_hash(&subject2item
,
6496 strhash(subject
), subject
)) {
6497 FLEX_ALLOC_MEM(entry
, subject
, subject
, subject_len
);
6499 hashmap_entry_init(&entry
->entry
,
6500 strhash(entry
->subject
));
6501 hashmap_put(&subject2item
, &entry
->entry
);
6504 *commit_todo_item_at(&commit_todo
, item
->commit
) = item
;
6508 ALLOC_ARRAY(items
, todo_list
->nr
);
6510 for (i
= 0; i
< todo_list
->nr
; i
++) {
6511 enum todo_command command
= todo_list
->items
[i
].command
;
6515 * Initially, all commands are 'pick's. If it is a
6516 * fixup or a squash now, we have rearranged it.
6518 if (is_fixup(command
))
6522 items
[nr
++] = todo_list
->items
[cur
];
6527 assert(nr
== todo_list
->nr
);
6528 todo_list
->alloc
= nr
;
6529 FREE_AND_NULL(todo_list
->items
);
6530 todo_list
->items
= items
;
6535 for (i
= 0; i
< todo_list
->nr
; i
++)
6538 hashmap_clear_and_free(&subject2item
, struct subject2item_entry
, entry
);
6540 clear_commit_todo_item(&commit_todo
);
6545 int sequencer_determine_whence(struct repository
*r
, enum commit_whence
*whence
)
6547 if (refs_ref_exists(get_main_ref_store(r
), "CHERRY_PICK_HEAD")) {
6548 struct object_id cherry_pick_head
, rebase_head
;
6550 if (file_exists(git_path_seq_dir()))
6551 *whence
= FROM_CHERRY_PICK_MULTI
;
6552 if (file_exists(rebase_path()) &&
6553 !repo_get_oid(r
, "REBASE_HEAD", &rebase_head
) &&
6554 !repo_get_oid(r
, "CHERRY_PICK_HEAD", &cherry_pick_head
) &&
6555 oideq(&rebase_head
, &cherry_pick_head
))
6556 *whence
= FROM_REBASE_PICK
;
6558 *whence
= FROM_CHERRY_PICK_SINGLE
;
6566 int sequencer_get_update_refs_state(const char *wt_dir
,
6567 struct string_list
*refs
)
6571 struct strbuf ref
= STRBUF_INIT
;
6572 struct strbuf hash
= STRBUF_INIT
;
6573 struct update_ref_record
*rec
= NULL
;
6575 char *path
= rebase_path_update_refs(wt_dir
);
6577 fp
= fopen(path
, "r");
6581 while (strbuf_getline(&ref
, fp
) != EOF
) {
6582 struct string_list_item
*item
;
6584 CALLOC_ARRAY(rec
, 1);
6586 if (strbuf_getline(&hash
, fp
) == EOF
||
6587 get_oid_hex(hash
.buf
, &rec
->before
)) {
6588 warning(_("update-refs file at '%s' is invalid"),
6594 if (strbuf_getline(&hash
, fp
) == EOF
||
6595 get_oid_hex(hash
.buf
, &rec
->after
)) {
6596 warning(_("update-refs file at '%s' is invalid"),
6602 item
= string_list_insert(refs
, ref
.buf
);
6612 strbuf_release(&ref
);
6613 strbuf_release(&hash
);