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 replay_ctx' represents the private state of the sequencer.
215 * The commit message that will be used except at the end of a
216 * chain of fixup and squash commands.
218 struct strbuf message
;
220 * The list of completed fixup and squash commands in the
223 struct strbuf current_fixups
;
225 * Stores the reflog message that will be used when creating a
226 * commit. Points to a static buffer and should not be free()'d.
228 const char *reflog_message
;
230 * The number of completed fixup and squash commands in the
233 int current_fixup_count
;
235 * Whether message contains a commit message.
237 unsigned have_message
:1;
240 struct replay_ctx
* replay_ctx_new(void)
242 struct replay_ctx
*ctx
= xcalloc(1, sizeof(*ctx
));
244 strbuf_init(&ctx
->current_fixups
, 0);
245 strbuf_init(&ctx
->message
, 0);
251 * A 'struct update_refs_record' represents a value in the update-refs
252 * list. We use a string_list to map refs to these (before, after) pairs.
254 struct update_ref_record
{
255 struct object_id before
;
256 struct object_id after
;
259 static struct update_ref_record
*init_update_ref_record(const char *ref
)
261 struct update_ref_record
*rec
;
263 CALLOC_ARRAY(rec
, 1);
265 oidcpy(&rec
->before
, null_oid());
266 oidcpy(&rec
->after
, null_oid());
268 /* This may fail, but that's fine, we will keep the null OID. */
269 read_ref(ref
, &rec
->before
);
274 static int git_sequencer_config(const char *k
, const char *v
,
275 const struct config_context
*ctx
, void *cb
)
277 struct replay_opts
*opts
= cb
;
279 if (!strcmp(k
, "commit.cleanup")) {
281 return config_error_nonbool(k
);
283 if (!strcmp(v
, "verbatim")) {
284 opts
->default_msg_cleanup
= COMMIT_MSG_CLEANUP_NONE
;
285 opts
->explicit_cleanup
= 1;
286 } else if (!strcmp(v
, "whitespace")) {
287 opts
->default_msg_cleanup
= COMMIT_MSG_CLEANUP_SPACE
;
288 opts
->explicit_cleanup
= 1;
289 } else if (!strcmp(v
, "strip")) {
290 opts
->default_msg_cleanup
= COMMIT_MSG_CLEANUP_ALL
;
291 opts
->explicit_cleanup
= 1;
292 } else if (!strcmp(v
, "scissors")) {
293 opts
->default_msg_cleanup
= COMMIT_MSG_CLEANUP_SCISSORS
;
294 opts
->explicit_cleanup
= 1;
296 warning(_("invalid commit message cleanup mode '%s'"),
303 if (!strcmp(k
, "commit.gpgsign")) {
304 opts
->gpg_sign
= git_config_bool(k
, v
) ? xstrdup("") : NULL
;
308 if (!opts
->default_strategy
&& !strcmp(k
, "pull.twohead")) {
309 int ret
= git_config_string((const char**)&opts
->default_strategy
, k
, v
);
312 * pull.twohead is allowed to be multi-valued; we only
313 * care about the first value.
315 char *tmp
= strchr(opts
->default_strategy
, ' ');
322 if (opts
->action
== REPLAY_REVERT
&& !strcmp(k
, "revert.reference"))
323 opts
->commit_use_reference
= git_config_bool(k
, v
);
325 return git_diff_basic_config(k
, v
, ctx
, NULL
);
328 void sequencer_init_config(struct replay_opts
*opts
)
330 opts
->default_msg_cleanup
= COMMIT_MSG_CLEANUP_NONE
;
331 git_config(git_sequencer_config
, opts
);
334 static inline int is_rebase_i(const struct replay_opts
*opts
)
336 return opts
->action
== REPLAY_INTERACTIVE_REBASE
;
339 static const char *get_dir(const struct replay_opts
*opts
)
341 if (is_rebase_i(opts
))
342 return rebase_path();
343 return git_path_seq_dir();
346 static const char *get_todo_path(const struct replay_opts
*opts
)
348 if (is_rebase_i(opts
))
349 return rebase_path_todo();
350 return git_path_todo_file();
354 * Returns 0 for non-conforming footer
355 * Returns 1 for conforming footer
356 * Returns 2 when sob exists within conforming footer
357 * Returns 3 when sob exists within conforming footer as last entry
359 static int has_conforming_footer(struct strbuf
*sb
, struct strbuf
*sob
,
360 size_t ignore_footer
)
362 struct process_trailer_options opts
= PROCESS_TRAILER_OPTIONS_INIT
;
363 struct trailer_info info
;
365 int found_sob
= 0, found_sob_last
= 0;
371 saved_char
= sb
->buf
[sb
->len
- ignore_footer
];
372 sb
->buf
[sb
->len
- ignore_footer
] = '\0';
375 trailer_info_get(&opts
, sb
->buf
, &info
);
378 sb
->buf
[sb
->len
- ignore_footer
] = saved_char
;
380 if (info
.trailer_block_start
== info
.trailer_block_end
)
383 for (i
= 0; i
< info
.trailer_nr
; i
++)
384 if (sob
&& !strncmp(info
.trailers
[i
], sob
->buf
, sob
->len
)) {
386 if (i
== info
.trailer_nr
- 1)
390 trailer_info_release(&info
);
399 static const char *gpg_sign_opt_quoted(struct replay_opts
*opts
)
401 static struct strbuf buf
= STRBUF_INIT
;
405 sq_quotef(&buf
, "-S%s", opts
->gpg_sign
);
409 static void replay_ctx_release(struct replay_ctx
*ctx
)
411 strbuf_release(&ctx
->current_fixups
);
412 strbuf_release(&ctx
->message
);
415 void replay_opts_release(struct replay_opts
*opts
)
417 struct replay_ctx
*ctx
= opts
->ctx
;
419 free(opts
->gpg_sign
);
420 free(opts
->reflog_action
);
421 free(opts
->default_strategy
);
422 free(opts
->strategy
);
423 strvec_clear (&opts
->xopts
);
425 release_revisions(opts
->revs
);
427 replay_ctx_release(ctx
);
431 int sequencer_remove_state(struct replay_opts
*opts
)
433 struct strbuf buf
= STRBUF_INIT
;
436 if (is_rebase_i(opts
) &&
437 strbuf_read_file(&buf
, rebase_path_refs_to_delete(), 0) > 0) {
440 char *eol
= strchr(p
, '\n');
443 if (delete_ref("(rebase) cleanup", p
, NULL
, 0) < 0) {
444 warning(_("could not delete '%s'"), p
);
454 strbuf_addstr(&buf
, get_dir(opts
));
455 if (remove_dir_recursively(&buf
, 0))
456 ret
= error(_("could not remove '%s'"), buf
.buf
);
457 strbuf_release(&buf
);
462 static const char *action_name(const struct replay_opts
*opts
)
464 switch (opts
->action
) {
468 return N_("cherry-pick");
469 case REPLAY_INTERACTIVE_REBASE
:
472 die(_("unknown action: %d"), opts
->action
);
475 struct commit_message
{
482 static const char *short_commit_name(struct repository
*r
, struct commit
*commit
)
484 return repo_find_unique_abbrev(r
, &commit
->object
.oid
, DEFAULT_ABBREV
);
487 static int get_message(struct commit
*commit
, struct commit_message
*out
)
489 const char *abbrev
, *subject
;
492 out
->message
= repo_logmsg_reencode(the_repository
, commit
, NULL
,
493 get_commit_output_encoding());
494 abbrev
= short_commit_name(the_repository
, commit
);
496 subject_len
= find_commit_subject(out
->message
, &subject
);
498 out
->subject
= xmemdupz(subject
, subject_len
);
499 out
->label
= xstrfmt("%s (%s)", abbrev
, out
->subject
);
500 out
->parent_label
= xstrfmt("parent of %s", out
->label
);
505 static void free_message(struct commit
*commit
, struct commit_message
*msg
)
507 free(msg
->parent_label
);
510 repo_unuse_commit_buffer(the_repository
, commit
, msg
->message
);
513 const char *rebase_resolvemsg
=
514 N_("Resolve all conflicts manually, mark them as resolved with\n"
515 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
516 "You can instead skip this commit: run \"git rebase --skip\".\n"
517 "To abort and get back to the state before \"git rebase\", run "
518 "\"git rebase --abort\".");
520 static void print_advice(struct repository
*r
, int show_hint
,
521 struct replay_opts
*opts
)
525 if (is_rebase_i(opts
))
526 msg
= rebase_resolvemsg
;
528 msg
= getenv("GIT_CHERRY_PICK_HELP");
531 advise_if_enabled(ADVICE_MERGE_CONFLICT
, "%s", msg
);
533 * A conflict has occurred but the porcelain
534 * (typically rebase --interactive) wants to take care
535 * of the commit itself so remove CHERRY_PICK_HEAD
537 refs_delete_ref(get_main_ref_store(r
), "", "CHERRY_PICK_HEAD",
544 advise_if_enabled(ADVICE_MERGE_CONFLICT
,
545 _("after resolving the conflicts, mark the corrected paths\n"
546 "with 'git add <paths>' or 'git rm <paths>'"));
547 else if (opts
->action
== REPLAY_PICK
)
548 advise_if_enabled(ADVICE_MERGE_CONFLICT
,
549 _("After resolving the conflicts, mark them with\n"
550 "\"git add/rm <pathspec>\", then run\n"
551 "\"git cherry-pick --continue\".\n"
552 "You can instead skip this commit with \"git cherry-pick --skip\".\n"
553 "To abort and get back to the state before \"git cherry-pick\",\n"
554 "run \"git cherry-pick --abort\"."));
555 else if (opts
->action
== REPLAY_REVERT
)
556 advise_if_enabled(ADVICE_MERGE_CONFLICT
,
557 _("After resolving the conflicts, mark them with\n"
558 "\"git add/rm <pathspec>\", then run\n"
559 "\"git revert --continue\".\n"
560 "You can instead skip this commit with \"git revert --skip\".\n"
561 "To abort and get back to the state before \"git revert\",\n"
562 "run \"git revert --abort\"."));
564 BUG("unexpected pick action in print_advice()");
568 static int write_message(const void *buf
, size_t len
, const char *filename
,
571 struct lock_file msg_file
= LOCK_INIT
;
573 int msg_fd
= hold_lock_file_for_update(&msg_file
, filename
, 0);
575 return error_errno(_("could not lock '%s'"), filename
);
576 if (write_in_full(msg_fd
, buf
, len
) < 0) {
577 error_errno(_("could not write to '%s'"), filename
);
578 rollback_lock_file(&msg_file
);
581 if (append_eol
&& write(msg_fd
, "\n", 1) < 0) {
582 error_errno(_("could not write eol to '%s'"), filename
);
583 rollback_lock_file(&msg_file
);
586 if (commit_lock_file(&msg_file
) < 0)
587 return error(_("failed to finalize '%s'"), filename
);
592 int read_oneliner(struct strbuf
*buf
,
593 const char *path
, unsigned flags
)
595 int orig_len
= buf
->len
;
597 if (strbuf_read_file(buf
, path
, 0) < 0) {
598 if ((flags
& READ_ONELINER_WARN_MISSING
) ||
599 (errno
!= ENOENT
&& errno
!= ENOTDIR
))
600 warning_errno(_("could not read '%s'"), path
);
604 if (buf
->len
> orig_len
&& buf
->buf
[buf
->len
- 1] == '\n') {
605 if (--buf
->len
> orig_len
&& buf
->buf
[buf
->len
- 1] == '\r')
607 buf
->buf
[buf
->len
] = '\0';
610 if ((flags
& READ_ONELINER_SKIP_IF_EMPTY
) && buf
->len
== orig_len
)
616 static struct tree
*empty_tree(struct repository
*r
)
618 return lookup_tree(r
, the_hash_algo
->empty_tree
);
621 static int error_dirty_index(struct repository
*repo
, struct replay_opts
*opts
)
623 if (repo_read_index_unmerged(repo
))
624 return error_resolve_conflict(action_name(opts
));
626 error(_("your local changes would be overwritten by %s."),
627 _(action_name(opts
)));
629 if (advice_enabled(ADVICE_COMMIT_BEFORE_MERGE
))
630 advise(_("commit your changes or stash them to proceed."));
634 static void update_abort_safety_file(void)
636 struct object_id head
;
638 /* Do nothing on a single-pick */
639 if (!file_exists(git_path_seq_dir()))
642 if (!repo_get_oid(the_repository
, "HEAD", &head
))
643 write_file(git_path_abort_safety_file(), "%s", oid_to_hex(&head
));
645 write_file(git_path_abort_safety_file(), "%s", "");
648 static int fast_forward_to(struct repository
*r
,
649 const struct object_id
*to
,
650 const struct object_id
*from
,
652 struct replay_opts
*opts
)
654 struct ref_transaction
*transaction
;
655 struct strbuf sb
= STRBUF_INIT
;
656 struct strbuf err
= STRBUF_INIT
;
659 if (checkout_fast_forward(r
, from
, to
, 1))
660 return -1; /* the callee should have complained already */
662 strbuf_addf(&sb
, "%s: fast-forward", action_name(opts
));
664 transaction
= ref_transaction_begin(&err
);
666 ref_transaction_update(transaction
, "HEAD",
667 to
, unborn
&& !is_rebase_i(opts
) ?
670 ref_transaction_commit(transaction
, &err
)) {
671 ref_transaction_free(transaction
);
672 error("%s", err
.buf
);
674 strbuf_release(&err
);
679 strbuf_release(&err
);
680 ref_transaction_free(transaction
);
681 update_abort_safety_file();
685 enum commit_msg_cleanup_mode
get_cleanup_mode(const char *cleanup_arg
,
688 if (!cleanup_arg
|| !strcmp(cleanup_arg
, "default"))
689 return use_editor
? COMMIT_MSG_CLEANUP_ALL
:
690 COMMIT_MSG_CLEANUP_SPACE
;
691 else if (!strcmp(cleanup_arg
, "verbatim"))
692 return COMMIT_MSG_CLEANUP_NONE
;
693 else if (!strcmp(cleanup_arg
, "whitespace"))
694 return COMMIT_MSG_CLEANUP_SPACE
;
695 else if (!strcmp(cleanup_arg
, "strip"))
696 return COMMIT_MSG_CLEANUP_ALL
;
697 else if (!strcmp(cleanup_arg
, "scissors"))
698 return use_editor
? COMMIT_MSG_CLEANUP_SCISSORS
:
699 COMMIT_MSG_CLEANUP_SPACE
;
701 die(_("Invalid cleanup mode %s"), cleanup_arg
);
705 * NB using int rather than enum cleanup_mode to stop clang's
706 * -Wtautological-constant-out-of-range-compare complaining that the comparison
709 static const char *describe_cleanup_mode(int cleanup_mode
)
711 static const char *modes
[] = { "whitespace",
716 if (cleanup_mode
< ARRAY_SIZE(modes
))
717 return modes
[cleanup_mode
];
719 BUG("invalid cleanup_mode provided (%d)", cleanup_mode
);
722 void append_conflicts_hint(struct index_state
*istate
,
723 struct strbuf
*msgbuf
, enum commit_msg_cleanup_mode cleanup_mode
)
727 if (cleanup_mode
== COMMIT_MSG_CLEANUP_SCISSORS
) {
728 strbuf_addch(msgbuf
, '\n');
729 wt_status_append_cut_line(msgbuf
);
730 strbuf_addstr(msgbuf
, comment_line_str
);
733 strbuf_addch(msgbuf
, '\n');
734 strbuf_commented_addf(msgbuf
, comment_line_str
, "Conflicts:\n");
735 for (i
= 0; i
< istate
->cache_nr
;) {
736 const struct cache_entry
*ce
= istate
->cache
[i
++];
738 strbuf_commented_addf(msgbuf
, comment_line_str
,
740 while (i
< istate
->cache_nr
&&
741 !strcmp(ce
->name
, istate
->cache
[i
]->name
))
747 static int do_recursive_merge(struct repository
*r
,
748 struct commit
*base
, struct commit
*next
,
749 const char *base_label
, const char *next_label
,
750 struct object_id
*head
, struct strbuf
*msgbuf
,
751 struct replay_opts
*opts
)
753 struct merge_options o
;
754 struct merge_result result
;
755 struct tree
*next_tree
, *base_tree
, *head_tree
;
756 int clean
, show_output
;
758 struct lock_file index_lock
= LOCK_INIT
;
760 if (repo_hold_locked_index(r
, &index_lock
, LOCK_REPORT_ON_ERROR
) < 0)
765 init_merge_options(&o
, r
);
766 o
.ancestor
= base
? base_label
: "(empty tree)";
768 o
.branch2
= next
? next_label
: "(empty tree)";
769 if (is_rebase_i(opts
))
771 o
.show_rename_progress
= 1;
773 head_tree
= parse_tree_indirect(head
);
775 return error(_("unable to read tree (%s)"), oid_to_hex(head
));
776 next_tree
= next
? repo_get_commit_tree(r
, next
) : empty_tree(r
);
777 base_tree
= base
? repo_get_commit_tree(r
, base
) : empty_tree(r
);
779 for (i
= 0; i
< opts
->xopts
.nr
; i
++)
780 parse_merge_opt(&o
, opts
->xopts
.v
[i
]);
782 if (!opts
->strategy
|| !strcmp(opts
->strategy
, "ort")) {
783 memset(&result
, 0, sizeof(result
));
784 merge_incore_nonrecursive(&o
, base_tree
, head_tree
, next_tree
,
786 show_output
= !is_rebase_i(opts
) || !result
.clean
;
788 * TODO: merge_switch_to_result will update index/working tree;
789 * we only really want to do that if !result.clean || this is
790 * the final patch to be picked. But determining this is the
791 * final patch would take some work, and "head_tree" would need
792 * to be replace with the tree the index matched before we
793 * started doing any picks.
795 merge_switch_to_result(&o
, head_tree
, &result
, 1, show_output
);
796 clean
= result
.clean
;
798 ensure_full_index(r
->index
);
799 clean
= merge_trees(&o
, head_tree
, next_tree
, base_tree
);
800 if (is_rebase_i(opts
) && clean
<= 0)
801 fputs(o
.obuf
.buf
, stdout
);
802 strbuf_release(&o
.obuf
);
805 rollback_lock_file(&index_lock
);
809 if (write_locked_index(r
->index
, &index_lock
,
810 COMMIT_LOCK
| SKIP_IF_UNCHANGED
))
812 * TRANSLATORS: %s will be "revert", "cherry-pick" or
815 return error(_("%s: Unable to write new index file"),
816 _(action_name(opts
)));
819 append_conflicts_hint(r
->index
, msgbuf
,
820 opts
->default_msg_cleanup
);
825 static struct object_id
*get_cache_tree_oid(struct index_state
*istate
)
827 if (!cache_tree_fully_valid(istate
->cache_tree
))
828 if (cache_tree_update(istate
, 0)) {
829 error(_("unable to update cache tree"));
833 return &istate
->cache_tree
->oid
;
836 static int is_index_unchanged(struct repository
*r
)
838 struct object_id head_oid
, *cache_tree_oid
;
839 const struct object_id
*head_tree_oid
;
840 struct commit
*head_commit
;
841 struct index_state
*istate
= r
->index
;
842 const char *head_name
;
844 if (!resolve_ref_unsafe("HEAD", RESOLVE_REF_READING
, &head_oid
, NULL
)) {
845 /* Check to see if this is an unborn branch */
846 head_name
= resolve_ref_unsafe("HEAD",
847 RESOLVE_REF_READING
| RESOLVE_REF_NO_RECURSE
,
850 !starts_with(head_name
, "refs/heads/") ||
851 !is_null_oid(&head_oid
))
852 return error(_("could not resolve HEAD commit"));
853 head_tree_oid
= the_hash_algo
->empty_tree
;
855 head_commit
= lookup_commit(r
, &head_oid
);
858 * If head_commit is NULL, check_commit, called from
859 * lookup_commit, would have indicated that head_commit is not
860 * a commit object already. repo_parse_commit() will return failure
861 * without further complaints in such a case. Otherwise, if
862 * the commit is invalid, repo_parse_commit() will complain. So
863 * there is nothing for us to say here. Just return failure.
865 if (repo_parse_commit(r
, head_commit
))
868 head_tree_oid
= get_commit_tree_oid(head_commit
);
871 if (!(cache_tree_oid
= get_cache_tree_oid(istate
)))
874 return oideq(cache_tree_oid
, head_tree_oid
);
877 static int write_author_script(const char *message
)
879 struct strbuf buf
= STRBUF_INIT
;
884 if (!*message
|| starts_with(message
, "\n")) {
886 /* Missing 'author' line? */
887 unlink(rebase_path_author_script());
889 } else if (skip_prefix(message
, "author ", &message
))
891 else if ((eol
= strchr(message
, '\n')))
896 strbuf_addstr(&buf
, "GIT_AUTHOR_NAME='");
897 while (*message
&& *message
!= '\n' && *message
!= '\r')
898 if (skip_prefix(message
, " <", &message
))
900 else if (*message
!= '\'')
901 strbuf_addch(&buf
, *(message
++));
903 strbuf_addf(&buf
, "'\\%c'", *(message
++));
904 strbuf_addstr(&buf
, "'\nGIT_AUTHOR_EMAIL='");
905 while (*message
&& *message
!= '\n' && *message
!= '\r')
906 if (skip_prefix(message
, "> ", &message
))
908 else if (*message
!= '\'')
909 strbuf_addch(&buf
, *(message
++));
911 strbuf_addf(&buf
, "'\\%c'", *(message
++));
912 strbuf_addstr(&buf
, "'\nGIT_AUTHOR_DATE='@");
913 while (*message
&& *message
!= '\n' && *message
!= '\r')
914 if (*message
!= '\'')
915 strbuf_addch(&buf
, *(message
++));
917 strbuf_addf(&buf
, "'\\%c'", *(message
++));
918 strbuf_addch(&buf
, '\'');
919 res
= write_message(buf
.buf
, buf
.len
, rebase_path_author_script(), 1);
920 strbuf_release(&buf
);
925 * Take a series of KEY='VALUE' lines where VALUE part is
926 * sq-quoted, and append <KEY, VALUE> at the end of the string list
928 static int parse_key_value_squoted(char *buf
, struct string_list
*list
)
931 struct string_list_item
*item
;
933 char *cp
= strchr(buf
, '=');
935 np
= strchrnul(buf
, '\n');
936 return error(_("no key present in '%.*s'"),
937 (int) (np
- buf
), buf
);
939 np
= strchrnul(cp
, '\n');
941 item
= string_list_append(list
, buf
);
943 buf
= np
+ (*np
== '\n');
947 return error(_("unable to dequote value of '%s'"),
949 item
->util
= xstrdup(cp
);
955 * Reads and parses the state directory's "author-script" file, and sets name,
956 * email and date accordingly.
957 * Returns 0 on success, -1 if the file could not be parsed.
959 * The author script is of the format:
961 * GIT_AUTHOR_NAME='$author_name'
962 * GIT_AUTHOR_EMAIL='$author_email'
963 * GIT_AUTHOR_DATE='$author_date'
965 * where $author_name, $author_email and $author_date are quoted. We are strict
966 * with our parsing, as the file was meant to be eval'd in the now-removed
967 * git-am.sh/git-rebase--interactive.sh scripts, and thus if the file differs
968 * from what this function expects, it is better to bail out than to do
969 * something that the user does not expect.
971 int read_author_script(const char *path
, char **name
, char **email
, char **date
,
974 struct strbuf buf
= STRBUF_INIT
;
975 struct string_list kv
= STRING_LIST_INIT_DUP
;
976 int retval
= -1; /* assume failure */
977 int i
, name_i
= -2, email_i
= -2, date_i
= -2, err
= 0;
979 if (strbuf_read_file(&buf
, path
, 256) <= 0) {
980 strbuf_release(&buf
);
981 if (errno
== ENOENT
&& allow_missing
)
984 return error_errno(_("could not open '%s' for reading"),
988 if (parse_key_value_squoted(buf
.buf
, &kv
))
991 for (i
= 0; i
< kv
.nr
; i
++) {
992 if (!strcmp(kv
.items
[i
].string
, "GIT_AUTHOR_NAME")) {
994 name_i
= error(_("'GIT_AUTHOR_NAME' already given"));
997 } else if (!strcmp(kv
.items
[i
].string
, "GIT_AUTHOR_EMAIL")) {
999 email_i
= error(_("'GIT_AUTHOR_EMAIL' already given"));
1002 } else if (!strcmp(kv
.items
[i
].string
, "GIT_AUTHOR_DATE")) {
1004 date_i
= error(_("'GIT_AUTHOR_DATE' already given"));
1008 err
= error(_("unknown variable '%s'"),
1009 kv
.items
[i
].string
);
1013 error(_("missing 'GIT_AUTHOR_NAME'"));
1015 error(_("missing 'GIT_AUTHOR_EMAIL'"));
1017 error(_("missing 'GIT_AUTHOR_DATE'"));
1018 if (name_i
< 0 || email_i
< 0 || date_i
< 0 || err
)
1020 *name
= kv
.items
[name_i
].util
;
1021 *email
= kv
.items
[email_i
].util
;
1022 *date
= kv
.items
[date_i
].util
;
1025 string_list_clear(&kv
, !!retval
);
1026 strbuf_release(&buf
);
1031 * Read a GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL AND GIT_AUTHOR_DATE from a
1032 * file with shell quoting into struct strvec. Returns -1 on
1033 * error, 0 otherwise.
1035 static int read_env_script(struct strvec
*env
)
1037 char *name
, *email
, *date
;
1039 if (read_author_script(rebase_path_author_script(),
1040 &name
, &email
, &date
, 0))
1043 strvec_pushf(env
, "GIT_AUTHOR_NAME=%s", name
);
1044 strvec_pushf(env
, "GIT_AUTHOR_EMAIL=%s", email
);
1045 strvec_pushf(env
, "GIT_AUTHOR_DATE=%s", date
);
1053 static char *get_author(const char *message
)
1058 a
= find_commit_header(message
, "author", &len
);
1060 return xmemdupz(a
, len
);
1065 static const char *author_date_from_env(const struct strvec
*env
)
1070 for (i
= 0; i
< env
->nr
; i
++)
1071 if (skip_prefix(env
->v
[i
],
1072 "GIT_AUTHOR_DATE=", &date
))
1075 * If GIT_AUTHOR_DATE is missing we should have already errored out when
1076 * reading the script
1078 BUG("GIT_AUTHOR_DATE missing from author script");
1081 static const char staged_changes_advice
[] =
1082 N_("you have staged changes in your working tree\n"
1083 "If these changes are meant to be squashed into the previous commit, run:\n"
1085 " git commit --amend %s\n"
1087 "If they are meant to go into a new commit, run:\n"
1091 "In both cases, once you're done, continue with:\n"
1093 " git rebase --continue\n");
1095 #define ALLOW_EMPTY (1<<0)
1096 #define EDIT_MSG (1<<1)
1097 #define AMEND_MSG (1<<2)
1098 #define CLEANUP_MSG (1<<3)
1099 #define VERIFY_MSG (1<<4)
1100 #define CREATE_ROOT_COMMIT (1<<5)
1101 #define VERBATIM_MSG (1<<6)
1103 static int run_command_silent_on_success(struct child_process
*cmd
)
1105 struct strbuf buf
= STRBUF_INIT
;
1108 cmd
->stdout_to_stderr
= 1;
1109 rc
= pipe_command(cmd
,
1115 fputs(buf
.buf
, stderr
);
1116 strbuf_release(&buf
);
1121 * If we are cherry-pick, and if the merge did not result in
1122 * hand-editing, we will hit this commit and inherit the original
1123 * author date and name.
1125 * If we are revert, or if our cherry-pick results in a hand merge,
1126 * we had better say that the current user is responsible for that.
1128 * An exception is when run_git_commit() is called during an
1129 * interactive rebase: in that case, we will want to retain the
1132 static int run_git_commit(const char *defmsg
,
1133 struct replay_opts
*opts
,
1136 struct replay_ctx
*ctx
= opts
->ctx
;
1137 struct child_process cmd
= CHILD_PROCESS_INIT
;
1139 if ((flags
& CLEANUP_MSG
) && (flags
& VERBATIM_MSG
))
1140 BUG("CLEANUP_MSG and VERBATIM_MSG are mutually exclusive");
1144 if (is_rebase_i(opts
) &&
1145 ((opts
->committer_date_is_author_date
&& !opts
->ignore_date
) ||
1146 !(!defmsg
&& (flags
& AMEND_MSG
))) &&
1147 read_env_script(&cmd
.env
)) {
1148 const char *gpg_opt
= gpg_sign_opt_quoted(opts
);
1150 return error(_(staged_changes_advice
),
1154 strvec_pushf(&cmd
.env
, GIT_REFLOG_ACTION
"=%s", ctx
->reflog_message
);
1156 if (opts
->committer_date_is_author_date
)
1157 strvec_pushf(&cmd
.env
, "GIT_COMMITTER_DATE=%s",
1160 author_date_from_env(&cmd
.env
));
1161 if (opts
->ignore_date
)
1162 strvec_push(&cmd
.env
, "GIT_AUTHOR_DATE=");
1164 strvec_push(&cmd
.args
, "commit");
1166 if (!(flags
& VERIFY_MSG
))
1167 strvec_push(&cmd
.args
, "-n");
1168 if ((flags
& AMEND_MSG
))
1169 strvec_push(&cmd
.args
, "--amend");
1171 strvec_pushf(&cmd
.args
, "-S%s", opts
->gpg_sign
);
1173 strvec_push(&cmd
.args
, "--no-gpg-sign");
1175 strvec_pushl(&cmd
.args
, "-F", defmsg
, NULL
);
1176 else if (!(flags
& EDIT_MSG
))
1177 strvec_pushl(&cmd
.args
, "-C", "HEAD", NULL
);
1178 if ((flags
& CLEANUP_MSG
))
1179 strvec_push(&cmd
.args
, "--cleanup=strip");
1180 if ((flags
& VERBATIM_MSG
))
1181 strvec_push(&cmd
.args
, "--cleanup=verbatim");
1182 if ((flags
& EDIT_MSG
))
1183 strvec_push(&cmd
.args
, "-e");
1184 else if (!(flags
& CLEANUP_MSG
) &&
1185 !opts
->signoff
&& !opts
->record_origin
&&
1186 !opts
->explicit_cleanup
)
1187 strvec_push(&cmd
.args
, "--cleanup=verbatim");
1189 if ((flags
& ALLOW_EMPTY
))
1190 strvec_push(&cmd
.args
, "--allow-empty");
1192 if (!(flags
& EDIT_MSG
))
1193 strvec_push(&cmd
.args
, "--allow-empty-message");
1195 if (is_rebase_i(opts
) && !(flags
& EDIT_MSG
))
1196 return run_command_silent_on_success(&cmd
);
1198 return run_command(&cmd
);
1201 static int rest_is_empty(const struct strbuf
*sb
, int start
)
1206 /* Check if the rest is just whitespace and Signed-off-by's. */
1207 for (i
= start
; i
< sb
->len
; i
++) {
1208 nl
= memchr(sb
->buf
+ i
, '\n', sb
->len
- i
);
1214 if (strlen(sign_off_header
) <= eol
- i
&&
1215 starts_with(sb
->buf
+ i
, sign_off_header
)) {
1220 if (!isspace(sb
->buf
[i
++]))
1227 void cleanup_message(struct strbuf
*msgbuf
,
1228 enum commit_msg_cleanup_mode cleanup_mode
, int verbose
)
1230 if (verbose
|| /* Truncate the message just before the diff, if any. */
1231 cleanup_mode
== COMMIT_MSG_CLEANUP_SCISSORS
)
1232 strbuf_setlen(msgbuf
, wt_status_locate_end(msgbuf
->buf
, msgbuf
->len
));
1233 if (cleanup_mode
!= COMMIT_MSG_CLEANUP_NONE
)
1234 strbuf_stripspace(msgbuf
,
1235 cleanup_mode
== COMMIT_MSG_CLEANUP_ALL
? comment_line_str
: NULL
);
1239 * Find out if the message in the strbuf contains only whitespace and
1240 * Signed-off-by lines.
1242 int message_is_empty(const struct strbuf
*sb
,
1243 enum commit_msg_cleanup_mode cleanup_mode
)
1245 if (cleanup_mode
== COMMIT_MSG_CLEANUP_NONE
&& sb
->len
)
1247 return rest_is_empty(sb
, 0);
1251 * See if the user edited the message in the editor or left what
1252 * was in the template intact
1254 int template_untouched(const struct strbuf
*sb
, const char *template_file
,
1255 enum commit_msg_cleanup_mode cleanup_mode
)
1257 struct strbuf tmpl
= STRBUF_INIT
;
1260 if (cleanup_mode
== COMMIT_MSG_CLEANUP_NONE
&& sb
->len
)
1263 if (!template_file
|| strbuf_read_file(&tmpl
, template_file
, 0) <= 0)
1266 strbuf_stripspace(&tmpl
,
1267 cleanup_mode
== COMMIT_MSG_CLEANUP_ALL
? comment_line_str
: NULL
);
1268 if (!skip_prefix(sb
->buf
, tmpl
.buf
, &start
))
1270 strbuf_release(&tmpl
);
1271 return rest_is_empty(sb
, start
- sb
->buf
);
1274 int update_head_with_reflog(const struct commit
*old_head
,
1275 const struct object_id
*new_head
,
1276 const char *action
, const struct strbuf
*msg
,
1279 struct ref_transaction
*transaction
;
1280 struct strbuf sb
= STRBUF_INIT
;
1285 strbuf_addstr(&sb
, action
);
1286 strbuf_addstr(&sb
, ": ");
1289 nl
= strchr(msg
->buf
, '\n');
1291 strbuf_add(&sb
, msg
->buf
, nl
+ 1 - msg
->buf
);
1293 strbuf_addbuf(&sb
, msg
);
1294 strbuf_addch(&sb
, '\n');
1297 transaction
= ref_transaction_begin(err
);
1299 ref_transaction_update(transaction
, "HEAD", new_head
,
1300 old_head
? &old_head
->object
.oid
: null_oid(),
1302 ref_transaction_commit(transaction
, err
)) {
1305 ref_transaction_free(transaction
);
1306 strbuf_release(&sb
);
1311 static int run_rewrite_hook(const struct object_id
*oldoid
,
1312 const struct object_id
*newoid
)
1314 struct child_process proc
= CHILD_PROCESS_INIT
;
1316 struct strbuf sb
= STRBUF_INIT
;
1317 const char *hook_path
= find_hook("post-rewrite");
1322 strvec_pushl(&proc
.args
, hook_path
, "amend", NULL
);
1324 proc
.stdout_to_stderr
= 1;
1325 proc
.trace2_hook_name
= "post-rewrite";
1327 code
= start_command(&proc
);
1330 strbuf_addf(&sb
, "%s %s\n", oid_to_hex(oldoid
), oid_to_hex(newoid
));
1331 sigchain_push(SIGPIPE
, SIG_IGN
);
1332 write_in_full(proc
.in
, sb
.buf
, sb
.len
);
1334 strbuf_release(&sb
);
1335 sigchain_pop(SIGPIPE
);
1336 return finish_command(&proc
);
1339 void commit_post_rewrite(struct repository
*r
,
1340 const struct commit
*old_head
,
1341 const struct object_id
*new_head
)
1343 struct notes_rewrite_cfg
*cfg
;
1345 cfg
= init_copy_notes_for_rewrite("amend");
1347 /* we are amending, so old_head is not NULL */
1348 copy_note_for_rewrite(cfg
, &old_head
->object
.oid
, new_head
);
1349 finish_copy_notes_for_rewrite(r
, cfg
, "Notes added by 'git commit --amend'");
1351 run_rewrite_hook(&old_head
->object
.oid
, new_head
);
1354 static int run_prepare_commit_msg_hook(struct repository
*r
,
1359 const char *name
, *arg1
= NULL
, *arg2
= NULL
;
1361 name
= git_path_commit_editmsg();
1362 if (write_message(msg
->buf
, msg
->len
, name
, 0))
1371 if (run_commit_hook(0, r
->index_file
, NULL
, "prepare-commit-msg", name
,
1373 ret
= error(_("'prepare-commit-msg' hook failed"));
1378 static const char implicit_ident_advice_noconfig
[] =
1379 N_("Your name and email address were configured automatically based\n"
1380 "on your username and hostname. Please check that they are accurate.\n"
1381 "You can suppress this message by setting them explicitly. Run the\n"
1382 "following command and follow the instructions in your editor to edit\n"
1383 "your configuration file:\n"
1385 " git config --global --edit\n"
1387 "After doing this, you may fix the identity used for this commit with:\n"
1389 " git commit --amend --reset-author\n");
1391 static const char implicit_ident_advice_config
[] =
1392 N_("Your name and email address were configured automatically based\n"
1393 "on your username and hostname. Please check that they are accurate.\n"
1394 "You can suppress this message by setting them explicitly:\n"
1396 " git config --global user.name \"Your Name\"\n"
1397 " git config --global user.email you@example.com\n"
1399 "After doing this, you may fix the identity used for this commit with:\n"
1401 " git commit --amend --reset-author\n");
1403 static const char *implicit_ident_advice(void)
1405 char *user_config
= interpolate_path("~/.gitconfig", 0);
1406 char *xdg_config
= xdg_config_home("config");
1407 int config_exists
= file_exists(user_config
) || file_exists(xdg_config
);
1413 return _(implicit_ident_advice_config
);
1415 return _(implicit_ident_advice_noconfig
);
1419 void print_commit_summary(struct repository
*r
,
1421 const struct object_id
*oid
,
1424 struct rev_info rev
;
1425 struct commit
*commit
;
1426 struct strbuf format
= STRBUF_INIT
;
1428 struct pretty_print_context pctx
= {0};
1429 struct strbuf author_ident
= STRBUF_INIT
;
1430 struct strbuf committer_ident
= STRBUF_INIT
;
1431 struct ref_store
*refs
;
1433 commit
= lookup_commit(r
, oid
);
1435 die(_("couldn't look up newly created commit"));
1436 if (repo_parse_commit(r
, commit
))
1437 die(_("could not parse newly created commit"));
1439 strbuf_addstr(&format
, "format:%h] %s");
1441 repo_format_commit_message(r
, commit
, "%an <%ae>", &author_ident
,
1443 repo_format_commit_message(r
, commit
, "%cn <%ce>", &committer_ident
,
1445 if (strbuf_cmp(&author_ident
, &committer_ident
)) {
1446 strbuf_addstr(&format
, "\n Author: ");
1447 strbuf_addbuf_percentquote(&format
, &author_ident
);
1449 if (flags
& SUMMARY_SHOW_AUTHOR_DATE
) {
1450 struct strbuf date
= STRBUF_INIT
;
1452 repo_format_commit_message(r
, commit
, "%ad", &date
, &pctx
);
1453 strbuf_addstr(&format
, "\n Date: ");
1454 strbuf_addbuf_percentquote(&format
, &date
);
1455 strbuf_release(&date
);
1457 if (!committer_ident_sufficiently_given()) {
1458 strbuf_addstr(&format
, "\n Committer: ");
1459 strbuf_addbuf_percentquote(&format
, &committer_ident
);
1460 if (advice_enabled(ADVICE_IMPLICIT_IDENTITY
)) {
1461 strbuf_addch(&format
, '\n');
1462 strbuf_addstr(&format
, implicit_ident_advice());
1465 strbuf_release(&author_ident
);
1466 strbuf_release(&committer_ident
);
1468 repo_init_revisions(r
, &rev
, prefix
);
1469 setup_revisions(0, NULL
, &rev
, NULL
);
1472 rev
.diffopt
.output_format
=
1473 DIFF_FORMAT_SHORTSTAT
| DIFF_FORMAT_SUMMARY
;
1475 rev
.verbose_header
= 1;
1476 rev
.show_root_diff
= 1;
1477 get_commit_format(format
.buf
, &rev
);
1478 rev
.always_show_header
= 0;
1479 rev
.diffopt
.detect_rename
= DIFF_DETECT_RENAME
;
1480 diff_setup_done(&rev
.diffopt
);
1482 refs
= get_main_ref_store(r
);
1483 head
= refs_resolve_ref_unsafe(refs
, "HEAD", 0, NULL
, NULL
);
1485 die(_("unable to resolve HEAD after creating commit"));
1486 if (!strcmp(head
, "HEAD"))
1487 head
= _("detached HEAD");
1489 skip_prefix(head
, "refs/heads/", &head
);
1490 printf("[%s%s ", head
, (flags
& SUMMARY_INITIAL_COMMIT
) ?
1491 _(" (root-commit)") : "");
1493 if (!log_tree_commit(&rev
, commit
)) {
1494 rev
.always_show_header
= 1;
1495 rev
.use_terminator
= 1;
1496 log_tree_commit(&rev
, commit
);
1499 release_revisions(&rev
);
1500 strbuf_release(&format
);
1503 static int parse_head(struct repository
*r
, struct commit
**head
)
1505 struct commit
*current_head
;
1506 struct object_id oid
;
1508 if (repo_get_oid(r
, "HEAD", &oid
)) {
1509 current_head
= NULL
;
1511 current_head
= lookup_commit_reference(r
, &oid
);
1513 return error(_("could not parse HEAD"));
1514 if (!oideq(&oid
, ¤t_head
->object
.oid
)) {
1515 warning(_("HEAD %s is not a commit!"),
1518 if (repo_parse_commit(r
, current_head
))
1519 return error(_("could not parse HEAD commit"));
1521 *head
= current_head
;
1527 * Try to commit without forking 'git commit'. In some cases we need
1528 * to run 'git commit' to display an error message
1531 * -1 - error unable to commit
1533 * 1 - run 'git commit'
1535 static int try_to_commit(struct repository
*r
,
1536 struct strbuf
*msg
, const char *author
,
1537 struct replay_opts
*opts
, unsigned int flags
,
1538 struct object_id
*oid
)
1540 struct replay_ctx
*ctx
= opts
->ctx
;
1541 struct object_id tree
;
1542 struct commit
*current_head
= NULL
;
1543 struct commit_list
*parents
= NULL
;
1544 struct commit_extra_header
*extra
= NULL
;
1545 struct strbuf err
= STRBUF_INIT
;
1546 struct strbuf commit_msg
= STRBUF_INIT
;
1547 char *amend_author
= NULL
;
1548 const char *committer
= NULL
;
1549 const char *hook_commit
= NULL
;
1550 enum commit_msg_cleanup_mode cleanup
;
1553 if ((flags
& CLEANUP_MSG
) && (flags
& VERBATIM_MSG
))
1554 BUG("CLEANUP_MSG and VERBATIM_MSG are mutually exclusive");
1556 if (parse_head(r
, ¤t_head
))
1559 if (flags
& AMEND_MSG
) {
1560 const char *exclude_gpgsig
[] = { "gpgsig", "gpgsig-sha256", NULL
};
1561 const char *out_enc
= get_commit_output_encoding();
1562 const char *message
= repo_logmsg_reencode(r
, current_head
,
1566 const char *orig_message
= NULL
;
1568 find_commit_subject(message
, &orig_message
);
1570 strbuf_addstr(msg
, orig_message
);
1571 hook_commit
= "HEAD";
1573 author
= amend_author
= get_author(message
);
1574 repo_unuse_commit_buffer(r
, current_head
,
1577 res
= error(_("unable to parse commit author"));
1580 parents
= copy_commit_list(current_head
->parents
);
1581 extra
= read_commit_extra_headers(current_head
, exclude_gpgsig
);
1582 } else if (current_head
&&
1583 (!(flags
& CREATE_ROOT_COMMIT
) || (flags
& AMEND_MSG
))) {
1584 commit_list_insert(current_head
, &parents
);
1587 if (write_index_as_tree(&tree
, r
->index
, r
->index_file
, 0, NULL
)) {
1588 res
= error(_("git write-tree failed to write a tree"));
1592 if (!(flags
& ALLOW_EMPTY
)) {
1593 struct commit
*first_parent
= current_head
;
1595 if (flags
& AMEND_MSG
) {
1596 if (current_head
->parents
) {
1597 first_parent
= current_head
->parents
->item
;
1598 if (repo_parse_commit(r
, first_parent
)) {
1599 res
= error(_("could not parse HEAD commit"));
1603 first_parent
= NULL
;
1606 if (oideq(first_parent
1607 ? get_commit_tree_oid(first_parent
)
1608 : the_hash_algo
->empty_tree
,
1610 res
= 1; /* run 'git commit' to display error message */
1615 if (hook_exists("prepare-commit-msg")) {
1616 res
= run_prepare_commit_msg_hook(r
, msg
, hook_commit
);
1619 if (strbuf_read_file(&commit_msg
, git_path_commit_editmsg(),
1621 res
= error_errno(_("unable to read commit message "
1623 git_path_commit_editmsg());
1629 if (flags
& CLEANUP_MSG
)
1630 cleanup
= COMMIT_MSG_CLEANUP_ALL
;
1631 else if (flags
& VERBATIM_MSG
)
1632 cleanup
= COMMIT_MSG_CLEANUP_NONE
;
1633 else if ((opts
->signoff
|| opts
->record_origin
) &&
1634 !opts
->explicit_cleanup
)
1635 cleanup
= COMMIT_MSG_CLEANUP_SPACE
;
1637 cleanup
= opts
->default_msg_cleanup
;
1639 if (cleanup
!= COMMIT_MSG_CLEANUP_NONE
)
1640 strbuf_stripspace(msg
,
1641 cleanup
== COMMIT_MSG_CLEANUP_ALL
? comment_line_str
: NULL
);
1642 if ((flags
& EDIT_MSG
) && message_is_empty(msg
, cleanup
)) {
1643 res
= 1; /* run 'git commit' to display error message */
1647 if (opts
->committer_date_is_author_date
) {
1648 struct ident_split id
;
1649 struct strbuf date
= STRBUF_INIT
;
1651 if (!opts
->ignore_date
) {
1652 if (split_ident_line(&id
, author
, (int)strlen(author
)) < 0) {
1653 res
= error(_("invalid author identity '%s'"),
1657 if (!id
.date_begin
) {
1659 "corrupt author: missing date information"));
1662 strbuf_addf(&date
, "@%.*s %.*s",
1663 (int)(id
.date_end
- id
.date_begin
),
1665 (int)(id
.tz_end
- id
.tz_begin
),
1670 committer
= fmt_ident(getenv("GIT_COMMITTER_NAME"),
1671 getenv("GIT_COMMITTER_EMAIL"),
1672 WANT_COMMITTER_IDENT
,
1673 opts
->ignore_date
? NULL
: date
.buf
,
1675 strbuf_release(&date
);
1680 if (opts
->ignore_date
) {
1681 struct ident_split id
;
1684 if (split_ident_line(&id
, author
, strlen(author
)) < 0) {
1685 error(_("invalid author identity '%s'"), author
);
1688 name
= xmemdupz(id
.name_begin
, id
.name_end
- id
.name_begin
);
1689 email
= xmemdupz(id
.mail_begin
, id
.mail_end
- id
.mail_begin
);
1690 author
= fmt_ident(name
, email
, WANT_AUTHOR_IDENT
, NULL
,
1696 if (commit_tree_extended(msg
->buf
, msg
->len
, &tree
, parents
, oid
,
1697 author
, committer
, opts
->gpg_sign
, extra
)) {
1698 res
= error(_("failed to write commit object"));
1702 if (update_head_with_reflog(current_head
, oid
, ctx
->reflog_message
,
1704 res
= error("%s", err
.buf
);
1708 run_commit_hook(0, r
->index_file
, NULL
, "post-commit", NULL
);
1709 if (flags
& AMEND_MSG
)
1710 commit_post_rewrite(r
, current_head
, oid
);
1713 free_commit_extra_headers(extra
);
1714 strbuf_release(&err
);
1715 strbuf_release(&commit_msg
);
1721 static int write_rebase_head(struct object_id
*oid
)
1723 if (update_ref("rebase", "REBASE_HEAD", oid
,
1724 NULL
, REF_NO_DEREF
, UPDATE_REFS_MSG_ON_ERR
))
1725 return error(_("could not update %s"), "REBASE_HEAD");
1730 static int do_commit(struct repository
*r
,
1731 const char *msg_file
, const char *author
,
1732 struct replay_opts
*opts
, unsigned int flags
,
1733 struct object_id
*oid
)
1737 if (!(flags
& EDIT_MSG
) && !(flags
& VERIFY_MSG
)) {
1738 struct object_id oid
;
1739 struct strbuf sb
= STRBUF_INIT
;
1741 if (msg_file
&& strbuf_read_file(&sb
, msg_file
, 2048) < 0)
1742 return error_errno(_("unable to read commit message "
1746 res
= try_to_commit(r
, msg_file
? &sb
: NULL
,
1747 author
, opts
, flags
, &oid
);
1748 strbuf_release(&sb
);
1750 refs_delete_ref(get_main_ref_store(r
), "",
1751 "CHERRY_PICK_HEAD", NULL
, REF_NO_DEREF
);
1752 unlink(git_path_merge_msg(r
));
1753 if (!is_rebase_i(opts
))
1754 print_commit_summary(r
, NULL
, &oid
,
1755 SUMMARY_SHOW_AUTHOR_DATE
);
1760 if (is_rebase_i(opts
) && oid
)
1761 if (write_rebase_head(oid
))
1763 return run_git_commit(msg_file
, opts
, flags
);
1769 static int is_original_commit_empty(struct commit
*commit
)
1771 const struct object_id
*ptree_oid
;
1773 if (repo_parse_commit(the_repository
, commit
))
1774 return error(_("could not parse commit %s"),
1775 oid_to_hex(&commit
->object
.oid
));
1776 if (commit
->parents
) {
1777 struct commit
*parent
= commit
->parents
->item
;
1778 if (repo_parse_commit(the_repository
, parent
))
1779 return error(_("could not parse parent commit %s"),
1780 oid_to_hex(&parent
->object
.oid
));
1781 ptree_oid
= get_commit_tree_oid(parent
);
1783 ptree_oid
= the_hash_algo
->empty_tree
; /* commit is root */
1786 return oideq(ptree_oid
, get_commit_tree_oid(commit
));
1790 * Should empty commits be allowed? Return status:
1791 * <0: Error in is_index_unchanged(r) or is_original_commit_empty(commit)
1792 * 0: Halt on empty commit
1793 * 1: Allow empty commit
1794 * 2: Drop empty commit
1796 static int allow_empty(struct repository
*r
,
1797 struct replay_opts
*opts
,
1798 struct commit
*commit
)
1800 int index_unchanged
, originally_empty
;
1803 * For a commit that is initially empty, allow_empty determines if it
1804 * should be kept or not
1806 * For a commit that becomes empty, keep_redundant_commits and
1807 * drop_redundant_commits determine whether the commit should be kept or
1808 * dropped. If neither is specified, halt.
1810 index_unchanged
= is_index_unchanged(r
);
1811 if (index_unchanged
< 0)
1812 return index_unchanged
;
1813 if (!index_unchanged
)
1814 return 0; /* we do not have to say --allow-empty */
1816 originally_empty
= is_original_commit_empty(commit
);
1817 if (originally_empty
< 0)
1818 return originally_empty
;
1819 if (originally_empty
)
1820 return opts
->allow_empty
;
1821 else if (opts
->keep_redundant_commits
)
1823 else if (opts
->drop_redundant_commits
)
1832 } todo_command_info
[] = {
1833 [TODO_PICK
] = { 'p', "pick" },
1834 [TODO_REVERT
] = { 0, "revert" },
1835 [TODO_EDIT
] = { 'e', "edit" },
1836 [TODO_REWORD
] = { 'r', "reword" },
1837 [TODO_FIXUP
] = { 'f', "fixup" },
1838 [TODO_SQUASH
] = { 's', "squash" },
1839 [TODO_EXEC
] = { 'x', "exec" },
1840 [TODO_BREAK
] = { 'b', "break" },
1841 [TODO_LABEL
] = { 'l', "label" },
1842 [TODO_RESET
] = { 't', "reset" },
1843 [TODO_MERGE
] = { 'm', "merge" },
1844 [TODO_UPDATE_REF
] = { 'u', "update-ref" },
1845 [TODO_NOOP
] = { 0, "noop" },
1846 [TODO_DROP
] = { 'd', "drop" },
1847 [TODO_COMMENT
] = { 0, NULL
},
1850 static const char *command_to_string(const enum todo_command command
)
1852 if (command
< TODO_COMMENT
)
1853 return todo_command_info
[command
].str
;
1854 if (command
== TODO_COMMENT
)
1855 return comment_line_str
;
1856 die(_("unknown command: %d"), command
);
1859 static char command_to_char(const enum todo_command command
)
1861 if (command
< TODO_COMMENT
)
1862 return todo_command_info
[command
].c
;
1866 static int is_noop(const enum todo_command command
)
1868 return TODO_NOOP
<= command
;
1871 static int is_fixup(enum todo_command command
)
1873 return command
== TODO_FIXUP
|| command
== TODO_SQUASH
;
1876 /* Does this command create a (non-merge) commit? */
1877 static int is_pick_or_similar(enum todo_command command
)
1892 enum todo_item_flags
{
1893 TODO_EDIT_MERGE_MSG
= (1 << 0),
1894 TODO_REPLACE_FIXUP_MSG
= (1 << 1),
1895 TODO_EDIT_FIXUP_MSG
= (1 << 2),
1898 static const char first_commit_msg_str
[] = N_("This is the 1st commit message:");
1899 static const char nth_commit_msg_fmt
[] = N_("This is the commit message #%d:");
1900 static const char skip_first_commit_msg_str
[] = N_("The 1st commit message will be skipped:");
1901 static const char skip_nth_commit_msg_fmt
[] = N_("The commit message #%d will be skipped:");
1902 static const char combined_commit_msg_fmt
[] = N_("This is a combination of %d commits.");
1904 static int is_fixup_flag(enum todo_command command
, unsigned flag
)
1906 return command
== TODO_FIXUP
&& ((flag
& TODO_REPLACE_FIXUP_MSG
) ||
1907 (flag
& TODO_EDIT_FIXUP_MSG
));
1911 * Wrapper around strbuf_add_commented_lines() which avoids double
1912 * commenting commit subjects.
1914 static void add_commented_lines(struct strbuf
*buf
, const void *str
, size_t len
)
1916 const char *s
= str
;
1917 while (starts_with_mem(s
, len
, comment_line_str
)) {
1919 const char *n
= memchr(s
, '\n', len
);
1924 strbuf_add(buf
, s
, count
);
1928 strbuf_add_commented_lines(buf
, s
, len
, comment_line_str
);
1931 /* Does the current fixup chain contain a squash command? */
1932 static int seen_squash(struct replay_ctx
*ctx
)
1934 return starts_with(ctx
->current_fixups
.buf
, "squash") ||
1935 strstr(ctx
->current_fixups
.buf
, "\nsquash");
1938 static void update_comment_bufs(struct strbuf
*buf1
, struct strbuf
*buf2
, int n
)
1940 strbuf_setlen(buf1
, 2);
1941 strbuf_addf(buf1
, _(nth_commit_msg_fmt
), n
);
1942 strbuf_addch(buf1
, '\n');
1943 strbuf_setlen(buf2
, 2);
1944 strbuf_addf(buf2
, _(skip_nth_commit_msg_fmt
), n
);
1945 strbuf_addch(buf2
, '\n');
1949 * Comment out any un-commented commit messages, updating the message comments
1950 * to say they will be skipped but do not comment out the empty lines that
1951 * surround commit messages and their comments.
1953 static void update_squash_message_for_fixup(struct strbuf
*msg
)
1955 void (*copy_lines
)(struct strbuf
*, const void *, size_t) = strbuf_add
;
1956 struct strbuf buf1
= STRBUF_INIT
, buf2
= STRBUF_INIT
;
1957 const char *s
, *start
;
1959 size_t orig_msg_len
;
1962 strbuf_addf(&buf1
, "# %s\n", _(first_commit_msg_str
));
1963 strbuf_addf(&buf2
, "# %s\n", _(skip_first_commit_msg_str
));
1964 s
= start
= orig_msg
= strbuf_detach(msg
, &orig_msg_len
);
1968 if (skip_prefix(s
, buf1
.buf
, &next
)) {
1970 * Copy the last message, preserving the blank line
1971 * preceding the current line
1973 off
= (s
> start
+ 1 && s
[-2] == '\n') ? 1 : 0;
1974 copy_lines(msg
, start
, s
- start
- off
);
1976 strbuf_addch(msg
, '\n');
1978 * The next message needs to be commented out but the
1979 * message header is already commented out so just copy
1980 * it and the blank line that follows it.
1982 strbuf_addbuf(msg
, &buf2
);
1984 strbuf_addch(msg
, *next
++);
1986 copy_lines
= add_commented_lines
;
1987 update_comment_bufs(&buf1
, &buf2
, ++i
);
1988 } else if (skip_prefix(s
, buf2
.buf
, &next
)) {
1989 off
= (s
> start
+ 1 && s
[-2] == '\n') ? 1 : 0;
1990 copy_lines(msg
, start
, s
- start
- off
);
1993 copy_lines
= strbuf_add
;
1994 update_comment_bufs(&buf1
, &buf2
, ++i
);
1996 s
= strchr(s
, '\n');
2001 copy_lines(msg
, start
, orig_msg_len
- (start
- orig_msg
));
2003 strbuf_release(&buf1
);
2004 strbuf_release(&buf2
);
2007 static int append_squash_message(struct strbuf
*buf
, const char *body
,
2008 enum todo_command command
, struct replay_opts
*opts
,
2011 struct replay_ctx
*ctx
= opts
->ctx
;
2012 const char *fixup_msg
;
2013 size_t commented_len
= 0, fixup_off
;
2015 * amend is non-interactive and not normally used with fixup!
2016 * or squash! commits, so only comment out those subjects when
2017 * squashing commit messages.
2019 if (starts_with(body
, "amend!") ||
2020 ((command
== TODO_SQUASH
|| seen_squash(ctx
)) &&
2021 (starts_with(body
, "squash!") || starts_with(body
, "fixup!"))))
2022 commented_len
= commit_subject_length(body
);
2024 strbuf_addf(buf
, "\n%s ", comment_line_str
);
2025 strbuf_addf(buf
, _(nth_commit_msg_fmt
),
2026 ++ctx
->current_fixup_count
+ 1);
2027 strbuf_addstr(buf
, "\n\n");
2028 strbuf_add_commented_lines(buf
, body
, commented_len
, comment_line_str
);
2029 /* buf->buf may be reallocated so store an offset into the buffer */
2030 fixup_off
= buf
->len
;
2031 strbuf_addstr(buf
, body
+ commented_len
);
2033 /* fixup -C after squash behaves like squash */
2034 if (is_fixup_flag(command
, flag
) && !seen_squash(ctx
)) {
2036 * We're replacing the commit message so we need to
2037 * append the Signed-off-by: trailer if the user
2038 * requested '--signoff'.
2041 append_signoff(buf
, 0, 0);
2043 if ((command
== TODO_FIXUP
) &&
2044 (flag
& TODO_REPLACE_FIXUP_MSG
) &&
2045 (file_exists(rebase_path_fixup_msg()) ||
2046 !file_exists(rebase_path_squash_msg()))) {
2047 fixup_msg
= skip_blank_lines(buf
->buf
+ fixup_off
);
2048 if (write_message(fixup_msg
, strlen(fixup_msg
),
2049 rebase_path_fixup_msg(), 0) < 0)
2050 return error(_("cannot write '%s'"),
2051 rebase_path_fixup_msg());
2053 unlink(rebase_path_fixup_msg());
2056 unlink(rebase_path_fixup_msg());
2062 static int update_squash_messages(struct repository
*r
,
2063 enum todo_command command
,
2064 struct commit
*commit
,
2065 struct replay_opts
*opts
,
2068 struct replay_ctx
*ctx
= opts
->ctx
;
2069 struct strbuf buf
= STRBUF_INIT
;
2071 const char *message
, *body
;
2072 const char *encoding
= get_commit_output_encoding();
2074 if (ctx
->current_fixup_count
> 0) {
2075 struct strbuf header
= STRBUF_INIT
;
2078 if (strbuf_read_file(&buf
, rebase_path_squash_msg(), 9) <= 0)
2079 return error(_("could not read '%s'"),
2080 rebase_path_squash_msg());
2082 eol
= !starts_with(buf
.buf
, comment_line_str
) ?
2083 buf
.buf
: strchrnul(buf
.buf
, '\n');
2085 strbuf_addf(&header
, "%s ", comment_line_str
);
2086 strbuf_addf(&header
, _(combined_commit_msg_fmt
),
2087 ctx
->current_fixup_count
+ 2);
2088 strbuf_splice(&buf
, 0, eol
- buf
.buf
, header
.buf
, header
.len
);
2089 strbuf_release(&header
);
2090 if (is_fixup_flag(command
, flag
) && !seen_squash(ctx
))
2091 update_squash_message_for_fixup(&buf
);
2093 struct object_id head
;
2094 struct commit
*head_commit
;
2095 const char *head_message
, *body
;
2097 if (repo_get_oid(r
, "HEAD", &head
))
2098 return error(_("need a HEAD to fixup"));
2099 if (!(head_commit
= lookup_commit_reference(r
, &head
)))
2100 return error(_("could not read HEAD"));
2101 if (!(head_message
= repo_logmsg_reencode(r
, head_commit
, NULL
,
2103 return error(_("could not read HEAD's commit message"));
2105 find_commit_subject(head_message
, &body
);
2106 if (command
== TODO_FIXUP
&& !flag
&& write_message(body
, strlen(body
),
2107 rebase_path_fixup_msg(), 0) < 0) {
2108 repo_unuse_commit_buffer(r
, head_commit
, head_message
);
2109 return error(_("cannot write '%s'"), rebase_path_fixup_msg());
2111 strbuf_addf(&buf
, "%s ", comment_line_str
);
2112 strbuf_addf(&buf
, _(combined_commit_msg_fmt
), 2);
2113 strbuf_addf(&buf
, "\n%s ", comment_line_str
);
2114 strbuf_addstr(&buf
, is_fixup_flag(command
, flag
) ?
2115 _(skip_first_commit_msg_str
) :
2116 _(first_commit_msg_str
));
2117 strbuf_addstr(&buf
, "\n\n");
2118 if (is_fixup_flag(command
, flag
))
2119 strbuf_add_commented_lines(&buf
, body
, strlen(body
),
2122 strbuf_addstr(&buf
, body
);
2124 repo_unuse_commit_buffer(r
, head_commit
, head_message
);
2127 if (!(message
= repo_logmsg_reencode(r
, commit
, NULL
, encoding
)))
2128 return error(_("could not read commit message of %s"),
2129 oid_to_hex(&commit
->object
.oid
));
2130 find_commit_subject(message
, &body
);
2132 if (command
== TODO_SQUASH
|| is_fixup_flag(command
, flag
)) {
2133 res
= append_squash_message(&buf
, body
, command
, opts
, flag
);
2134 } else if (command
== TODO_FIXUP
) {
2135 strbuf_addf(&buf
, "\n%s ", comment_line_str
);
2136 strbuf_addf(&buf
, _(skip_nth_commit_msg_fmt
),
2137 ++ctx
->current_fixup_count
+ 1);
2138 strbuf_addstr(&buf
, "\n\n");
2139 strbuf_add_commented_lines(&buf
, body
, strlen(body
),
2142 return error(_("unknown command: %d"), command
);
2143 repo_unuse_commit_buffer(r
, commit
, message
);
2146 res
= write_message(buf
.buf
, buf
.len
, rebase_path_squash_msg(),
2148 strbuf_release(&buf
);
2151 strbuf_addf(&ctx
->current_fixups
, "%s%s %s",
2152 ctx
->current_fixups
.len
? "\n" : "",
2153 command_to_string(command
),
2154 oid_to_hex(&commit
->object
.oid
));
2155 res
= write_message(ctx
->current_fixups
.buf
,
2156 ctx
->current_fixups
.len
,
2157 rebase_path_current_fixups(), 0);
2163 static void flush_rewritten_pending(void)
2165 struct strbuf buf
= STRBUF_INIT
;
2166 struct object_id newoid
;
2169 if (strbuf_read_file(&buf
, rebase_path_rewritten_pending(), (GIT_MAX_HEXSZ
+ 1) * 2) > 0 &&
2170 !repo_get_oid(the_repository
, "HEAD", &newoid
) &&
2171 (out
= fopen_or_warn(rebase_path_rewritten_list(), "a"))) {
2172 char *bol
= buf
.buf
, *eol
;
2175 eol
= strchrnul(bol
, '\n');
2176 fprintf(out
, "%.*s %s\n", (int)(eol
- bol
),
2177 bol
, oid_to_hex(&newoid
));
2183 unlink(rebase_path_rewritten_pending());
2185 strbuf_release(&buf
);
2188 static void record_in_rewritten(struct object_id
*oid
,
2189 enum todo_command next_command
)
2191 FILE *out
= fopen_or_warn(rebase_path_rewritten_pending(), "a");
2196 fprintf(out
, "%s\n", oid_to_hex(oid
));
2199 if (!is_fixup(next_command
))
2200 flush_rewritten_pending();
2203 static int should_edit(struct replay_opts
*opts
) {
2206 * Note that we only handle the case of non-conflicted
2207 * commits; continue_single_pick() handles the conflicted
2208 * commits itself instead of calling this function.
2210 return (opts
->action
== REPLAY_REVERT
&& isatty(0)) ? 1 : 0;
2214 static void refer_to_commit(struct replay_opts
*opts
,
2215 struct strbuf
*msgbuf
, struct commit
*commit
)
2217 if (opts
->commit_use_reference
) {
2218 struct pretty_print_context ctx
= {
2219 .abbrev
= DEFAULT_ABBREV
,
2220 .date_mode
.type
= DATE_SHORT
,
2222 repo_format_commit_message(the_repository
, commit
,
2223 "%h (%s, %ad)", msgbuf
, &ctx
);
2225 strbuf_addstr(msgbuf
, oid_to_hex(&commit
->object
.oid
));
2229 static int do_pick_commit(struct repository
*r
,
2230 struct todo_item
*item
,
2231 struct replay_opts
*opts
,
2232 int final_fixup
, int *check_todo
)
2234 struct replay_ctx
*ctx
= opts
->ctx
;
2235 unsigned int flags
= should_edit(opts
) ? EDIT_MSG
: 0;
2236 const char *msg_file
= should_edit(opts
) ? NULL
: git_path_merge_msg(r
);
2237 struct object_id head
;
2238 struct commit
*base
, *next
, *parent
;
2239 const char *base_label
, *next_label
;
2240 char *author
= NULL
;
2241 struct commit_message msg
= { NULL
, NULL
, NULL
, NULL
};
2242 int res
, unborn
= 0, reword
= 0, allow
, drop_commit
;
2243 enum todo_command command
= item
->command
;
2244 struct commit
*commit
= item
->commit
;
2246 if (opts
->no_commit
) {
2248 * We do not intend to commit immediately. We just want to
2249 * merge the differences in, so let's compute the tree
2250 * that represents the "current" state for the merge machinery
2253 if (write_index_as_tree(&head
, r
->index
, r
->index_file
, 0, NULL
))
2254 return error(_("your index file is unmerged."));
2256 unborn
= repo_get_oid(r
, "HEAD", &head
);
2257 /* Do we want to generate a root commit? */
2258 if (is_pick_or_similar(command
) && opts
->have_squash_onto
&&
2259 oideq(&head
, &opts
->squash_onto
)) {
2260 if (is_fixup(command
))
2261 return error(_("cannot fixup root commit"));
2262 flags
|= CREATE_ROOT_COMMIT
;
2265 oidcpy(&head
, the_hash_algo
->empty_tree
);
2266 if (index_differs_from(r
, unborn
? empty_tree_oid_hex() : "HEAD",
2268 return error_dirty_index(r
, opts
);
2270 discard_index(r
->index
);
2272 if (!commit
->parents
)
2274 else if (commit
->parents
->next
) {
2275 /* Reverting or cherry-picking a merge commit */
2277 struct commit_list
*p
;
2279 if (!opts
->mainline
)
2280 return error(_("commit %s is a merge but no -m option was given."),
2281 oid_to_hex(&commit
->object
.oid
));
2283 for (cnt
= 1, p
= commit
->parents
;
2284 cnt
!= opts
->mainline
&& p
;
2287 if (cnt
!= opts
->mainline
|| !p
)
2288 return error(_("commit %s does not have parent %d"),
2289 oid_to_hex(&commit
->object
.oid
), opts
->mainline
);
2291 } else if (1 < opts
->mainline
)
2293 * Non-first parent explicitly specified as mainline for
2296 return error(_("commit %s does not have parent %d"),
2297 oid_to_hex(&commit
->object
.oid
), opts
->mainline
);
2299 parent
= commit
->parents
->item
;
2301 if (get_message(commit
, &msg
) != 0)
2302 return error(_("cannot get commit message for %s"),
2303 oid_to_hex(&commit
->object
.oid
));
2305 if (opts
->allow_ff
&& !is_fixup(command
) &&
2306 ((parent
&& oideq(&parent
->object
.oid
, &head
)) ||
2307 (!parent
&& unborn
))) {
2308 if (is_rebase_i(opts
))
2309 write_author_script(msg
.message
);
2310 res
= fast_forward_to(r
, &commit
->object
.oid
, &head
, unborn
,
2312 if (res
|| command
!= TODO_REWORD
)
2316 goto fast_forward_edit
;
2318 if (parent
&& repo_parse_commit(r
, parent
) < 0)
2319 /* TRANSLATORS: The first %s will be a "todo" command like
2320 "revert" or "pick", the second %s a SHA1. */
2321 return error(_("%s: cannot parse parent commit %s"),
2322 command_to_string(command
),
2323 oid_to_hex(&parent
->object
.oid
));
2326 * "commit" is an existing commit. We would want to apply
2327 * the difference it introduces since its first parent "prev"
2328 * on top of the current HEAD if we are cherry-pick. Or the
2329 * reverse of it if we are revert.
2332 if (command
== TODO_REVERT
) {
2333 const char *orig_subject
;
2336 base_label
= msg
.label
;
2338 next_label
= msg
.parent_label
;
2339 if (opts
->commit_use_reference
) {
2340 strbuf_addstr(&ctx
->message
,
2341 "# *** SAY WHY WE ARE REVERTING ON THE TITLE LINE ***");
2342 } else if (skip_prefix(msg
.subject
, "Revert \"", &orig_subject
) &&
2344 * We don't touch pre-existing repeated reverts, because
2345 * theoretically these can be nested arbitrarily deeply,
2346 * thus requiring excessive complexity to deal with.
2348 !starts_with(orig_subject
, "Revert \"")) {
2349 strbuf_addstr(&ctx
->message
, "Reapply \"");
2350 strbuf_addstr(&ctx
->message
, orig_subject
);
2352 strbuf_addstr(&ctx
->message
, "Revert \"");
2353 strbuf_addstr(&ctx
->message
, msg
.subject
);
2354 strbuf_addstr(&ctx
->message
, "\"");
2356 strbuf_addstr(&ctx
->message
, "\n\nThis reverts commit ");
2357 refer_to_commit(opts
, &ctx
->message
, commit
);
2359 if (commit
->parents
&& commit
->parents
->next
) {
2360 strbuf_addstr(&ctx
->message
, ", reversing\nchanges made to ");
2361 refer_to_commit(opts
, &ctx
->message
, parent
);
2363 strbuf_addstr(&ctx
->message
, ".\n");
2368 base_label
= msg
.parent_label
;
2370 next_label
= msg
.label
;
2372 /* Append the commit log message to ctx->message. */
2373 if (find_commit_subject(msg
.message
, &p
))
2374 strbuf_addstr(&ctx
->message
, p
);
2376 if (opts
->record_origin
) {
2377 strbuf_complete_line(&ctx
->message
);
2378 if (!has_conforming_footer(&ctx
->message
, NULL
, 0))
2379 strbuf_addch(&ctx
->message
, '\n');
2380 strbuf_addstr(&ctx
->message
, cherry_picked_prefix
);
2381 strbuf_addstr(&ctx
->message
, oid_to_hex(&commit
->object
.oid
));
2382 strbuf_addstr(&ctx
->message
, ")\n");
2384 if (!is_fixup(command
))
2385 author
= get_author(msg
.message
);
2387 ctx
->have_message
= 1;
2389 if (command
== TODO_REWORD
)
2391 else if (is_fixup(command
)) {
2392 if (update_squash_messages(r
, command
, commit
,
2393 opts
, item
->flags
)) {
2399 msg_file
= rebase_path_squash_msg();
2400 else if (file_exists(rebase_path_fixup_msg())) {
2401 flags
|= VERBATIM_MSG
;
2402 msg_file
= rebase_path_fixup_msg();
2404 const char *dest
= git_path_squash_msg(r
);
2406 if (copy_file(dest
, rebase_path_squash_msg(), 0666)) {
2407 res
= error(_("could not copy '%s' to '%s'"),
2408 rebase_path_squash_msg(), dest
);
2411 unlink(git_path_merge_msg(r
));
2417 if (opts
->signoff
&& !is_fixup(command
))
2418 append_signoff(&ctx
->message
, 0, 0);
2420 if (is_rebase_i(opts
) && write_author_script(msg
.message
) < 0)
2422 else if (!opts
->strategy
||
2423 !strcmp(opts
->strategy
, "recursive") ||
2424 !strcmp(opts
->strategy
, "ort") ||
2425 command
== TODO_REVERT
) {
2426 res
= do_recursive_merge(r
, base
, next
, base_label
, next_label
,
2427 &head
, &ctx
->message
, opts
);
2431 res
|= write_message(ctx
->message
.buf
, ctx
->message
.len
,
2432 git_path_merge_msg(r
), 0);
2434 struct commit_list
*common
= NULL
;
2435 struct commit_list
*remotes
= NULL
;
2437 res
= write_message(ctx
->message
.buf
, ctx
->message
.len
,
2438 git_path_merge_msg(r
), 0);
2440 commit_list_insert(base
, &common
);
2441 commit_list_insert(next
, &remotes
);
2442 res
|= try_merge_command(r
, opts
->strategy
,
2443 opts
->xopts
.nr
, opts
->xopts
.v
,
2444 common
, oid_to_hex(&head
), remotes
);
2445 free_commit_list(common
);
2446 free_commit_list(remotes
);
2450 * If the merge was clean or if it failed due to conflict, we write
2451 * CHERRY_PICK_HEAD for the subsequent invocation of commit to use.
2452 * However, if the merge did not even start, then we don't want to
2455 if ((command
== TODO_PICK
|| command
== TODO_REWORD
||
2456 command
== TODO_EDIT
) && !opts
->no_commit
&&
2457 (res
== 0 || res
== 1) &&
2458 update_ref(NULL
, "CHERRY_PICK_HEAD", &commit
->object
.oid
, NULL
,
2459 REF_NO_DEREF
, UPDATE_REFS_MSG_ON_ERR
))
2461 if (command
== TODO_REVERT
&& ((opts
->no_commit
&& res
== 0) || res
== 1) &&
2462 update_ref(NULL
, "REVERT_HEAD", &commit
->object
.oid
, NULL
,
2463 REF_NO_DEREF
, UPDATE_REFS_MSG_ON_ERR
))
2467 error(command
== TODO_REVERT
2468 ? _("could not revert %s... %s")
2469 : _("could not apply %s... %s"),
2470 short_commit_name(r
, commit
), msg
.subject
);
2471 print_advice(r
, res
== 1, opts
);
2472 repo_rerere(r
, opts
->allow_rerere_auto
);
2477 allow
= allow_empty(r
, opts
, commit
);
2481 } else if (allow
== 1) {
2482 flags
|= ALLOW_EMPTY
;
2483 } else if (allow
== 2) {
2485 refs_delete_ref(get_main_ref_store(r
), "", "CHERRY_PICK_HEAD",
2486 NULL
, REF_NO_DEREF
);
2487 unlink(git_path_merge_msg(r
));
2488 refs_delete_ref(get_main_ref_store(r
), "", "AUTO_MERGE",
2489 NULL
, REF_NO_DEREF
);
2491 _("dropping %s %s -- patch contents already upstream\n"),
2492 oid_to_hex(&commit
->object
.oid
), msg
.subject
);
2493 } /* else allow == 0 and there's nothing special to do */
2494 if (!opts
->no_commit
&& !drop_commit
) {
2495 if (author
|| command
== TODO_REVERT
|| (flags
& AMEND_MSG
))
2496 res
= do_commit(r
, msg_file
, author
, opts
, flags
,
2497 commit
? &commit
->object
.oid
: NULL
);
2499 res
= error(_("unable to parse commit author"));
2500 *check_todo
= !!(flags
& EDIT_MSG
);
2501 if (!res
&& reword
) {
2503 res
= run_git_commit(NULL
, opts
, EDIT_MSG
|
2504 VERIFY_MSG
| AMEND_MSG
|
2505 (flags
& ALLOW_EMPTY
));
2511 if (!res
&& final_fixup
) {
2512 unlink(rebase_path_fixup_msg());
2513 unlink(rebase_path_squash_msg());
2514 unlink(rebase_path_current_fixups());
2515 strbuf_reset(&ctx
->current_fixups
);
2516 ctx
->current_fixup_count
= 0;
2520 free_message(commit
, &msg
);
2522 update_abort_safety_file();
2527 static int prepare_revs(struct replay_opts
*opts
)
2530 * picking (but not reverting) ranges (but not individual revisions)
2531 * should be done in reverse
2533 if (opts
->action
== REPLAY_PICK
&& !opts
->revs
->no_walk
)
2534 opts
->revs
->reverse
^= 1;
2536 if (prepare_revision_walk(opts
->revs
))
2537 return error(_("revision walk setup failed"));
2542 static int read_and_refresh_cache(struct repository
*r
,
2543 struct replay_opts
*opts
)
2545 struct lock_file index_lock
= LOCK_INIT
;
2546 int index_fd
= repo_hold_locked_index(r
, &index_lock
, 0);
2547 if (repo_read_index(r
) < 0) {
2548 rollback_lock_file(&index_lock
);
2549 return error(_("git %s: failed to read the index"),
2552 refresh_index(r
->index
, REFRESH_QUIET
|REFRESH_UNMERGED
, NULL
, NULL
, NULL
);
2554 if (index_fd
>= 0) {
2555 if (write_locked_index(r
->index
, &index_lock
,
2556 COMMIT_LOCK
| SKIP_IF_UNCHANGED
)) {
2557 return error(_("git %s: failed to refresh the index"),
2563 * If we are resolving merges in any way other than "ort", then
2564 * expand the sparse index.
2566 if (opts
->strategy
&& strcmp(opts
->strategy
, "ort"))
2567 ensure_full_index(r
->index
);
2571 void todo_list_release(struct todo_list
*todo_list
)
2573 strbuf_release(&todo_list
->buf
);
2574 FREE_AND_NULL(todo_list
->items
);
2575 todo_list
->nr
= todo_list
->alloc
= 0;
2578 static struct todo_item
*append_new_todo(struct todo_list
*todo_list
)
2580 ALLOC_GROW(todo_list
->items
, todo_list
->nr
+ 1, todo_list
->alloc
);
2581 return todo_list
->items
+ todo_list
->nr
++;
2584 const char *todo_item_get_arg(struct todo_list
*todo_list
,
2585 struct todo_item
*item
)
2587 return todo_list
->buf
.buf
+ item
->arg_offset
;
2590 static int is_command(enum todo_command command
, const char **bol
)
2592 const char *str
= todo_command_info
[command
].str
;
2593 const char nick
= todo_command_info
[command
].c
;
2594 const char *p
= *bol
;
2596 return (skip_prefix(p
, str
, &p
) || (nick
&& *p
++ == nick
)) &&
2597 (*p
== ' ' || *p
== '\t' || *p
== '\n' || *p
== '\r' || !*p
) &&
2601 static int check_label_or_ref_arg(enum todo_command command
, const char *arg
)
2606 * '#' is not a valid label as the merge command uses it to
2607 * separate merge parents from the commit subject.
2609 if (!strcmp(arg
, "#") ||
2610 check_refname_format(arg
, REFNAME_ALLOW_ONELEVEL
))
2611 return error(_("'%s' is not a valid label"), arg
);
2614 case TODO_UPDATE_REF
:
2615 if (check_refname_format(arg
, REFNAME_ALLOW_ONELEVEL
))
2616 return error(_("'%s' is not a valid refname"), arg
);
2617 if (check_refname_format(arg
, 0))
2618 return error(_("update-ref requires a fully qualified "
2619 "refname e.g. refs/heads/%s"), arg
);
2623 BUG("unexpected todo_command");
2629 static int check_merge_commit_insn(enum todo_command command
)
2633 error(_("'%s' does not accept merge commits"),
2634 todo_command_info
[command
].str
);
2635 advise_if_enabled(ADVICE_REBASE_TODO_ERROR
, _(
2637 * TRANSLATORS: 'pick' and 'merge -C' should not be
2640 "'pick' does not take a merge commit. If you wanted to\n"
2641 "replay the merge, use 'merge -C' on the commit."));
2645 error(_("'%s' does not accept merge commits"),
2646 todo_command_info
[command
].str
);
2647 advise_if_enabled(ADVICE_REBASE_TODO_ERROR
, _(
2649 * TRANSLATORS: 'reword' and 'merge -c' should not be
2652 "'reword' does not take a merge commit. If you wanted to\n"
2653 "replay the merge and reword the commit message, use\n"
2654 "'merge -c' on the commit"));
2658 error(_("'%s' does not accept merge commits"),
2659 todo_command_info
[command
].str
);
2660 advise_if_enabled(ADVICE_REBASE_TODO_ERROR
, _(
2662 * TRANSLATORS: 'edit', 'merge -C' and 'break' should
2663 * not be translated.
2665 "'edit' does not take a merge commit. If you wanted to\n"
2666 "replay the merge, use 'merge -C' on the commit, and then\n"
2667 "'break' to give the control back to you so that you can\n"
2668 "do 'git commit --amend && git rebase --continue'."));
2673 return error(_("cannot squash merge commit into another commit"));
2679 BUG("unexpected todo_command");
2683 static int parse_insn_line(struct repository
*r
, struct replay_opts
*opts
,
2684 struct todo_item
*item
, const char *buf
,
2685 const char *bol
, char *eol
)
2687 struct object_id commit_oid
;
2688 char *end_of_object_name
;
2689 int i
, saved
, status
, padding
;
2694 bol
+= strspn(bol
, " \t");
2696 if (bol
== eol
|| *bol
== '\r' || starts_with_mem(bol
, eol
- bol
, comment_line_str
)) {
2697 item
->command
= TODO_COMMENT
;
2698 item
->commit
= NULL
;
2699 item
->arg_offset
= bol
- buf
;
2700 item
->arg_len
= eol
- bol
;
2704 for (i
= 0; i
< TODO_COMMENT
; i
++)
2705 if (is_command(i
, &bol
)) {
2709 if (i
>= TODO_COMMENT
)
2710 return error(_("invalid command '%.*s'"),
2711 (int)strcspn(bol
, " \t\r\n"), bol
);
2713 /* Eat up extra spaces/ tabs before object name */
2714 padding
= strspn(bol
, " \t");
2717 if (item
->command
== TODO_NOOP
|| item
->command
== TODO_BREAK
) {
2719 return error(_("%s does not accept arguments: '%s'"),
2720 command_to_string(item
->command
), bol
);
2721 item
->commit
= NULL
;
2722 item
->arg_offset
= bol
- buf
;
2723 item
->arg_len
= eol
- bol
;
2728 return error(_("missing arguments for %s"),
2729 command_to_string(item
->command
));
2731 if (item
->command
== TODO_EXEC
|| item
->command
== TODO_LABEL
||
2732 item
->command
== TODO_RESET
|| item
->command
== TODO_UPDATE_REF
) {
2735 item
->commit
= NULL
;
2736 item
->arg_offset
= bol
- buf
;
2737 item
->arg_len
= (int)(eol
- bol
);
2738 if (item
->command
== TODO_LABEL
||
2739 item
->command
== TODO_UPDATE_REF
) {
2742 ret
= check_label_or_ref_arg(item
->command
, bol
);
2748 if (item
->command
== TODO_FIXUP
) {
2749 if (skip_prefix(bol
, "-C", &bol
)) {
2750 bol
+= strspn(bol
, " \t");
2751 item
->flags
|= TODO_REPLACE_FIXUP_MSG
;
2752 } else if (skip_prefix(bol
, "-c", &bol
)) {
2753 bol
+= strspn(bol
, " \t");
2754 item
->flags
|= TODO_EDIT_FIXUP_MSG
;
2758 if (item
->command
== TODO_MERGE
) {
2759 if (skip_prefix(bol
, "-C", &bol
))
2760 bol
+= strspn(bol
, " \t");
2761 else if (skip_prefix(bol
, "-c", &bol
)) {
2762 bol
+= strspn(bol
, " \t");
2763 item
->flags
|= TODO_EDIT_MERGE_MSG
;
2765 item
->flags
|= TODO_EDIT_MERGE_MSG
;
2766 item
->commit
= NULL
;
2767 item
->arg_offset
= bol
- buf
;
2768 item
->arg_len
= (int)(eol
- bol
);
2773 end_of_object_name
= (char *) bol
+ strcspn(bol
, " \t\n");
2774 saved
= *end_of_object_name
;
2775 *end_of_object_name
= '\0';
2776 status
= repo_get_oid(r
, bol
, &commit_oid
);
2778 error(_("could not parse '%s'"), bol
); /* return later */
2779 *end_of_object_name
= saved
;
2781 bol
= end_of_object_name
+ strspn(end_of_object_name
, " \t");
2782 item
->arg_offset
= bol
- buf
;
2783 item
->arg_len
= (int)(eol
- bol
);
2788 item
->commit
= lookup_commit_reference(r
, &commit_oid
);
2791 if (is_rebase_i(opts
) &&
2792 item
->commit
->parents
&& item
->commit
->parents
->next
)
2793 return check_merge_commit_insn(item
->command
);
2797 int sequencer_get_last_command(struct repository
*r UNUSED
, enum replay_action
*action
)
2799 const char *todo_file
, *bol
;
2800 struct strbuf buf
= STRBUF_INIT
;
2803 todo_file
= git_path_todo_file();
2804 if (strbuf_read_file(&buf
, todo_file
, 0) < 0) {
2805 if (errno
== ENOENT
|| errno
== ENOTDIR
)
2808 return error_errno("unable to open '%s'", todo_file
);
2810 bol
= buf
.buf
+ strspn(buf
.buf
, " \t\r\n");
2811 if (is_command(TODO_PICK
, &bol
) && (*bol
== ' ' || *bol
== '\t'))
2812 *action
= REPLAY_PICK
;
2813 else if (is_command(TODO_REVERT
, &bol
) &&
2814 (*bol
== ' ' || *bol
== '\t'))
2815 *action
= REPLAY_REVERT
;
2819 strbuf_release(&buf
);
2824 int todo_list_parse_insn_buffer(struct repository
*r
, struct replay_opts
*opts
,
2825 char *buf
, struct todo_list
*todo_list
)
2827 struct todo_item
*item
;
2828 char *p
= buf
, *next_p
;
2829 int i
, res
= 0, fixup_okay
= file_exists(rebase_path_done());
2831 todo_list
->current
= todo_list
->nr
= todo_list
->total_nr
= 0;
2833 for (i
= 1; *p
; i
++, p
= next_p
) {
2834 char *eol
= strchrnul(p
, '\n');
2836 next_p
= *eol
? eol
+ 1 /* skip LF */ : eol
;
2838 if (p
!= eol
&& eol
[-1] == '\r')
2839 eol
--; /* strip Carriage Return */
2841 item
= append_new_todo(todo_list
);
2842 item
->offset_in_buf
= p
- todo_list
->buf
.buf
;
2843 if (parse_insn_line(r
, opts
, item
, buf
, p
, eol
)) {
2844 res
= error(_("invalid line %d: %.*s"),
2845 i
, (int)(eol
- p
), p
);
2846 item
->command
= TODO_COMMENT
+ 1;
2847 item
->arg_offset
= p
- buf
;
2848 item
->arg_len
= (int)(eol
- p
);
2849 item
->commit
= NULL
;
2852 if (item
->command
!= TODO_COMMENT
)
2853 todo_list
->total_nr
++;
2857 else if (is_fixup(item
->command
))
2858 res
= error(_("cannot '%s' without a previous commit"),
2859 command_to_string(item
->command
));
2860 else if (!is_noop(item
->command
))
2867 static int count_commands(struct todo_list
*todo_list
)
2871 for (i
= 0; i
< todo_list
->nr
; i
++)
2872 if (todo_list
->items
[i
].command
!= TODO_COMMENT
)
2878 static int get_item_line_offset(struct todo_list
*todo_list
, int index
)
2880 return index
< todo_list
->nr
?
2881 todo_list
->items
[index
].offset_in_buf
: todo_list
->buf
.len
;
2884 static const char *get_item_line(struct todo_list
*todo_list
, int index
)
2886 return todo_list
->buf
.buf
+ get_item_line_offset(todo_list
, index
);
2889 static int get_item_line_length(struct todo_list
*todo_list
, int index
)
2891 return get_item_line_offset(todo_list
, index
+ 1)
2892 - get_item_line_offset(todo_list
, index
);
2895 static ssize_t
strbuf_read_file_or_whine(struct strbuf
*sb
, const char *path
)
2900 fd
= open(path
, O_RDONLY
);
2902 return error_errno(_("could not open '%s'"), path
);
2903 len
= strbuf_read(sb
, fd
, 0);
2906 return error(_("could not read '%s'."), path
);
2910 static int have_finished_the_last_pick(void)
2912 struct strbuf buf
= STRBUF_INIT
;
2914 const char *todo_path
= git_path_todo_file();
2917 if (strbuf_read_file(&buf
, todo_path
, 0) < 0) {
2918 if (errno
== ENOENT
) {
2921 error_errno("unable to open '%s'", todo_path
);
2925 /* If there is only one line then we are done */
2926 eol
= strchr(buf
.buf
, '\n');
2927 if (!eol
|| !eol
[1])
2930 strbuf_release(&buf
);
2935 void sequencer_post_commit_cleanup(struct repository
*r
, int verbose
)
2937 struct replay_opts opts
= REPLAY_OPTS_INIT
;
2938 int need_cleanup
= 0;
2940 if (refs_ref_exists(get_main_ref_store(r
), "CHERRY_PICK_HEAD")) {
2941 if (!refs_delete_ref(get_main_ref_store(r
), "",
2942 "CHERRY_PICK_HEAD", NULL
, REF_NO_DEREF
) &&
2944 warning(_("cancelling a cherry picking in progress"));
2945 opts
.action
= REPLAY_PICK
;
2949 if (refs_ref_exists(get_main_ref_store(r
), "REVERT_HEAD")) {
2950 if (!refs_delete_ref(get_main_ref_store(r
), "", "REVERT_HEAD",
2951 NULL
, REF_NO_DEREF
) &&
2953 warning(_("cancelling a revert in progress"));
2954 opts
.action
= REPLAY_REVERT
;
2958 refs_delete_ref(get_main_ref_store(r
), "", "AUTO_MERGE",
2959 NULL
, REF_NO_DEREF
);
2964 if (!have_finished_the_last_pick())
2967 sequencer_remove_state(&opts
);
2969 replay_opts_release(&opts
);
2972 static void todo_list_write_total_nr(struct todo_list
*todo_list
)
2974 FILE *f
= fopen_or_warn(rebase_path_msgtotal(), "w");
2977 fprintf(f
, "%d\n", todo_list
->total_nr
);
2982 static int read_populate_todo(struct repository
*r
,
2983 struct todo_list
*todo_list
,
2984 struct replay_opts
*opts
)
2986 const char *todo_file
= get_todo_path(opts
);
2989 strbuf_reset(&todo_list
->buf
);
2990 if (strbuf_read_file_or_whine(&todo_list
->buf
, todo_file
) < 0)
2993 res
= todo_list_parse_insn_buffer(r
, opts
, todo_list
->buf
.buf
, todo_list
);
2995 if (is_rebase_i(opts
))
2996 return error(_("please fix this using "
2997 "'git rebase --edit-todo'."));
2998 return error(_("unusable instruction sheet: '%s'"), todo_file
);
3001 if (!todo_list
->nr
&&
3002 (!is_rebase_i(opts
) || !file_exists(rebase_path_done())))
3003 return error(_("no commits parsed."));
3005 if (!is_rebase_i(opts
)) {
3006 enum todo_command valid
=
3007 opts
->action
== REPLAY_PICK
? TODO_PICK
: TODO_REVERT
;
3010 for (i
= 0; i
< todo_list
->nr
; i
++)
3011 if (valid
== todo_list
->items
[i
].command
)
3013 else if (valid
== TODO_PICK
)
3014 return error(_("cannot cherry-pick during a revert."));
3016 return error(_("cannot revert during a cherry-pick."));
3019 if (is_rebase_i(opts
)) {
3020 struct todo_list done
= TODO_LIST_INIT
;
3022 if (strbuf_read_file(&done
.buf
, rebase_path_done(), 0) > 0 &&
3023 !todo_list_parse_insn_buffer(r
, opts
, done
.buf
.buf
, &done
))
3024 todo_list
->done_nr
= count_commands(&done
);
3026 todo_list
->done_nr
= 0;
3028 todo_list
->total_nr
= todo_list
->done_nr
3029 + count_commands(todo_list
);
3030 todo_list_release(&done
);
3032 todo_list_write_total_nr(todo_list
);
3038 static int git_config_string_dup(char **dest
,
3039 const char *var
, const char *value
)
3042 return config_error_nonbool(var
);
3044 *dest
= xstrdup(value
);
3048 static int populate_opts_cb(const char *key
, const char *value
,
3049 const struct config_context
*ctx
,
3052 struct replay_opts
*opts
= data
;
3057 else if (!strcmp(key
, "options.no-commit"))
3058 opts
->no_commit
= git_config_bool_or_int(key
, value
, ctx
->kvi
, &error_flag
);
3059 else if (!strcmp(key
, "options.edit"))
3060 opts
->edit
= git_config_bool_or_int(key
, value
, ctx
->kvi
, &error_flag
);
3061 else if (!strcmp(key
, "options.allow-empty"))
3063 git_config_bool_or_int(key
, value
, ctx
->kvi
, &error_flag
);
3064 else if (!strcmp(key
, "options.allow-empty-message"))
3065 opts
->allow_empty_message
=
3066 git_config_bool_or_int(key
, value
, ctx
->kvi
, &error_flag
);
3067 else if (!strcmp(key
, "options.drop-redundant-commits"))
3068 opts
->drop_redundant_commits
=
3069 git_config_bool_or_int(key
, value
, ctx
->kvi
, &error_flag
);
3070 else if (!strcmp(key
, "options.keep-redundant-commits"))
3071 opts
->keep_redundant_commits
=
3072 git_config_bool_or_int(key
, value
, ctx
->kvi
, &error_flag
);
3073 else if (!strcmp(key
, "options.signoff"))
3074 opts
->signoff
= git_config_bool_or_int(key
, value
, ctx
->kvi
, &error_flag
);
3075 else if (!strcmp(key
, "options.record-origin"))
3076 opts
->record_origin
= git_config_bool_or_int(key
, value
, ctx
->kvi
, &error_flag
);
3077 else if (!strcmp(key
, "options.allow-ff"))
3078 opts
->allow_ff
= git_config_bool_or_int(key
, value
, ctx
->kvi
, &error_flag
);
3079 else if (!strcmp(key
, "options.mainline"))
3080 opts
->mainline
= git_config_int(key
, value
, ctx
->kvi
);
3081 else if (!strcmp(key
, "options.strategy"))
3082 git_config_string_dup(&opts
->strategy
, key
, value
);
3083 else if (!strcmp(key
, "options.gpg-sign"))
3084 git_config_string_dup(&opts
->gpg_sign
, key
, value
);
3085 else if (!strcmp(key
, "options.strategy-option")) {
3086 strvec_push(&opts
->xopts
, value
);
3087 } else if (!strcmp(key
, "options.allow-rerere-auto"))
3088 opts
->allow_rerere_auto
=
3089 git_config_bool_or_int(key
, value
, ctx
->kvi
, &error_flag
) ?
3090 RERERE_AUTOUPDATE
: RERERE_NOAUTOUPDATE
;
3091 else if (!strcmp(key
, "options.default-msg-cleanup")) {
3092 opts
->explicit_cleanup
= 1;
3093 opts
->default_msg_cleanup
= get_cleanup_mode(value
, 1);
3095 return error(_("invalid key: %s"), key
);
3098 return error(_("invalid value for '%s': '%s'"), key
, value
);
3103 static void parse_strategy_opts(struct replay_opts
*opts
, char *raw_opts
)
3108 char *strategy_opts_string
= raw_opts
;
3110 if (*strategy_opts_string
== ' ')
3111 strategy_opts_string
++;
3113 count
= split_cmdline(strategy_opts_string
, &argv
);
3115 BUG("could not split '%s': %s", strategy_opts_string
,
3116 split_cmdline_strerror(count
));
3117 for (i
= 0; i
< count
; i
++) {
3118 const char *arg
= argv
[i
];
3120 skip_prefix(arg
, "--", &arg
);
3121 strvec_push(&opts
->xopts
, arg
);
3126 static void read_strategy_opts(struct replay_opts
*opts
, struct strbuf
*buf
)
3129 if (!read_oneliner(buf
, rebase_path_strategy(), 0))
3131 opts
->strategy
= strbuf_detach(buf
, NULL
);
3132 if (!read_oneliner(buf
, rebase_path_strategy_opts(), 0))
3135 parse_strategy_opts(opts
, buf
->buf
);
3138 static int read_populate_opts(struct replay_opts
*opts
)
3140 struct replay_ctx
*ctx
= opts
->ctx
;
3142 if (is_rebase_i(opts
)) {
3143 struct strbuf buf
= STRBUF_INIT
;
3146 if (read_oneliner(&buf
, rebase_path_gpg_sign_opt(),
3147 READ_ONELINER_SKIP_IF_EMPTY
)) {
3148 if (!starts_with(buf
.buf
, "-S"))
3151 free(opts
->gpg_sign
);
3152 opts
->gpg_sign
= xstrdup(buf
.buf
+ 2);
3157 if (read_oneliner(&buf
, rebase_path_allow_rerere_autoupdate(),
3158 READ_ONELINER_SKIP_IF_EMPTY
)) {
3159 if (!strcmp(buf
.buf
, "--rerere-autoupdate"))
3160 opts
->allow_rerere_auto
= RERERE_AUTOUPDATE
;
3161 else if (!strcmp(buf
.buf
, "--no-rerere-autoupdate"))
3162 opts
->allow_rerere_auto
= RERERE_NOAUTOUPDATE
;
3166 if (file_exists(rebase_path_verbose()))
3169 if (file_exists(rebase_path_quiet()))
3172 if (file_exists(rebase_path_signoff())) {
3177 if (file_exists(rebase_path_cdate_is_adate())) {
3179 opts
->committer_date_is_author_date
= 1;
3182 if (file_exists(rebase_path_ignore_date())) {
3184 opts
->ignore_date
= 1;
3187 if (file_exists(rebase_path_reschedule_failed_exec()))
3188 opts
->reschedule_failed_exec
= 1;
3189 else if (file_exists(rebase_path_no_reschedule_failed_exec()))
3190 opts
->reschedule_failed_exec
= 0;
3192 if (file_exists(rebase_path_drop_redundant_commits()))
3193 opts
->drop_redundant_commits
= 1;
3195 if (file_exists(rebase_path_keep_redundant_commits()))
3196 opts
->keep_redundant_commits
= 1;
3198 read_strategy_opts(opts
, &buf
);
3201 if (read_oneliner(&ctx
->current_fixups
,
3202 rebase_path_current_fixups(),
3203 READ_ONELINER_SKIP_IF_EMPTY
)) {
3204 const char *p
= ctx
->current_fixups
.buf
;
3205 ctx
->current_fixup_count
= 1;
3206 while ((p
= strchr(p
, '\n'))) {
3207 ctx
->current_fixup_count
++;
3212 if (read_oneliner(&buf
, rebase_path_squash_onto(), 0)) {
3213 if (repo_get_oid_committish(the_repository
, buf
.buf
, &opts
->squash_onto
) < 0) {
3214 ret
= error(_("unusable squash-onto"));
3217 opts
->have_squash_onto
= 1;
3221 strbuf_release(&buf
);
3225 if (!file_exists(git_path_opts_file()))
3228 * The function git_parse_source(), called from git_config_from_file(),
3229 * may die() in case of a syntactically incorrect file. We do not care
3230 * about this case, though, because we wrote that file ourselves, so we
3231 * are pretty certain that it is syntactically correct.
3233 if (git_config_from_file(populate_opts_cb
, git_path_opts_file(), opts
) < 0)
3234 return error(_("malformed options sheet: '%s'"),
3235 git_path_opts_file());
3239 static void write_strategy_opts(struct replay_opts
*opts
)
3241 struct strbuf buf
= STRBUF_INIT
;
3244 * Quote strategy options so that they can be read correctly
3245 * by split_cmdline().
3247 quote_cmdline(&buf
, opts
->xopts
.v
);
3248 write_file(rebase_path_strategy_opts(), "%s\n", buf
.buf
);
3249 strbuf_release(&buf
);
3252 int write_basic_state(struct replay_opts
*opts
, const char *head_name
,
3253 struct commit
*onto
, const struct object_id
*orig_head
)
3256 write_file(rebase_path_head_name(), "%s\n", head_name
);
3258 write_file(rebase_path_onto(), "%s\n",
3259 oid_to_hex(&onto
->object
.oid
));
3261 write_file(rebase_path_orig_head(), "%s\n",
3262 oid_to_hex(orig_head
));
3265 write_file(rebase_path_quiet(), "%s", "");
3267 write_file(rebase_path_verbose(), "%s", "");
3269 write_file(rebase_path_strategy(), "%s\n", opts
->strategy
);
3270 if (opts
->xopts
.nr
> 0)
3271 write_strategy_opts(opts
);
3273 if (opts
->allow_rerere_auto
== RERERE_AUTOUPDATE
)
3274 write_file(rebase_path_allow_rerere_autoupdate(), "--rerere-autoupdate\n");
3275 else if (opts
->allow_rerere_auto
== RERERE_NOAUTOUPDATE
)
3276 write_file(rebase_path_allow_rerere_autoupdate(), "--no-rerere-autoupdate\n");
3279 write_file(rebase_path_gpg_sign_opt(), "-S%s\n", opts
->gpg_sign
);
3281 write_file(rebase_path_signoff(), "--signoff\n");
3282 if (opts
->drop_redundant_commits
)
3283 write_file(rebase_path_drop_redundant_commits(), "%s", "");
3284 if (opts
->keep_redundant_commits
)
3285 write_file(rebase_path_keep_redundant_commits(), "%s", "");
3286 if (opts
->committer_date_is_author_date
)
3287 write_file(rebase_path_cdate_is_adate(), "%s", "");
3288 if (opts
->ignore_date
)
3289 write_file(rebase_path_ignore_date(), "%s", "");
3290 if (opts
->reschedule_failed_exec
)
3291 write_file(rebase_path_reschedule_failed_exec(), "%s", "");
3293 write_file(rebase_path_no_reschedule_failed_exec(), "%s", "");
3298 static int walk_revs_populate_todo(struct todo_list
*todo_list
,
3299 struct replay_opts
*opts
)
3301 enum todo_command command
= opts
->action
== REPLAY_PICK
?
3302 TODO_PICK
: TODO_REVERT
;
3303 const char *command_string
= todo_command_info
[command
].str
;
3304 const char *encoding
;
3305 struct commit
*commit
;
3307 if (prepare_revs(opts
))
3310 encoding
= get_log_output_encoding();
3312 while ((commit
= get_revision(opts
->revs
))) {
3313 struct todo_item
*item
= append_new_todo(todo_list
);
3314 const char *commit_buffer
= repo_logmsg_reencode(the_repository
,
3317 const char *subject
;
3320 item
->command
= command
;
3321 item
->commit
= commit
;
3322 item
->arg_offset
= 0;
3324 item
->offset_in_buf
= todo_list
->buf
.len
;
3325 subject_len
= find_commit_subject(commit_buffer
, &subject
);
3326 strbuf_addf(&todo_list
->buf
, "%s %s %.*s\n", command_string
,
3327 short_commit_name(the_repository
, commit
),
3328 subject_len
, subject
);
3329 repo_unuse_commit_buffer(the_repository
, commit
,
3334 return error(_("empty commit set passed"));
3339 static int create_seq_dir(struct repository
*r
)
3341 enum replay_action action
;
3342 const char *in_progress_error
= NULL
;
3343 const char *in_progress_advice
= NULL
;
3344 unsigned int advise_skip
=
3345 refs_ref_exists(get_main_ref_store(r
), "REVERT_HEAD") ||
3346 refs_ref_exists(get_main_ref_store(r
), "CHERRY_PICK_HEAD");
3348 if (!sequencer_get_last_command(r
, &action
)) {
3351 in_progress_error
= _("revert is already in progress");
3352 in_progress_advice
=
3353 _("try \"git revert (--continue | %s--abort | --quit)\"");
3356 in_progress_error
= _("cherry-pick is already in progress");
3357 in_progress_advice
=
3358 _("try \"git cherry-pick (--continue | %s--abort | --quit)\"");
3361 BUG("unexpected action in create_seq_dir");
3364 if (in_progress_error
) {
3365 error("%s", in_progress_error
);
3366 if (advice_enabled(ADVICE_SEQUENCER_IN_USE
))
3367 advise(in_progress_advice
,
3368 advise_skip
? "--skip | " : "");
3371 if (mkdir(git_path_seq_dir(), 0777) < 0)
3372 return error_errno(_("could not create sequencer directory '%s'"),
3373 git_path_seq_dir());
3378 static int save_head(const char *head
)
3380 return write_message(head
, strlen(head
), git_path_head_file(), 1);
3383 static int rollback_is_safe(void)
3385 struct strbuf sb
= STRBUF_INIT
;
3386 struct object_id expected_head
, actual_head
;
3388 if (strbuf_read_file(&sb
, git_path_abort_safety_file(), 0) >= 0) {
3390 if (get_oid_hex(sb
.buf
, &expected_head
)) {
3391 strbuf_release(&sb
);
3392 die(_("could not parse %s"), git_path_abort_safety_file());
3394 strbuf_release(&sb
);
3396 else if (errno
== ENOENT
)
3397 oidclr(&expected_head
);
3399 die_errno(_("could not read '%s'"), git_path_abort_safety_file());
3401 if (repo_get_oid(the_repository
, "HEAD", &actual_head
))
3402 oidclr(&actual_head
);
3404 return oideq(&actual_head
, &expected_head
);
3407 static int reset_merge(const struct object_id
*oid
)
3409 struct child_process cmd
= CHILD_PROCESS_INIT
;
3412 strvec_pushl(&cmd
.args
, "reset", "--merge", NULL
);
3414 if (!is_null_oid(oid
))
3415 strvec_push(&cmd
.args
, oid_to_hex(oid
));
3417 return run_command(&cmd
);
3420 static int rollback_single_pick(struct repository
*r
)
3422 struct object_id head_oid
;
3424 if (!refs_ref_exists(get_main_ref_store(r
), "CHERRY_PICK_HEAD") &&
3425 !refs_ref_exists(get_main_ref_store(r
), "REVERT_HEAD"))
3426 return error(_("no cherry-pick or revert in progress"));
3427 if (read_ref_full("HEAD", 0, &head_oid
, NULL
))
3428 return error(_("cannot resolve HEAD"));
3429 if (is_null_oid(&head_oid
))
3430 return error(_("cannot abort from a branch yet to be born"));
3431 return reset_merge(&head_oid
);
3434 static int skip_single_pick(void)
3436 struct object_id head
;
3438 if (read_ref_full("HEAD", 0, &head
, NULL
))
3439 return error(_("cannot resolve HEAD"));
3440 return reset_merge(&head
);
3443 int sequencer_rollback(struct repository
*r
, struct replay_opts
*opts
)
3446 struct object_id oid
;
3447 struct strbuf buf
= STRBUF_INIT
;
3450 f
= fopen(git_path_head_file(), "r");
3451 if (!f
&& errno
== ENOENT
) {
3453 * There is no multiple-cherry-pick in progress.
3454 * If CHERRY_PICK_HEAD or REVERT_HEAD indicates
3455 * a single-cherry-pick in progress, abort that.
3457 return rollback_single_pick(r
);
3460 return error_errno(_("cannot open '%s'"), git_path_head_file());
3461 if (strbuf_getline_lf(&buf
, f
)) {
3462 error(_("cannot read '%s': %s"), git_path_head_file(),
3463 ferror(f
) ? strerror(errno
) : _("unexpected end of file"));
3468 if (parse_oid_hex(buf
.buf
, &oid
, &p
) || *p
!= '\0') {
3469 error(_("stored pre-cherry-pick HEAD file '%s' is corrupt"),
3470 git_path_head_file());
3473 if (is_null_oid(&oid
)) {
3474 error(_("cannot abort from a branch yet to be born"));
3478 if (!rollback_is_safe()) {
3479 /* Do not error, just do not rollback */
3480 warning(_("You seem to have moved HEAD. "
3481 "Not rewinding, check your HEAD!"));
3483 if (reset_merge(&oid
))
3485 strbuf_release(&buf
);
3486 return sequencer_remove_state(opts
);
3488 strbuf_release(&buf
);
3492 int sequencer_skip(struct repository
*r
, struct replay_opts
*opts
)
3494 enum replay_action action
= -1;
3495 sequencer_get_last_command(r
, &action
);
3498 * Check whether the subcommand requested to skip the commit is actually
3499 * in progress and that it's safe to skip the commit.
3501 * opts->action tells us which subcommand requested to skip the commit.
3502 * If the corresponding .git/<ACTION>_HEAD exists, we know that the
3503 * action is in progress and we can skip the commit.
3505 * Otherwise we check that the last instruction was related to the
3506 * particular subcommand we're trying to execute and barf if that's not
3509 * Finally we check that the rollback is "safe", i.e., has the HEAD
3510 * moved? In this case, it doesn't make sense to "reset the merge" and
3511 * "skip the commit" as the user already handled this by committing. But
3512 * we'd not want to barf here, instead give advice on how to proceed. We
3513 * only need to check that when .git/<ACTION>_HEAD doesn't exist because
3514 * it gets removed when the user commits, so if it still exists we're
3515 * sure the user can't have committed before.
3517 switch (opts
->action
) {
3519 if (!refs_ref_exists(get_main_ref_store(r
), "REVERT_HEAD")) {
3520 if (action
!= REPLAY_REVERT
)
3521 return error(_("no revert in progress"));
3522 if (!rollback_is_safe())
3527 if (!refs_ref_exists(get_main_ref_store(r
),
3528 "CHERRY_PICK_HEAD")) {
3529 if (action
!= REPLAY_PICK
)
3530 return error(_("no cherry-pick in progress"));
3531 if (!rollback_is_safe())
3536 BUG("unexpected action in sequencer_skip");
3539 if (skip_single_pick())
3540 return error(_("failed to skip the commit"));
3541 if (!is_directory(git_path_seq_dir()))
3544 return sequencer_continue(r
, opts
);
3547 error(_("there is nothing to skip"));
3549 if (advice_enabled(ADVICE_RESOLVE_CONFLICT
)) {
3550 advise(_("have you committed already?\n"
3551 "try \"git %s --continue\""),
3552 action
== REPLAY_REVERT
? "revert" : "cherry-pick");
3557 static int save_todo(struct todo_list
*todo_list
, struct replay_opts
*opts
,
3560 struct lock_file todo_lock
= LOCK_INIT
;
3561 const char *todo_path
= get_todo_path(opts
);
3562 int next
= todo_list
->current
, offset
, fd
;
3565 * rebase -i writes "git-rebase-todo" without the currently executing
3566 * command, appending it to "done" instead.
3568 if (is_rebase_i(opts
) && !reschedule
)
3571 fd
= hold_lock_file_for_update(&todo_lock
, todo_path
, 0);
3573 return error_errno(_("could not lock '%s'"), todo_path
);
3574 offset
= get_item_line_offset(todo_list
, next
);
3575 if (write_in_full(fd
, todo_list
->buf
.buf
+ offset
,
3576 todo_list
->buf
.len
- offset
) < 0)
3577 return error_errno(_("could not write to '%s'"), todo_path
);
3578 if (commit_lock_file(&todo_lock
) < 0)
3579 return error(_("failed to finalize '%s'"), todo_path
);
3581 if (is_rebase_i(opts
) && !reschedule
&& next
> 0) {
3582 const char *done
= rebase_path_done();
3583 int fd
= open(done
, O_CREAT
| O_WRONLY
| O_APPEND
, 0666);
3588 if (write_in_full(fd
, get_item_line(todo_list
, next
- 1),
3589 get_item_line_length(todo_list
, next
- 1))
3591 ret
= error_errno(_("could not write to '%s'"), done
);
3593 ret
= error_errno(_("failed to finalize '%s'"), done
);
3599 static int save_opts(struct replay_opts
*opts
)
3601 const char *opts_file
= git_path_opts_file();
3604 if (opts
->no_commit
)
3605 res
|= git_config_set_in_file_gently(opts_file
,
3606 "options.no-commit", NULL
, "true");
3607 if (opts
->edit
>= 0)
3608 res
|= git_config_set_in_file_gently(opts_file
, "options.edit", NULL
,
3609 opts
->edit
? "true" : "false");
3610 if (opts
->allow_empty
)
3611 res
|= git_config_set_in_file_gently(opts_file
,
3612 "options.allow-empty", NULL
, "true");
3613 if (opts
->allow_empty_message
)
3614 res
|= git_config_set_in_file_gently(opts_file
,
3615 "options.allow-empty-message", NULL
, "true");
3616 if (opts
->drop_redundant_commits
)
3617 res
|= git_config_set_in_file_gently(opts_file
,
3618 "options.drop-redundant-commits", NULL
, "true");
3619 if (opts
->keep_redundant_commits
)
3620 res
|= git_config_set_in_file_gently(opts_file
,
3621 "options.keep-redundant-commits", NULL
, "true");
3623 res
|= git_config_set_in_file_gently(opts_file
,
3624 "options.signoff", NULL
, "true");
3625 if (opts
->record_origin
)
3626 res
|= git_config_set_in_file_gently(opts_file
,
3627 "options.record-origin", NULL
, "true");
3629 res
|= git_config_set_in_file_gently(opts_file
,
3630 "options.allow-ff", NULL
, "true");
3631 if (opts
->mainline
) {
3632 struct strbuf buf
= STRBUF_INIT
;
3633 strbuf_addf(&buf
, "%d", opts
->mainline
);
3634 res
|= git_config_set_in_file_gently(opts_file
,
3635 "options.mainline", NULL
, buf
.buf
);
3636 strbuf_release(&buf
);
3639 res
|= git_config_set_in_file_gently(opts_file
,
3640 "options.strategy", NULL
, opts
->strategy
);
3642 res
|= git_config_set_in_file_gently(opts_file
,
3643 "options.gpg-sign", NULL
, opts
->gpg_sign
);
3644 for (size_t i
= 0; i
< opts
->xopts
.nr
; i
++)
3645 res
|= git_config_set_multivar_in_file_gently(opts_file
,
3646 "options.strategy-option",
3647 opts
->xopts
.v
[i
], "^$", NULL
, 0);
3648 if (opts
->allow_rerere_auto
)
3649 res
|= git_config_set_in_file_gently(opts_file
,
3650 "options.allow-rerere-auto", NULL
,
3651 opts
->allow_rerere_auto
== RERERE_AUTOUPDATE
?
3654 if (opts
->explicit_cleanup
)
3655 res
|= git_config_set_in_file_gently(opts_file
,
3656 "options.default-msg-cleanup", NULL
,
3657 describe_cleanup_mode(opts
->default_msg_cleanup
));
3661 static int make_patch(struct repository
*r
,
3662 struct commit
*commit
,
3663 struct replay_opts
*opts
)
3665 struct rev_info log_tree_opt
;
3666 const char *subject
;
3667 char hex
[GIT_MAX_HEXSZ
+ 1];
3670 if (!is_rebase_i(opts
))
3671 BUG("make_patch should only be called when rebasing");
3673 oid_to_hex_r(hex
, &commit
->object
.oid
);
3674 if (write_message(hex
, strlen(hex
), rebase_path_stopped_sha(), 1) < 0)
3676 res
|= write_rebase_head(&commit
->object
.oid
);
3678 memset(&log_tree_opt
, 0, sizeof(log_tree_opt
));
3679 repo_init_revisions(r
, &log_tree_opt
, NULL
);
3680 log_tree_opt
.abbrev
= 0;
3681 log_tree_opt
.diff
= 1;
3682 log_tree_opt
.diffopt
.output_format
= DIFF_FORMAT_PATCH
;
3683 log_tree_opt
.disable_stdin
= 1;
3684 log_tree_opt
.no_commit_id
= 1;
3685 log_tree_opt
.diffopt
.file
= fopen(rebase_path_patch(), "w");
3686 log_tree_opt
.diffopt
.use_color
= GIT_COLOR_NEVER
;
3687 if (!log_tree_opt
.diffopt
.file
)
3688 res
|= error_errno(_("could not open '%s'"),
3689 rebase_path_patch());
3691 res
|= log_tree_commit(&log_tree_opt
, commit
);
3692 fclose(log_tree_opt
.diffopt
.file
);
3695 if (!file_exists(rebase_path_message())) {
3696 const char *encoding
= get_commit_output_encoding();
3697 const char *commit_buffer
= repo_logmsg_reencode(r
,
3700 find_commit_subject(commit_buffer
, &subject
);
3701 res
|= write_message(subject
, strlen(subject
), rebase_path_message(), 1);
3702 repo_unuse_commit_buffer(r
, commit
,
3705 release_revisions(&log_tree_opt
);
3710 static int intend_to_amend(void)
3712 struct object_id head
;
3715 if (repo_get_oid(the_repository
, "HEAD", &head
))
3716 return error(_("cannot read HEAD"));
3718 p
= oid_to_hex(&head
);
3719 return write_message(p
, strlen(p
), rebase_path_amend(), 1);
3722 static int error_with_patch(struct repository
*r
,
3723 struct commit
*commit
,
3724 const char *subject
, int subject_len
,
3725 struct replay_opts
*opts
,
3726 int exit_code
, int to_amend
)
3728 struct replay_ctx
*ctx
= opts
->ctx
;
3731 * Write the commit message to be used by "git rebase
3732 * --continue". If a "fixup" or "squash" command has conflicts
3733 * then we will have already written rebase_path_message() in
3734 * error_failed_squash(). If an "edit" command was
3735 * fast-forwarded then we don't have a message in ctx->message
3736 * and rely on make_patch() to write rebase_path_message()
3739 if (ctx
->have_message
&& !file_exists(rebase_path_message()) &&
3740 write_message(ctx
->message
.buf
, ctx
->message
.len
,
3741 rebase_path_message(), 0))
3742 return error(_("could not write commit message file"));
3744 if (commit
&& make_patch(r
, commit
, opts
))
3748 if (intend_to_amend())
3752 _("You can amend the commit now, with\n"
3754 " git commit --amend %s\n"
3756 "Once you are satisfied with your changes, run\n"
3758 " git rebase --continue\n"),
3759 gpg_sign_opt_quoted(opts
));
3760 } else if (exit_code
) {
3762 fprintf_ln(stderr
, _("Could not apply %s... %.*s"),
3763 short_commit_name(r
, commit
), subject_len
, subject
);
3766 * We don't have the hash of the parent so
3767 * just print the line from the todo file.
3769 fprintf_ln(stderr
, _("Could not merge %.*s"),
3770 subject_len
, subject
);
3776 static int error_failed_squash(struct repository
*r
,
3777 struct commit
*commit
,
3778 struct replay_opts
*opts
,
3780 const char *subject
)
3782 if (copy_file(rebase_path_message(), rebase_path_squash_msg(), 0666))
3783 return error(_("could not copy '%s' to '%s'"),
3784 rebase_path_squash_msg(), rebase_path_message());
3785 unlink(git_path_merge_msg(r
));
3786 if (copy_file(git_path_merge_msg(r
), rebase_path_message(), 0666))
3787 return error(_("could not copy '%s' to '%s'"),
3788 rebase_path_message(),
3789 git_path_merge_msg(r
));
3790 return error_with_patch(r
, commit
, subject
, subject_len
, opts
, 1, 0);
3793 static int do_exec(struct repository
*r
, const char *command_line
)
3795 struct child_process cmd
= CHILD_PROCESS_INIT
;
3798 fprintf(stderr
, _("Executing: %s\n"), command_line
);
3800 strvec_push(&cmd
.args
, command_line
);
3801 strvec_push(&cmd
.env
, "GIT_CHERRY_PICK_HELP");
3802 status
= run_command(&cmd
);
3804 /* force re-reading of the cache */
3805 discard_index(r
->index
);
3806 if (repo_read_index(r
) < 0)
3807 return error(_("could not read index"));
3809 dirty
= require_clean_work_tree(r
, "rebase", NULL
, 1, 1);
3812 warning(_("execution failed: %s\n%s"
3813 "You can fix the problem, and then run\n"
3815 " git rebase --continue\n"
3818 dirty
? _("and made changes to the index and/or the "
3819 "working tree.\n") : "");
3821 /* command not found */
3824 warning(_("execution succeeded: %s\nbut "
3825 "left changes to the index and/or the working tree.\n"
3826 "Commit or stash your changes, and then run\n"
3828 " git rebase --continue\n"
3829 "\n"), command_line
);
3836 __attribute__((format (printf
, 2, 3)))
3837 static int safe_append(const char *filename
, const char *fmt
, ...)
3840 struct lock_file lock
= LOCK_INIT
;
3841 int fd
= hold_lock_file_for_update(&lock
, filename
,
3842 LOCK_REPORT_ON_ERROR
);
3843 struct strbuf buf
= STRBUF_INIT
;
3848 if (strbuf_read_file(&buf
, filename
, 0) < 0 && errno
!= ENOENT
) {
3849 error_errno(_("could not read '%s'"), filename
);
3850 rollback_lock_file(&lock
);
3853 strbuf_complete(&buf
, '\n');
3855 strbuf_vaddf(&buf
, fmt
, ap
);
3858 if (write_in_full(fd
, buf
.buf
, buf
.len
) < 0) {
3859 error_errno(_("could not write to '%s'"), filename
);
3860 strbuf_release(&buf
);
3861 rollback_lock_file(&lock
);
3864 if (commit_lock_file(&lock
) < 0) {
3865 strbuf_release(&buf
);
3866 return error(_("failed to finalize '%s'"), filename
);
3869 strbuf_release(&buf
);
3873 static int do_label(struct repository
*r
, const char *name
, int len
)
3875 struct ref_store
*refs
= get_main_ref_store(r
);
3876 struct ref_transaction
*transaction
;
3877 struct strbuf ref_name
= STRBUF_INIT
, err
= STRBUF_INIT
;
3878 struct strbuf msg
= STRBUF_INIT
;
3880 struct object_id head_oid
;
3882 if (len
== 1 && *name
== '#')
3883 return error(_("illegal label name: '%.*s'"), len
, name
);
3885 strbuf_addf(&ref_name
, "refs/rewritten/%.*s", len
, name
);
3886 strbuf_addf(&msg
, "rebase (label) '%.*s'", len
, name
);
3888 transaction
= ref_store_transaction_begin(refs
, &err
);
3890 error("%s", err
.buf
);
3892 } else if (repo_get_oid(r
, "HEAD", &head_oid
)) {
3893 error(_("could not read HEAD"));
3895 } else if (ref_transaction_update(transaction
, ref_name
.buf
, &head_oid
,
3896 NULL
, 0, msg
.buf
, &err
) < 0 ||
3897 ref_transaction_commit(transaction
, &err
)) {
3898 error("%s", err
.buf
);
3901 ref_transaction_free(transaction
);
3902 strbuf_release(&err
);
3903 strbuf_release(&msg
);
3906 ret
= safe_append(rebase_path_refs_to_delete(),
3907 "%s\n", ref_name
.buf
);
3908 strbuf_release(&ref_name
);
3913 static const char *sequencer_reflog_action(struct replay_opts
*opts
)
3915 if (!opts
->reflog_action
) {
3916 opts
->reflog_action
= getenv(GIT_REFLOG_ACTION
);
3917 opts
->reflog_action
=
3918 xstrdup(opts
->reflog_action
? opts
->reflog_action
3919 : action_name(opts
));
3922 return opts
->reflog_action
;
3925 __attribute__((format (printf
, 3, 4)))
3926 static const char *reflog_message(struct replay_opts
*opts
,
3927 const char *sub_action
, const char *fmt
, ...)
3930 static struct strbuf buf
= STRBUF_INIT
;
3934 strbuf_addstr(&buf
, sequencer_reflog_action(opts
));
3936 strbuf_addf(&buf
, " (%s)", sub_action
);
3938 strbuf_addstr(&buf
, ": ");
3939 strbuf_vaddf(&buf
, fmt
, ap
);
3946 static struct commit
*lookup_label(struct repository
*r
, const char *label
,
3947 int len
, struct strbuf
*buf
)
3949 struct commit
*commit
;
3950 struct object_id oid
;
3953 strbuf_addf(buf
, "refs/rewritten/%.*s", len
, label
);
3954 if (!read_ref(buf
->buf
, &oid
)) {
3955 commit
= lookup_commit_object(r
, &oid
);
3957 /* fall back to non-rewritten ref or commit */
3958 strbuf_splice(buf
, 0, strlen("refs/rewritten/"), "", 0);
3959 commit
= lookup_commit_reference_by_name(buf
->buf
);
3963 error(_("could not resolve '%s'"), buf
->buf
);
3968 static int do_reset(struct repository
*r
,
3969 const char *name
, int len
,
3970 struct replay_opts
*opts
)
3972 struct strbuf ref_name
= STRBUF_INIT
;
3973 struct object_id oid
;
3974 struct lock_file lock
= LOCK_INIT
;
3975 struct tree_desc desc
= { 0 };
3977 struct unpack_trees_options unpack_tree_opts
= { 0 };
3980 if (repo_hold_locked_index(r
, &lock
, LOCK_REPORT_ON_ERROR
) < 0)
3983 if (len
== 10 && !strncmp("[new root]", name
, len
)) {
3984 if (!opts
->have_squash_onto
) {
3986 if (commit_tree("", 0, the_hash_algo
->empty_tree
,
3987 NULL
, &opts
->squash_onto
,
3989 return error(_("writing fake root commit"));
3990 opts
->have_squash_onto
= 1;
3991 hex
= oid_to_hex(&opts
->squash_onto
);
3992 if (write_message(hex
, strlen(hex
),
3993 rebase_path_squash_onto(), 0))
3994 return error(_("writing squash-onto"));
3996 oidcpy(&oid
, &opts
->squash_onto
);
3999 struct commit
*commit
;
4001 /* Determine the length of the label */
4002 for (i
= 0; i
< len
; i
++)
4003 if (isspace(name
[i
]))
4007 commit
= lookup_label(r
, name
, len
, &ref_name
);
4012 oid
= commit
->object
.oid
;
4015 setup_unpack_trees_porcelain(&unpack_tree_opts
, "reset");
4016 unpack_tree_opts
.head_idx
= 1;
4017 unpack_tree_opts
.src_index
= r
->index
;
4018 unpack_tree_opts
.dst_index
= r
->index
;
4019 unpack_tree_opts
.fn
= oneway_merge
;
4020 unpack_tree_opts
.merge
= 1;
4021 unpack_tree_opts
.update
= 1;
4022 unpack_tree_opts
.preserve_ignored
= 0; /* FIXME: !overwrite_ignore */
4023 unpack_tree_opts
.skip_cache_tree_update
= 1;
4024 init_checkout_metadata(&unpack_tree_opts
.meta
, name
, &oid
, NULL
);
4026 if (repo_read_index_unmerged(r
)) {
4027 ret
= error_resolve_conflict(action_name(opts
));
4031 if (!fill_tree_descriptor(r
, &desc
, &oid
)) {
4032 ret
= error(_("failed to find tree of %s"), oid_to_hex(&oid
));
4036 if (unpack_trees(1, &desc
, &unpack_tree_opts
)) {
4041 tree
= parse_tree_indirect(&oid
);
4043 return error(_("unable to read tree (%s)"), oid_to_hex(&oid
));
4044 prime_cache_tree(r
, r
->index
, tree
);
4046 if (write_locked_index(r
->index
, &lock
, COMMIT_LOCK
) < 0)
4047 ret
= error(_("could not write index"));
4050 ret
= update_ref(reflog_message(opts
, "reset", "'%.*s'",
4051 len
, name
), "HEAD", &oid
,
4052 NULL
, 0, UPDATE_REFS_MSG_ON_ERR
);
4054 free((void *)desc
.buffer
);
4056 rollback_lock_file(&lock
);
4057 strbuf_release(&ref_name
);
4058 clear_unpack_trees_porcelain(&unpack_tree_opts
);
4062 static int do_merge(struct repository
*r
,
4063 struct commit
*commit
,
4064 const char *arg
, int arg_len
,
4065 int flags
, int *check_todo
, struct replay_opts
*opts
)
4067 struct replay_ctx
*ctx
= opts
->ctx
;
4068 int run_commit_flags
= 0;
4069 struct strbuf ref_name
= STRBUF_INIT
;
4070 struct commit
*head_commit
, *merge_commit
, *i
;
4071 struct commit_list
*bases
= NULL
, *j
;
4072 struct commit_list
*to_merge
= NULL
, **tail
= &to_merge
;
4073 const char *strategy
= !opts
->xopts
.nr
&&
4075 !strcmp(opts
->strategy
, "recursive") ||
4076 !strcmp(opts
->strategy
, "ort")) ?
4077 NULL
: opts
->strategy
;
4078 struct merge_options o
;
4079 int merge_arg_len
, oneline_offset
, can_fast_forward
, ret
, k
;
4080 static struct lock_file lock
;
4083 if (repo_hold_locked_index(r
, &lock
, LOCK_REPORT_ON_ERROR
) < 0) {
4088 head_commit
= lookup_commit_reference_by_name("HEAD");
4090 ret
= error(_("cannot merge without a current revision"));
4095 * For octopus merges, the arg starts with the list of revisions to be
4096 * merged. The list is optionally followed by '#' and the oneline.
4098 merge_arg_len
= oneline_offset
= arg_len
;
4099 for (p
= arg
; p
- arg
< arg_len
; p
+= strspn(p
, " \t\n")) {
4102 if (*p
== '#' && (!p
[1] || isspace(p
[1]))) {
4103 p
+= 1 + strspn(p
+ 1, " \t\n");
4104 oneline_offset
= p
- arg
;
4107 k
= strcspn(p
, " \t\n");
4110 merge_commit
= lookup_label(r
, p
, k
, &ref_name
);
4111 if (!merge_commit
) {
4112 ret
= error(_("unable to parse '%.*s'"), k
, p
);
4115 tail
= &commit_list_insert(merge_commit
, tail
)->next
;
4117 merge_arg_len
= p
- arg
;
4121 ret
= error(_("nothing to merge: '%.*s'"), arg_len
, arg
);
4125 if (opts
->have_squash_onto
&&
4126 oideq(&head_commit
->object
.oid
, &opts
->squash_onto
)) {
4128 * When the user tells us to "merge" something into a
4129 * "[new root]", let's simply fast-forward to the merge head.
4131 rollback_lock_file(&lock
);
4133 ret
= error(_("octopus merge cannot be executed on "
4134 "top of a [new root]"));
4136 ret
= fast_forward_to(r
, &to_merge
->item
->object
.oid
,
4137 &head_commit
->object
.oid
, 0,
4143 * If HEAD is not identical to the first parent of the original merge
4144 * commit, we cannot fast-forward.
4146 can_fast_forward
= opts
->allow_ff
&& commit
&& commit
->parents
&&
4147 oideq(&commit
->parents
->item
->object
.oid
,
4148 &head_commit
->object
.oid
);
4151 * If any merge head is different from the original one, we cannot
4154 if (can_fast_forward
) {
4155 struct commit_list
*p
= commit
->parents
->next
;
4157 for (j
= to_merge
; j
&& p
; j
= j
->next
, p
= p
->next
)
4158 if (!oideq(&j
->item
->object
.oid
,
4159 &p
->item
->object
.oid
)) {
4160 can_fast_forward
= 0;
4164 * If the number of merge heads differs from the original merge
4165 * commit, we cannot fast-forward.
4168 can_fast_forward
= 0;
4171 if (can_fast_forward
) {
4172 rollback_lock_file(&lock
);
4173 ret
= fast_forward_to(r
, &commit
->object
.oid
,
4174 &head_commit
->object
.oid
, 0, opts
);
4175 if (flags
& TODO_EDIT_MERGE_MSG
)
4176 goto fast_forward_edit
;
4182 const char *encoding
= get_commit_output_encoding();
4183 const char *message
= repo_logmsg_reencode(r
, commit
, NULL
,
4189 ret
= error(_("could not get commit message of '%s'"),
4190 oid_to_hex(&commit
->object
.oid
));
4193 write_author_script(message
);
4194 find_commit_subject(message
, &body
);
4196 strbuf_add(&ctx
->message
, body
, len
);
4197 repo_unuse_commit_buffer(r
, commit
, message
);
4199 struct strbuf buf
= STRBUF_INIT
;
4201 strbuf_addf(&buf
, "author %s", git_author_info(0));
4202 write_author_script(buf
.buf
);
4203 strbuf_release(&buf
);
4205 if (oneline_offset
< arg_len
) {
4206 strbuf_add(&ctx
->message
, arg
+ oneline_offset
,
4207 arg_len
- oneline_offset
);
4209 strbuf_addf(&ctx
->message
, "Merge %s '%.*s'",
4210 to_merge
->next
? "branches" : "branch",
4211 merge_arg_len
, arg
);
4214 ctx
->have_message
= 1;
4215 if (write_message(ctx
->message
.buf
, ctx
->message
.len
,
4216 git_path_merge_msg(r
), 0)) {
4217 ret
= error_errno(_("could not write '%s'"),
4218 git_path_merge_msg(r
));
4222 if (strategy
|| to_merge
->next
) {
4224 struct child_process cmd
= CHILD_PROCESS_INIT
;
4226 if (read_env_script(&cmd
.env
)) {
4227 const char *gpg_opt
= gpg_sign_opt_quoted(opts
);
4229 ret
= error(_(staged_changes_advice
), gpg_opt
, gpg_opt
);
4233 if (opts
->committer_date_is_author_date
)
4234 strvec_pushf(&cmd
.env
, "GIT_COMMITTER_DATE=%s",
4237 author_date_from_env(&cmd
.env
));
4238 if (opts
->ignore_date
)
4239 strvec_push(&cmd
.env
, "GIT_AUTHOR_DATE=");
4242 strvec_push(&cmd
.args
, "merge");
4243 strvec_push(&cmd
.args
, "-s");
4245 strvec_push(&cmd
.args
, "octopus");
4247 strvec_push(&cmd
.args
, strategy
);
4248 for (k
= 0; k
< opts
->xopts
.nr
; k
++)
4249 strvec_pushf(&cmd
.args
,
4250 "-X%s", opts
->xopts
.v
[k
]);
4252 if (!(flags
& TODO_EDIT_MERGE_MSG
))
4253 strvec_push(&cmd
.args
, "--no-edit");
4255 strvec_push(&cmd
.args
, "--edit");
4256 strvec_push(&cmd
.args
, "--no-ff");
4257 strvec_push(&cmd
.args
, "--no-log");
4258 strvec_push(&cmd
.args
, "--no-stat");
4259 strvec_push(&cmd
.args
, "-F");
4260 strvec_push(&cmd
.args
, git_path_merge_msg(r
));
4262 strvec_pushf(&cmd
.args
, "-S%s", opts
->gpg_sign
);
4264 strvec_push(&cmd
.args
, "--no-gpg-sign");
4266 /* Add the tips to be merged */
4267 for (j
= to_merge
; j
; j
= j
->next
)
4268 strvec_push(&cmd
.args
,
4269 oid_to_hex(&j
->item
->object
.oid
));
4271 strbuf_release(&ref_name
);
4272 refs_delete_ref(get_main_ref_store(r
), "", "CHERRY_PICK_HEAD",
4273 NULL
, REF_NO_DEREF
);
4274 rollback_lock_file(&lock
);
4276 ret
= run_command(&cmd
);
4278 /* force re-reading of the cache */
4280 discard_index(r
->index
);
4281 if (repo_read_index(r
) < 0)
4282 ret
= error(_("could not read index"));
4287 merge_commit
= to_merge
->item
;
4288 if (repo_get_merge_bases(r
, head_commit
, merge_commit
, &bases
) < 0) {
4293 if (bases
&& oideq(&merge_commit
->object
.oid
,
4294 &bases
->item
->object
.oid
)) {
4296 /* skip merging an ancestor of HEAD */
4300 write_message(oid_to_hex(&merge_commit
->object
.oid
), the_hash_algo
->hexsz
,
4301 git_path_merge_head(r
), 0);
4302 write_message("no-ff", 5, git_path_merge_mode(r
), 0);
4304 bases
= reverse_commit_list(bases
);
4307 init_merge_options(&o
, r
);
4309 o
.branch2
= ref_name
.buf
;
4310 o
.buffer_output
= 2;
4312 if (!opts
->strategy
|| !strcmp(opts
->strategy
, "ort")) {
4314 * TODO: Should use merge_incore_recursive() and
4315 * merge_switch_to_result(), skipping the call to
4316 * merge_switch_to_result() when we don't actually need to
4317 * update the index and working copy immediately.
4319 ret
= merge_ort_recursive(&o
,
4320 head_commit
, merge_commit
, bases
,
4323 ret
= merge_recursive(&o
, head_commit
, merge_commit
, bases
,
4327 fputs(o
.obuf
.buf
, stdout
);
4328 strbuf_release(&o
.obuf
);
4330 error(_("could not even attempt to merge '%.*s'"),
4331 merge_arg_len
, arg
);
4332 unlink(git_path_merge_msg(r
));
4336 * The return value of merge_recursive() is 1 on clean, and 0 on
4339 * Let's reverse that, so that do_merge() returns 0 upon success and
4340 * 1 upon failed merge (keeping the return value -1 for the cases where
4341 * we will want to reschedule the `merge` command).
4345 if (r
->index
->cache_changed
&&
4346 write_locked_index(r
->index
, &lock
, COMMIT_LOCK
)) {
4347 ret
= error(_("merge: Unable to write new index file"));
4351 rollback_lock_file(&lock
);
4353 repo_rerere(r
, opts
->allow_rerere_auto
);
4356 * In case of problems, we now want to return a positive
4357 * value (a negative one would indicate that the `merge`
4358 * command needs to be rescheduled).
4360 ret
= !!run_git_commit(git_path_merge_msg(r
), opts
,
4363 if (!ret
&& flags
& TODO_EDIT_MERGE_MSG
) {
4366 run_commit_flags
|= AMEND_MSG
| EDIT_MSG
| VERIFY_MSG
;
4367 ret
= !!run_git_commit(NULL
, opts
, run_commit_flags
);
4372 strbuf_release(&ref_name
);
4373 rollback_lock_file(&lock
);
4374 free_commit_list(to_merge
);
4378 static int write_update_refs_state(struct string_list
*refs_to_oids
)
4381 struct lock_file lock
= LOCK_INIT
;
4383 struct string_list_item
*item
;
4386 path
= rebase_path_update_refs(the_repository
->gitdir
);
4388 if (!refs_to_oids
->nr
) {
4389 if (unlink(path
) && errno
!= ENOENT
)
4390 result
= error_errno(_("could not unlink: %s"), path
);
4394 if (safe_create_leading_directories(path
)) {
4395 result
= error(_("unable to create leading directories of %s"),
4400 if (hold_lock_file_for_update(&lock
, path
, 0) < 0) {
4401 result
= error(_("another 'rebase' process appears to be running; "
4402 "'%s.lock' already exists"),
4407 fp
= fdopen_lock_file(&lock
, "w");
4409 result
= error_errno(_("could not open '%s' for writing"), path
);
4410 rollback_lock_file(&lock
);
4414 for_each_string_list_item(item
, refs_to_oids
) {
4415 struct update_ref_record
*rec
= item
->util
;
4416 fprintf(fp
, "%s\n%s\n%s\n", item
->string
,
4417 oid_to_hex(&rec
->before
), oid_to_hex(&rec
->after
));
4420 result
= commit_lock_file(&lock
);
4428 * Parse the update-refs file for the current rebase, then remove the
4429 * refs that do not appear in the todo_list (and have not had updated
4430 * values stored) and add refs that are in the todo_list but not
4431 * represented in the update-refs file.
4433 * If there are changes to the update-refs list, then write the new state
4436 void todo_list_filter_update_refs(struct repository
*r
,
4437 struct todo_list
*todo_list
)
4441 struct string_list update_refs
= STRING_LIST_INIT_DUP
;
4443 sequencer_get_update_refs_state(r
->gitdir
, &update_refs
);
4446 * For each item in the update_refs list, if it has no updated
4447 * value and does not appear in the todo_list, then remove it
4448 * from the update_refs list.
4450 for (i
= 0; i
< update_refs
.nr
; i
++) {
4453 const char *ref
= update_refs
.items
[i
].string
;
4454 size_t reflen
= strlen(ref
);
4455 struct update_ref_record
*rec
= update_refs
.items
[i
].util
;
4457 /* OID already stored as updated. */
4458 if (!is_null_oid(&rec
->after
))
4461 for (j
= 0; !found
&& j
< todo_list
->nr
; j
++) {
4462 struct todo_item
*item
= &todo_list
->items
[j
];
4463 const char *arg
= todo_list
->buf
.buf
+ item
->arg_offset
;
4465 if (item
->command
!= TODO_UPDATE_REF
)
4468 if (item
->arg_len
!= reflen
||
4469 strncmp(arg
, ref
, reflen
))
4476 free(update_refs
.items
[i
].string
);
4477 free(update_refs
.items
[i
].util
);
4480 MOVE_ARRAY(update_refs
.items
+ i
, update_refs
.items
+ i
+ 1, update_refs
.nr
- i
);
4488 * For each todo_item, check if its ref is in the update_refs list.
4489 * If not, then add it as an un-updated ref.
4491 for (i
= 0; i
< todo_list
->nr
; i
++) {
4492 struct todo_item
*item
= &todo_list
->items
[i
];
4493 const char *arg
= todo_list
->buf
.buf
+ item
->arg_offset
;
4496 if (item
->command
!= TODO_UPDATE_REF
)
4499 for (j
= 0; !found
&& j
< update_refs
.nr
; j
++) {
4500 const char *ref
= update_refs
.items
[j
].string
;
4502 found
= strlen(ref
) == item
->arg_len
&&
4503 !strncmp(ref
, arg
, item
->arg_len
);
4507 struct string_list_item
*inserted
;
4508 struct strbuf argref
= STRBUF_INIT
;
4510 strbuf_add(&argref
, arg
, item
->arg_len
);
4511 inserted
= string_list_insert(&update_refs
, argref
.buf
);
4512 inserted
->util
= init_update_ref_record(argref
.buf
);
4513 strbuf_release(&argref
);
4519 write_update_refs_state(&update_refs
);
4520 string_list_clear(&update_refs
, 1);
4523 static int do_update_ref(struct repository
*r
, const char *refname
)
4525 struct string_list_item
*item
;
4526 struct string_list list
= STRING_LIST_INIT_DUP
;
4528 if (sequencer_get_update_refs_state(r
->gitdir
, &list
))
4531 for_each_string_list_item(item
, &list
) {
4532 if (!strcmp(item
->string
, refname
)) {
4533 struct update_ref_record
*rec
= item
->util
;
4534 if (read_ref("HEAD", &rec
->after
))
4540 write_update_refs_state(&list
);
4541 string_list_clear(&list
, 1);
4545 static int do_update_refs(struct repository
*r
, int quiet
)
4548 struct string_list_item
*item
;
4549 struct string_list refs_to_oids
= STRING_LIST_INIT_DUP
;
4550 struct ref_store
*refs
= get_main_ref_store(r
);
4551 struct strbuf update_msg
= STRBUF_INIT
;
4552 struct strbuf error_msg
= STRBUF_INIT
;
4554 if ((res
= sequencer_get_update_refs_state(r
->gitdir
, &refs_to_oids
)))
4557 for_each_string_list_item(item
, &refs_to_oids
) {
4558 struct update_ref_record
*rec
= item
->util
;
4561 loop_res
= refs_update_ref(refs
, "rewritten during rebase",
4563 &rec
->after
, &rec
->before
,
4564 0, UPDATE_REFS_MSG_ON_ERR
);
4571 strbuf_addf(&error_msg
, "\t%s\n", item
->string
);
4573 strbuf_addf(&update_msg
, "\t%s\n", item
->string
);
4577 (update_msg
.len
|| error_msg
.len
)) {
4579 _("Updated the following refs with %s:\n%s"),
4585 _("Failed to update the following refs with %s:\n%s"),
4590 string_list_clear(&refs_to_oids
, 1);
4591 strbuf_release(&update_msg
);
4592 strbuf_release(&error_msg
);
4596 static int is_final_fixup(struct todo_list
*todo_list
)
4598 int i
= todo_list
->current
;
4600 if (!is_fixup(todo_list
->items
[i
].command
))
4603 while (++i
< todo_list
->nr
)
4604 if (is_fixup(todo_list
->items
[i
].command
))
4606 else if (!is_noop(todo_list
->items
[i
].command
))
4611 static enum todo_command
peek_command(struct todo_list
*todo_list
, int offset
)
4615 for (i
= todo_list
->current
+ offset
; i
< todo_list
->nr
; i
++)
4616 if (!is_noop(todo_list
->items
[i
].command
))
4617 return todo_list
->items
[i
].command
;
4622 static void create_autostash_internal(struct repository
*r
,
4624 const char *refname
)
4626 struct strbuf buf
= STRBUF_INIT
;
4627 struct lock_file lock_file
= LOCK_INIT
;
4630 if (path
&& refname
)
4631 BUG("can only pass path or refname");
4633 fd
= repo_hold_locked_index(r
, &lock_file
, 0);
4634 refresh_index(r
->index
, REFRESH_QUIET
, NULL
, NULL
, NULL
);
4636 repo_update_index_if_able(r
, &lock_file
);
4637 rollback_lock_file(&lock_file
);
4639 if (has_unstaged_changes(r
, 1) ||
4640 has_uncommitted_changes(r
, 1)) {
4641 struct child_process stash
= CHILD_PROCESS_INIT
;
4642 struct reset_head_opts ropts
= { .flags
= RESET_HEAD_HARD
};
4643 struct object_id oid
;
4645 strvec_pushl(&stash
.args
,
4646 "stash", "create", "autostash", NULL
);
4650 if (capture_command(&stash
, &buf
, GIT_MAX_HEXSZ
))
4651 die(_("Cannot autostash"));
4652 strbuf_trim_trailing_newline(&buf
);
4653 if (repo_get_oid(r
, buf
.buf
, &oid
))
4654 die(_("Unexpected stash response: '%s'"),
4657 strbuf_add_unique_abbrev(&buf
, &oid
, DEFAULT_ABBREV
);
4660 if (safe_create_leading_directories_const(path
))
4661 die(_("Could not create directory for '%s'"),
4663 write_file(path
, "%s", oid_to_hex(&oid
));
4665 refs_update_ref(get_main_ref_store(r
), "", refname
,
4666 &oid
, null_oid(), 0, UPDATE_REFS_DIE_ON_ERR
);
4669 printf(_("Created autostash: %s\n"), buf
.buf
);
4670 if (reset_head(r
, &ropts
) < 0)
4671 die(_("could not reset --hard"));
4672 discard_index(r
->index
);
4673 if (repo_read_index(r
) < 0)
4674 die(_("could not read index"));
4676 strbuf_release(&buf
);
4679 void create_autostash(struct repository
*r
, const char *path
)
4681 create_autostash_internal(r
, path
, NULL
);
4684 void create_autostash_ref(struct repository
*r
, const char *refname
)
4686 create_autostash_internal(r
, NULL
, refname
);
4689 static int apply_save_autostash_oid(const char *stash_oid
, int attempt_apply
)
4691 struct child_process child
= CHILD_PROCESS_INIT
;
4694 if (attempt_apply
) {
4696 child
.no_stdout
= 1;
4697 child
.no_stderr
= 1;
4698 strvec_push(&child
.args
, "stash");
4699 strvec_push(&child
.args
, "apply");
4700 strvec_push(&child
.args
, stash_oid
);
4701 ret
= run_command(&child
);
4704 if (attempt_apply
&& !ret
)
4705 fprintf(stderr
, _("Applied autostash.\n"));
4707 struct child_process store
= CHILD_PROCESS_INIT
;
4710 strvec_push(&store
.args
, "stash");
4711 strvec_push(&store
.args
, "store");
4712 strvec_push(&store
.args
, "-m");
4713 strvec_push(&store
.args
, "autostash");
4714 strvec_push(&store
.args
, "-q");
4715 strvec_push(&store
.args
, stash_oid
);
4716 if (run_command(&store
))
4717 ret
= error(_("cannot store %s"), stash_oid
);
4721 "Your changes are safe in the stash.\n"
4722 "You can run \"git stash pop\" or"
4723 " \"git stash drop\" at any time.\n"),
4725 _("Applying autostash resulted in conflicts.") :
4726 _("Autostash exists; creating a new stash entry."));
4732 static int apply_save_autostash(const char *path
, int attempt_apply
)
4734 struct strbuf stash_oid
= STRBUF_INIT
;
4737 if (!read_oneliner(&stash_oid
, path
,
4738 READ_ONELINER_SKIP_IF_EMPTY
)) {
4739 strbuf_release(&stash_oid
);
4742 strbuf_trim(&stash_oid
);
4744 ret
= apply_save_autostash_oid(stash_oid
.buf
, attempt_apply
);
4747 strbuf_release(&stash_oid
);
4751 int save_autostash(const char *path
)
4753 return apply_save_autostash(path
, 0);
4756 int apply_autostash(const char *path
)
4758 return apply_save_autostash(path
, 1);
4761 int apply_autostash_oid(const char *stash_oid
)
4763 return apply_save_autostash_oid(stash_oid
, 1);
4766 static int apply_save_autostash_ref(struct repository
*r
, const char *refname
,
4769 struct object_id stash_oid
;
4770 char stash_oid_hex
[GIT_MAX_HEXSZ
+ 1];
4773 if (!refs_ref_exists(get_main_ref_store(r
), refname
))
4776 if (!refs_resolve_ref_unsafe(get_main_ref_store(r
), refname
,
4777 RESOLVE_REF_READING
, &stash_oid
, &flag
))
4779 if (flag
& REF_ISSYMREF
)
4780 return error(_("autostash reference is a symref"));
4782 oid_to_hex_r(stash_oid_hex
, &stash_oid
);
4783 ret
= apply_save_autostash_oid(stash_oid_hex
, attempt_apply
);
4785 refs_delete_ref(get_main_ref_store(r
), "", refname
,
4786 &stash_oid
, REF_NO_DEREF
);
4791 int save_autostash_ref(struct repository
*r
, const char *refname
)
4793 return apply_save_autostash_ref(r
, refname
, 0);
4796 int apply_autostash_ref(struct repository
*r
, const char *refname
)
4798 return apply_save_autostash_ref(r
, refname
, 1);
4801 static int checkout_onto(struct repository
*r
, struct replay_opts
*opts
,
4802 const char *onto_name
, const struct object_id
*onto
,
4803 const struct object_id
*orig_head
)
4805 struct reset_head_opts ropts
= {
4807 .orig_head
= orig_head
,
4808 .flags
= RESET_HEAD_DETACH
| RESET_ORIG_HEAD
|
4809 RESET_HEAD_RUN_POST_CHECKOUT_HOOK
,
4810 .head_msg
= reflog_message(opts
, "start", "checkout %s",
4812 .default_reflog_action
= sequencer_reflog_action(opts
)
4814 if (reset_head(r
, &ropts
)) {
4815 apply_autostash(rebase_path_autostash());
4816 sequencer_remove_state(opts
);
4817 return error(_("could not detach HEAD"));
4823 static int stopped_at_head(struct repository
*r
)
4825 struct object_id head
;
4826 struct commit
*commit
;
4827 struct commit_message message
;
4829 if (repo_get_oid(r
, "HEAD", &head
) ||
4830 !(commit
= lookup_commit(r
, &head
)) ||
4831 repo_parse_commit(r
, commit
) || get_message(commit
, &message
))
4832 fprintf(stderr
, _("Stopped at HEAD\n"));
4834 fprintf(stderr
, _("Stopped at %s\n"), message
.label
);
4835 free_message(commit
, &message
);
4841 static int reread_todo_if_changed(struct repository
*r
,
4842 struct todo_list
*todo_list
,
4843 struct replay_opts
*opts
)
4846 struct strbuf buf
= STRBUF_INIT
;
4848 if (strbuf_read_file_or_whine(&buf
, get_todo_path(opts
)) < 0)
4850 offset
= get_item_line_offset(todo_list
, todo_list
->current
+ 1);
4851 if (buf
.len
!= todo_list
->buf
.len
- offset
||
4852 memcmp(buf
.buf
, todo_list
->buf
.buf
+ offset
, buf
.len
)) {
4853 /* Reread the todo file if it has changed. */
4854 todo_list_release(todo_list
);
4855 if (read_populate_todo(r
, todo_list
, opts
))
4856 return -1; /* message was printed */
4857 /* `current` will be incremented on return */
4858 todo_list
->current
= -1;
4860 strbuf_release(&buf
);
4865 static const char rescheduled_advice
[] =
4866 N_("Could not execute the todo command\n"
4870 "It has been rescheduled; To edit the command before continuing, please\n"
4871 "edit the todo list first:\n"
4873 " git rebase --edit-todo\n"
4874 " git rebase --continue\n");
4876 static int pick_one_commit(struct repository
*r
,
4877 struct todo_list
*todo_list
,
4878 struct replay_opts
*opts
,
4879 int *check_todo
, int* reschedule
)
4881 struct replay_ctx
*ctx
= opts
->ctx
;
4883 struct todo_item
*item
= todo_list
->items
+ todo_list
->current
;
4884 const char *arg
= todo_item_get_arg(todo_list
, item
);
4885 if (is_rebase_i(opts
))
4886 ctx
->reflog_message
= reflog_message(
4887 opts
, command_to_string(item
->command
), NULL
);
4889 res
= do_pick_commit(r
, item
, opts
, is_final_fixup(todo_list
),
4891 if (is_rebase_i(opts
) && res
< 0) {
4896 if (item
->command
== TODO_EDIT
) {
4897 struct commit
*commit
= item
->commit
;
4901 fprintf(stderr
, _("Stopped at %s... %.*s\n"),
4902 short_commit_name(r
, commit
), item
->arg_len
, arg
);
4904 return error_with_patch(r
, commit
,
4905 arg
, item
->arg_len
, opts
, res
, !res
);
4907 if (is_rebase_i(opts
) && !res
)
4908 record_in_rewritten(&item
->commit
->object
.oid
,
4909 peek_command(todo_list
, 1));
4910 if (res
&& is_fixup(item
->command
)) {
4913 return error_failed_squash(r
, item
->commit
, opts
,
4914 item
->arg_len
, arg
);
4915 } else if (res
&& is_rebase_i(opts
) && item
->commit
) {
4917 struct object_id oid
;
4920 * If we are rewording and have either
4921 * fast-forwarded already, or are about to
4922 * create a new root commit, we want to amend,
4923 * otherwise we do not.
4925 if (item
->command
== TODO_REWORD
&&
4926 !repo_get_oid(r
, "HEAD", &oid
) &&
4927 (oideq(&item
->commit
->object
.oid
, &oid
) ||
4928 (opts
->have_squash_onto
&&
4929 oideq(&opts
->squash_onto
, &oid
))))
4932 return res
| error_with_patch(r
, item
->commit
,
4933 arg
, item
->arg_len
, opts
,
4939 static int pick_commits(struct repository
*r
,
4940 struct todo_list
*todo_list
,
4941 struct replay_opts
*opts
)
4943 struct replay_ctx
*ctx
= opts
->ctx
;
4944 int res
= 0, reschedule
= 0;
4946 ctx
->reflog_message
= sequencer_reflog_action(opts
);
4948 assert(!(opts
->signoff
|| opts
->no_commit
||
4949 opts
->record_origin
|| should_edit(opts
) ||
4950 opts
->committer_date_is_author_date
||
4951 opts
->ignore_date
));
4952 if (read_and_refresh_cache(r
, opts
))
4955 unlink(rebase_path_message());
4956 unlink(rebase_path_stopped_sha());
4957 unlink(rebase_path_amend());
4958 unlink(rebase_path_patch());
4960 while (todo_list
->current
< todo_list
->nr
) {
4961 struct todo_item
*item
= todo_list
->items
+ todo_list
->current
;
4962 const char *arg
= todo_item_get_arg(todo_list
, item
);
4965 if (save_todo(todo_list
, opts
, reschedule
))
4967 if (is_rebase_i(opts
)) {
4968 if (item
->command
!= TODO_COMMENT
) {
4969 FILE *f
= fopen(rebase_path_msgnum(), "w");
4971 todo_list
->done_nr
++;
4974 fprintf(f
, "%d\n", todo_list
->done_nr
);
4978 fprintf(stderr
, _("Rebasing (%d/%d)%s"),
4980 todo_list
->total_nr
,
4981 opts
->verbose
? "\n" : "\r");
4983 unlink(rebase_path_author_script());
4984 unlink(git_path_merge_head(r
));
4985 refs_delete_ref(get_main_ref_store(r
), "", "AUTO_MERGE",
4986 NULL
, REF_NO_DEREF
);
4987 refs_delete_ref(get_main_ref_store(r
), "", "REBASE_HEAD",
4988 NULL
, REF_NO_DEREF
);
4990 if (item
->command
== TODO_BREAK
) {
4993 return stopped_at_head(r
);
4996 strbuf_reset(&ctx
->message
);
4997 ctx
->have_message
= 0;
4998 if (item
->command
<= TODO_SQUASH
) {
4999 res
= pick_one_commit(r
, todo_list
, opts
, &check_todo
,
5001 if (!res
&& item
->command
== TODO_EDIT
)
5003 } else if (item
->command
== TODO_EXEC
) {
5004 char *end_of_arg
= (char *)(arg
+ item
->arg_len
);
5005 int saved
= *end_of_arg
;
5010 res
= do_exec(r
, arg
);
5011 *end_of_arg
= saved
;
5014 if (opts
->reschedule_failed_exec
)
5018 } else if (item
->command
== TODO_LABEL
) {
5019 if ((res
= do_label(r
, arg
, item
->arg_len
)))
5021 } else if (item
->command
== TODO_RESET
) {
5022 if ((res
= do_reset(r
, arg
, item
->arg_len
, opts
)))
5024 } else if (item
->command
== TODO_MERGE
) {
5025 if ((res
= do_merge(r
, item
->commit
, arg
, item
->arg_len
,
5026 item
->flags
, &check_todo
, opts
)) < 0)
5028 else if (item
->commit
)
5029 record_in_rewritten(&item
->commit
->object
.oid
,
5030 peek_command(todo_list
, 1));
5032 /* failed with merge conflicts */
5033 return error_with_patch(r
, item
->commit
,
5036 } else if (item
->command
== TODO_UPDATE_REF
) {
5037 struct strbuf ref
= STRBUF_INIT
;
5038 strbuf_add(&ref
, arg
, item
->arg_len
);
5039 if ((res
= do_update_ref(r
, ref
.buf
)))
5041 strbuf_release(&ref
);
5042 } else if (!is_noop(item
->command
))
5043 return error(_("unknown command %d"), item
->command
);
5046 advise(_(rescheduled_advice
),
5047 get_item_line_length(todo_list
,
5048 todo_list
->current
),
5049 get_item_line(todo_list
, todo_list
->current
));
5050 if (save_todo(todo_list
, opts
, reschedule
))
5053 write_rebase_head(&item
->commit
->object
.oid
);
5054 } else if (is_rebase_i(opts
) && check_todo
&& !res
&&
5055 reread_todo_if_changed(r
, todo_list
, opts
)) {
5062 todo_list
->current
++;
5065 if (is_rebase_i(opts
)) {
5066 struct strbuf head_ref
= STRBUF_INIT
, buf
= STRBUF_INIT
;
5069 if (read_oneliner(&head_ref
, rebase_path_head_name(), 0) &&
5070 starts_with(head_ref
.buf
, "refs/")) {
5072 struct object_id head
, orig
;
5075 if (repo_get_oid(r
, "HEAD", &head
)) {
5076 res
= error(_("cannot read HEAD"));
5078 strbuf_release(&head_ref
);
5079 strbuf_release(&buf
);
5082 if (!read_oneliner(&buf
, rebase_path_orig_head(), 0) ||
5083 get_oid_hex(buf
.buf
, &orig
)) {
5084 res
= error(_("could not read orig-head"));
5085 goto cleanup_head_ref
;
5088 if (!read_oneliner(&buf
, rebase_path_onto(), 0)) {
5089 res
= error(_("could not read 'onto'"));
5090 goto cleanup_head_ref
;
5092 msg
= reflog_message(opts
, "finish", "%s onto %s",
5093 head_ref
.buf
, buf
.buf
);
5094 if (update_ref(msg
, head_ref
.buf
, &head
, &orig
,
5095 REF_NO_DEREF
, UPDATE_REFS_MSG_ON_ERR
)) {
5096 res
= error(_("could not update %s"),
5098 goto cleanup_head_ref
;
5100 msg
= reflog_message(opts
, "finish", "returning to %s",
5102 if (create_symref("HEAD", head_ref
.buf
, msg
)) {
5103 res
= error(_("could not update HEAD to %s"),
5105 goto cleanup_head_ref
;
5110 if (opts
->verbose
) {
5111 struct rev_info log_tree_opt
;
5112 struct object_id orig
, head
;
5114 memset(&log_tree_opt
, 0, sizeof(log_tree_opt
));
5115 repo_init_revisions(r
, &log_tree_opt
, NULL
);
5116 log_tree_opt
.diff
= 1;
5117 log_tree_opt
.diffopt
.output_format
=
5118 DIFF_FORMAT_DIFFSTAT
;
5119 log_tree_opt
.disable_stdin
= 1;
5121 if (read_oneliner(&buf
, rebase_path_orig_head(), 0) &&
5122 !repo_get_oid(r
, buf
.buf
, &orig
) &&
5123 !repo_get_oid(r
, "HEAD", &head
)) {
5124 diff_tree_oid(&orig
, &head
, "",
5125 &log_tree_opt
.diffopt
);
5126 log_tree_diff_flush(&log_tree_opt
);
5128 release_revisions(&log_tree_opt
);
5130 flush_rewritten_pending();
5131 if (!stat(rebase_path_rewritten_list(), &st
) &&
5133 struct child_process child
= CHILD_PROCESS_INIT
;
5134 struct run_hooks_opt hook_opt
= RUN_HOOKS_OPT_INIT
;
5136 child
.in
= open(rebase_path_rewritten_list(), O_RDONLY
);
5138 strvec_push(&child
.args
, "notes");
5139 strvec_push(&child
.args
, "copy");
5140 strvec_push(&child
.args
, "--for-rewrite=rebase");
5141 /* we don't care if this copying failed */
5142 run_command(&child
);
5144 hook_opt
.path_to_stdin
= rebase_path_rewritten_list();
5145 strvec_push(&hook_opt
.args
, "rebase");
5146 run_hooks_opt("post-rewrite", &hook_opt
);
5148 apply_autostash(rebase_path_autostash());
5154 _("Successfully rebased and updated %s.\n"),
5158 strbuf_release(&buf
);
5159 strbuf_release(&head_ref
);
5161 if (do_update_refs(r
, opts
->quiet
))
5166 * Sequence of picks finished successfully; cleanup by
5167 * removing the .git/sequencer directory
5169 return sequencer_remove_state(opts
);
5172 static int continue_single_pick(struct repository
*r
, struct replay_opts
*opts
)
5174 struct child_process cmd
= CHILD_PROCESS_INIT
;
5176 if (!refs_ref_exists(get_main_ref_store(r
), "CHERRY_PICK_HEAD") &&
5177 !refs_ref_exists(get_main_ref_store(r
), "REVERT_HEAD"))
5178 return error(_("no cherry-pick or revert in progress"));
5181 strvec_push(&cmd
.args
, "commit");
5184 * continue_single_pick() handles the case of recovering from a
5185 * conflict. should_edit() doesn't handle that case; for a conflict,
5186 * we want to edit if the user asked for it, or if they didn't specify
5187 * and stdin is a tty.
5189 if (!opts
->edit
|| (opts
->edit
< 0 && !isatty(0)))
5191 * Include --cleanup=strip as well because we don't want the
5192 * "# Conflicts:" messages.
5194 strvec_pushl(&cmd
.args
, "--no-edit", "--cleanup=strip", NULL
);
5196 return run_command(&cmd
);
5199 static int commit_staged_changes(struct repository
*r
,
5200 struct replay_opts
*opts
,
5201 struct todo_list
*todo_list
)
5203 struct replay_ctx
*ctx
= opts
->ctx
;
5204 unsigned int flags
= ALLOW_EMPTY
| EDIT_MSG
;
5205 unsigned int final_fixup
= 0, is_clean
;
5207 if (has_unstaged_changes(r
, 1))
5208 return error(_("cannot rebase: You have unstaged changes."));
5210 is_clean
= !has_uncommitted_changes(r
, 0);
5212 if (!is_clean
&& !file_exists(rebase_path_message())) {
5213 const char *gpg_opt
= gpg_sign_opt_quoted(opts
);
5215 return error(_(staged_changes_advice
), gpg_opt
, gpg_opt
);
5217 if (file_exists(rebase_path_amend())) {
5218 struct strbuf rev
= STRBUF_INIT
;
5219 struct object_id head
, to_amend
;
5221 if (repo_get_oid(r
, "HEAD", &head
))
5222 return error(_("cannot amend non-existing commit"));
5223 if (!read_oneliner(&rev
, rebase_path_amend(), 0))
5224 return error(_("invalid file: '%s'"), rebase_path_amend());
5225 if (get_oid_hex(rev
.buf
, &to_amend
))
5226 return error(_("invalid contents: '%s'"),
5227 rebase_path_amend());
5228 if (!is_clean
&& !oideq(&head
, &to_amend
))
5229 return error(_("\nYou have uncommitted changes in your "
5230 "working tree. Please, commit them\n"
5231 "first and then run 'git rebase "
5232 "--continue' again."));
5234 * When skipping a failed fixup/squash, we need to edit the
5235 * commit message, the current fixup list and count, and if it
5236 * was the last fixup/squash in the chain, we need to clean up
5237 * the commit message and if there was a squash, let the user
5240 if (!is_clean
|| !ctx
->current_fixup_count
)
5241 ; /* this is not the final fixup */
5242 else if (!oideq(&head
, &to_amend
) ||
5243 !file_exists(rebase_path_stopped_sha())) {
5244 /* was a final fixup or squash done manually? */
5245 if (!is_fixup(peek_command(todo_list
, 0))) {
5246 unlink(rebase_path_fixup_msg());
5247 unlink(rebase_path_squash_msg());
5248 unlink(rebase_path_current_fixups());
5249 strbuf_reset(&ctx
->current_fixups
);
5250 ctx
->current_fixup_count
= 0;
5253 /* we are in a fixup/squash chain */
5254 const char *p
= ctx
->current_fixups
.buf
;
5255 int len
= ctx
->current_fixups
.len
;
5257 ctx
->current_fixup_count
--;
5259 BUG("Incorrect current_fixups:\n%s", p
);
5260 while (len
&& p
[len
- 1] != '\n')
5262 strbuf_setlen(&ctx
->current_fixups
, len
);
5263 if (write_message(p
, len
, rebase_path_current_fixups(),
5265 return error(_("could not write file: '%s'"),
5266 rebase_path_current_fixups());
5269 * If a fixup/squash in a fixup/squash chain failed, the
5270 * commit message is already correct, no need to commit
5273 * Only if it is the final command in the fixup/squash
5274 * chain, and only if the chain is longer than a single
5275 * fixup/squash command (which was just skipped), do we
5276 * actually need to re-commit with a cleaned up commit
5279 if (ctx
->current_fixup_count
> 0 &&
5280 !is_fixup(peek_command(todo_list
, 0))) {
5283 * If there was not a single "squash" in the
5284 * chain, we only need to clean up the commit
5285 * message, no need to bother the user with
5286 * opening the commit message in the editor.
5288 if (!starts_with(p
, "squash ") &&
5289 !strstr(p
, "\nsquash "))
5290 flags
= (flags
& ~EDIT_MSG
) | CLEANUP_MSG
;
5291 } else if (is_fixup(peek_command(todo_list
, 0))) {
5293 * We need to update the squash message to skip
5294 * the latest commit message.
5297 struct commit
*commit
;
5299 const char *path
= rebase_path_squash_msg();
5300 const char *encoding
= get_commit_output_encoding();
5302 if (parse_head(r
, &commit
))
5303 return error(_("could not parse HEAD"));
5305 p
= repo_logmsg_reencode(r
, commit
, NULL
, encoding
);
5307 res
= error(_("could not parse commit %s"),
5308 oid_to_hex(&commit
->object
.oid
));
5309 goto unuse_commit_buffer
;
5311 find_commit_subject(p
, &msg
);
5312 if (write_message(msg
, strlen(msg
), path
, 0)) {
5313 res
= error(_("could not write file: "
5315 goto unuse_commit_buffer
;
5317 unuse_commit_buffer
:
5318 repo_unuse_commit_buffer(r
, commit
, p
);
5324 strbuf_release(&rev
);
5329 if (refs_ref_exists(get_main_ref_store(r
),
5330 "CHERRY_PICK_HEAD") &&
5331 refs_delete_ref(get_main_ref_store(r
), "",
5332 "CHERRY_PICK_HEAD", NULL
, REF_NO_DEREF
))
5333 return error(_("could not remove CHERRY_PICK_HEAD"));
5334 if (unlink(git_path_merge_msg(r
)) && errno
!= ENOENT
)
5335 return error_errno(_("could not remove '%s'"),
5336 git_path_merge_msg(r
));
5341 if (run_git_commit(final_fixup
? NULL
: rebase_path_message(),
5343 return error(_("could not commit staged changes."));
5344 unlink(rebase_path_amend());
5345 unlink(git_path_merge_head(r
));
5346 refs_delete_ref(get_main_ref_store(r
), "", "AUTO_MERGE",
5347 NULL
, REF_NO_DEREF
);
5349 unlink(rebase_path_fixup_msg());
5350 unlink(rebase_path_squash_msg());
5352 if (ctx
->current_fixup_count
> 0) {
5354 * Whether final fixup or not, we just cleaned up the commit
5357 unlink(rebase_path_current_fixups());
5358 strbuf_reset(&ctx
->current_fixups
);
5359 ctx
->current_fixup_count
= 0;
5364 int sequencer_continue(struct repository
*r
, struct replay_opts
*opts
)
5366 struct replay_ctx
*ctx
= opts
->ctx
;
5367 struct todo_list todo_list
= TODO_LIST_INIT
;
5370 if (read_and_refresh_cache(r
, opts
))
5373 if (read_populate_opts(opts
))
5375 if (is_rebase_i(opts
)) {
5376 if ((res
= read_populate_todo(r
, &todo_list
, opts
)))
5377 goto release_todo_list
;
5379 if (file_exists(rebase_path_dropped())) {
5380 if ((res
= todo_list_check_against_backup(r
, opts
,
5382 goto release_todo_list
;
5384 unlink(rebase_path_dropped());
5387 ctx
->reflog_message
= reflog_message(opts
, "continue", NULL
);
5388 if (commit_staged_changes(r
, opts
, &todo_list
)) {
5390 goto release_todo_list
;
5392 } else if (!file_exists(get_todo_path(opts
)))
5393 return continue_single_pick(r
, opts
);
5394 else if ((res
= read_populate_todo(r
, &todo_list
, opts
)))
5395 goto release_todo_list
;
5397 if (!is_rebase_i(opts
)) {
5398 /* Verify that the conflict has been resolved */
5399 if (refs_ref_exists(get_main_ref_store(r
),
5400 "CHERRY_PICK_HEAD") ||
5401 refs_ref_exists(get_main_ref_store(r
), "REVERT_HEAD")) {
5402 res
= continue_single_pick(r
, opts
);
5404 goto release_todo_list
;
5406 if (index_differs_from(r
, "HEAD", NULL
, 0)) {
5407 res
= error_dirty_index(r
, opts
);
5408 goto release_todo_list
;
5410 todo_list
.current
++;
5411 } else if (file_exists(rebase_path_stopped_sha())) {
5412 struct strbuf buf
= STRBUF_INIT
;
5413 struct object_id oid
;
5415 if (read_oneliner(&buf
, rebase_path_stopped_sha(),
5416 READ_ONELINER_SKIP_IF_EMPTY
) &&
5417 !get_oid_hex(buf
.buf
, &oid
))
5418 record_in_rewritten(&oid
, peek_command(&todo_list
, 0));
5419 strbuf_release(&buf
);
5422 res
= pick_commits(r
, &todo_list
, opts
);
5424 todo_list_release(&todo_list
);
5428 static int single_pick(struct repository
*r
,
5429 struct commit
*cmit
,
5430 struct replay_opts
*opts
)
5433 struct todo_item item
;
5435 item
.command
= opts
->action
== REPLAY_PICK
?
5436 TODO_PICK
: TODO_REVERT
;
5439 opts
->ctx
->reflog_message
= sequencer_reflog_action(opts
);
5440 return do_pick_commit(r
, &item
, opts
, 0, &check_todo
);
5443 int sequencer_pick_revisions(struct repository
*r
,
5444 struct replay_opts
*opts
)
5446 struct todo_list todo_list
= TODO_LIST_INIT
;
5447 struct object_id oid
;
5451 if (read_and_refresh_cache(r
, opts
))
5454 for (i
= 0; i
< opts
->revs
->pending
.nr
; i
++) {
5455 struct object_id oid
;
5456 const char *name
= opts
->revs
->pending
.objects
[i
].name
;
5458 /* This happens when using --stdin. */
5462 if (!repo_get_oid(r
, name
, &oid
)) {
5463 if (!lookup_commit_reference_gently(r
, &oid
, 1)) {
5464 enum object_type type
= oid_object_info(r
,
5467 return error(_("%s: can't cherry-pick a %s"),
5468 name
, type_name(type
));
5471 return error(_("%s: bad revision"), name
);
5475 * If we were called as "git cherry-pick <commit>", just
5476 * cherry-pick/revert it, set CHERRY_PICK_HEAD /
5477 * REVERT_HEAD, and don't touch the sequencer state.
5478 * This means it is possible to cherry-pick in the middle
5479 * of a cherry-pick sequence.
5481 if (opts
->revs
->cmdline
.nr
== 1 &&
5482 opts
->revs
->cmdline
.rev
->whence
== REV_CMD_REV
&&
5483 opts
->revs
->no_walk
&&
5484 !opts
->revs
->cmdline
.rev
->flags
) {
5485 struct commit
*cmit
;
5486 if (prepare_revision_walk(opts
->revs
))
5487 return error(_("revision walk setup failed"));
5488 cmit
= get_revision(opts
->revs
);
5490 return error(_("empty commit set passed"));
5491 if (get_revision(opts
->revs
))
5492 BUG("unexpected extra commit from walk");
5493 return single_pick(r
, cmit
, opts
);
5497 * Start a new cherry-pick/ revert sequence; but
5498 * first, make sure that an existing one isn't in
5502 if (walk_revs_populate_todo(&todo_list
, opts
) ||
5503 create_seq_dir(r
) < 0)
5505 if (repo_get_oid(r
, "HEAD", &oid
) && (opts
->action
== REPLAY_REVERT
))
5506 return error(_("can't revert as initial commit"));
5507 if (save_head(oid_to_hex(&oid
)))
5509 if (save_opts(opts
))
5511 update_abort_safety_file();
5512 res
= pick_commits(r
, &todo_list
, opts
);
5513 todo_list_release(&todo_list
);
5517 void append_signoff(struct strbuf
*msgbuf
, size_t ignore_footer
, unsigned flag
)
5519 unsigned no_dup_sob
= flag
& APPEND_SIGNOFF_DEDUP
;
5520 struct strbuf sob
= STRBUF_INIT
;
5523 strbuf_addstr(&sob
, sign_off_header
);
5524 strbuf_addstr(&sob
, fmt_name(WANT_COMMITTER_IDENT
));
5525 strbuf_addch(&sob
, '\n');
5528 strbuf_complete_line(msgbuf
);
5531 * If the whole message buffer is equal to the sob, pretend that we
5532 * found a conforming footer with a matching sob
5534 if (msgbuf
->len
- ignore_footer
== sob
.len
&&
5535 !strncmp(msgbuf
->buf
, sob
.buf
, sob
.len
))
5538 has_footer
= has_conforming_footer(msgbuf
, &sob
, ignore_footer
);
5541 const char *append_newlines
= NULL
;
5542 size_t len
= msgbuf
->len
- ignore_footer
;
5546 * The buffer is completely empty. Leave foom for
5547 * the title and body to be filled in by the user.
5549 append_newlines
= "\n\n";
5550 } else if (len
== 1) {
5552 * Buffer contains a single newline. Add another
5553 * so that we leave room for the title and body.
5555 append_newlines
= "\n";
5556 } else if (msgbuf
->buf
[len
- 2] != '\n') {
5558 * Buffer ends with a single newline. Add another
5559 * so that there is an empty line between the message
5562 append_newlines
= "\n";
5563 } /* else, the buffer already ends with two newlines. */
5565 if (append_newlines
)
5566 strbuf_splice(msgbuf
, msgbuf
->len
- ignore_footer
, 0,
5567 append_newlines
, strlen(append_newlines
));
5570 if (has_footer
!= 3 && (!no_dup_sob
|| has_footer
!= 2))
5571 strbuf_splice(msgbuf
, msgbuf
->len
- ignore_footer
, 0,
5574 strbuf_release(&sob
);
5577 struct labels_entry
{
5578 struct hashmap_entry entry
;
5579 char label
[FLEX_ARRAY
];
5582 static int labels_cmp(const void *fndata UNUSED
,
5583 const struct hashmap_entry
*eptr
,
5584 const struct hashmap_entry
*entry_or_key
, const void *key
)
5586 const struct labels_entry
*a
, *b
;
5588 a
= container_of(eptr
, const struct labels_entry
, entry
);
5589 b
= container_of(entry_or_key
, const struct labels_entry
, entry
);
5591 return key
? strcmp(a
->label
, key
) : strcmp(a
->label
, b
->label
);
5594 struct string_entry
{
5595 struct oidmap_entry entry
;
5596 char string
[FLEX_ARRAY
];
5599 struct label_state
{
5600 struct oidmap commit2label
;
5601 struct hashmap labels
;
5603 int max_label_length
;
5606 static const char *label_oid(struct object_id
*oid
, const char *label
,
5607 struct label_state
*state
)
5609 struct labels_entry
*labels_entry
;
5610 struct string_entry
*string_entry
;
5611 struct object_id dummy
;
5614 string_entry
= oidmap_get(&state
->commit2label
, oid
);
5616 return string_entry
->string
;
5619 * For "uninteresting" commits, i.e. commits that are not to be
5620 * rebased, and which can therefore not be labeled, we use a unique
5621 * abbreviation of the commit name. This is slightly more complicated
5622 * than calling repo_find_unique_abbrev() because we also need to make
5623 * sure that the abbreviation does not conflict with any other
5626 * We disallow "interesting" commits to be labeled by a string that
5627 * is a valid full-length hash, to ensure that we always can find an
5628 * abbreviation for any uninteresting commit's names that does not
5629 * clash with any other label.
5631 strbuf_reset(&state
->buf
);
5635 strbuf_grow(&state
->buf
, GIT_MAX_HEXSZ
);
5636 label
= p
= state
->buf
.buf
;
5638 repo_find_unique_abbrev_r(the_repository
, p
, oid
,
5642 * We may need to extend the abbreviated hash so that there is
5643 * no conflicting label.
5645 if (hashmap_get_from_hash(&state
->labels
, strihash(p
), p
)) {
5646 size_t i
= strlen(p
) + 1;
5648 oid_to_hex_r(p
, oid
);
5649 for (; i
< the_hash_algo
->hexsz
; i
++) {
5652 if (!hashmap_get_from_hash(&state
->labels
,
5659 struct strbuf
*buf
= &state
->buf
;
5660 int label_is_utf8
= 1; /* start with this assumption */
5661 size_t max_len
= buf
->len
+ state
->max_label_length
;
5664 * Sanitize labels by replacing non-alpha-numeric characters
5665 * (including white-space ones) by dashes, as they might be
5666 * illegal in file names (and hence in ref names).
5668 * Note that we retain non-ASCII UTF-8 characters (identified
5669 * via the most significant bit). They should be all acceptable
5672 * As we will use the labels as names of (loose) refs, it is
5673 * vital that the name not be longer than the maximum component
5674 * size of the file system (`NAME_MAX`). We are careful to
5675 * truncate the label accordingly, allowing for the `.lock`
5676 * suffix and for the label to be UTF-8 encoded (i.e. we avoid
5677 * truncating in the middle of a character).
5679 for (; *label
&& buf
->len
+ 1 < max_len
; label
++)
5680 if (isalnum(*label
) ||
5681 (!label_is_utf8
&& (*label
& 0x80)))
5682 strbuf_addch(buf
, *label
);
5683 else if (*label
& 0x80) {
5684 const char *p
= label
;
5686 utf8_width(&p
, NULL
);
5688 if (buf
->len
+ (p
- label
) > max_len
)
5690 strbuf_add(buf
, label
, p
- label
);
5694 strbuf_addch(buf
, *label
);
5696 /* avoid leading dash and double-dashes */
5697 } else if (buf
->len
&& buf
->buf
[buf
->len
- 1] != '-')
5698 strbuf_addch(buf
, '-');
5700 strbuf_addstr(buf
, "rev-");
5701 strbuf_add_unique_abbrev(buf
, oid
, default_abbrev
);
5705 if ((buf
->len
== the_hash_algo
->hexsz
&&
5706 !get_oid_hex(label
, &dummy
)) ||
5707 (buf
->len
== 1 && *label
== '#') ||
5708 hashmap_get_from_hash(&state
->labels
,
5709 strihash(label
), label
)) {
5711 * If the label already exists, or if the label is a
5712 * valid full OID, or the label is a '#' (which we use
5713 * as a separator between merge heads and oneline), we
5714 * append a dash and a number to make it unique.
5716 size_t len
= buf
->len
;
5718 for (i
= 2; ; i
++) {
5719 strbuf_setlen(buf
, len
);
5720 strbuf_addf(buf
, "-%d", i
);
5721 if (!hashmap_get_from_hash(&state
->labels
,
5731 FLEX_ALLOC_STR(labels_entry
, label
, label
);
5732 hashmap_entry_init(&labels_entry
->entry
, strihash(label
));
5733 hashmap_add(&state
->labels
, &labels_entry
->entry
);
5735 FLEX_ALLOC_STR(string_entry
, string
, label
);
5736 oidcpy(&string_entry
->entry
.oid
, oid
);
5737 oidmap_put(&state
->commit2label
, string_entry
);
5739 return string_entry
->string
;
5742 static int make_script_with_merges(struct pretty_print_context
*pp
,
5743 struct rev_info
*revs
, struct strbuf
*out
,
5746 int keep_empty
= flags
& TODO_LIST_KEEP_EMPTY
;
5747 int rebase_cousins
= flags
& TODO_LIST_REBASE_COUSINS
;
5748 int root_with_onto
= flags
& TODO_LIST_ROOT_WITH_ONTO
;
5749 int skipped_commit
= 0;
5750 struct strbuf buf
= STRBUF_INIT
, oneline
= STRBUF_INIT
;
5751 struct strbuf label
= STRBUF_INIT
;
5752 struct commit_list
*commits
= NULL
, **tail
= &commits
, *iter
;
5753 struct commit_list
*tips
= NULL
, **tips_tail
= &tips
;
5754 struct commit
*commit
;
5755 struct oidmap commit2todo
= OIDMAP_INIT
;
5756 struct string_entry
*entry
;
5757 struct oidset interesting
= OIDSET_INIT
, child_seen
= OIDSET_INIT
,
5758 shown
= OIDSET_INIT
;
5759 struct label_state state
=
5760 { OIDMAP_INIT
, { NULL
}, STRBUF_INIT
, GIT_MAX_LABEL_LENGTH
};
5762 int abbr
= flags
& TODO_LIST_ABBREVIATE_CMDS
;
5763 const char *cmd_pick
= abbr
? "p" : "pick",
5764 *cmd_label
= abbr
? "l" : "label",
5765 *cmd_reset
= abbr
? "t" : "reset",
5766 *cmd_merge
= abbr
? "m" : "merge";
5768 git_config_get_int("rebase.maxlabellength", &state
.max_label_length
);
5770 oidmap_init(&commit2todo
, 0);
5771 oidmap_init(&state
.commit2label
, 0);
5772 hashmap_init(&state
.labels
, labels_cmp
, NULL
, 0);
5773 strbuf_init(&state
.buf
, 32);
5775 if (revs
->cmdline
.nr
&& (revs
->cmdline
.rev
[0].flags
& BOTTOM
)) {
5776 struct labels_entry
*onto_label_entry
;
5777 struct object_id
*oid
= &revs
->cmdline
.rev
[0].item
->oid
;
5778 FLEX_ALLOC_STR(entry
, string
, "onto");
5779 oidcpy(&entry
->entry
.oid
, oid
);
5780 oidmap_put(&state
.commit2label
, entry
);
5782 FLEX_ALLOC_STR(onto_label_entry
, label
, "onto");
5783 hashmap_entry_init(&onto_label_entry
->entry
, strihash("onto"));
5784 hashmap_add(&state
.labels
, &onto_label_entry
->entry
);
5789 * - get onelines for all commits
5790 * - gather all branch tips (i.e. 2nd or later parents of merges)
5791 * - label all branch tips
5793 while ((commit
= get_revision(revs
))) {
5794 struct commit_list
*to_merge
;
5795 const char *p1
, *p2
;
5796 struct object_id
*oid
;
5799 tail
= &commit_list_insert(commit
, tail
)->next
;
5800 oidset_insert(&interesting
, &commit
->object
.oid
);
5802 is_empty
= is_original_commit_empty(commit
);
5803 if (!is_empty
&& (commit
->object
.flags
& PATCHSAME
)) {
5804 if (flags
& TODO_LIST_WARN_SKIPPED_CHERRY_PICKS
)
5805 warning(_("skipped previously applied commit %s"),
5806 short_commit_name(the_repository
, commit
));
5810 if (is_empty
&& !keep_empty
)
5813 strbuf_reset(&oneline
);
5814 pretty_print_commit(pp
, commit
, &oneline
);
5816 to_merge
= commit
->parents
? commit
->parents
->next
: NULL
;
5818 /* non-merge commit: easy case */
5820 strbuf_addf(&buf
, "%s %s %s", cmd_pick
,
5821 oid_to_hex(&commit
->object
.oid
),
5824 strbuf_addf(&buf
, " %s empty",
5827 FLEX_ALLOC_STR(entry
, string
, buf
.buf
);
5828 oidcpy(&entry
->entry
.oid
, &commit
->object
.oid
);
5829 oidmap_put(&commit2todo
, entry
);
5834 /* Create a label */
5835 strbuf_reset(&label
);
5836 if (skip_prefix(oneline
.buf
, "Merge ", &p1
) &&
5837 (p1
= strchr(p1
, '\'')) &&
5838 (p2
= strchr(++p1
, '\'')))
5839 strbuf_add(&label
, p1
, p2
- p1
);
5840 else if (skip_prefix(oneline
.buf
, "Merge pull request ",
5842 (p1
= strstr(p1
, " from ")))
5843 strbuf_addstr(&label
, p1
+ strlen(" from "));
5845 strbuf_addbuf(&label
, &oneline
);
5848 strbuf_addf(&buf
, "%s -C %s",
5849 cmd_merge
, oid_to_hex(&commit
->object
.oid
));
5851 /* label the tips of merged branches */
5852 for (; to_merge
; to_merge
= to_merge
->next
) {
5853 oid
= &to_merge
->item
->object
.oid
;
5854 strbuf_addch(&buf
, ' ');
5856 if (!oidset_contains(&interesting
, oid
)) {
5857 strbuf_addstr(&buf
, label_oid(oid
, NULL
,
5862 tips_tail
= &commit_list_insert(to_merge
->item
,
5865 strbuf_addstr(&buf
, label_oid(oid
, label
.buf
, &state
));
5867 strbuf_addf(&buf
, " # %s", oneline
.buf
);
5869 FLEX_ALLOC_STR(entry
, string
, buf
.buf
);
5870 oidcpy(&entry
->entry
.oid
, &commit
->object
.oid
);
5871 oidmap_put(&commit2todo
, entry
);
5874 advise_if_enabled(ADVICE_SKIPPED_CHERRY_PICKS
,
5875 _("use --reapply-cherry-picks to include skipped commits"));
5879 * - label branch points
5880 * - add HEAD to the branch tips
5882 for (iter
= commits
; iter
; iter
= iter
->next
) {
5883 struct commit_list
*parent
= iter
->item
->parents
;
5884 for (; parent
; parent
= parent
->next
) {
5885 struct object_id
*oid
= &parent
->item
->object
.oid
;
5886 if (!oidset_contains(&interesting
, oid
))
5888 if (oidset_insert(&child_seen
, oid
))
5889 label_oid(oid
, "branch-point", &state
);
5892 /* Add HEAD as implicit "tip of branch" */
5894 tips_tail
= &commit_list_insert(iter
->item
,
5899 * Third phase: output the todo list. This is a bit tricky, as we
5900 * want to avoid jumping back and forth between revisions. To
5901 * accomplish that goal, we walk backwards from the branch tips,
5902 * gathering commits not yet shown, reversing the list on the fly,
5903 * then outputting that list (labeling revisions as needed).
5905 strbuf_addf(out
, "%s onto\n", cmd_label
);
5906 for (iter
= tips
; iter
; iter
= iter
->next
) {
5907 struct commit_list
*list
= NULL
, *iter2
;
5909 commit
= iter
->item
;
5910 if (oidset_contains(&shown
, &commit
->object
.oid
))
5912 entry
= oidmap_get(&state
.commit2label
, &commit
->object
.oid
);
5915 strbuf_addf(out
, "\n%s Branch %s\n", comment_line_str
, entry
->string
);
5917 strbuf_addch(out
, '\n');
5919 while (oidset_contains(&interesting
, &commit
->object
.oid
) &&
5920 !oidset_contains(&shown
, &commit
->object
.oid
)) {
5921 commit_list_insert(commit
, &list
);
5922 if (!commit
->parents
) {
5926 commit
= commit
->parents
->item
;
5930 strbuf_addf(out
, "%s %s\n", cmd_reset
,
5931 rebase_cousins
|| root_with_onto
?
5932 "onto" : "[new root]");
5934 const char *to
= NULL
;
5936 entry
= oidmap_get(&state
.commit2label
,
5937 &commit
->object
.oid
);
5940 else if (!rebase_cousins
)
5941 to
= label_oid(&commit
->object
.oid
, NULL
,
5944 if (!to
|| !strcmp(to
, "onto"))
5945 strbuf_addf(out
, "%s onto\n", cmd_reset
);
5947 strbuf_reset(&oneline
);
5948 pretty_print_commit(pp
, commit
, &oneline
);
5949 strbuf_addf(out
, "%s %s # %s\n",
5950 cmd_reset
, to
, oneline
.buf
);
5954 for (iter2
= list
; iter2
; iter2
= iter2
->next
) {
5955 struct object_id
*oid
= &iter2
->item
->object
.oid
;
5956 entry
= oidmap_get(&commit2todo
, oid
);
5957 /* only show if not already upstream */
5959 strbuf_addf(out
, "%s\n", entry
->string
);
5960 entry
= oidmap_get(&state
.commit2label
, oid
);
5962 strbuf_addf(out
, "%s %s\n",
5963 cmd_label
, entry
->string
);
5964 oidset_insert(&shown
, oid
);
5967 free_commit_list(list
);
5970 free_commit_list(commits
);
5971 free_commit_list(tips
);
5973 strbuf_release(&label
);
5974 strbuf_release(&oneline
);
5975 strbuf_release(&buf
);
5977 oidmap_free(&commit2todo
, 1);
5978 oidmap_free(&state
.commit2label
, 1);
5979 hashmap_clear_and_free(&state
.labels
, struct labels_entry
, entry
);
5980 strbuf_release(&state
.buf
);
5985 int sequencer_make_script(struct repository
*r
, struct strbuf
*out
, int argc
,
5986 const char **argv
, unsigned flags
)
5988 char *format
= NULL
;
5989 struct pretty_print_context pp
= {0};
5990 struct rev_info revs
;
5991 struct commit
*commit
;
5992 int keep_empty
= flags
& TODO_LIST_KEEP_EMPTY
;
5993 const char *insn
= flags
& TODO_LIST_ABBREVIATE_CMDS
? "p" : "pick";
5994 int rebase_merges
= flags
& TODO_LIST_REBASE_MERGES
;
5995 int reapply_cherry_picks
= flags
& TODO_LIST_REAPPLY_CHERRY_PICKS
;
5996 int skipped_commit
= 0;
5999 repo_init_revisions(r
, &revs
, NULL
);
6000 revs
.verbose_header
= 1;
6002 revs
.max_parents
= 1;
6003 revs
.cherry_mark
= !reapply_cherry_picks
;
6006 revs
.right_only
= 1;
6007 revs
.sort_order
= REV_SORT_IN_GRAPH_ORDER
;
6008 revs
.topo_order
= 1;
6010 revs
.pretty_given
= 1;
6011 git_config_get_string("rebase.instructionFormat", &format
);
6012 if (!format
|| !*format
) {
6014 format
= xstrdup("%s");
6016 get_commit_format(format
, &revs
);
6018 pp
.fmt
= revs
.commit_format
;
6019 pp
.output_encoding
= get_log_output_encoding();
6021 if (setup_revisions(argc
, argv
, &revs
, NULL
) > 1) {
6022 ret
= error(_("make_script: unhandled options"));
6026 if (prepare_revision_walk(&revs
) < 0) {
6027 ret
= error(_("make_script: error preparing revisions"));
6031 if (rebase_merges
) {
6032 ret
= make_script_with_merges(&pp
, &revs
, out
, flags
);
6036 while ((commit
= get_revision(&revs
))) {
6037 int is_empty
= is_original_commit_empty(commit
);
6039 if (!is_empty
&& (commit
->object
.flags
& PATCHSAME
)) {
6040 if (flags
& TODO_LIST_WARN_SKIPPED_CHERRY_PICKS
)
6041 warning(_("skipped previously applied commit %s"),
6042 short_commit_name(r
, commit
));
6046 if (is_empty
&& !keep_empty
)
6048 strbuf_addf(out
, "%s %s ", insn
,
6049 oid_to_hex(&commit
->object
.oid
));
6050 pretty_print_commit(&pp
, commit
, out
);
6052 strbuf_addf(out
, " %s empty", comment_line_str
);
6053 strbuf_addch(out
, '\n');
6056 advise_if_enabled(ADVICE_SKIPPED_CHERRY_PICKS
,
6057 _("use --reapply-cherry-picks to include skipped commits"));
6059 release_revisions(&revs
);
6064 * Add commands after pick and (series of) squash/fixup commands
6067 static void todo_list_add_exec_commands(struct todo_list
*todo_list
,
6068 struct string_list
*commands
)
6070 struct strbuf
*buf
= &todo_list
->buf
;
6071 size_t base_offset
= buf
->len
;
6072 int i
, insert
, nr
= 0, alloc
= 0;
6073 struct todo_item
*items
= NULL
, *base_items
= NULL
;
6075 CALLOC_ARRAY(base_items
, commands
->nr
);
6076 for (i
= 0; i
< commands
->nr
; i
++) {
6077 size_t command_len
= strlen(commands
->items
[i
].string
);
6079 strbuf_addstr(buf
, commands
->items
[i
].string
);
6080 strbuf_addch(buf
, '\n');
6082 base_items
[i
].command
= TODO_EXEC
;
6083 base_items
[i
].offset_in_buf
= base_offset
;
6084 base_items
[i
].arg_offset
= base_offset
;
6085 base_items
[i
].arg_len
= command_len
;
6087 base_offset
+= command_len
+ 1;
6091 * Insert <commands> after every pick. Here, fixup/squash chains
6092 * are considered part of the pick, so we insert the commands *after*
6093 * those chains if there are any.
6095 * As we insert the exec commands immediately after rearranging
6096 * any fixups and before the user edits the list, a fixup chain
6097 * can never contain comments (any comments are empty picks that
6098 * have been commented out because the user did not specify
6099 * --keep-empty). So, it is safe to insert an exec command
6100 * without looking at the command following a comment.
6103 for (i
= 0; i
< todo_list
->nr
; i
++) {
6104 enum todo_command command
= todo_list
->items
[i
].command
;
6105 if (insert
&& !is_fixup(command
)) {
6106 ALLOC_GROW(items
, nr
+ commands
->nr
, alloc
);
6107 COPY_ARRAY(items
+ nr
, base_items
, commands
->nr
);
6113 ALLOC_GROW(items
, nr
+ 1, alloc
);
6114 items
[nr
++] = todo_list
->items
[i
];
6116 if (command
== TODO_PICK
|| command
== TODO_MERGE
)
6120 /* insert or append final <commands> */
6122 ALLOC_GROW(items
, nr
+ commands
->nr
, alloc
);
6123 COPY_ARRAY(items
+ nr
, base_items
, commands
->nr
);
6128 FREE_AND_NULL(todo_list
->items
);
6129 todo_list
->items
= items
;
6131 todo_list
->alloc
= alloc
;
6134 static void todo_list_to_strbuf(struct repository
*r
,
6135 struct todo_list
*todo_list
,
6136 struct strbuf
*buf
, int num
, unsigned flags
)
6138 struct todo_item
*item
;
6139 int i
, max
= todo_list
->nr
;
6141 if (num
> 0 && num
< max
)
6144 for (item
= todo_list
->items
, i
= 0; i
< max
; i
++, item
++) {
6147 /* if the item is not a command write it and continue */
6148 if (item
->command
>= TODO_COMMENT
) {
6149 strbuf_addf(buf
, "%.*s\n", item
->arg_len
,
6150 todo_item_get_arg(todo_list
, item
));
6154 /* add command to the buffer */
6155 cmd
= command_to_char(item
->command
);
6156 if ((flags
& TODO_LIST_ABBREVIATE_CMDS
) && cmd
)
6157 strbuf_addch(buf
, cmd
);
6159 strbuf_addstr(buf
, command_to_string(item
->command
));
6163 const char *oid
= flags
& TODO_LIST_SHORTEN_IDS
?
6164 short_commit_name(r
, item
->commit
) :
6165 oid_to_hex(&item
->commit
->object
.oid
);
6167 if (item
->command
== TODO_FIXUP
) {
6168 if (item
->flags
& TODO_EDIT_FIXUP_MSG
)
6169 strbuf_addstr(buf
, " -c");
6170 else if (item
->flags
& TODO_REPLACE_FIXUP_MSG
) {
6171 strbuf_addstr(buf
, " -C");
6175 if (item
->command
== TODO_MERGE
) {
6176 if (item
->flags
& TODO_EDIT_MERGE_MSG
)
6177 strbuf_addstr(buf
, " -c");
6179 strbuf_addstr(buf
, " -C");
6182 strbuf_addf(buf
, " %s", oid
);
6185 /* add all the rest */
6187 strbuf_addch(buf
, '\n');
6189 strbuf_addf(buf
, " %.*s\n", item
->arg_len
,
6190 todo_item_get_arg(todo_list
, item
));
6194 int todo_list_write_to_file(struct repository
*r
, struct todo_list
*todo_list
,
6195 const char *file
, const char *shortrevisions
,
6196 const char *shortonto
, int num
, unsigned flags
)
6199 struct strbuf buf
= STRBUF_INIT
;
6201 todo_list_to_strbuf(r
, todo_list
, &buf
, num
, flags
);
6202 if (flags
& TODO_LIST_APPEND_TODO_HELP
)
6203 append_todo_help(count_commands(todo_list
),
6204 shortrevisions
, shortonto
, &buf
);
6206 res
= write_message(buf
.buf
, buf
.len
, file
, 0);
6207 strbuf_release(&buf
);
6212 /* skip picking commits whose parents are unchanged */
6213 static int skip_unnecessary_picks(struct repository
*r
,
6214 struct todo_list
*todo_list
,
6215 struct object_id
*base_oid
)
6217 struct object_id
*parent_oid
;
6220 for (i
= 0; i
< todo_list
->nr
; i
++) {
6221 struct todo_item
*item
= todo_list
->items
+ i
;
6223 if (item
->command
>= TODO_NOOP
)
6225 if (item
->command
!= TODO_PICK
)
6227 if (repo_parse_commit(r
, item
->commit
)) {
6228 return error(_("could not parse commit '%s'"),
6229 oid_to_hex(&item
->commit
->object
.oid
));
6231 if (!item
->commit
->parents
)
6232 break; /* root commit */
6233 if (item
->commit
->parents
->next
)
6234 break; /* merge commit */
6235 parent_oid
= &item
->commit
->parents
->item
->object
.oid
;
6236 if (!oideq(parent_oid
, base_oid
))
6238 oidcpy(base_oid
, &item
->commit
->object
.oid
);
6241 const char *done_path
= rebase_path_done();
6243 if (todo_list_write_to_file(r
, todo_list
, done_path
, NULL
, NULL
, i
, 0)) {
6244 error_errno(_("could not write to '%s'"), done_path
);
6248 MOVE_ARRAY(todo_list
->items
, todo_list
->items
+ i
, todo_list
->nr
- i
);
6250 todo_list
->current
= 0;
6251 todo_list
->done_nr
+= i
;
6253 if (is_fixup(peek_command(todo_list
, 0)))
6254 record_in_rewritten(base_oid
, peek_command(todo_list
, 0));
6260 struct todo_add_branch_context
{
6261 struct todo_item
*items
;
6265 struct commit
*commit
;
6266 struct string_list refs_to_oids
;
6269 static int add_decorations_to_list(const struct commit
*commit
,
6270 struct todo_add_branch_context
*ctx
)
6272 const struct name_decoration
*decoration
= get_name_decoration(&commit
->object
);
6273 const char *head_ref
= resolve_ref_unsafe("HEAD",
6274 RESOLVE_REF_READING
,
6278 while (decoration
) {
6279 struct todo_item
*item
;
6281 size_t base_offset
= ctx
->buf
->len
;
6284 * If the branch is the current HEAD, then it will be
6285 * updated by the default rebase behavior.
6287 if (head_ref
&& !strcmp(head_ref
, decoration
->name
)) {
6288 decoration
= decoration
->next
;
6292 ALLOC_GROW(ctx
->items
,
6295 item
= &ctx
->items
[ctx
->items_nr
];
6296 memset(item
, 0, sizeof(*item
));
6298 /* If the branch is checked out, then leave a comment instead. */
6299 if ((path
= branch_checked_out(decoration
->name
))) {
6300 item
->command
= TODO_COMMENT
;
6301 strbuf_addf(ctx
->buf
, "# Ref %s checked out at '%s'\n",
6302 decoration
->name
, path
);
6304 struct string_list_item
*sti
;
6305 item
->command
= TODO_UPDATE_REF
;
6306 strbuf_addf(ctx
->buf
, "%s\n", decoration
->name
);
6308 sti
= string_list_insert(&ctx
->refs_to_oids
,
6310 sti
->util
= init_update_ref_record(decoration
->name
);
6313 item
->offset_in_buf
= base_offset
;
6314 item
->arg_offset
= base_offset
;
6315 item
->arg_len
= ctx
->buf
->len
- base_offset
;
6318 decoration
= decoration
->next
;
6325 * For each 'pick' command, find out if the commit has a decoration in
6326 * refs/heads/. If so, then add a 'label for-update-refs/' command.
6328 static int todo_list_add_update_ref_commands(struct todo_list
*todo_list
)
6331 static struct string_list decorate_refs_exclude
= STRING_LIST_INIT_NODUP
;
6332 static struct string_list decorate_refs_exclude_config
= STRING_LIST_INIT_NODUP
;
6333 static struct string_list decorate_refs_include
= STRING_LIST_INIT_NODUP
;
6334 struct decoration_filter decoration_filter
= {
6335 .include_ref_pattern
= &decorate_refs_include
,
6336 .exclude_ref_pattern
= &decorate_refs_exclude
,
6337 .exclude_ref_config_pattern
= &decorate_refs_exclude_config
,
6339 struct todo_add_branch_context ctx
= {
6340 .buf
= &todo_list
->buf
,
6341 .refs_to_oids
= STRING_LIST_INIT_DUP
,
6344 ctx
.items_alloc
= 2 * todo_list
->nr
+ 1;
6345 ALLOC_ARRAY(ctx
.items
, ctx
.items_alloc
);
6347 string_list_append(&decorate_refs_include
, "refs/heads/");
6348 load_ref_decorations(&decoration_filter
, 0);
6350 for (i
= 0; i
< todo_list
->nr
; ) {
6351 struct todo_item
*item
= &todo_list
->items
[i
];
6353 /* insert ith item into new list */
6354 ALLOC_GROW(ctx
.items
,
6358 ctx
.items
[ctx
.items_nr
++] = todo_list
->items
[i
++];
6361 ctx
.commit
= item
->commit
;
6362 add_decorations_to_list(item
->commit
, &ctx
);
6366 res
= write_update_refs_state(&ctx
.refs_to_oids
);
6368 string_list_clear(&ctx
.refs_to_oids
, 1);
6371 /* we failed, so clean up the new list. */
6376 free(todo_list
->items
);
6377 todo_list
->items
= ctx
.items
;
6378 todo_list
->nr
= ctx
.items_nr
;
6379 todo_list
->alloc
= ctx
.items_alloc
;
6384 int complete_action(struct repository
*r
, struct replay_opts
*opts
, unsigned flags
,
6385 const char *shortrevisions
, const char *onto_name
,
6386 struct commit
*onto
, const struct object_id
*orig_head
,
6387 struct string_list
*commands
, unsigned autosquash
,
6388 unsigned update_refs
,
6389 struct todo_list
*todo_list
)
6391 char shortonto
[GIT_MAX_HEXSZ
+ 1];
6392 const char *todo_file
= rebase_path_todo();
6393 struct todo_list new_todo
= TODO_LIST_INIT
;
6394 struct strbuf
*buf
= &todo_list
->buf
, buf2
= STRBUF_INIT
;
6395 struct object_id oid
= onto
->object
.oid
;
6398 repo_find_unique_abbrev_r(r
, shortonto
, &oid
,
6401 if (buf
->len
== 0) {
6402 struct todo_item
*item
= append_new_todo(todo_list
);
6403 item
->command
= TODO_NOOP
;
6404 item
->commit
= NULL
;
6405 item
->arg_len
= item
->arg_offset
= item
->flags
= item
->offset_in_buf
= 0;
6408 if (update_refs
&& todo_list_add_update_ref_commands(todo_list
))
6411 if (autosquash
&& todo_list_rearrange_squash(todo_list
))
6415 todo_list_add_exec_commands(todo_list
, commands
);
6417 if (count_commands(todo_list
) == 0) {
6418 apply_autostash(rebase_path_autostash());
6419 sequencer_remove_state(opts
);
6421 return error(_("nothing to do"));
6424 res
= edit_todo_list(r
, opts
, todo_list
, &new_todo
, shortrevisions
,
6428 else if (res
== -2) {
6429 apply_autostash(rebase_path_autostash());
6430 sequencer_remove_state(opts
);
6433 } else if (res
== -3) {
6434 apply_autostash(rebase_path_autostash());
6435 sequencer_remove_state(opts
);
6436 todo_list_release(&new_todo
);
6438 return error(_("nothing to do"));
6439 } else if (res
== -4) {
6440 checkout_onto(r
, opts
, onto_name
, &onto
->object
.oid
, orig_head
);
6441 todo_list_release(&new_todo
);
6446 /* Expand the commit IDs */
6447 todo_list_to_strbuf(r
, &new_todo
, &buf2
, -1, 0);
6448 strbuf_swap(&new_todo
.buf
, &buf2
);
6449 strbuf_release(&buf2
);
6450 /* Nothing is done yet, and we're reparsing, so let's reset the count */
6451 new_todo
.total_nr
= 0;
6452 if (todo_list_parse_insn_buffer(r
, opts
, new_todo
.buf
.buf
, &new_todo
) < 0)
6453 BUG("invalid todo list after expanding IDs:\n%s",
6456 if (opts
->allow_ff
&& skip_unnecessary_picks(r
, &new_todo
, &oid
)) {
6457 todo_list_release(&new_todo
);
6458 return error(_("could not skip unnecessary pick commands"));
6461 if (todo_list_write_to_file(r
, &new_todo
, todo_file
, NULL
, NULL
, -1,
6462 flags
& ~(TODO_LIST_SHORTEN_IDS
))) {
6463 todo_list_release(&new_todo
);
6464 return error_errno(_("could not write '%s'"), todo_file
);
6469 if (checkout_onto(r
, opts
, onto_name
, &oid
, orig_head
))
6472 if (require_clean_work_tree(r
, "rebase", NULL
, 1, 1))
6475 todo_list_write_total_nr(&new_todo
);
6476 res
= pick_commits(r
, &new_todo
, opts
);
6479 todo_list_release(&new_todo
);
6484 struct subject2item_entry
{
6485 struct hashmap_entry entry
;
6487 char subject
[FLEX_ARRAY
];
6490 static int subject2item_cmp(const void *fndata UNUSED
,
6491 const struct hashmap_entry
*eptr
,
6492 const struct hashmap_entry
*entry_or_key
,
6495 const struct subject2item_entry
*a
, *b
;
6497 a
= container_of(eptr
, const struct subject2item_entry
, entry
);
6498 b
= container_of(entry_or_key
, const struct subject2item_entry
, entry
);
6500 return key
? strcmp(a
->subject
, key
) : strcmp(a
->subject
, b
->subject
);
6503 define_commit_slab(commit_todo_item
, struct todo_item
*);
6505 static int skip_fixupish(const char *subject
, const char **p
) {
6506 return skip_prefix(subject
, "fixup! ", p
) ||
6507 skip_prefix(subject
, "amend! ", p
) ||
6508 skip_prefix(subject
, "squash! ", p
);
6512 * Rearrange the todo list that has both "pick commit-id msg" and "pick
6513 * commit-id fixup!/squash! msg" in it so that the latter is put immediately
6514 * after the former, and change "pick" to "fixup"/"squash".
6516 * Note that if the config has specified a custom instruction format, each log
6517 * message will have to be retrieved from the commit (as the oneline in the
6518 * script cannot be trusted) in order to normalize the autosquash arrangement.
6520 int todo_list_rearrange_squash(struct todo_list
*todo_list
)
6522 struct hashmap subject2item
;
6523 int rearranged
= 0, *next
, *tail
, i
, nr
= 0;
6525 struct commit_todo_item commit_todo
;
6526 struct todo_item
*items
= NULL
;
6528 init_commit_todo_item(&commit_todo
);
6530 * The hashmap maps onelines to the respective todo list index.
6532 * If any items need to be rearranged, the next[i] value will indicate
6533 * which item was moved directly after the i'th.
6535 * In that case, last[i] will indicate the index of the latest item to
6536 * be moved to appear after the i'th.
6538 hashmap_init(&subject2item
, subject2item_cmp
, NULL
, todo_list
->nr
);
6539 ALLOC_ARRAY(next
, todo_list
->nr
);
6540 ALLOC_ARRAY(tail
, todo_list
->nr
);
6541 ALLOC_ARRAY(subjects
, todo_list
->nr
);
6542 for (i
= 0; i
< todo_list
->nr
; i
++) {
6543 struct strbuf buf
= STRBUF_INIT
;
6544 struct todo_item
*item
= todo_list
->items
+ i
;
6545 const char *commit_buffer
, *subject
, *p
;
6548 struct subject2item_entry
*entry
;
6550 next
[i
] = tail
[i
] = -1;
6551 if (!item
->commit
|| item
->command
== TODO_DROP
) {
6556 if (is_fixup(item
->command
)) {
6557 clear_commit_todo_item(&commit_todo
);
6558 return error(_("the script was already rearranged."));
6561 repo_parse_commit(the_repository
, item
->commit
);
6562 commit_buffer
= repo_logmsg_reencode(the_repository
,
6565 find_commit_subject(commit_buffer
, &subject
);
6566 format_subject(&buf
, subject
, " ");
6567 subject
= subjects
[i
] = strbuf_detach(&buf
, &subject_len
);
6568 repo_unuse_commit_buffer(the_repository
, item
->commit
,
6570 if (skip_fixupish(subject
, &p
)) {
6571 struct commit
*commit2
;
6576 if (!skip_fixupish(p
, &p
))
6580 entry
= hashmap_get_entry_from_hash(&subject2item
,
6582 struct subject2item_entry
,
6585 /* found by title */
6587 else if (!strchr(p
, ' ') &&
6589 lookup_commit_reference_by_name(p
)) &&
6590 *commit_todo_item_at(&commit_todo
, commit2
))
6591 /* found by commit name */
6592 i2
= *commit_todo_item_at(&commit_todo
, commit2
)
6595 /* copy can be a prefix of the commit subject */
6596 for (i2
= 0; i2
< i
; i2
++)
6598 starts_with(subjects
[i2
], p
))
6606 if (starts_with(subject
, "fixup!")) {
6607 todo_list
->items
[i
].command
= TODO_FIXUP
;
6608 } else if (starts_with(subject
, "amend!")) {
6609 todo_list
->items
[i
].command
= TODO_FIXUP
;
6610 todo_list
->items
[i
].flags
= TODO_REPLACE_FIXUP_MSG
;
6612 todo_list
->items
[i
].command
= TODO_SQUASH
;
6618 next
[i
] = next
[tail
[i2
]];
6622 } else if (!hashmap_get_from_hash(&subject2item
,
6623 strhash(subject
), subject
)) {
6624 FLEX_ALLOC_MEM(entry
, subject
, subject
, subject_len
);
6626 hashmap_entry_init(&entry
->entry
,
6627 strhash(entry
->subject
));
6628 hashmap_put(&subject2item
, &entry
->entry
);
6631 *commit_todo_item_at(&commit_todo
, item
->commit
) = item
;
6635 ALLOC_ARRAY(items
, todo_list
->nr
);
6637 for (i
= 0; i
< todo_list
->nr
; i
++) {
6638 enum todo_command command
= todo_list
->items
[i
].command
;
6642 * Initially, all commands are 'pick's. If it is a
6643 * fixup or a squash now, we have rearranged it.
6645 if (is_fixup(command
))
6649 items
[nr
++] = todo_list
->items
[cur
];
6654 assert(nr
== todo_list
->nr
);
6655 todo_list
->alloc
= nr
;
6656 FREE_AND_NULL(todo_list
->items
);
6657 todo_list
->items
= items
;
6662 for (i
= 0; i
< todo_list
->nr
; i
++)
6665 hashmap_clear_and_free(&subject2item
, struct subject2item_entry
, entry
);
6667 clear_commit_todo_item(&commit_todo
);
6672 int sequencer_determine_whence(struct repository
*r
, enum commit_whence
*whence
)
6674 if (refs_ref_exists(get_main_ref_store(r
), "CHERRY_PICK_HEAD")) {
6675 struct object_id cherry_pick_head
, rebase_head
;
6677 if (file_exists(git_path_seq_dir()))
6678 *whence
= FROM_CHERRY_PICK_MULTI
;
6679 if (file_exists(rebase_path()) &&
6680 !repo_get_oid(r
, "REBASE_HEAD", &rebase_head
) &&
6681 !repo_get_oid(r
, "CHERRY_PICK_HEAD", &cherry_pick_head
) &&
6682 oideq(&rebase_head
, &cherry_pick_head
))
6683 *whence
= FROM_REBASE_PICK
;
6685 *whence
= FROM_CHERRY_PICK_SINGLE
;
6693 int sequencer_get_update_refs_state(const char *wt_dir
,
6694 struct string_list
*refs
)
6698 struct strbuf ref
= STRBUF_INIT
;
6699 struct strbuf hash
= STRBUF_INIT
;
6700 struct update_ref_record
*rec
= NULL
;
6702 char *path
= rebase_path_update_refs(wt_dir
);
6704 fp
= fopen(path
, "r");
6708 while (strbuf_getline(&ref
, fp
) != EOF
) {
6709 struct string_list_item
*item
;
6711 CALLOC_ARRAY(rec
, 1);
6713 if (strbuf_getline(&hash
, fp
) == EOF
||
6714 get_oid_hex(hash
.buf
, &rec
->before
)) {
6715 warning(_("update-refs file at '%s' is invalid"),
6721 if (strbuf_getline(&hash
, fp
) == EOF
||
6722 get_oid_hex(hash
.buf
, &rec
->after
)) {
6723 warning(_("update-refs file at '%s' is invalid"),
6729 item
= string_list_insert(refs
, ref
.buf
);
6739 strbuf_release(&ref
);
6740 strbuf_release(&hash
);