7 #include "environment.h"
12 #include "object-file.h"
13 #include "object-name.h"
14 #include "object-store.h"
18 #include "sequencer.h"
20 #include "run-command.h"
24 #include "cache-tree.h"
28 #include "merge-ort.h"
29 #include "merge-ort-wrappers.h"
35 #include "wt-status.h"
37 #include "notes-utils.h"
39 #include "unpack-trees.h"
43 #include "commit-slab.h"
45 #include "commit-reach.h"
46 #include "rebase-interactive.h"
51 #define GIT_REFLOG_ACTION "GIT_REFLOG_ACTION"
53 static const char sign_off_header
[] = "Signed-off-by: ";
54 static const char cherry_picked_prefix
[] = "(cherry picked from commit ";
56 GIT_PATH_FUNC(git_path_commit_editmsg
, "COMMIT_EDITMSG")
58 static GIT_PATH_FUNC(git_path_seq_dir
, "sequencer")
60 static GIT_PATH_FUNC(git_path_todo_file
, "sequencer/todo")
61 static GIT_PATH_FUNC(git_path_opts_file
, "sequencer/opts")
62 static GIT_PATH_FUNC(git_path_head_file
, "sequencer/head")
63 static GIT_PATH_FUNC(git_path_abort_safety_file
, "sequencer/abort-safety")
65 static GIT_PATH_FUNC(rebase_path
, "rebase-merge")
67 * The file containing rebase commands, comments, and empty lines.
68 * This file is created by "git rebase -i" then edited by the user. As
69 * the lines are processed, they are removed from the front of this
70 * file and written to the tail of 'done'.
72 GIT_PATH_FUNC(rebase_path_todo
, "rebase-merge/git-rebase-todo")
73 GIT_PATH_FUNC(rebase_path_todo_backup
, "rebase-merge/git-rebase-todo.backup")
75 GIT_PATH_FUNC(rebase_path_dropped
, "rebase-merge/dropped")
78 * The rebase command lines that have already been processed. A line
79 * is moved here when it is first handled, before any associated user
82 static GIT_PATH_FUNC(rebase_path_done
, "rebase-merge/done")
84 * The file to keep track of how many commands were already processed (e.g.
87 static GIT_PATH_FUNC(rebase_path_msgnum
, "rebase-merge/msgnum")
89 * The file to keep track of how many commands are to be processed in total
90 * (e.g. for the prompt).
92 static GIT_PATH_FUNC(rebase_path_msgtotal
, "rebase-merge/end")
94 * The commit message that is planned to be used for any changes that
95 * need to be committed following a user interaction.
97 static GIT_PATH_FUNC(rebase_path_message
, "rebase-merge/message")
99 * The file into which is accumulated the suggested commit message for
100 * squash/fixup commands. When the first of a series of squash/fixups
101 * is seen, the file is created and the commit message from the
102 * previous commit and from the first squash/fixup commit are written
103 * to it. The commit message for each subsequent squash/fixup commit
104 * is appended to the file as it is processed.
106 static GIT_PATH_FUNC(rebase_path_squash_msg
, "rebase-merge/message-squash")
108 * If the current series of squash/fixups has not yet included a squash
109 * command, then this file exists and holds the commit message of the
110 * original "pick" commit. (If the series ends without a "squash"
111 * command, then this can be used as the commit message of the combined
112 * commit without opening the editor.)
114 static GIT_PATH_FUNC(rebase_path_fixup_msg
, "rebase-merge/message-fixup")
116 * This file contains the list fixup/squash commands that have been
117 * accumulated into message-fixup or message-squash so far.
119 static GIT_PATH_FUNC(rebase_path_current_fixups
, "rebase-merge/current-fixups")
121 * A script to set the GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, and
122 * GIT_AUTHOR_DATE that will be used for the commit that is currently
125 static GIT_PATH_FUNC(rebase_path_author_script
, "rebase-merge/author-script")
127 * When an "edit" rebase command is being processed, the SHA1 of the
128 * commit to be edited is recorded in this file. When "git rebase
129 * --continue" is executed, if there are any staged changes then they
130 * will be amended to the HEAD commit, but only provided the HEAD
131 * commit is still the commit to be edited. When any other rebase
132 * command is processed, this file is deleted.
134 static GIT_PATH_FUNC(rebase_path_amend
, "rebase-merge/amend")
136 * When we stop at a given patch via the "edit" command, this file contains
137 * the commit object name of the corresponding patch.
139 static GIT_PATH_FUNC(rebase_path_stopped_sha
, "rebase-merge/stopped-sha")
141 * For the post-rewrite hook, we make a list of rewritten commits and
142 * their new sha1s. The rewritten-pending list keeps the sha1s of
143 * commits that have been processed, but not committed yet,
144 * e.g. because they are waiting for a 'squash' command.
146 static GIT_PATH_FUNC(rebase_path_rewritten_list
, "rebase-merge/rewritten-list")
147 static GIT_PATH_FUNC(rebase_path_rewritten_pending
,
148 "rebase-merge/rewritten-pending")
151 * The path of the file containing the OID of the "squash onto" commit, i.e.
152 * the dummy commit used for `reset [new root]`.
154 static GIT_PATH_FUNC(rebase_path_squash_onto
, "rebase-merge/squash-onto")
157 * The path of the file listing refs that need to be deleted after the rebase
158 * finishes. This is used by the `label` command to record the need for cleanup.
160 static GIT_PATH_FUNC(rebase_path_refs_to_delete
, "rebase-merge/refs-to-delete")
163 * The update-refs file stores a list of refs that will be updated at the end
164 * of the rebase sequence. The 'update-ref <ref>' commands in the todo file
165 * update the OIDs for the refs in this file, but the refs are not updated
166 * until the end of the rebase sequence.
168 * rebase_path_update_refs() returns the path to this file for a given
169 * worktree directory. For the current worktree, pass the_repository->gitdir.
171 static char *rebase_path_update_refs(const char *wt_git_dir
)
173 return xstrfmt("%s/rebase-merge/update-refs", wt_git_dir
);
177 * The following files are written by git-rebase just after parsing the
180 static GIT_PATH_FUNC(rebase_path_gpg_sign_opt
, "rebase-merge/gpg_sign_opt")
181 static GIT_PATH_FUNC(rebase_path_cdate_is_adate
, "rebase-merge/cdate_is_adate")
182 static GIT_PATH_FUNC(rebase_path_ignore_date
, "rebase-merge/ignore_date")
183 static GIT_PATH_FUNC(rebase_path_orig_head
, "rebase-merge/orig-head")
184 static GIT_PATH_FUNC(rebase_path_verbose
, "rebase-merge/verbose")
185 static GIT_PATH_FUNC(rebase_path_quiet
, "rebase-merge/quiet")
186 static GIT_PATH_FUNC(rebase_path_signoff
, "rebase-merge/signoff")
187 static GIT_PATH_FUNC(rebase_path_head_name
, "rebase-merge/head-name")
188 static GIT_PATH_FUNC(rebase_path_onto
, "rebase-merge/onto")
189 static GIT_PATH_FUNC(rebase_path_autostash
, "rebase-merge/autostash")
190 static GIT_PATH_FUNC(rebase_path_strategy
, "rebase-merge/strategy")
191 static GIT_PATH_FUNC(rebase_path_strategy_opts
, "rebase-merge/strategy_opts")
192 static GIT_PATH_FUNC(rebase_path_allow_rerere_autoupdate
, "rebase-merge/allow_rerere_autoupdate")
193 static GIT_PATH_FUNC(rebase_path_reschedule_failed_exec
, "rebase-merge/reschedule-failed-exec")
194 static GIT_PATH_FUNC(rebase_path_no_reschedule_failed_exec
, "rebase-merge/no-reschedule-failed-exec")
195 static GIT_PATH_FUNC(rebase_path_drop_redundant_commits
, "rebase-merge/drop_redundant_commits")
196 static GIT_PATH_FUNC(rebase_path_keep_redundant_commits
, "rebase-merge/keep_redundant_commits")
199 * A 'struct update_refs_record' represents a value in the update-refs
200 * list. We use a string_list to map refs to these (before, after) pairs.
202 struct update_ref_record
{
203 struct object_id before
;
204 struct object_id after
;
207 static struct update_ref_record
*init_update_ref_record(const char *ref
)
209 struct update_ref_record
*rec
;
211 CALLOC_ARRAY(rec
, 1);
213 oidcpy(&rec
->before
, null_oid());
214 oidcpy(&rec
->after
, null_oid());
216 /* This may fail, but that's fine, we will keep the null OID. */
217 read_ref(ref
, &rec
->before
);
222 static int git_sequencer_config(const char *k
, const char *v
, void *cb
)
224 struct replay_opts
*opts
= cb
;
227 if (!strcmp(k
, "commit.cleanup")) {
230 status
= git_config_string(&s
, k
, v
);
234 if (!strcmp(s
, "verbatim")) {
235 opts
->default_msg_cleanup
= COMMIT_MSG_CLEANUP_NONE
;
236 opts
->explicit_cleanup
= 1;
237 } else if (!strcmp(s
, "whitespace")) {
238 opts
->default_msg_cleanup
= COMMIT_MSG_CLEANUP_SPACE
;
239 opts
->explicit_cleanup
= 1;
240 } else if (!strcmp(s
, "strip")) {
241 opts
->default_msg_cleanup
= COMMIT_MSG_CLEANUP_ALL
;
242 opts
->explicit_cleanup
= 1;
243 } else if (!strcmp(s
, "scissors")) {
244 opts
->default_msg_cleanup
= COMMIT_MSG_CLEANUP_SCISSORS
;
245 opts
->explicit_cleanup
= 1;
247 warning(_("invalid commit message cleanup mode '%s'"),
255 if (!strcmp(k
, "commit.gpgsign")) {
256 opts
->gpg_sign
= git_config_bool(k
, v
) ? xstrdup("") : NULL
;
260 if (!opts
->default_strategy
&& !strcmp(k
, "pull.twohead")) {
261 int ret
= git_config_string((const char**)&opts
->default_strategy
, k
, v
);
264 * pull.twohead is allowed to be multi-valued; we only
265 * care about the first value.
267 char *tmp
= strchr(opts
->default_strategy
, ' ');
274 if (opts
->action
== REPLAY_REVERT
&& !strcmp(k
, "revert.reference"))
275 opts
->commit_use_reference
= git_config_bool(k
, v
);
277 return git_diff_basic_config(k
, v
, NULL
);
280 void sequencer_init_config(struct replay_opts
*opts
)
282 opts
->default_msg_cleanup
= COMMIT_MSG_CLEANUP_NONE
;
283 git_config(git_sequencer_config
, opts
);
286 static inline int is_rebase_i(const struct replay_opts
*opts
)
288 return opts
->action
== REPLAY_INTERACTIVE_REBASE
;
291 static const char *get_dir(const struct replay_opts
*opts
)
293 if (is_rebase_i(opts
))
294 return rebase_path();
295 return git_path_seq_dir();
298 static const char *get_todo_path(const struct replay_opts
*opts
)
300 if (is_rebase_i(opts
))
301 return rebase_path_todo();
302 return git_path_todo_file();
306 * Returns 0 for non-conforming footer
307 * Returns 1 for conforming footer
308 * Returns 2 when sob exists within conforming footer
309 * Returns 3 when sob exists within conforming footer as last entry
311 static int has_conforming_footer(struct strbuf
*sb
, struct strbuf
*sob
,
312 size_t ignore_footer
)
314 struct process_trailer_options opts
= PROCESS_TRAILER_OPTIONS_INIT
;
315 struct trailer_info info
;
317 int found_sob
= 0, found_sob_last
= 0;
323 saved_char
= sb
->buf
[sb
->len
- ignore_footer
];
324 sb
->buf
[sb
->len
- ignore_footer
] = '\0';
327 trailer_info_get(&info
, sb
->buf
, &opts
);
330 sb
->buf
[sb
->len
- ignore_footer
] = saved_char
;
332 if (info
.trailer_start
== info
.trailer_end
)
335 for (i
= 0; i
< info
.trailer_nr
; i
++)
336 if (sob
&& !strncmp(info
.trailers
[i
], sob
->buf
, sob
->len
)) {
338 if (i
== info
.trailer_nr
- 1)
342 trailer_info_release(&info
);
351 static const char *gpg_sign_opt_quoted(struct replay_opts
*opts
)
353 static struct strbuf buf
= STRBUF_INIT
;
357 sq_quotef(&buf
, "-S%s", opts
->gpg_sign
);
361 void replay_opts_release(struct replay_opts
*opts
)
363 free(opts
->gpg_sign
);
364 free(opts
->reflog_action
);
365 free(opts
->default_strategy
);
366 free(opts
->strategy
);
367 for (size_t i
= 0; i
< opts
->xopts_nr
; i
++)
368 free(opts
->xopts
[i
]);
370 strbuf_release(&opts
->current_fixups
);
372 release_revisions(opts
->revs
);
376 int sequencer_remove_state(struct replay_opts
*opts
)
378 struct strbuf buf
= STRBUF_INIT
;
381 if (is_rebase_i(opts
) &&
382 strbuf_read_file(&buf
, rebase_path_refs_to_delete(), 0) > 0) {
385 char *eol
= strchr(p
, '\n');
388 if (delete_ref("(rebase) cleanup", p
, NULL
, 0) < 0) {
389 warning(_("could not delete '%s'"), p
);
399 strbuf_addstr(&buf
, get_dir(opts
));
400 if (remove_dir_recursively(&buf
, 0))
401 ret
= error(_("could not remove '%s'"), buf
.buf
);
402 strbuf_release(&buf
);
407 static const char *action_name(const struct replay_opts
*opts
)
409 switch (opts
->action
) {
413 return N_("cherry-pick");
414 case REPLAY_INTERACTIVE_REBASE
:
417 die(_("unknown action: %d"), opts
->action
);
420 struct commit_message
{
427 static const char *short_commit_name(struct commit
*commit
)
429 return repo_find_unique_abbrev(the_repository
, &commit
->object
.oid
,
433 static int get_message(struct commit
*commit
, struct commit_message
*out
)
435 const char *abbrev
, *subject
;
438 out
->message
= repo_logmsg_reencode(the_repository
, commit
, NULL
,
439 get_commit_output_encoding());
440 abbrev
= short_commit_name(commit
);
442 subject_len
= find_commit_subject(out
->message
, &subject
);
444 out
->subject
= xmemdupz(subject
, subject_len
);
445 out
->label
= xstrfmt("%s (%s)", abbrev
, out
->subject
);
446 out
->parent_label
= xstrfmt("parent of %s", out
->label
);
451 static void free_message(struct commit
*commit
, struct commit_message
*msg
)
453 free(msg
->parent_label
);
456 repo_unuse_commit_buffer(the_repository
, commit
, msg
->message
);
459 static void print_advice(struct repository
*r
, int show_hint
,
460 struct replay_opts
*opts
)
462 char *msg
= getenv("GIT_CHERRY_PICK_HELP");
467 * A conflict has occurred but the porcelain
468 * (typically rebase --interactive) wants to take care
469 * of the commit itself so remove CHERRY_PICK_HEAD
471 refs_delete_ref(get_main_ref_store(r
), "", "CHERRY_PICK_HEAD",
478 advise(_("after resolving the conflicts, mark the corrected paths\n"
479 "with 'git add <paths>' or 'git rm <paths>'"));
480 else if (opts
->action
== REPLAY_PICK
)
481 advise(_("After resolving the conflicts, mark them with\n"
482 "\"git add/rm <pathspec>\", then run\n"
483 "\"git cherry-pick --continue\".\n"
484 "You can instead skip this commit with \"git cherry-pick --skip\".\n"
485 "To abort and get back to the state before \"git cherry-pick\",\n"
486 "run \"git cherry-pick --abort\"."));
487 else if (opts
->action
== REPLAY_REVERT
)
488 advise(_("After resolving the conflicts, mark them with\n"
489 "\"git add/rm <pathspec>\", then run\n"
490 "\"git revert --continue\".\n"
491 "You can instead skip this commit with \"git revert --skip\".\n"
492 "To abort and get back to the state before \"git revert\",\n"
493 "run \"git revert --abort\"."));
495 BUG("unexpected pick action in print_advice()");
499 static int write_message(const void *buf
, size_t len
, const char *filename
,
502 struct lock_file msg_file
= LOCK_INIT
;
504 int msg_fd
= hold_lock_file_for_update(&msg_file
, filename
, 0);
506 return error_errno(_("could not lock '%s'"), filename
);
507 if (write_in_full(msg_fd
, buf
, len
) < 0) {
508 error_errno(_("could not write to '%s'"), filename
);
509 rollback_lock_file(&msg_file
);
512 if (append_eol
&& write(msg_fd
, "\n", 1) < 0) {
513 error_errno(_("could not write eol to '%s'"), filename
);
514 rollback_lock_file(&msg_file
);
517 if (commit_lock_file(&msg_file
) < 0)
518 return error(_("failed to finalize '%s'"), filename
);
523 int read_oneliner(struct strbuf
*buf
,
524 const char *path
, unsigned flags
)
526 int orig_len
= buf
->len
;
528 if (strbuf_read_file(buf
, path
, 0) < 0) {
529 if ((flags
& READ_ONELINER_WARN_MISSING
) ||
530 (errno
!= ENOENT
&& errno
!= ENOTDIR
))
531 warning_errno(_("could not read '%s'"), path
);
535 if (buf
->len
> orig_len
&& buf
->buf
[buf
->len
- 1] == '\n') {
536 if (--buf
->len
> orig_len
&& buf
->buf
[buf
->len
- 1] == '\r')
538 buf
->buf
[buf
->len
] = '\0';
541 if ((flags
& READ_ONELINER_SKIP_IF_EMPTY
) && buf
->len
== orig_len
)
547 static struct tree
*empty_tree(struct repository
*r
)
549 return lookup_tree(r
, the_hash_algo
->empty_tree
);
552 static int error_dirty_index(struct repository
*repo
, struct replay_opts
*opts
)
554 if (repo_read_index_unmerged(repo
))
555 return error_resolve_conflict(action_name(opts
));
557 error(_("your local changes would be overwritten by %s."),
558 _(action_name(opts
)));
560 if (advice_enabled(ADVICE_COMMIT_BEFORE_MERGE
))
561 advise(_("commit your changes or stash them to proceed."));
565 static void update_abort_safety_file(void)
567 struct object_id head
;
569 /* Do nothing on a single-pick */
570 if (!file_exists(git_path_seq_dir()))
573 if (!repo_get_oid(the_repository
, "HEAD", &head
))
574 write_file(git_path_abort_safety_file(), "%s", oid_to_hex(&head
));
576 write_file(git_path_abort_safety_file(), "%s", "");
579 static int fast_forward_to(struct repository
*r
,
580 const struct object_id
*to
,
581 const struct object_id
*from
,
583 struct replay_opts
*opts
)
585 struct ref_transaction
*transaction
;
586 struct strbuf sb
= STRBUF_INIT
;
587 struct strbuf err
= STRBUF_INIT
;
590 if (checkout_fast_forward(r
, from
, to
, 1))
591 return -1; /* the callee should have complained already */
593 strbuf_addf(&sb
, "%s: fast-forward", action_name(opts
));
595 transaction
= ref_transaction_begin(&err
);
597 ref_transaction_update(transaction
, "HEAD",
598 to
, unborn
&& !is_rebase_i(opts
) ?
601 ref_transaction_commit(transaction
, &err
)) {
602 ref_transaction_free(transaction
);
603 error("%s", err
.buf
);
605 strbuf_release(&err
);
610 strbuf_release(&err
);
611 ref_transaction_free(transaction
);
612 update_abort_safety_file();
616 enum commit_msg_cleanup_mode
get_cleanup_mode(const char *cleanup_arg
,
619 if (!cleanup_arg
|| !strcmp(cleanup_arg
, "default"))
620 return use_editor
? COMMIT_MSG_CLEANUP_ALL
:
621 COMMIT_MSG_CLEANUP_SPACE
;
622 else if (!strcmp(cleanup_arg
, "verbatim"))
623 return COMMIT_MSG_CLEANUP_NONE
;
624 else if (!strcmp(cleanup_arg
, "whitespace"))
625 return COMMIT_MSG_CLEANUP_SPACE
;
626 else if (!strcmp(cleanup_arg
, "strip"))
627 return COMMIT_MSG_CLEANUP_ALL
;
628 else if (!strcmp(cleanup_arg
, "scissors"))
629 return use_editor
? COMMIT_MSG_CLEANUP_SCISSORS
:
630 COMMIT_MSG_CLEANUP_SPACE
;
632 die(_("Invalid cleanup mode %s"), cleanup_arg
);
636 * NB using int rather than enum cleanup_mode to stop clang's
637 * -Wtautological-constant-out-of-range-compare complaining that the comparison
640 static const char *describe_cleanup_mode(int cleanup_mode
)
642 static const char *modes
[] = { "whitespace",
647 if (cleanup_mode
< ARRAY_SIZE(modes
))
648 return modes
[cleanup_mode
];
650 BUG("invalid cleanup_mode provided (%d)", cleanup_mode
);
653 void append_conflicts_hint(struct index_state
*istate
,
654 struct strbuf
*msgbuf
, enum commit_msg_cleanup_mode cleanup_mode
)
658 if (cleanup_mode
== COMMIT_MSG_CLEANUP_SCISSORS
) {
659 strbuf_addch(msgbuf
, '\n');
660 wt_status_append_cut_line(msgbuf
);
661 strbuf_addch(msgbuf
, comment_line_char
);
664 strbuf_addch(msgbuf
, '\n');
665 strbuf_commented_addf(msgbuf
, "Conflicts:\n");
666 for (i
= 0; i
< istate
->cache_nr
;) {
667 const struct cache_entry
*ce
= istate
->cache
[i
++];
669 strbuf_commented_addf(msgbuf
, "\t%s\n", ce
->name
);
670 while (i
< istate
->cache_nr
&&
671 !strcmp(ce
->name
, istate
->cache
[i
]->name
))
677 static int do_recursive_merge(struct repository
*r
,
678 struct commit
*base
, struct commit
*next
,
679 const char *base_label
, const char *next_label
,
680 struct object_id
*head
, struct strbuf
*msgbuf
,
681 struct replay_opts
*opts
)
683 struct merge_options o
;
684 struct merge_result result
;
685 struct tree
*next_tree
, *base_tree
, *head_tree
;
686 int clean
, show_output
;
688 struct lock_file index_lock
= LOCK_INIT
;
690 if (repo_hold_locked_index(r
, &index_lock
, LOCK_REPORT_ON_ERROR
) < 0)
695 init_merge_options(&o
, r
);
696 o
.ancestor
= base
? base_label
: "(empty tree)";
698 o
.branch2
= next
? next_label
: "(empty tree)";
699 if (is_rebase_i(opts
))
701 o
.show_rename_progress
= 1;
703 head_tree
= parse_tree_indirect(head
);
704 next_tree
= next
? repo_get_commit_tree(r
, next
) : empty_tree(r
);
705 base_tree
= base
? repo_get_commit_tree(r
, base
) : empty_tree(r
);
707 for (i
= 0; i
< opts
->xopts_nr
; i
++)
708 parse_merge_opt(&o
, opts
->xopts
[i
]);
710 if (!opts
->strategy
|| !strcmp(opts
->strategy
, "ort")) {
711 memset(&result
, 0, sizeof(result
));
712 merge_incore_nonrecursive(&o
, base_tree
, head_tree
, next_tree
,
714 show_output
= !is_rebase_i(opts
) || !result
.clean
;
716 * TODO: merge_switch_to_result will update index/working tree;
717 * we only really want to do that if !result.clean || this is
718 * the final patch to be picked. But determining this is the
719 * final patch would take some work, and "head_tree" would need
720 * to be replace with the tree the index matched before we
721 * started doing any picks.
723 merge_switch_to_result(&o
, head_tree
, &result
, 1, show_output
);
724 clean
= result
.clean
;
726 ensure_full_index(r
->index
);
727 clean
= merge_trees(&o
, head_tree
, next_tree
, base_tree
);
728 if (is_rebase_i(opts
) && clean
<= 0)
729 fputs(o
.obuf
.buf
, stdout
);
730 strbuf_release(&o
.obuf
);
733 rollback_lock_file(&index_lock
);
737 if (write_locked_index(r
->index
, &index_lock
,
738 COMMIT_LOCK
| SKIP_IF_UNCHANGED
))
740 * TRANSLATORS: %s will be "revert", "cherry-pick" or
743 return error(_("%s: Unable to write new index file"),
744 _(action_name(opts
)));
747 append_conflicts_hint(r
->index
, msgbuf
,
748 opts
->default_msg_cleanup
);
753 static struct object_id
*get_cache_tree_oid(struct index_state
*istate
)
755 if (!cache_tree_fully_valid(istate
->cache_tree
))
756 if (cache_tree_update(istate
, 0)) {
757 error(_("unable to update cache tree"));
761 return &istate
->cache_tree
->oid
;
764 static int is_index_unchanged(struct repository
*r
)
766 struct object_id head_oid
, *cache_tree_oid
;
767 struct commit
*head_commit
;
768 struct index_state
*istate
= r
->index
;
770 if (!resolve_ref_unsafe("HEAD", RESOLVE_REF_READING
, &head_oid
, NULL
))
771 return error(_("could not resolve HEAD commit"));
773 head_commit
= lookup_commit(r
, &head_oid
);
776 * If head_commit is NULL, check_commit, called from
777 * lookup_commit, would have indicated that head_commit is not
778 * a commit object already. repo_parse_commit() will return failure
779 * without further complaints in such a case. Otherwise, if
780 * the commit is invalid, repo_parse_commit() will complain. So
781 * there is nothing for us to say here. Just return failure.
783 if (repo_parse_commit(r
, head_commit
))
786 if (!(cache_tree_oid
= get_cache_tree_oid(istate
)))
789 return oideq(cache_tree_oid
, get_commit_tree_oid(head_commit
));
792 static int write_author_script(const char *message
)
794 struct strbuf buf
= STRBUF_INIT
;
799 if (!*message
|| starts_with(message
, "\n")) {
801 /* Missing 'author' line? */
802 unlink(rebase_path_author_script());
804 } else if (skip_prefix(message
, "author ", &message
))
806 else if ((eol
= strchr(message
, '\n')))
811 strbuf_addstr(&buf
, "GIT_AUTHOR_NAME='");
812 while (*message
&& *message
!= '\n' && *message
!= '\r')
813 if (skip_prefix(message
, " <", &message
))
815 else if (*message
!= '\'')
816 strbuf_addch(&buf
, *(message
++));
818 strbuf_addf(&buf
, "'\\%c'", *(message
++));
819 strbuf_addstr(&buf
, "'\nGIT_AUTHOR_EMAIL='");
820 while (*message
&& *message
!= '\n' && *message
!= '\r')
821 if (skip_prefix(message
, "> ", &message
))
823 else if (*message
!= '\'')
824 strbuf_addch(&buf
, *(message
++));
826 strbuf_addf(&buf
, "'\\%c'", *(message
++));
827 strbuf_addstr(&buf
, "'\nGIT_AUTHOR_DATE='@");
828 while (*message
&& *message
!= '\n' && *message
!= '\r')
829 if (*message
!= '\'')
830 strbuf_addch(&buf
, *(message
++));
832 strbuf_addf(&buf
, "'\\%c'", *(message
++));
833 strbuf_addch(&buf
, '\'');
834 res
= write_message(buf
.buf
, buf
.len
, rebase_path_author_script(), 1);
835 strbuf_release(&buf
);
840 * Take a series of KEY='VALUE' lines where VALUE part is
841 * sq-quoted, and append <KEY, VALUE> at the end of the string list
843 static int parse_key_value_squoted(char *buf
, struct string_list
*list
)
846 struct string_list_item
*item
;
848 char *cp
= strchr(buf
, '=');
850 np
= strchrnul(buf
, '\n');
851 return error(_("no key present in '%.*s'"),
852 (int) (np
- buf
), buf
);
854 np
= strchrnul(cp
, '\n');
856 item
= string_list_append(list
, buf
);
858 buf
= np
+ (*np
== '\n');
862 return error(_("unable to dequote value of '%s'"),
864 item
->util
= xstrdup(cp
);
870 * Reads and parses the state directory's "author-script" file, and sets name,
871 * email and date accordingly.
872 * Returns 0 on success, -1 if the file could not be parsed.
874 * The author script is of the format:
876 * GIT_AUTHOR_NAME='$author_name'
877 * GIT_AUTHOR_EMAIL='$author_email'
878 * GIT_AUTHOR_DATE='$author_date'
880 * where $author_name, $author_email and $author_date are quoted. We are strict
881 * with our parsing, as the file was meant to be eval'd in the now-removed
882 * git-am.sh/git-rebase--interactive.sh scripts, and thus if the file differs
883 * from what this function expects, it is better to bail out than to do
884 * something that the user does not expect.
886 int read_author_script(const char *path
, char **name
, char **email
, char **date
,
889 struct strbuf buf
= STRBUF_INIT
;
890 struct string_list kv
= STRING_LIST_INIT_DUP
;
891 int retval
= -1; /* assume failure */
892 int i
, name_i
= -2, email_i
= -2, date_i
= -2, err
= 0;
894 if (strbuf_read_file(&buf
, path
, 256) <= 0) {
895 strbuf_release(&buf
);
896 if (errno
== ENOENT
&& allow_missing
)
899 return error_errno(_("could not open '%s' for reading"),
903 if (parse_key_value_squoted(buf
.buf
, &kv
))
906 for (i
= 0; i
< kv
.nr
; i
++) {
907 if (!strcmp(kv
.items
[i
].string
, "GIT_AUTHOR_NAME")) {
909 name_i
= error(_("'GIT_AUTHOR_NAME' already given"));
912 } else if (!strcmp(kv
.items
[i
].string
, "GIT_AUTHOR_EMAIL")) {
914 email_i
= error(_("'GIT_AUTHOR_EMAIL' already given"));
917 } else if (!strcmp(kv
.items
[i
].string
, "GIT_AUTHOR_DATE")) {
919 date_i
= error(_("'GIT_AUTHOR_DATE' already given"));
923 err
= error(_("unknown variable '%s'"),
928 error(_("missing 'GIT_AUTHOR_NAME'"));
930 error(_("missing 'GIT_AUTHOR_EMAIL'"));
932 error(_("missing 'GIT_AUTHOR_DATE'"));
933 if (name_i
< 0 || email_i
< 0 || date_i
< 0 || err
)
935 *name
= kv
.items
[name_i
].util
;
936 *email
= kv
.items
[email_i
].util
;
937 *date
= kv
.items
[date_i
].util
;
940 string_list_clear(&kv
, !!retval
);
941 strbuf_release(&buf
);
946 * Read a GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL AND GIT_AUTHOR_DATE from a
947 * file with shell quoting into struct strvec. Returns -1 on
948 * error, 0 otherwise.
950 static int read_env_script(struct strvec
*env
)
952 char *name
, *email
, *date
;
954 if (read_author_script(rebase_path_author_script(),
955 &name
, &email
, &date
, 0))
958 strvec_pushf(env
, "GIT_AUTHOR_NAME=%s", name
);
959 strvec_pushf(env
, "GIT_AUTHOR_EMAIL=%s", email
);
960 strvec_pushf(env
, "GIT_AUTHOR_DATE=%s", date
);
968 static char *get_author(const char *message
)
973 a
= find_commit_header(message
, "author", &len
);
975 return xmemdupz(a
, len
);
980 static const char *author_date_from_env(const struct strvec
*env
)
985 for (i
= 0; i
< env
->nr
; i
++)
986 if (skip_prefix(env
->v
[i
],
987 "GIT_AUTHOR_DATE=", &date
))
990 * If GIT_AUTHOR_DATE is missing we should have already errored out when
993 BUG("GIT_AUTHOR_DATE missing from author script");
996 static const char staged_changes_advice
[] =
997 N_("you have staged changes in your working tree\n"
998 "If these changes are meant to be squashed into the previous commit, run:\n"
1000 " git commit --amend %s\n"
1002 "If they are meant to go into a new commit, run:\n"
1006 "In both cases, once you're done, continue with:\n"
1008 " git rebase --continue\n");
1010 #define ALLOW_EMPTY (1<<0)
1011 #define EDIT_MSG (1<<1)
1012 #define AMEND_MSG (1<<2)
1013 #define CLEANUP_MSG (1<<3)
1014 #define VERIFY_MSG (1<<4)
1015 #define CREATE_ROOT_COMMIT (1<<5)
1016 #define VERBATIM_MSG (1<<6)
1018 static int run_command_silent_on_success(struct child_process
*cmd
)
1020 struct strbuf buf
= STRBUF_INIT
;
1023 cmd
->stdout_to_stderr
= 1;
1024 rc
= pipe_command(cmd
,
1030 fputs(buf
.buf
, stderr
);
1031 strbuf_release(&buf
);
1036 * If we are cherry-pick, and if the merge did not result in
1037 * hand-editing, we will hit this commit and inherit the original
1038 * author date and name.
1040 * If we are revert, or if our cherry-pick results in a hand merge,
1041 * we had better say that the current user is responsible for that.
1043 * An exception is when run_git_commit() is called during an
1044 * interactive rebase: in that case, we will want to retain the
1047 static int run_git_commit(const char *defmsg
,
1048 struct replay_opts
*opts
,
1051 struct child_process cmd
= CHILD_PROCESS_INIT
;
1053 if ((flags
& CLEANUP_MSG
) && (flags
& VERBATIM_MSG
))
1054 BUG("CLEANUP_MSG and VERBATIM_MSG are mutually exclusive");
1058 if (is_rebase_i(opts
) &&
1059 ((opts
->committer_date_is_author_date
&& !opts
->ignore_date
) ||
1060 !(!defmsg
&& (flags
& AMEND_MSG
))) &&
1061 read_env_script(&cmd
.env
)) {
1062 const char *gpg_opt
= gpg_sign_opt_quoted(opts
);
1064 return error(_(staged_changes_advice
),
1068 strvec_pushf(&cmd
.env
, GIT_REFLOG_ACTION
"=%s", opts
->reflog_message
);
1070 if (opts
->committer_date_is_author_date
)
1071 strvec_pushf(&cmd
.env
, "GIT_COMMITTER_DATE=%s",
1074 author_date_from_env(&cmd
.env
));
1075 if (opts
->ignore_date
)
1076 strvec_push(&cmd
.env
, "GIT_AUTHOR_DATE=");
1078 strvec_push(&cmd
.args
, "commit");
1080 if (!(flags
& VERIFY_MSG
))
1081 strvec_push(&cmd
.args
, "-n");
1082 if ((flags
& AMEND_MSG
))
1083 strvec_push(&cmd
.args
, "--amend");
1085 strvec_pushf(&cmd
.args
, "-S%s", opts
->gpg_sign
);
1087 strvec_push(&cmd
.args
, "--no-gpg-sign");
1089 strvec_pushl(&cmd
.args
, "-F", defmsg
, NULL
);
1090 else if (!(flags
& EDIT_MSG
))
1091 strvec_pushl(&cmd
.args
, "-C", "HEAD", NULL
);
1092 if ((flags
& CLEANUP_MSG
))
1093 strvec_push(&cmd
.args
, "--cleanup=strip");
1094 if ((flags
& VERBATIM_MSG
))
1095 strvec_push(&cmd
.args
, "--cleanup=verbatim");
1096 if ((flags
& EDIT_MSG
))
1097 strvec_push(&cmd
.args
, "-e");
1098 else if (!(flags
& CLEANUP_MSG
) &&
1099 !opts
->signoff
&& !opts
->record_origin
&&
1100 !opts
->explicit_cleanup
)
1101 strvec_push(&cmd
.args
, "--cleanup=verbatim");
1103 if ((flags
& ALLOW_EMPTY
))
1104 strvec_push(&cmd
.args
, "--allow-empty");
1106 if (!(flags
& EDIT_MSG
))
1107 strvec_push(&cmd
.args
, "--allow-empty-message");
1109 if (is_rebase_i(opts
) && !(flags
& EDIT_MSG
))
1110 return run_command_silent_on_success(&cmd
);
1112 return run_command(&cmd
);
1115 static int rest_is_empty(const struct strbuf
*sb
, int start
)
1120 /* Check if the rest is just whitespace and Signed-off-by's. */
1121 for (i
= start
; i
< sb
->len
; i
++) {
1122 nl
= memchr(sb
->buf
+ i
, '\n', sb
->len
- i
);
1128 if (strlen(sign_off_header
) <= eol
- i
&&
1129 starts_with(sb
->buf
+ i
, sign_off_header
)) {
1134 if (!isspace(sb
->buf
[i
++]))
1141 void cleanup_message(struct strbuf
*msgbuf
,
1142 enum commit_msg_cleanup_mode cleanup_mode
, int verbose
)
1144 if (verbose
|| /* Truncate the message just before the diff, if any. */
1145 cleanup_mode
== COMMIT_MSG_CLEANUP_SCISSORS
)
1146 strbuf_setlen(msgbuf
, wt_status_locate_end(msgbuf
->buf
, msgbuf
->len
));
1147 if (cleanup_mode
!= COMMIT_MSG_CLEANUP_NONE
)
1148 strbuf_stripspace(msgbuf
, cleanup_mode
== COMMIT_MSG_CLEANUP_ALL
);
1152 * Find out if the message in the strbuf contains only whitespace and
1153 * Signed-off-by lines.
1155 int message_is_empty(const struct strbuf
*sb
,
1156 enum commit_msg_cleanup_mode cleanup_mode
)
1158 if (cleanup_mode
== COMMIT_MSG_CLEANUP_NONE
&& sb
->len
)
1160 return rest_is_empty(sb
, 0);
1164 * See if the user edited the message in the editor or left what
1165 * was in the template intact
1167 int template_untouched(const struct strbuf
*sb
, const char *template_file
,
1168 enum commit_msg_cleanup_mode cleanup_mode
)
1170 struct strbuf tmpl
= STRBUF_INIT
;
1173 if (cleanup_mode
== COMMIT_MSG_CLEANUP_NONE
&& sb
->len
)
1176 if (!template_file
|| strbuf_read_file(&tmpl
, template_file
, 0) <= 0)
1179 strbuf_stripspace(&tmpl
, cleanup_mode
== COMMIT_MSG_CLEANUP_ALL
);
1180 if (!skip_prefix(sb
->buf
, tmpl
.buf
, &start
))
1182 strbuf_release(&tmpl
);
1183 return rest_is_empty(sb
, start
- sb
->buf
);
1186 int update_head_with_reflog(const struct commit
*old_head
,
1187 const struct object_id
*new_head
,
1188 const char *action
, const struct strbuf
*msg
,
1191 struct ref_transaction
*transaction
;
1192 struct strbuf sb
= STRBUF_INIT
;
1197 strbuf_addstr(&sb
, action
);
1198 strbuf_addstr(&sb
, ": ");
1201 nl
= strchr(msg
->buf
, '\n');
1203 strbuf_add(&sb
, msg
->buf
, nl
+ 1 - msg
->buf
);
1205 strbuf_addbuf(&sb
, msg
);
1206 strbuf_addch(&sb
, '\n');
1209 transaction
= ref_transaction_begin(err
);
1211 ref_transaction_update(transaction
, "HEAD", new_head
,
1212 old_head
? &old_head
->object
.oid
: null_oid(),
1214 ref_transaction_commit(transaction
, err
)) {
1217 ref_transaction_free(transaction
);
1218 strbuf_release(&sb
);
1223 static int run_rewrite_hook(const struct object_id
*oldoid
,
1224 const struct object_id
*newoid
)
1226 struct child_process proc
= CHILD_PROCESS_INIT
;
1228 struct strbuf sb
= STRBUF_INIT
;
1229 const char *hook_path
= find_hook("post-rewrite");
1234 strvec_pushl(&proc
.args
, hook_path
, "amend", NULL
);
1236 proc
.stdout_to_stderr
= 1;
1237 proc
.trace2_hook_name
= "post-rewrite";
1239 code
= start_command(&proc
);
1242 strbuf_addf(&sb
, "%s %s\n", oid_to_hex(oldoid
), oid_to_hex(newoid
));
1243 sigchain_push(SIGPIPE
, SIG_IGN
);
1244 write_in_full(proc
.in
, sb
.buf
, sb
.len
);
1246 strbuf_release(&sb
);
1247 sigchain_pop(SIGPIPE
);
1248 return finish_command(&proc
);
1251 void commit_post_rewrite(struct repository
*r
,
1252 const struct commit
*old_head
,
1253 const struct object_id
*new_head
)
1255 struct notes_rewrite_cfg
*cfg
;
1257 cfg
= init_copy_notes_for_rewrite("amend");
1259 /* we are amending, so old_head is not NULL */
1260 copy_note_for_rewrite(cfg
, &old_head
->object
.oid
, new_head
);
1261 finish_copy_notes_for_rewrite(r
, cfg
, "Notes added by 'git commit --amend'");
1263 run_rewrite_hook(&old_head
->object
.oid
, new_head
);
1266 static int run_prepare_commit_msg_hook(struct repository
*r
,
1271 const char *name
, *arg1
= NULL
, *arg2
= NULL
;
1273 name
= git_path_commit_editmsg();
1274 if (write_message(msg
->buf
, msg
->len
, name
, 0))
1283 if (run_commit_hook(0, r
->index_file
, NULL
, "prepare-commit-msg", name
,
1285 ret
= error(_("'prepare-commit-msg' hook failed"));
1290 static const char implicit_ident_advice_noconfig
[] =
1291 N_("Your name and email address were configured automatically based\n"
1292 "on your username and hostname. Please check that they are accurate.\n"
1293 "You can suppress this message by setting them explicitly. Run the\n"
1294 "following command and follow the instructions in your editor to edit\n"
1295 "your configuration file:\n"
1297 " git config --global --edit\n"
1299 "After doing this, you may fix the identity used for this commit with:\n"
1301 " git commit --amend --reset-author\n");
1303 static const char implicit_ident_advice_config
[] =
1304 N_("Your name and email address were configured automatically based\n"
1305 "on your username and hostname. Please check that they are accurate.\n"
1306 "You can suppress this message by setting them explicitly:\n"
1308 " git config --global user.name \"Your Name\"\n"
1309 " git config --global user.email you@example.com\n"
1311 "After doing this, you may fix the identity used for this commit with:\n"
1313 " git commit --amend --reset-author\n");
1315 static const char *implicit_ident_advice(void)
1317 char *user_config
= interpolate_path("~/.gitconfig", 0);
1318 char *xdg_config
= xdg_config_home("config");
1319 int config_exists
= file_exists(user_config
) || file_exists(xdg_config
);
1325 return _(implicit_ident_advice_config
);
1327 return _(implicit_ident_advice_noconfig
);
1331 void print_commit_summary(struct repository
*r
,
1333 const struct object_id
*oid
,
1336 struct rev_info rev
;
1337 struct commit
*commit
;
1338 struct strbuf format
= STRBUF_INIT
;
1340 struct pretty_print_context pctx
= {0};
1341 struct strbuf author_ident
= STRBUF_INIT
;
1342 struct strbuf committer_ident
= STRBUF_INIT
;
1343 struct ref_store
*refs
;
1345 commit
= lookup_commit(r
, oid
);
1347 die(_("couldn't look up newly created commit"));
1348 if (repo_parse_commit(r
, commit
))
1349 die(_("could not parse newly created commit"));
1351 strbuf_addstr(&format
, "format:%h] %s");
1353 repo_format_commit_message(r
, commit
, "%an <%ae>", &author_ident
,
1355 repo_format_commit_message(r
, commit
, "%cn <%ce>", &committer_ident
,
1357 if (strbuf_cmp(&author_ident
, &committer_ident
)) {
1358 strbuf_addstr(&format
, "\n Author: ");
1359 strbuf_addbuf_percentquote(&format
, &author_ident
);
1361 if (flags
& SUMMARY_SHOW_AUTHOR_DATE
) {
1362 struct strbuf date
= STRBUF_INIT
;
1364 repo_format_commit_message(r
, commit
, "%ad", &date
, &pctx
);
1365 strbuf_addstr(&format
, "\n Date: ");
1366 strbuf_addbuf_percentquote(&format
, &date
);
1367 strbuf_release(&date
);
1369 if (!committer_ident_sufficiently_given()) {
1370 strbuf_addstr(&format
, "\n Committer: ");
1371 strbuf_addbuf_percentquote(&format
, &committer_ident
);
1372 if (advice_enabled(ADVICE_IMPLICIT_IDENTITY
)) {
1373 strbuf_addch(&format
, '\n');
1374 strbuf_addstr(&format
, implicit_ident_advice());
1377 strbuf_release(&author_ident
);
1378 strbuf_release(&committer_ident
);
1380 repo_init_revisions(r
, &rev
, prefix
);
1381 setup_revisions(0, NULL
, &rev
, NULL
);
1384 rev
.diffopt
.output_format
=
1385 DIFF_FORMAT_SHORTSTAT
| DIFF_FORMAT_SUMMARY
;
1387 rev
.verbose_header
= 1;
1388 rev
.show_root_diff
= 1;
1389 get_commit_format(format
.buf
, &rev
);
1390 rev
.always_show_header
= 0;
1391 rev
.diffopt
.detect_rename
= DIFF_DETECT_RENAME
;
1392 diff_setup_done(&rev
.diffopt
);
1394 refs
= get_main_ref_store(r
);
1395 head
= refs_resolve_ref_unsafe(refs
, "HEAD", 0, NULL
, NULL
);
1397 die(_("unable to resolve HEAD after creating commit"));
1398 if (!strcmp(head
, "HEAD"))
1399 head
= _("detached HEAD");
1401 skip_prefix(head
, "refs/heads/", &head
);
1402 printf("[%s%s ", head
, (flags
& SUMMARY_INITIAL_COMMIT
) ?
1403 _(" (root-commit)") : "");
1405 if (!log_tree_commit(&rev
, commit
)) {
1406 rev
.always_show_header
= 1;
1407 rev
.use_terminator
= 1;
1408 log_tree_commit(&rev
, commit
);
1411 release_revisions(&rev
);
1412 strbuf_release(&format
);
1415 static int parse_head(struct repository
*r
, struct commit
**head
)
1417 struct commit
*current_head
;
1418 struct object_id oid
;
1420 if (repo_get_oid(r
, "HEAD", &oid
)) {
1421 current_head
= NULL
;
1423 current_head
= lookup_commit_reference(r
, &oid
);
1425 return error(_("could not parse HEAD"));
1426 if (!oideq(&oid
, ¤t_head
->object
.oid
)) {
1427 warning(_("HEAD %s is not a commit!"),
1430 if (repo_parse_commit(r
, current_head
))
1431 return error(_("could not parse HEAD commit"));
1433 *head
= current_head
;
1439 * Try to commit without forking 'git commit'. In some cases we need
1440 * to run 'git commit' to display an error message
1443 * -1 - error unable to commit
1445 * 1 - run 'git commit'
1447 static int try_to_commit(struct repository
*r
,
1448 struct strbuf
*msg
, const char *author
,
1449 struct replay_opts
*opts
, unsigned int flags
,
1450 struct object_id
*oid
)
1452 struct object_id tree
;
1453 struct commit
*current_head
= NULL
;
1454 struct commit_list
*parents
= NULL
;
1455 struct commit_extra_header
*extra
= NULL
;
1456 struct strbuf err
= STRBUF_INIT
;
1457 struct strbuf commit_msg
= STRBUF_INIT
;
1458 char *amend_author
= NULL
;
1459 const char *committer
= NULL
;
1460 const char *hook_commit
= NULL
;
1461 enum commit_msg_cleanup_mode cleanup
;
1464 if ((flags
& CLEANUP_MSG
) && (flags
& VERBATIM_MSG
))
1465 BUG("CLEANUP_MSG and VERBATIM_MSG are mutually exclusive");
1467 if (parse_head(r
, ¤t_head
))
1470 if (flags
& AMEND_MSG
) {
1471 const char *exclude_gpgsig
[] = { "gpgsig", "gpgsig-sha256", NULL
};
1472 const char *out_enc
= get_commit_output_encoding();
1473 const char *message
= repo_logmsg_reencode(r
, current_head
,
1477 const char *orig_message
= NULL
;
1479 find_commit_subject(message
, &orig_message
);
1481 strbuf_addstr(msg
, orig_message
);
1482 hook_commit
= "HEAD";
1484 author
= amend_author
= get_author(message
);
1485 repo_unuse_commit_buffer(r
, current_head
,
1488 res
= error(_("unable to parse commit author"));
1491 parents
= copy_commit_list(current_head
->parents
);
1492 extra
= read_commit_extra_headers(current_head
, exclude_gpgsig
);
1493 } else if (current_head
&&
1494 (!(flags
& CREATE_ROOT_COMMIT
) || (flags
& AMEND_MSG
))) {
1495 commit_list_insert(current_head
, &parents
);
1498 if (write_index_as_tree(&tree
, r
->index
, r
->index_file
, 0, NULL
)) {
1499 res
= error(_("git write-tree failed to write a tree"));
1503 if (!(flags
& ALLOW_EMPTY
)) {
1504 struct commit
*first_parent
= current_head
;
1506 if (flags
& AMEND_MSG
) {
1507 if (current_head
->parents
) {
1508 first_parent
= current_head
->parents
->item
;
1509 if (repo_parse_commit(r
, first_parent
)) {
1510 res
= error(_("could not parse HEAD commit"));
1514 first_parent
= NULL
;
1517 if (oideq(first_parent
1518 ? get_commit_tree_oid(first_parent
)
1519 : the_hash_algo
->empty_tree
,
1521 res
= 1; /* run 'git commit' to display error message */
1526 if (hook_exists("prepare-commit-msg")) {
1527 res
= run_prepare_commit_msg_hook(r
, msg
, hook_commit
);
1530 if (strbuf_read_file(&commit_msg
, git_path_commit_editmsg(),
1532 res
= error_errno(_("unable to read commit message "
1534 git_path_commit_editmsg());
1540 if (flags
& CLEANUP_MSG
)
1541 cleanup
= COMMIT_MSG_CLEANUP_ALL
;
1542 else if (flags
& VERBATIM_MSG
)
1543 cleanup
= COMMIT_MSG_CLEANUP_NONE
;
1544 else if ((opts
->signoff
|| opts
->record_origin
) &&
1545 !opts
->explicit_cleanup
)
1546 cleanup
= COMMIT_MSG_CLEANUP_SPACE
;
1548 cleanup
= opts
->default_msg_cleanup
;
1550 if (cleanup
!= COMMIT_MSG_CLEANUP_NONE
)
1551 strbuf_stripspace(msg
, cleanup
== COMMIT_MSG_CLEANUP_ALL
);
1552 if ((flags
& EDIT_MSG
) && message_is_empty(msg
, cleanup
)) {
1553 res
= 1; /* run 'git commit' to display error message */
1557 if (opts
->committer_date_is_author_date
) {
1558 struct ident_split id
;
1559 struct strbuf date
= STRBUF_INIT
;
1561 if (!opts
->ignore_date
) {
1562 if (split_ident_line(&id
, author
, (int)strlen(author
)) < 0) {
1563 res
= error(_("invalid author identity '%s'"),
1567 if (!id
.date_begin
) {
1569 "corrupt author: missing date information"));
1572 strbuf_addf(&date
, "@%.*s %.*s",
1573 (int)(id
.date_end
- id
.date_begin
),
1575 (int)(id
.tz_end
- id
.tz_begin
),
1580 committer
= fmt_ident(getenv("GIT_COMMITTER_NAME"),
1581 getenv("GIT_COMMITTER_EMAIL"),
1582 WANT_COMMITTER_IDENT
,
1583 opts
->ignore_date
? NULL
: date
.buf
,
1585 strbuf_release(&date
);
1590 if (opts
->ignore_date
) {
1591 struct ident_split id
;
1594 if (split_ident_line(&id
, author
, strlen(author
)) < 0) {
1595 error(_("invalid author identity '%s'"), author
);
1598 name
= xmemdupz(id
.name_begin
, id
.name_end
- id
.name_begin
);
1599 email
= xmemdupz(id
.mail_begin
, id
.mail_end
- id
.mail_begin
);
1600 author
= fmt_ident(name
, email
, WANT_AUTHOR_IDENT
, NULL
,
1606 if (commit_tree_extended(msg
->buf
, msg
->len
, &tree
, parents
, oid
,
1607 author
, committer
, opts
->gpg_sign
, extra
)) {
1608 res
= error(_("failed to write commit object"));
1612 if (update_head_with_reflog(current_head
, oid
, opts
->reflog_message
,
1614 res
= error("%s", err
.buf
);
1618 run_commit_hook(0, r
->index_file
, NULL
, "post-commit", NULL
);
1619 if (flags
& AMEND_MSG
)
1620 commit_post_rewrite(r
, current_head
, oid
);
1623 free_commit_extra_headers(extra
);
1624 strbuf_release(&err
);
1625 strbuf_release(&commit_msg
);
1631 static int write_rebase_head(struct object_id
*oid
)
1633 if (update_ref("rebase", "REBASE_HEAD", oid
,
1634 NULL
, REF_NO_DEREF
, UPDATE_REFS_MSG_ON_ERR
))
1635 return error(_("could not update %s"), "REBASE_HEAD");
1640 static int do_commit(struct repository
*r
,
1641 const char *msg_file
, const char *author
,
1642 struct replay_opts
*opts
, unsigned int flags
,
1643 struct object_id
*oid
)
1647 if (!(flags
& EDIT_MSG
) && !(flags
& VERIFY_MSG
)) {
1648 struct object_id oid
;
1649 struct strbuf sb
= STRBUF_INIT
;
1651 if (msg_file
&& strbuf_read_file(&sb
, msg_file
, 2048) < 0)
1652 return error_errno(_("unable to read commit message "
1656 res
= try_to_commit(r
, msg_file
? &sb
: NULL
,
1657 author
, opts
, flags
, &oid
);
1658 strbuf_release(&sb
);
1660 refs_delete_ref(get_main_ref_store(r
), "",
1661 "CHERRY_PICK_HEAD", NULL
, 0);
1662 unlink(git_path_merge_msg(r
));
1663 if (!is_rebase_i(opts
))
1664 print_commit_summary(r
, NULL
, &oid
,
1665 SUMMARY_SHOW_AUTHOR_DATE
);
1670 if (is_rebase_i(opts
) && oid
)
1671 if (write_rebase_head(oid
))
1673 return run_git_commit(msg_file
, opts
, flags
);
1679 static int is_original_commit_empty(struct commit
*commit
)
1681 const struct object_id
*ptree_oid
;
1683 if (repo_parse_commit(the_repository
, commit
))
1684 return error(_("could not parse commit %s"),
1685 oid_to_hex(&commit
->object
.oid
));
1686 if (commit
->parents
) {
1687 struct commit
*parent
= commit
->parents
->item
;
1688 if (repo_parse_commit(the_repository
, parent
))
1689 return error(_("could not parse parent commit %s"),
1690 oid_to_hex(&parent
->object
.oid
));
1691 ptree_oid
= get_commit_tree_oid(parent
);
1693 ptree_oid
= the_hash_algo
->empty_tree
; /* commit is root */
1696 return oideq(ptree_oid
, get_commit_tree_oid(commit
));
1700 * Should empty commits be allowed? Return status:
1701 * <0: Error in is_index_unchanged(r) or is_original_commit_empty(commit)
1702 * 0: Halt on empty commit
1703 * 1: Allow empty commit
1704 * 2: Drop empty commit
1706 static int allow_empty(struct repository
*r
,
1707 struct replay_opts
*opts
,
1708 struct commit
*commit
)
1710 int index_unchanged
, originally_empty
;
1715 * (1) we do not allow empty at all and error out.
1717 * (2) we allow ones that were initially empty, and
1718 * just drop the ones that become empty
1720 * (3) we allow ones that were initially empty, but
1721 * halt for the ones that become empty;
1723 * (4) we allow both.
1725 if (!opts
->allow_empty
)
1726 return 0; /* let "git commit" barf as necessary */
1728 index_unchanged
= is_index_unchanged(r
);
1729 if (index_unchanged
< 0)
1730 return index_unchanged
;
1731 if (!index_unchanged
)
1732 return 0; /* we do not have to say --allow-empty */
1734 if (opts
->keep_redundant_commits
)
1737 originally_empty
= is_original_commit_empty(commit
);
1738 if (originally_empty
< 0)
1739 return originally_empty
;
1740 if (originally_empty
)
1742 else if (opts
->drop_redundant_commits
)
1751 } todo_command_info
[] = {
1752 [TODO_PICK
] = { 'p', "pick" },
1753 [TODO_REVERT
] = { 0, "revert" },
1754 [TODO_EDIT
] = { 'e', "edit" },
1755 [TODO_REWORD
] = { 'r', "reword" },
1756 [TODO_FIXUP
] = { 'f', "fixup" },
1757 [TODO_SQUASH
] = { 's', "squash" },
1758 [TODO_EXEC
] = { 'x', "exec" },
1759 [TODO_BREAK
] = { 'b', "break" },
1760 [TODO_LABEL
] = { 'l', "label" },
1761 [TODO_RESET
] = { 't', "reset" },
1762 [TODO_MERGE
] = { 'm', "merge" },
1763 [TODO_UPDATE_REF
] = { 'u', "update-ref" },
1764 [TODO_NOOP
] = { 0, "noop" },
1765 [TODO_DROP
] = { 'd', "drop" },
1766 [TODO_COMMENT
] = { 0, NULL
},
1769 static const char *command_to_string(const enum todo_command command
)
1771 if (command
< TODO_COMMENT
)
1772 return todo_command_info
[command
].str
;
1773 die(_("unknown command: %d"), command
);
1776 static char command_to_char(const enum todo_command command
)
1778 if (command
< TODO_COMMENT
)
1779 return todo_command_info
[command
].c
;
1780 return comment_line_char
;
1783 static int is_noop(const enum todo_command command
)
1785 return TODO_NOOP
<= command
;
1788 static int is_fixup(enum todo_command command
)
1790 return command
== TODO_FIXUP
|| command
== TODO_SQUASH
;
1793 /* Does this command create a (non-merge) commit? */
1794 static int is_pick_or_similar(enum todo_command command
)
1809 enum todo_item_flags
{
1810 TODO_EDIT_MERGE_MSG
= (1 << 0),
1811 TODO_REPLACE_FIXUP_MSG
= (1 << 1),
1812 TODO_EDIT_FIXUP_MSG
= (1 << 2),
1815 static const char first_commit_msg_str
[] = N_("This is the 1st commit message:");
1816 static const char nth_commit_msg_fmt
[] = N_("This is the commit message #%d:");
1817 static const char skip_first_commit_msg_str
[] = N_("The 1st commit message will be skipped:");
1818 static const char skip_nth_commit_msg_fmt
[] = N_("The commit message #%d will be skipped:");
1819 static const char combined_commit_msg_fmt
[] = N_("This is a combination of %d commits.");
1821 static int is_fixup_flag(enum todo_command command
, unsigned flag
)
1823 return command
== TODO_FIXUP
&& ((flag
& TODO_REPLACE_FIXUP_MSG
) ||
1824 (flag
& TODO_EDIT_FIXUP_MSG
));
1828 * Wrapper around strbuf_add_commented_lines() which avoids double
1829 * commenting commit subjects.
1831 static void add_commented_lines(struct strbuf
*buf
, const void *str
, size_t len
)
1833 const char *s
= str
;
1834 while (len
> 0 && s
[0] == comment_line_char
) {
1836 const char *n
= memchr(s
, '\n', len
);
1841 strbuf_add(buf
, s
, count
);
1845 strbuf_add_commented_lines(buf
, s
, len
);
1848 /* Does the current fixup chain contain a squash command? */
1849 static int seen_squash(struct replay_opts
*opts
)
1851 return starts_with(opts
->current_fixups
.buf
, "squash") ||
1852 strstr(opts
->current_fixups
.buf
, "\nsquash");
1855 static void update_comment_bufs(struct strbuf
*buf1
, struct strbuf
*buf2
, int n
)
1857 strbuf_setlen(buf1
, 2);
1858 strbuf_addf(buf1
, _(nth_commit_msg_fmt
), n
);
1859 strbuf_addch(buf1
, '\n');
1860 strbuf_setlen(buf2
, 2);
1861 strbuf_addf(buf2
, _(skip_nth_commit_msg_fmt
), n
);
1862 strbuf_addch(buf2
, '\n');
1866 * Comment out any un-commented commit messages, updating the message comments
1867 * to say they will be skipped but do not comment out the empty lines that
1868 * surround commit messages and their comments.
1870 static void update_squash_message_for_fixup(struct strbuf
*msg
)
1872 void (*copy_lines
)(struct strbuf
*, const void *, size_t) = strbuf_add
;
1873 struct strbuf buf1
= STRBUF_INIT
, buf2
= STRBUF_INIT
;
1874 const char *s
, *start
;
1876 size_t orig_msg_len
;
1879 strbuf_addf(&buf1
, "# %s\n", _(first_commit_msg_str
));
1880 strbuf_addf(&buf2
, "# %s\n", _(skip_first_commit_msg_str
));
1881 s
= start
= orig_msg
= strbuf_detach(msg
, &orig_msg_len
);
1885 if (skip_prefix(s
, buf1
.buf
, &next
)) {
1887 * Copy the last message, preserving the blank line
1888 * preceding the current line
1890 off
= (s
> start
+ 1 && s
[-2] == '\n') ? 1 : 0;
1891 copy_lines(msg
, start
, s
- start
- off
);
1893 strbuf_addch(msg
, '\n');
1895 * The next message needs to be commented out but the
1896 * message header is already commented out so just copy
1897 * it and the blank line that follows it.
1899 strbuf_addbuf(msg
, &buf2
);
1901 strbuf_addch(msg
, *next
++);
1903 copy_lines
= add_commented_lines
;
1904 update_comment_bufs(&buf1
, &buf2
, ++i
);
1905 } else if (skip_prefix(s
, buf2
.buf
, &next
)) {
1906 off
= (s
> start
+ 1 && s
[-2] == '\n') ? 1 : 0;
1907 copy_lines(msg
, start
, s
- start
- off
);
1910 copy_lines
= strbuf_add
;
1911 update_comment_bufs(&buf1
, &buf2
, ++i
);
1913 s
= strchr(s
, '\n');
1918 copy_lines(msg
, start
, orig_msg_len
- (start
- orig_msg
));
1920 strbuf_release(&buf1
);
1921 strbuf_release(&buf2
);
1924 static int append_squash_message(struct strbuf
*buf
, const char *body
,
1925 enum todo_command command
, struct replay_opts
*opts
,
1928 const char *fixup_msg
;
1929 size_t commented_len
= 0, fixup_off
;
1931 * amend is non-interactive and not normally used with fixup!
1932 * or squash! commits, so only comment out those subjects when
1933 * squashing commit messages.
1935 if (starts_with(body
, "amend!") ||
1936 ((command
== TODO_SQUASH
|| seen_squash(opts
)) &&
1937 (starts_with(body
, "squash!") || starts_with(body
, "fixup!"))))
1938 commented_len
= commit_subject_length(body
);
1940 strbuf_addf(buf
, "\n%c ", comment_line_char
);
1941 strbuf_addf(buf
, _(nth_commit_msg_fmt
),
1942 ++opts
->current_fixup_count
+ 1);
1943 strbuf_addstr(buf
, "\n\n");
1944 strbuf_add_commented_lines(buf
, body
, commented_len
);
1945 /* buf->buf may be reallocated so store an offset into the buffer */
1946 fixup_off
= buf
->len
;
1947 strbuf_addstr(buf
, body
+ commented_len
);
1949 /* fixup -C after squash behaves like squash */
1950 if (is_fixup_flag(command
, flag
) && !seen_squash(opts
)) {
1952 * We're replacing the commit message so we need to
1953 * append the Signed-off-by: trailer if the user
1954 * requested '--signoff'.
1957 append_signoff(buf
, 0, 0);
1959 if ((command
== TODO_FIXUP
) &&
1960 (flag
& TODO_REPLACE_FIXUP_MSG
) &&
1961 (file_exists(rebase_path_fixup_msg()) ||
1962 !file_exists(rebase_path_squash_msg()))) {
1963 fixup_msg
= skip_blank_lines(buf
->buf
+ fixup_off
);
1964 if (write_message(fixup_msg
, strlen(fixup_msg
),
1965 rebase_path_fixup_msg(), 0) < 0)
1966 return error(_("cannot write '%s'"),
1967 rebase_path_fixup_msg());
1969 unlink(rebase_path_fixup_msg());
1972 unlink(rebase_path_fixup_msg());
1978 static int update_squash_messages(struct repository
*r
,
1979 enum todo_command command
,
1980 struct commit
*commit
,
1981 struct replay_opts
*opts
,
1984 struct strbuf buf
= STRBUF_INIT
;
1986 const char *message
, *body
;
1987 const char *encoding
= get_commit_output_encoding();
1989 if (opts
->current_fixup_count
> 0) {
1990 struct strbuf header
= STRBUF_INIT
;
1993 if (strbuf_read_file(&buf
, rebase_path_squash_msg(), 9) <= 0)
1994 return error(_("could not read '%s'"),
1995 rebase_path_squash_msg());
1997 eol
= buf
.buf
[0] != comment_line_char
?
1998 buf
.buf
: strchrnul(buf
.buf
, '\n');
2000 strbuf_addf(&header
, "%c ", comment_line_char
);
2001 strbuf_addf(&header
, _(combined_commit_msg_fmt
),
2002 opts
->current_fixup_count
+ 2);
2003 strbuf_splice(&buf
, 0, eol
- buf
.buf
, header
.buf
, header
.len
);
2004 strbuf_release(&header
);
2005 if (is_fixup_flag(command
, flag
) && !seen_squash(opts
))
2006 update_squash_message_for_fixup(&buf
);
2008 struct object_id head
;
2009 struct commit
*head_commit
;
2010 const char *head_message
, *body
;
2012 if (repo_get_oid(r
, "HEAD", &head
))
2013 return error(_("need a HEAD to fixup"));
2014 if (!(head_commit
= lookup_commit_reference(r
, &head
)))
2015 return error(_("could not read HEAD"));
2016 if (!(head_message
= repo_logmsg_reencode(r
, head_commit
, NULL
,
2018 return error(_("could not read HEAD's commit message"));
2020 find_commit_subject(head_message
, &body
);
2021 if (command
== TODO_FIXUP
&& !flag
&& write_message(body
, strlen(body
),
2022 rebase_path_fixup_msg(), 0) < 0) {
2023 repo_unuse_commit_buffer(r
, head_commit
, head_message
);
2024 return error(_("cannot write '%s'"), rebase_path_fixup_msg());
2026 strbuf_addf(&buf
, "%c ", comment_line_char
);
2027 strbuf_addf(&buf
, _(combined_commit_msg_fmt
), 2);
2028 strbuf_addf(&buf
, "\n%c ", comment_line_char
);
2029 strbuf_addstr(&buf
, is_fixup_flag(command
, flag
) ?
2030 _(skip_first_commit_msg_str
) :
2031 _(first_commit_msg_str
));
2032 strbuf_addstr(&buf
, "\n\n");
2033 if (is_fixup_flag(command
, flag
))
2034 strbuf_add_commented_lines(&buf
, body
, strlen(body
));
2036 strbuf_addstr(&buf
, body
);
2038 repo_unuse_commit_buffer(r
, head_commit
, head_message
);
2041 if (!(message
= repo_logmsg_reencode(r
, commit
, NULL
, encoding
)))
2042 return error(_("could not read commit message of %s"),
2043 oid_to_hex(&commit
->object
.oid
));
2044 find_commit_subject(message
, &body
);
2046 if (command
== TODO_SQUASH
|| is_fixup_flag(command
, flag
)) {
2047 res
= append_squash_message(&buf
, body
, command
, opts
, flag
);
2048 } else if (command
== TODO_FIXUP
) {
2049 strbuf_addf(&buf
, "\n%c ", comment_line_char
);
2050 strbuf_addf(&buf
, _(skip_nth_commit_msg_fmt
),
2051 ++opts
->current_fixup_count
+ 1);
2052 strbuf_addstr(&buf
, "\n\n");
2053 strbuf_add_commented_lines(&buf
, body
, strlen(body
));
2055 return error(_("unknown command: %d"), command
);
2056 repo_unuse_commit_buffer(r
, commit
, message
);
2059 res
= write_message(buf
.buf
, buf
.len
, rebase_path_squash_msg(),
2061 strbuf_release(&buf
);
2064 strbuf_addf(&opts
->current_fixups
, "%s%s %s",
2065 opts
->current_fixups
.len
? "\n" : "",
2066 command_to_string(command
),
2067 oid_to_hex(&commit
->object
.oid
));
2068 res
= write_message(opts
->current_fixups
.buf
,
2069 opts
->current_fixups
.len
,
2070 rebase_path_current_fixups(), 0);
2076 static void flush_rewritten_pending(void)
2078 struct strbuf buf
= STRBUF_INIT
;
2079 struct object_id newoid
;
2082 if (strbuf_read_file(&buf
, rebase_path_rewritten_pending(), (GIT_MAX_HEXSZ
+ 1) * 2) > 0 &&
2083 !repo_get_oid(the_repository
, "HEAD", &newoid
) &&
2084 (out
= fopen_or_warn(rebase_path_rewritten_list(), "a"))) {
2085 char *bol
= buf
.buf
, *eol
;
2088 eol
= strchrnul(bol
, '\n');
2089 fprintf(out
, "%.*s %s\n", (int)(eol
- bol
),
2090 bol
, oid_to_hex(&newoid
));
2096 unlink(rebase_path_rewritten_pending());
2098 strbuf_release(&buf
);
2101 static void record_in_rewritten(struct object_id
*oid
,
2102 enum todo_command next_command
)
2104 FILE *out
= fopen_or_warn(rebase_path_rewritten_pending(), "a");
2109 fprintf(out
, "%s\n", oid_to_hex(oid
));
2112 if (!is_fixup(next_command
))
2113 flush_rewritten_pending();
2116 static int should_edit(struct replay_opts
*opts
) {
2119 * Note that we only handle the case of non-conflicted
2120 * commits; continue_single_pick() handles the conflicted
2121 * commits itself instead of calling this function.
2123 return (opts
->action
== REPLAY_REVERT
&& isatty(0)) ? 1 : 0;
2127 static void refer_to_commit(struct replay_opts
*opts
,
2128 struct strbuf
*msgbuf
, struct commit
*commit
)
2130 if (opts
->commit_use_reference
) {
2131 struct pretty_print_context ctx
= {
2132 .abbrev
= DEFAULT_ABBREV
,
2133 .date_mode
.type
= DATE_SHORT
,
2135 repo_format_commit_message(the_repository
, commit
,
2136 "%h (%s, %ad)", msgbuf
, &ctx
);
2138 strbuf_addstr(msgbuf
, oid_to_hex(&commit
->object
.oid
));
2142 static int do_pick_commit(struct repository
*r
,
2143 struct todo_item
*item
,
2144 struct replay_opts
*opts
,
2145 int final_fixup
, int *check_todo
)
2147 unsigned int flags
= should_edit(opts
) ? EDIT_MSG
: 0;
2148 const char *msg_file
= should_edit(opts
) ? NULL
: git_path_merge_msg(r
);
2149 struct object_id head
;
2150 struct commit
*base
, *next
, *parent
;
2151 const char *base_label
, *next_label
;
2152 char *author
= NULL
;
2153 struct commit_message msg
= { NULL
, NULL
, NULL
, NULL
};
2154 struct strbuf msgbuf
= STRBUF_INIT
;
2155 int res
, unborn
= 0, reword
= 0, allow
, drop_commit
;
2156 enum todo_command command
= item
->command
;
2157 struct commit
*commit
= item
->commit
;
2159 if (opts
->no_commit
) {
2161 * We do not intend to commit immediately. We just want to
2162 * merge the differences in, so let's compute the tree
2163 * that represents the "current" state for the merge machinery
2166 if (write_index_as_tree(&head
, r
->index
, r
->index_file
, 0, NULL
))
2167 return error(_("your index file is unmerged."));
2169 unborn
= repo_get_oid(r
, "HEAD", &head
);
2170 /* Do we want to generate a root commit? */
2171 if (is_pick_or_similar(command
) && opts
->have_squash_onto
&&
2172 oideq(&head
, &opts
->squash_onto
)) {
2173 if (is_fixup(command
))
2174 return error(_("cannot fixup root commit"));
2175 flags
|= CREATE_ROOT_COMMIT
;
2178 oidcpy(&head
, the_hash_algo
->empty_tree
);
2179 if (index_differs_from(r
, unborn
? empty_tree_oid_hex() : "HEAD",
2181 return error_dirty_index(r
, opts
);
2183 discard_index(r
->index
);
2185 if (!commit
->parents
)
2187 else if (commit
->parents
->next
) {
2188 /* Reverting or cherry-picking a merge commit */
2190 struct commit_list
*p
;
2192 if (!opts
->mainline
)
2193 return error(_("commit %s is a merge but no -m option was given."),
2194 oid_to_hex(&commit
->object
.oid
));
2196 for (cnt
= 1, p
= commit
->parents
;
2197 cnt
!= opts
->mainline
&& p
;
2200 if (cnt
!= opts
->mainline
|| !p
)
2201 return error(_("commit %s does not have parent %d"),
2202 oid_to_hex(&commit
->object
.oid
), opts
->mainline
);
2204 } else if (1 < opts
->mainline
)
2206 * Non-first parent explicitly specified as mainline for
2209 return error(_("commit %s does not have parent %d"),
2210 oid_to_hex(&commit
->object
.oid
), opts
->mainline
);
2212 parent
= commit
->parents
->item
;
2214 if (get_message(commit
, &msg
) != 0)
2215 return error(_("cannot get commit message for %s"),
2216 oid_to_hex(&commit
->object
.oid
));
2218 if (opts
->allow_ff
&& !is_fixup(command
) &&
2219 ((parent
&& oideq(&parent
->object
.oid
, &head
)) ||
2220 (!parent
&& unborn
))) {
2221 if (is_rebase_i(opts
))
2222 write_author_script(msg
.message
);
2223 res
= fast_forward_to(r
, &commit
->object
.oid
, &head
, unborn
,
2225 if (res
|| command
!= TODO_REWORD
)
2229 goto fast_forward_edit
;
2231 if (parent
&& repo_parse_commit(r
, parent
) < 0)
2232 /* TRANSLATORS: The first %s will be a "todo" command like
2233 "revert" or "pick", the second %s a SHA1. */
2234 return error(_("%s: cannot parse parent commit %s"),
2235 command_to_string(command
),
2236 oid_to_hex(&parent
->object
.oid
));
2239 * "commit" is an existing commit. We would want to apply
2240 * the difference it introduces since its first parent "prev"
2241 * on top of the current HEAD if we are cherry-pick. Or the
2242 * reverse of it if we are revert.
2245 if (command
== TODO_REVERT
) {
2247 base_label
= msg
.label
;
2249 next_label
= msg
.parent_label
;
2250 if (opts
->commit_use_reference
) {
2251 strbuf_addstr(&msgbuf
,
2252 "# *** SAY WHY WE ARE REVERTING ON THE TITLE LINE ***");
2254 strbuf_addstr(&msgbuf
, "Revert \"");
2255 strbuf_addstr(&msgbuf
, msg
.subject
);
2256 strbuf_addstr(&msgbuf
, "\"");
2258 strbuf_addstr(&msgbuf
, "\n\nThis reverts commit ");
2259 refer_to_commit(opts
, &msgbuf
, commit
);
2261 if (commit
->parents
&& commit
->parents
->next
) {
2262 strbuf_addstr(&msgbuf
, ", reversing\nchanges made to ");
2263 refer_to_commit(opts
, &msgbuf
, parent
);
2265 strbuf_addstr(&msgbuf
, ".\n");
2270 base_label
= msg
.parent_label
;
2272 next_label
= msg
.label
;
2274 /* Append the commit log message to msgbuf. */
2275 if (find_commit_subject(msg
.message
, &p
))
2276 strbuf_addstr(&msgbuf
, p
);
2278 if (opts
->record_origin
) {
2279 strbuf_complete_line(&msgbuf
);
2280 if (!has_conforming_footer(&msgbuf
, NULL
, 0))
2281 strbuf_addch(&msgbuf
, '\n');
2282 strbuf_addstr(&msgbuf
, cherry_picked_prefix
);
2283 strbuf_addstr(&msgbuf
, oid_to_hex(&commit
->object
.oid
));
2284 strbuf_addstr(&msgbuf
, ")\n");
2286 if (!is_fixup(command
))
2287 author
= get_author(msg
.message
);
2290 if (command
== TODO_REWORD
)
2292 else if (is_fixup(command
)) {
2293 if (update_squash_messages(r
, command
, commit
,
2294 opts
, item
->flags
)) {
2300 msg_file
= rebase_path_squash_msg();
2301 else if (file_exists(rebase_path_fixup_msg())) {
2302 flags
|= VERBATIM_MSG
;
2303 msg_file
= rebase_path_fixup_msg();
2305 const char *dest
= git_path_squash_msg(r
);
2307 if (copy_file(dest
, rebase_path_squash_msg(), 0666)) {
2308 res
= error(_("could not rename '%s' to '%s'"),
2309 rebase_path_squash_msg(), dest
);
2312 unlink(git_path_merge_msg(r
));
2318 if (opts
->signoff
&& !is_fixup(command
))
2319 append_signoff(&msgbuf
, 0, 0);
2321 if (is_rebase_i(opts
) && write_author_script(msg
.message
) < 0)
2323 else if (!opts
->strategy
||
2324 !strcmp(opts
->strategy
, "recursive") ||
2325 !strcmp(opts
->strategy
, "ort") ||
2326 command
== TODO_REVERT
) {
2327 res
= do_recursive_merge(r
, base
, next
, base_label
, next_label
,
2328 &head
, &msgbuf
, opts
);
2332 res
|= write_message(msgbuf
.buf
, msgbuf
.len
,
2333 git_path_merge_msg(r
), 0);
2335 struct commit_list
*common
= NULL
;
2336 struct commit_list
*remotes
= NULL
;
2338 res
= write_message(msgbuf
.buf
, msgbuf
.len
,
2339 git_path_merge_msg(r
), 0);
2341 commit_list_insert(base
, &common
);
2342 commit_list_insert(next
, &remotes
);
2343 res
|= try_merge_command(r
, opts
->strategy
,
2344 opts
->xopts_nr
, (const char **)opts
->xopts
,
2345 common
, oid_to_hex(&head
), remotes
);
2346 free_commit_list(common
);
2347 free_commit_list(remotes
);
2351 * If the merge was clean or if it failed due to conflict, we write
2352 * CHERRY_PICK_HEAD for the subsequent invocation of commit to use.
2353 * However, if the merge did not even start, then we don't want to
2356 if ((command
== TODO_PICK
|| command
== TODO_REWORD
||
2357 command
== TODO_EDIT
) && !opts
->no_commit
&&
2358 (res
== 0 || res
== 1) &&
2359 update_ref(NULL
, "CHERRY_PICK_HEAD", &commit
->object
.oid
, NULL
,
2360 REF_NO_DEREF
, UPDATE_REFS_MSG_ON_ERR
))
2362 if (command
== TODO_REVERT
&& ((opts
->no_commit
&& res
== 0) || res
== 1) &&
2363 update_ref(NULL
, "REVERT_HEAD", &commit
->object
.oid
, NULL
,
2364 REF_NO_DEREF
, UPDATE_REFS_MSG_ON_ERR
))
2368 error(command
== TODO_REVERT
2369 ? _("could not revert %s... %s")
2370 : _("could not apply %s... %s"),
2371 short_commit_name(commit
), msg
.subject
);
2372 print_advice(r
, res
== 1, opts
);
2373 repo_rerere(r
, opts
->allow_rerere_auto
);
2378 allow
= allow_empty(r
, opts
, commit
);
2382 } else if (allow
== 1) {
2383 flags
|= ALLOW_EMPTY
;
2384 } else if (allow
== 2) {
2386 refs_delete_ref(get_main_ref_store(r
), "", "CHERRY_PICK_HEAD",
2388 unlink(git_path_merge_msg(r
));
2389 unlink(git_path_auto_merge(r
));
2391 _("dropping %s %s -- patch contents already upstream\n"),
2392 oid_to_hex(&commit
->object
.oid
), msg
.subject
);
2393 } /* else allow == 0 and there's nothing special to do */
2394 if (!opts
->no_commit
&& !drop_commit
) {
2395 if (author
|| command
== TODO_REVERT
|| (flags
& AMEND_MSG
))
2396 res
= do_commit(r
, msg_file
, author
, opts
, flags
,
2397 commit
? &commit
->object
.oid
: NULL
);
2399 res
= error(_("unable to parse commit author"));
2400 *check_todo
= !!(flags
& EDIT_MSG
);
2401 if (!res
&& reword
) {
2403 res
= run_git_commit(NULL
, opts
, EDIT_MSG
|
2404 VERIFY_MSG
| AMEND_MSG
|
2405 (flags
& ALLOW_EMPTY
));
2411 if (!res
&& final_fixup
) {
2412 unlink(rebase_path_fixup_msg());
2413 unlink(rebase_path_squash_msg());
2414 unlink(rebase_path_current_fixups());
2415 strbuf_reset(&opts
->current_fixups
);
2416 opts
->current_fixup_count
= 0;
2420 free_message(commit
, &msg
);
2422 strbuf_release(&msgbuf
);
2423 update_abort_safety_file();
2428 static int prepare_revs(struct replay_opts
*opts
)
2431 * picking (but not reverting) ranges (but not individual revisions)
2432 * should be done in reverse
2434 if (opts
->action
== REPLAY_PICK
&& !opts
->revs
->no_walk
)
2435 opts
->revs
->reverse
^= 1;
2437 if (prepare_revision_walk(opts
->revs
))
2438 return error(_("revision walk setup failed"));
2443 static int read_and_refresh_cache(struct repository
*r
,
2444 struct replay_opts
*opts
)
2446 struct lock_file index_lock
= LOCK_INIT
;
2447 int index_fd
= repo_hold_locked_index(r
, &index_lock
, 0);
2448 if (repo_read_index(r
) < 0) {
2449 rollback_lock_file(&index_lock
);
2450 return error(_("git %s: failed to read the index"),
2453 refresh_index(r
->index
, REFRESH_QUIET
|REFRESH_UNMERGED
, NULL
, NULL
, NULL
);
2455 if (index_fd
>= 0) {
2456 if (write_locked_index(r
->index
, &index_lock
,
2457 COMMIT_LOCK
| SKIP_IF_UNCHANGED
)) {
2458 return error(_("git %s: failed to refresh the index"),
2464 * If we are resolving merges in any way other than "ort", then
2465 * expand the sparse index.
2467 if (opts
->strategy
&& strcmp(opts
->strategy
, "ort"))
2468 ensure_full_index(r
->index
);
2472 void todo_list_release(struct todo_list
*todo_list
)
2474 strbuf_release(&todo_list
->buf
);
2475 FREE_AND_NULL(todo_list
->items
);
2476 todo_list
->nr
= todo_list
->alloc
= 0;
2479 static struct todo_item
*append_new_todo(struct todo_list
*todo_list
)
2481 ALLOC_GROW(todo_list
->items
, todo_list
->nr
+ 1, todo_list
->alloc
);
2482 todo_list
->total_nr
++;
2483 return todo_list
->items
+ todo_list
->nr
++;
2486 const char *todo_item_get_arg(struct todo_list
*todo_list
,
2487 struct todo_item
*item
)
2489 return todo_list
->buf
.buf
+ item
->arg_offset
;
2492 static int is_command(enum todo_command command
, const char **bol
)
2494 const char *str
= todo_command_info
[command
].str
;
2495 const char nick
= todo_command_info
[command
].c
;
2496 const char *p
= *bol
;
2498 return (skip_prefix(p
, str
, &p
) || (nick
&& *p
++ == nick
)) &&
2499 (*p
== ' ' || *p
== '\t' || *p
== '\n' || *p
== '\r' || !*p
) &&
2503 static int check_label_or_ref_arg(enum todo_command command
, const char *arg
)
2508 * '#' is not a valid label as the merge command uses it to
2509 * separate merge parents from the commit subject.
2511 if (!strcmp(arg
, "#") ||
2512 check_refname_format(arg
, REFNAME_ALLOW_ONELEVEL
))
2513 return error(_("'%s' is not a valid label"), arg
);
2516 case TODO_UPDATE_REF
:
2517 if (check_refname_format(arg
, REFNAME_ALLOW_ONELEVEL
))
2518 return error(_("'%s' is not a valid refname"), arg
);
2519 if (check_refname_format(arg
, 0))
2520 return error(_("update-ref requires a fully qualified "
2521 "refname e.g. refs/heads/%s"), arg
);
2525 BUG("unexpected todo_command");
2531 static int parse_insn_line(struct repository
*r
, struct todo_item
*item
,
2532 const char *buf
, const char *bol
, char *eol
)
2534 struct object_id commit_oid
;
2535 char *end_of_object_name
;
2536 int i
, saved
, status
, padding
;
2541 bol
+= strspn(bol
, " \t");
2543 if (bol
== eol
|| *bol
== '\r' || *bol
== comment_line_char
) {
2544 item
->command
= TODO_COMMENT
;
2545 item
->commit
= NULL
;
2546 item
->arg_offset
= bol
- buf
;
2547 item
->arg_len
= eol
- bol
;
2551 for (i
= 0; i
< TODO_COMMENT
; i
++)
2552 if (is_command(i
, &bol
)) {
2556 if (i
>= TODO_COMMENT
)
2557 return error(_("invalid command '%.*s'"),
2558 (int)strcspn(bol
, " \t\r\n"), bol
);
2560 /* Eat up extra spaces/ tabs before object name */
2561 padding
= strspn(bol
, " \t");
2564 if (item
->command
== TODO_NOOP
|| item
->command
== TODO_BREAK
) {
2566 return error(_("%s does not accept arguments: '%s'"),
2567 command_to_string(item
->command
), bol
);
2568 item
->commit
= NULL
;
2569 item
->arg_offset
= bol
- buf
;
2570 item
->arg_len
= eol
- bol
;
2575 return error(_("missing arguments for %s"),
2576 command_to_string(item
->command
));
2578 if (item
->command
== TODO_EXEC
|| item
->command
== TODO_LABEL
||
2579 item
->command
== TODO_RESET
|| item
->command
== TODO_UPDATE_REF
) {
2582 item
->commit
= NULL
;
2583 item
->arg_offset
= bol
- buf
;
2584 item
->arg_len
= (int)(eol
- bol
);
2585 if (item
->command
== TODO_LABEL
||
2586 item
->command
== TODO_UPDATE_REF
) {
2589 ret
= check_label_or_ref_arg(item
->command
, bol
);
2595 if (item
->command
== TODO_FIXUP
) {
2596 if (skip_prefix(bol
, "-C", &bol
)) {
2597 bol
+= strspn(bol
, " \t");
2598 item
->flags
|= TODO_REPLACE_FIXUP_MSG
;
2599 } else if (skip_prefix(bol
, "-c", &bol
)) {
2600 bol
+= strspn(bol
, " \t");
2601 item
->flags
|= TODO_EDIT_FIXUP_MSG
;
2605 if (item
->command
== TODO_MERGE
) {
2606 if (skip_prefix(bol
, "-C", &bol
))
2607 bol
+= strspn(bol
, " \t");
2608 else if (skip_prefix(bol
, "-c", &bol
)) {
2609 bol
+= strspn(bol
, " \t");
2610 item
->flags
|= TODO_EDIT_MERGE_MSG
;
2612 item
->flags
|= TODO_EDIT_MERGE_MSG
;
2613 item
->commit
= NULL
;
2614 item
->arg_offset
= bol
- buf
;
2615 item
->arg_len
= (int)(eol
- bol
);
2620 end_of_object_name
= (char *) bol
+ strcspn(bol
, " \t\n");
2621 saved
= *end_of_object_name
;
2622 *end_of_object_name
= '\0';
2623 status
= repo_get_oid(r
, bol
, &commit_oid
);
2625 error(_("could not parse '%s'"), bol
); /* return later */
2626 *end_of_object_name
= saved
;
2628 bol
= end_of_object_name
+ strspn(end_of_object_name
, " \t");
2629 item
->arg_offset
= bol
- buf
;
2630 item
->arg_len
= (int)(eol
- bol
);
2635 item
->commit
= lookup_commit_reference(r
, &commit_oid
);
2636 return item
->commit
? 0 : -1;
2639 int sequencer_get_last_command(struct repository
*r
, enum replay_action
*action
)
2641 const char *todo_file
, *bol
;
2642 struct strbuf buf
= STRBUF_INIT
;
2645 todo_file
= git_path_todo_file();
2646 if (strbuf_read_file(&buf
, todo_file
, 0) < 0) {
2647 if (errno
== ENOENT
|| errno
== ENOTDIR
)
2650 return error_errno("unable to open '%s'", todo_file
);
2652 bol
= buf
.buf
+ strspn(buf
.buf
, " \t\r\n");
2653 if (is_command(TODO_PICK
, &bol
) && (*bol
== ' ' || *bol
== '\t'))
2654 *action
= REPLAY_PICK
;
2655 else if (is_command(TODO_REVERT
, &bol
) &&
2656 (*bol
== ' ' || *bol
== '\t'))
2657 *action
= REPLAY_REVERT
;
2661 strbuf_release(&buf
);
2666 int todo_list_parse_insn_buffer(struct repository
*r
, char *buf
,
2667 struct todo_list
*todo_list
)
2669 struct todo_item
*item
;
2670 char *p
= buf
, *next_p
;
2671 int i
, res
= 0, fixup_okay
= file_exists(rebase_path_done());
2673 todo_list
->current
= todo_list
->nr
= 0;
2675 for (i
= 1; *p
; i
++, p
= next_p
) {
2676 char *eol
= strchrnul(p
, '\n');
2678 next_p
= *eol
? eol
+ 1 /* skip LF */ : eol
;
2680 if (p
!= eol
&& eol
[-1] == '\r')
2681 eol
--; /* strip Carriage Return */
2683 item
= append_new_todo(todo_list
);
2684 item
->offset_in_buf
= p
- todo_list
->buf
.buf
;
2685 if (parse_insn_line(r
, item
, buf
, p
, eol
)) {
2686 res
= error(_("invalid line %d: %.*s"),
2687 i
, (int)(eol
- p
), p
);
2688 item
->command
= TODO_COMMENT
+ 1;
2689 item
->arg_offset
= p
- buf
;
2690 item
->arg_len
= (int)(eol
- p
);
2691 item
->commit
= NULL
;
2696 else if (is_fixup(item
->command
))
2697 return error(_("cannot '%s' without a previous commit"),
2698 command_to_string(item
->command
));
2699 else if (!is_noop(item
->command
))
2706 static int count_commands(struct todo_list
*todo_list
)
2710 for (i
= 0; i
< todo_list
->nr
; i
++)
2711 if (todo_list
->items
[i
].command
!= TODO_COMMENT
)
2717 static int get_item_line_offset(struct todo_list
*todo_list
, int index
)
2719 return index
< todo_list
->nr
?
2720 todo_list
->items
[index
].offset_in_buf
: todo_list
->buf
.len
;
2723 static const char *get_item_line(struct todo_list
*todo_list
, int index
)
2725 return todo_list
->buf
.buf
+ get_item_line_offset(todo_list
, index
);
2728 static int get_item_line_length(struct todo_list
*todo_list
, int index
)
2730 return get_item_line_offset(todo_list
, index
+ 1)
2731 - get_item_line_offset(todo_list
, index
);
2734 static ssize_t
strbuf_read_file_or_whine(struct strbuf
*sb
, const char *path
)
2739 fd
= open(path
, O_RDONLY
);
2741 return error_errno(_("could not open '%s'"), path
);
2742 len
= strbuf_read(sb
, fd
, 0);
2745 return error(_("could not read '%s'."), path
);
2749 static int have_finished_the_last_pick(void)
2751 struct strbuf buf
= STRBUF_INIT
;
2753 const char *todo_path
= git_path_todo_file();
2756 if (strbuf_read_file(&buf
, todo_path
, 0) < 0) {
2757 if (errno
== ENOENT
) {
2760 error_errno("unable to open '%s'", todo_path
);
2764 /* If there is only one line then we are done */
2765 eol
= strchr(buf
.buf
, '\n');
2766 if (!eol
|| !eol
[1])
2769 strbuf_release(&buf
);
2774 void sequencer_post_commit_cleanup(struct repository
*r
, int verbose
)
2776 struct replay_opts opts
= REPLAY_OPTS_INIT
;
2777 int need_cleanup
= 0;
2779 if (refs_ref_exists(get_main_ref_store(r
), "CHERRY_PICK_HEAD")) {
2780 if (!refs_delete_ref(get_main_ref_store(r
), "",
2781 "CHERRY_PICK_HEAD", NULL
, 0) &&
2783 warning(_("cancelling a cherry picking in progress"));
2784 opts
.action
= REPLAY_PICK
;
2788 if (refs_ref_exists(get_main_ref_store(r
), "REVERT_HEAD")) {
2789 if (!refs_delete_ref(get_main_ref_store(r
), "", "REVERT_HEAD",
2792 warning(_("cancelling a revert in progress"));
2793 opts
.action
= REPLAY_REVERT
;
2797 unlink(git_path_auto_merge(r
));
2802 if (!have_finished_the_last_pick())
2805 sequencer_remove_state(&opts
);
2808 static void todo_list_write_total_nr(struct todo_list
*todo_list
)
2810 FILE *f
= fopen_or_warn(rebase_path_msgtotal(), "w");
2813 fprintf(f
, "%d\n", todo_list
->total_nr
);
2818 static int read_populate_todo(struct repository
*r
,
2819 struct todo_list
*todo_list
,
2820 struct replay_opts
*opts
)
2822 const char *todo_file
= get_todo_path(opts
);
2825 strbuf_reset(&todo_list
->buf
);
2826 if (strbuf_read_file_or_whine(&todo_list
->buf
, todo_file
) < 0)
2829 res
= todo_list_parse_insn_buffer(r
, todo_list
->buf
.buf
, todo_list
);
2831 if (is_rebase_i(opts
))
2832 return error(_("please fix this using "
2833 "'git rebase --edit-todo'."));
2834 return error(_("unusable instruction sheet: '%s'"), todo_file
);
2837 if (!todo_list
->nr
&&
2838 (!is_rebase_i(opts
) || !file_exists(rebase_path_done())))
2839 return error(_("no commits parsed."));
2841 if (!is_rebase_i(opts
)) {
2842 enum todo_command valid
=
2843 opts
->action
== REPLAY_PICK
? TODO_PICK
: TODO_REVERT
;
2846 for (i
= 0; i
< todo_list
->nr
; i
++)
2847 if (valid
== todo_list
->items
[i
].command
)
2849 else if (valid
== TODO_PICK
)
2850 return error(_("cannot cherry-pick during a revert."));
2852 return error(_("cannot revert during a cherry-pick."));
2855 if (is_rebase_i(opts
)) {
2856 struct todo_list done
= TODO_LIST_INIT
;
2858 if (strbuf_read_file(&done
.buf
, rebase_path_done(), 0) > 0 &&
2859 !todo_list_parse_insn_buffer(r
, done
.buf
.buf
, &done
))
2860 todo_list
->done_nr
= count_commands(&done
);
2862 todo_list
->done_nr
= 0;
2864 todo_list
->total_nr
= todo_list
->done_nr
2865 + count_commands(todo_list
);
2866 todo_list_release(&done
);
2868 todo_list_write_total_nr(todo_list
);
2874 static int git_config_string_dup(char **dest
,
2875 const char *var
, const char *value
)
2878 return config_error_nonbool(var
);
2880 *dest
= xstrdup(value
);
2884 static int populate_opts_cb(const char *key
, const char *value
, void *data
)
2886 struct replay_opts
*opts
= data
;
2891 else if (!strcmp(key
, "options.no-commit"))
2892 opts
->no_commit
= git_config_bool_or_int(key
, value
, &error_flag
);
2893 else if (!strcmp(key
, "options.edit"))
2894 opts
->edit
= git_config_bool_or_int(key
, value
, &error_flag
);
2895 else if (!strcmp(key
, "options.allow-empty"))
2897 git_config_bool_or_int(key
, value
, &error_flag
);
2898 else if (!strcmp(key
, "options.allow-empty-message"))
2899 opts
->allow_empty_message
=
2900 git_config_bool_or_int(key
, value
, &error_flag
);
2901 else if (!strcmp(key
, "options.keep-redundant-commits"))
2902 opts
->keep_redundant_commits
=
2903 git_config_bool_or_int(key
, value
, &error_flag
);
2904 else if (!strcmp(key
, "options.signoff"))
2905 opts
->signoff
= git_config_bool_or_int(key
, value
, &error_flag
);
2906 else if (!strcmp(key
, "options.record-origin"))
2907 opts
->record_origin
= git_config_bool_or_int(key
, value
, &error_flag
);
2908 else if (!strcmp(key
, "options.allow-ff"))
2909 opts
->allow_ff
= git_config_bool_or_int(key
, value
, &error_flag
);
2910 else if (!strcmp(key
, "options.mainline"))
2911 opts
->mainline
= git_config_int(key
, value
);
2912 else if (!strcmp(key
, "options.strategy"))
2913 git_config_string_dup(&opts
->strategy
, key
, value
);
2914 else if (!strcmp(key
, "options.gpg-sign"))
2915 git_config_string_dup(&opts
->gpg_sign
, key
, value
);
2916 else if (!strcmp(key
, "options.strategy-option")) {
2917 ALLOC_GROW(opts
->xopts
, opts
->xopts_nr
+ 1, opts
->xopts_alloc
);
2918 opts
->xopts
[opts
->xopts_nr
++] = xstrdup(value
);
2919 } else if (!strcmp(key
, "options.allow-rerere-auto"))
2920 opts
->allow_rerere_auto
=
2921 git_config_bool_or_int(key
, value
, &error_flag
) ?
2922 RERERE_AUTOUPDATE
: RERERE_NOAUTOUPDATE
;
2923 else if (!strcmp(key
, "options.default-msg-cleanup")) {
2924 opts
->explicit_cleanup
= 1;
2925 opts
->default_msg_cleanup
= get_cleanup_mode(value
, 1);
2927 return error(_("invalid key: %s"), key
);
2930 return error(_("invalid value for '%s': '%s'"), key
, value
);
2935 void parse_strategy_opts(struct replay_opts
*opts
, char *raw_opts
)
2939 char *strategy_opts_string
= raw_opts
;
2941 if (*strategy_opts_string
== ' ')
2942 strategy_opts_string
++;
2944 count
= split_cmdline(strategy_opts_string
,
2945 (const char ***)&opts
->xopts
);
2947 die(_("could not split '%s': %s"), strategy_opts_string
,
2948 split_cmdline_strerror(count
));
2949 opts
->xopts_nr
= count
;
2950 for (i
= 0; i
< opts
->xopts_nr
; i
++) {
2951 const char *arg
= opts
->xopts
[i
];
2953 skip_prefix(arg
, "--", &arg
);
2954 opts
->xopts
[i
] = xstrdup(arg
);
2958 static void read_strategy_opts(struct replay_opts
*opts
, struct strbuf
*buf
)
2961 if (!read_oneliner(buf
, rebase_path_strategy(), 0))
2963 free(opts
->strategy
);
2964 opts
->strategy
= strbuf_detach(buf
, NULL
);
2965 if (!read_oneliner(buf
, rebase_path_strategy_opts(), 0))
2968 parse_strategy_opts(opts
, buf
->buf
);
2971 static int read_populate_opts(struct replay_opts
*opts
)
2973 if (is_rebase_i(opts
)) {
2974 struct strbuf buf
= STRBUF_INIT
;
2977 if (read_oneliner(&buf
, rebase_path_gpg_sign_opt(),
2978 READ_ONELINER_SKIP_IF_EMPTY
)) {
2979 if (!starts_with(buf
.buf
, "-S"))
2982 free(opts
->gpg_sign
);
2983 opts
->gpg_sign
= xstrdup(buf
.buf
+ 2);
2988 if (read_oneliner(&buf
, rebase_path_allow_rerere_autoupdate(),
2989 READ_ONELINER_SKIP_IF_EMPTY
)) {
2990 if (!strcmp(buf
.buf
, "--rerere-autoupdate"))
2991 opts
->allow_rerere_auto
= RERERE_AUTOUPDATE
;
2992 else if (!strcmp(buf
.buf
, "--no-rerere-autoupdate"))
2993 opts
->allow_rerere_auto
= RERERE_NOAUTOUPDATE
;
2997 if (file_exists(rebase_path_verbose()))
3000 if (file_exists(rebase_path_quiet()))
3003 if (file_exists(rebase_path_signoff())) {
3008 if (file_exists(rebase_path_cdate_is_adate())) {
3010 opts
->committer_date_is_author_date
= 1;
3013 if (file_exists(rebase_path_ignore_date())) {
3015 opts
->ignore_date
= 1;
3018 if (file_exists(rebase_path_reschedule_failed_exec()))
3019 opts
->reschedule_failed_exec
= 1;
3020 else if (file_exists(rebase_path_no_reschedule_failed_exec()))
3021 opts
->reschedule_failed_exec
= 0;
3023 if (file_exists(rebase_path_drop_redundant_commits()))
3024 opts
->drop_redundant_commits
= 1;
3026 if (file_exists(rebase_path_keep_redundant_commits()))
3027 opts
->keep_redundant_commits
= 1;
3029 read_strategy_opts(opts
, &buf
);
3032 if (read_oneliner(&opts
->current_fixups
,
3033 rebase_path_current_fixups(),
3034 READ_ONELINER_SKIP_IF_EMPTY
)) {
3035 const char *p
= opts
->current_fixups
.buf
;
3036 opts
->current_fixup_count
= 1;
3037 while ((p
= strchr(p
, '\n'))) {
3038 opts
->current_fixup_count
++;
3043 if (read_oneliner(&buf
, rebase_path_squash_onto(), 0)) {
3044 if (repo_get_oid_committish(the_repository
, buf
.buf
, &opts
->squash_onto
) < 0) {
3045 ret
= error(_("unusable squash-onto"));
3048 opts
->have_squash_onto
= 1;
3052 strbuf_release(&buf
);
3056 if (!file_exists(git_path_opts_file()))
3059 * The function git_parse_source(), called from git_config_from_file(),
3060 * may die() in case of a syntactically incorrect file. We do not care
3061 * about this case, though, because we wrote that file ourselves, so we
3062 * are pretty certain that it is syntactically correct.
3064 if (git_config_from_file(populate_opts_cb
, git_path_opts_file(), opts
) < 0)
3065 return error(_("malformed options sheet: '%s'"),
3066 git_path_opts_file());
3070 static void write_strategy_opts(struct replay_opts
*opts
)
3073 struct strbuf buf
= STRBUF_INIT
;
3075 for (i
= 0; i
< opts
->xopts_nr
; ++i
)
3076 strbuf_addf(&buf
, " --%s", opts
->xopts
[i
]);
3078 write_file(rebase_path_strategy_opts(), "%s\n", buf
.buf
);
3079 strbuf_release(&buf
);
3082 int write_basic_state(struct replay_opts
*opts
, const char *head_name
,
3083 struct commit
*onto
, const struct object_id
*orig_head
)
3086 write_file(rebase_path_head_name(), "%s\n", head_name
);
3088 write_file(rebase_path_onto(), "%s\n",
3089 oid_to_hex(&onto
->object
.oid
));
3091 write_file(rebase_path_orig_head(), "%s\n",
3092 oid_to_hex(orig_head
));
3095 write_file(rebase_path_quiet(), "%s", "");
3097 write_file(rebase_path_verbose(), "%s", "");
3099 write_file(rebase_path_strategy(), "%s\n", opts
->strategy
);
3100 if (opts
->xopts_nr
> 0)
3101 write_strategy_opts(opts
);
3103 if (opts
->allow_rerere_auto
== RERERE_AUTOUPDATE
)
3104 write_file(rebase_path_allow_rerere_autoupdate(), "--rerere-autoupdate\n");
3105 else if (opts
->allow_rerere_auto
== RERERE_NOAUTOUPDATE
)
3106 write_file(rebase_path_allow_rerere_autoupdate(), "--no-rerere-autoupdate\n");
3109 write_file(rebase_path_gpg_sign_opt(), "-S%s\n", opts
->gpg_sign
);
3111 write_file(rebase_path_signoff(), "--signoff\n");
3112 if (opts
->drop_redundant_commits
)
3113 write_file(rebase_path_drop_redundant_commits(), "%s", "");
3114 if (opts
->keep_redundant_commits
)
3115 write_file(rebase_path_keep_redundant_commits(), "%s", "");
3116 if (opts
->committer_date_is_author_date
)
3117 write_file(rebase_path_cdate_is_adate(), "%s", "");
3118 if (opts
->ignore_date
)
3119 write_file(rebase_path_ignore_date(), "%s", "");
3120 if (opts
->reschedule_failed_exec
)
3121 write_file(rebase_path_reschedule_failed_exec(), "%s", "");
3123 write_file(rebase_path_no_reschedule_failed_exec(), "%s", "");
3128 static int walk_revs_populate_todo(struct todo_list
*todo_list
,
3129 struct replay_opts
*opts
)
3131 enum todo_command command
= opts
->action
== REPLAY_PICK
?
3132 TODO_PICK
: TODO_REVERT
;
3133 const char *command_string
= todo_command_info
[command
].str
;
3134 const char *encoding
;
3135 struct commit
*commit
;
3137 if (prepare_revs(opts
))
3140 encoding
= get_log_output_encoding();
3142 while ((commit
= get_revision(opts
->revs
))) {
3143 struct todo_item
*item
= append_new_todo(todo_list
);
3144 const char *commit_buffer
= repo_logmsg_reencode(the_repository
,
3147 const char *subject
;
3150 item
->command
= command
;
3151 item
->commit
= commit
;
3152 item
->arg_offset
= 0;
3154 item
->offset_in_buf
= todo_list
->buf
.len
;
3155 subject_len
= find_commit_subject(commit_buffer
, &subject
);
3156 strbuf_addf(&todo_list
->buf
, "%s %s %.*s\n", command_string
,
3157 short_commit_name(commit
), subject_len
, subject
);
3158 repo_unuse_commit_buffer(the_repository
, commit
,
3163 return error(_("empty commit set passed"));
3168 static int create_seq_dir(struct repository
*r
)
3170 enum replay_action action
;
3171 const char *in_progress_error
= NULL
;
3172 const char *in_progress_advice
= NULL
;
3173 unsigned int advise_skip
=
3174 refs_ref_exists(get_main_ref_store(r
), "REVERT_HEAD") ||
3175 refs_ref_exists(get_main_ref_store(r
), "CHERRY_PICK_HEAD");
3177 if (!sequencer_get_last_command(r
, &action
)) {
3180 in_progress_error
= _("revert is already in progress");
3181 in_progress_advice
=
3182 _("try \"git revert (--continue | %s--abort | --quit)\"");
3185 in_progress_error
= _("cherry-pick is already in progress");
3186 in_progress_advice
=
3187 _("try \"git cherry-pick (--continue | %s--abort | --quit)\"");
3190 BUG("unexpected action in create_seq_dir");
3193 if (in_progress_error
) {
3194 error("%s", in_progress_error
);
3195 if (advice_enabled(ADVICE_SEQUENCER_IN_USE
))
3196 advise(in_progress_advice
,
3197 advise_skip
? "--skip | " : "");
3200 if (mkdir(git_path_seq_dir(), 0777) < 0)
3201 return error_errno(_("could not create sequencer directory '%s'"),
3202 git_path_seq_dir());
3207 static int save_head(const char *head
)
3209 struct lock_file head_lock
= LOCK_INIT
;
3210 struct strbuf buf
= STRBUF_INIT
;
3214 fd
= hold_lock_file_for_update(&head_lock
, git_path_head_file(), 0);
3216 return error_errno(_("could not lock HEAD"));
3217 strbuf_addf(&buf
, "%s\n", head
);
3218 written
= write_in_full(fd
, buf
.buf
, buf
.len
);
3219 strbuf_release(&buf
);
3221 error_errno(_("could not write to '%s'"), git_path_head_file());
3222 rollback_lock_file(&head_lock
);
3225 if (commit_lock_file(&head_lock
) < 0)
3226 return error(_("failed to finalize '%s'"), git_path_head_file());
3230 static int rollback_is_safe(void)
3232 struct strbuf sb
= STRBUF_INIT
;
3233 struct object_id expected_head
, actual_head
;
3235 if (strbuf_read_file(&sb
, git_path_abort_safety_file(), 0) >= 0) {
3237 if (get_oid_hex(sb
.buf
, &expected_head
)) {
3238 strbuf_release(&sb
);
3239 die(_("could not parse %s"), git_path_abort_safety_file());
3241 strbuf_release(&sb
);
3243 else if (errno
== ENOENT
)
3244 oidclr(&expected_head
);
3246 die_errno(_("could not read '%s'"), git_path_abort_safety_file());
3248 if (repo_get_oid(the_repository
, "HEAD", &actual_head
))
3249 oidclr(&actual_head
);
3251 return oideq(&actual_head
, &expected_head
);
3254 static int reset_merge(const struct object_id
*oid
)
3256 struct child_process cmd
= CHILD_PROCESS_INIT
;
3259 strvec_pushl(&cmd
.args
, "reset", "--merge", NULL
);
3261 if (!is_null_oid(oid
))
3262 strvec_push(&cmd
.args
, oid_to_hex(oid
));
3264 return run_command(&cmd
);
3267 static int rollback_single_pick(struct repository
*r
)
3269 struct object_id head_oid
;
3271 if (!refs_ref_exists(get_main_ref_store(r
), "CHERRY_PICK_HEAD") &&
3272 !refs_ref_exists(get_main_ref_store(r
), "REVERT_HEAD"))
3273 return error(_("no cherry-pick or revert in progress"));
3274 if (read_ref_full("HEAD", 0, &head_oid
, NULL
))
3275 return error(_("cannot resolve HEAD"));
3276 if (is_null_oid(&head_oid
))
3277 return error(_("cannot abort from a branch yet to be born"));
3278 return reset_merge(&head_oid
);
3281 static int skip_single_pick(void)
3283 struct object_id head
;
3285 if (read_ref_full("HEAD", 0, &head
, NULL
))
3286 return error(_("cannot resolve HEAD"));
3287 return reset_merge(&head
);
3290 int sequencer_rollback(struct repository
*r
, struct replay_opts
*opts
)
3293 struct object_id oid
;
3294 struct strbuf buf
= STRBUF_INIT
;
3297 f
= fopen(git_path_head_file(), "r");
3298 if (!f
&& errno
== ENOENT
) {
3300 * There is no multiple-cherry-pick in progress.
3301 * If CHERRY_PICK_HEAD or REVERT_HEAD indicates
3302 * a single-cherry-pick in progress, abort that.
3304 return rollback_single_pick(r
);
3307 return error_errno(_("cannot open '%s'"), git_path_head_file());
3308 if (strbuf_getline_lf(&buf
, f
)) {
3309 error(_("cannot read '%s': %s"), git_path_head_file(),
3310 ferror(f
) ? strerror(errno
) : _("unexpected end of file"));
3315 if (parse_oid_hex(buf
.buf
, &oid
, &p
) || *p
!= '\0') {
3316 error(_("stored pre-cherry-pick HEAD file '%s' is corrupt"),
3317 git_path_head_file());
3320 if (is_null_oid(&oid
)) {
3321 error(_("cannot abort from a branch yet to be born"));
3325 if (!rollback_is_safe()) {
3326 /* Do not error, just do not rollback */
3327 warning(_("You seem to have moved HEAD. "
3328 "Not rewinding, check your HEAD!"));
3330 if (reset_merge(&oid
))
3332 strbuf_release(&buf
);
3333 return sequencer_remove_state(opts
);
3335 strbuf_release(&buf
);
3339 int sequencer_skip(struct repository
*r
, struct replay_opts
*opts
)
3341 enum replay_action action
= -1;
3342 sequencer_get_last_command(r
, &action
);
3345 * Check whether the subcommand requested to skip the commit is actually
3346 * in progress and that it's safe to skip the commit.
3348 * opts->action tells us which subcommand requested to skip the commit.
3349 * If the corresponding .git/<ACTION>_HEAD exists, we know that the
3350 * action is in progress and we can skip the commit.
3352 * Otherwise we check that the last instruction was related to the
3353 * particular subcommand we're trying to execute and barf if that's not
3356 * Finally we check that the rollback is "safe", i.e., has the HEAD
3357 * moved? In this case, it doesn't make sense to "reset the merge" and
3358 * "skip the commit" as the user already handled this by committing. But
3359 * we'd not want to barf here, instead give advice on how to proceed. We
3360 * only need to check that when .git/<ACTION>_HEAD doesn't exist because
3361 * it gets removed when the user commits, so if it still exists we're
3362 * sure the user can't have committed before.
3364 switch (opts
->action
) {
3366 if (!refs_ref_exists(get_main_ref_store(r
), "REVERT_HEAD")) {
3367 if (action
!= REPLAY_REVERT
)
3368 return error(_("no revert in progress"));
3369 if (!rollback_is_safe())
3374 if (!refs_ref_exists(get_main_ref_store(r
),
3375 "CHERRY_PICK_HEAD")) {
3376 if (action
!= REPLAY_PICK
)
3377 return error(_("no cherry-pick in progress"));
3378 if (!rollback_is_safe())
3383 BUG("unexpected action in sequencer_skip");
3386 if (skip_single_pick())
3387 return error(_("failed to skip the commit"));
3388 if (!is_directory(git_path_seq_dir()))
3391 return sequencer_continue(r
, opts
);
3394 error(_("there is nothing to skip"));
3396 if (advice_enabled(ADVICE_RESOLVE_CONFLICT
)) {
3397 advise(_("have you committed already?\n"
3398 "try \"git %s --continue\""),
3399 action
== REPLAY_REVERT
? "revert" : "cherry-pick");
3404 static int save_todo(struct todo_list
*todo_list
, struct replay_opts
*opts
)
3406 struct lock_file todo_lock
= LOCK_INIT
;
3407 const char *todo_path
= get_todo_path(opts
);
3408 int next
= todo_list
->current
, offset
, fd
;
3411 * rebase -i writes "git-rebase-todo" without the currently executing
3412 * command, appending it to "done" instead.
3414 if (is_rebase_i(opts
))
3417 fd
= hold_lock_file_for_update(&todo_lock
, todo_path
, 0);
3419 return error_errno(_("could not lock '%s'"), todo_path
);
3420 offset
= get_item_line_offset(todo_list
, next
);
3421 if (write_in_full(fd
, todo_list
->buf
.buf
+ offset
,
3422 todo_list
->buf
.len
- offset
) < 0)
3423 return error_errno(_("could not write to '%s'"), todo_path
);
3424 if (commit_lock_file(&todo_lock
) < 0)
3425 return error(_("failed to finalize '%s'"), todo_path
);
3427 if (is_rebase_i(opts
) && next
> 0) {
3428 const char *done
= rebase_path_done();
3429 int fd
= open(done
, O_CREAT
| O_WRONLY
| O_APPEND
, 0666);
3434 if (write_in_full(fd
, get_item_line(todo_list
, next
- 1),
3435 get_item_line_length(todo_list
, next
- 1))
3437 ret
= error_errno(_("could not write to '%s'"), done
);
3439 ret
= error_errno(_("failed to finalize '%s'"), done
);
3445 static int save_opts(struct replay_opts
*opts
)
3447 const char *opts_file
= git_path_opts_file();
3450 if (opts
->no_commit
)
3451 res
|= git_config_set_in_file_gently(opts_file
,
3452 "options.no-commit", "true");
3453 if (opts
->edit
>= 0)
3454 res
|= git_config_set_in_file_gently(opts_file
, "options.edit",
3455 opts
->edit
? "true" : "false");
3456 if (opts
->allow_empty
)
3457 res
|= git_config_set_in_file_gently(opts_file
,
3458 "options.allow-empty", "true");
3459 if (opts
->allow_empty_message
)
3460 res
|= git_config_set_in_file_gently(opts_file
,
3461 "options.allow-empty-message", "true");
3462 if (opts
->keep_redundant_commits
)
3463 res
|= git_config_set_in_file_gently(opts_file
,
3464 "options.keep-redundant-commits", "true");
3466 res
|= git_config_set_in_file_gently(opts_file
,
3467 "options.signoff", "true");
3468 if (opts
->record_origin
)
3469 res
|= git_config_set_in_file_gently(opts_file
,
3470 "options.record-origin", "true");
3472 res
|= git_config_set_in_file_gently(opts_file
,
3473 "options.allow-ff", "true");
3474 if (opts
->mainline
) {
3475 struct strbuf buf
= STRBUF_INIT
;
3476 strbuf_addf(&buf
, "%d", opts
->mainline
);
3477 res
|= git_config_set_in_file_gently(opts_file
,
3478 "options.mainline", buf
.buf
);
3479 strbuf_release(&buf
);
3482 res
|= git_config_set_in_file_gently(opts_file
,
3483 "options.strategy", opts
->strategy
);
3485 res
|= git_config_set_in_file_gently(opts_file
,
3486 "options.gpg-sign", opts
->gpg_sign
);
3489 for (i
= 0; i
< opts
->xopts_nr
; i
++)
3490 res
|= git_config_set_multivar_in_file_gently(opts_file
,
3491 "options.strategy-option",
3492 opts
->xopts
[i
], "^$", 0);
3494 if (opts
->allow_rerere_auto
)
3495 res
|= git_config_set_in_file_gently(opts_file
,
3496 "options.allow-rerere-auto",
3497 opts
->allow_rerere_auto
== RERERE_AUTOUPDATE
?
3500 if (opts
->explicit_cleanup
)
3501 res
|= git_config_set_in_file_gently(opts_file
,
3502 "options.default-msg-cleanup",
3503 describe_cleanup_mode(opts
->default_msg_cleanup
));
3507 static int make_patch(struct repository
*r
,
3508 struct commit
*commit
,
3509 struct replay_opts
*opts
)
3511 struct strbuf buf
= STRBUF_INIT
;
3512 struct rev_info log_tree_opt
;
3513 const char *subject
;
3514 char hex
[GIT_MAX_HEXSZ
+ 1];
3517 oid_to_hex_r(hex
, &commit
->object
.oid
);
3518 if (write_message(hex
, strlen(hex
), rebase_path_stopped_sha(), 1) < 0)
3520 res
|= write_rebase_head(&commit
->object
.oid
);
3522 strbuf_addf(&buf
, "%s/patch", get_dir(opts
));
3523 memset(&log_tree_opt
, 0, sizeof(log_tree_opt
));
3524 repo_init_revisions(r
, &log_tree_opt
, NULL
);
3525 log_tree_opt
.abbrev
= 0;
3526 log_tree_opt
.diff
= 1;
3527 log_tree_opt
.diffopt
.output_format
= DIFF_FORMAT_PATCH
;
3528 log_tree_opt
.disable_stdin
= 1;
3529 log_tree_opt
.no_commit_id
= 1;
3530 log_tree_opt
.diffopt
.file
= fopen(buf
.buf
, "w");
3531 log_tree_opt
.diffopt
.use_color
= GIT_COLOR_NEVER
;
3532 if (!log_tree_opt
.diffopt
.file
)
3533 res
|= error_errno(_("could not open '%s'"), buf
.buf
);
3535 res
|= log_tree_commit(&log_tree_opt
, commit
);
3536 fclose(log_tree_opt
.diffopt
.file
);
3540 strbuf_addf(&buf
, "%s/message", get_dir(opts
));
3541 if (!file_exists(buf
.buf
)) {
3542 const char *encoding
= get_commit_output_encoding();
3543 const char *commit_buffer
= repo_logmsg_reencode(r
,
3546 find_commit_subject(commit_buffer
, &subject
);
3547 res
|= write_message(subject
, strlen(subject
), buf
.buf
, 1);
3548 repo_unuse_commit_buffer(r
, commit
,
3551 strbuf_release(&buf
);
3552 release_revisions(&log_tree_opt
);
3557 static int intend_to_amend(void)
3559 struct object_id head
;
3562 if (repo_get_oid(the_repository
, "HEAD", &head
))
3563 return error(_("cannot read HEAD"));
3565 p
= oid_to_hex(&head
);
3566 return write_message(p
, strlen(p
), rebase_path_amend(), 1);
3569 static int error_with_patch(struct repository
*r
,
3570 struct commit
*commit
,
3571 const char *subject
, int subject_len
,
3572 struct replay_opts
*opts
,
3573 int exit_code
, int to_amend
)
3576 if (make_patch(r
, commit
, opts
))
3578 } else if (copy_file(rebase_path_message(),
3579 git_path_merge_msg(r
), 0666))
3580 return error(_("unable to copy '%s' to '%s'"),
3581 git_path_merge_msg(r
), rebase_path_message());
3584 if (intend_to_amend())
3588 _("You can amend the commit now, with\n"
3590 " git commit --amend %s\n"
3592 "Once you are satisfied with your changes, run\n"
3594 " git rebase --continue\n"),
3595 gpg_sign_opt_quoted(opts
));
3596 } else if (exit_code
) {
3598 fprintf_ln(stderr
, _("Could not apply %s... %.*s"),
3599 short_commit_name(commit
), subject_len
, subject
);
3602 * We don't have the hash of the parent so
3603 * just print the line from the todo file.
3605 fprintf_ln(stderr
, _("Could not merge %.*s"),
3606 subject_len
, subject
);
3612 static int error_failed_squash(struct repository
*r
,
3613 struct commit
*commit
,
3614 struct replay_opts
*opts
,
3616 const char *subject
)
3618 if (copy_file(rebase_path_message(), rebase_path_squash_msg(), 0666))
3619 return error(_("could not copy '%s' to '%s'"),
3620 rebase_path_squash_msg(), rebase_path_message());
3621 unlink(git_path_merge_msg(r
));
3622 if (copy_file(git_path_merge_msg(r
), rebase_path_message(), 0666))
3623 return error(_("could not copy '%s' to '%s'"),
3624 rebase_path_message(),
3625 git_path_merge_msg(r
));
3626 return error_with_patch(r
, commit
, subject
, subject_len
, opts
, 1, 0);
3629 static int do_exec(struct repository
*r
, const char *command_line
)
3631 struct child_process cmd
= CHILD_PROCESS_INIT
;
3634 fprintf(stderr
, _("Executing: %s\n"), command_line
);
3636 strvec_push(&cmd
.args
, command_line
);
3637 status
= run_command(&cmd
);
3639 /* force re-reading of the cache */
3640 discard_index(r
->index
);
3641 if (repo_read_index(r
) < 0)
3642 return error(_("could not read index"));
3644 dirty
= require_clean_work_tree(r
, "rebase", NULL
, 1, 1);
3647 warning(_("execution failed: %s\n%s"
3648 "You can fix the problem, and then run\n"
3650 " git rebase --continue\n"
3653 dirty
? N_("and made changes to the index and/or the "
3654 "working tree\n") : "");
3656 /* command not found */
3659 warning(_("execution succeeded: %s\nbut "
3660 "left changes to the index and/or the working tree\n"
3661 "Commit or stash your changes, and then run\n"
3663 " git rebase --continue\n"
3664 "\n"), command_line
);
3671 __attribute__((format (printf
, 2, 3)))
3672 static int safe_append(const char *filename
, const char *fmt
, ...)
3675 struct lock_file lock
= LOCK_INIT
;
3676 int fd
= hold_lock_file_for_update(&lock
, filename
,
3677 LOCK_REPORT_ON_ERROR
);
3678 struct strbuf buf
= STRBUF_INIT
;
3683 if (strbuf_read_file(&buf
, filename
, 0) < 0 && errno
!= ENOENT
) {
3684 error_errno(_("could not read '%s'"), filename
);
3685 rollback_lock_file(&lock
);
3688 strbuf_complete(&buf
, '\n');
3690 strbuf_vaddf(&buf
, fmt
, ap
);
3693 if (write_in_full(fd
, buf
.buf
, buf
.len
) < 0) {
3694 error_errno(_("could not write to '%s'"), filename
);
3695 strbuf_release(&buf
);
3696 rollback_lock_file(&lock
);
3699 if (commit_lock_file(&lock
) < 0) {
3700 strbuf_release(&buf
);
3701 rollback_lock_file(&lock
);
3702 return error(_("failed to finalize '%s'"), filename
);
3705 strbuf_release(&buf
);
3709 static int do_label(struct repository
*r
, const char *name
, int len
)
3711 struct ref_store
*refs
= get_main_ref_store(r
);
3712 struct ref_transaction
*transaction
;
3713 struct strbuf ref_name
= STRBUF_INIT
, err
= STRBUF_INIT
;
3714 struct strbuf msg
= STRBUF_INIT
;
3716 struct object_id head_oid
;
3718 if (len
== 1 && *name
== '#')
3719 return error(_("illegal label name: '%.*s'"), len
, name
);
3721 strbuf_addf(&ref_name
, "refs/rewritten/%.*s", len
, name
);
3722 strbuf_addf(&msg
, "rebase (label) '%.*s'", len
, name
);
3724 transaction
= ref_store_transaction_begin(refs
, &err
);
3726 error("%s", err
.buf
);
3728 } else if (repo_get_oid(r
, "HEAD", &head_oid
)) {
3729 error(_("could not read HEAD"));
3731 } else if (ref_transaction_update(transaction
, ref_name
.buf
, &head_oid
,
3732 NULL
, 0, msg
.buf
, &err
) < 0 ||
3733 ref_transaction_commit(transaction
, &err
)) {
3734 error("%s", err
.buf
);
3737 ref_transaction_free(transaction
);
3738 strbuf_release(&err
);
3739 strbuf_release(&msg
);
3742 ret
= safe_append(rebase_path_refs_to_delete(),
3743 "%s\n", ref_name
.buf
);
3744 strbuf_release(&ref_name
);
3749 static const char *sequencer_reflog_action(struct replay_opts
*opts
)
3751 if (!opts
->reflog_action
) {
3752 opts
->reflog_action
= getenv(GIT_REFLOG_ACTION
);
3753 opts
->reflog_action
=
3754 xstrdup(opts
->reflog_action
? opts
->reflog_action
3755 : action_name(opts
));
3758 return opts
->reflog_action
;
3761 __attribute__((format (printf
, 3, 4)))
3762 static const char *reflog_message(struct replay_opts
*opts
,
3763 const char *sub_action
, const char *fmt
, ...)
3766 static struct strbuf buf
= STRBUF_INIT
;
3770 strbuf_addstr(&buf
, sequencer_reflog_action(opts
));
3772 strbuf_addf(&buf
, " (%s)", sub_action
);
3774 strbuf_addstr(&buf
, ": ");
3775 strbuf_vaddf(&buf
, fmt
, ap
);
3782 static struct commit
*lookup_label(struct repository
*r
, const char *label
,
3783 int len
, struct strbuf
*buf
)
3785 struct commit
*commit
;
3786 struct object_id oid
;
3789 strbuf_addf(buf
, "refs/rewritten/%.*s", len
, label
);
3790 if (!read_ref(buf
->buf
, &oid
)) {
3791 commit
= lookup_commit_object(r
, &oid
);
3793 /* fall back to non-rewritten ref or commit */
3794 strbuf_splice(buf
, 0, strlen("refs/rewritten/"), "", 0);
3795 commit
= lookup_commit_reference_by_name(buf
->buf
);
3799 error(_("could not resolve '%s'"), buf
->buf
);
3804 static int do_reset(struct repository
*r
,
3805 const char *name
, int len
,
3806 struct replay_opts
*opts
)
3808 struct strbuf ref_name
= STRBUF_INIT
;
3809 struct object_id oid
;
3810 struct lock_file lock
= LOCK_INIT
;
3811 struct tree_desc desc
= { 0 };
3813 struct unpack_trees_options unpack_tree_opts
= { 0 };
3816 if (repo_hold_locked_index(r
, &lock
, LOCK_REPORT_ON_ERROR
) < 0)
3819 if (len
== 10 && !strncmp("[new root]", name
, len
)) {
3820 if (!opts
->have_squash_onto
) {
3822 if (commit_tree("", 0, the_hash_algo
->empty_tree
,
3823 NULL
, &opts
->squash_onto
,
3825 return error(_("writing fake root commit"));
3826 opts
->have_squash_onto
= 1;
3827 hex
= oid_to_hex(&opts
->squash_onto
);
3828 if (write_message(hex
, strlen(hex
),
3829 rebase_path_squash_onto(), 0))
3830 return error(_("writing squash-onto"));
3832 oidcpy(&oid
, &opts
->squash_onto
);
3835 struct commit
*commit
;
3837 /* Determine the length of the label */
3838 for (i
= 0; i
< len
; i
++)
3839 if (isspace(name
[i
]))
3843 commit
= lookup_label(r
, name
, len
, &ref_name
);
3848 oid
= commit
->object
.oid
;
3851 setup_unpack_trees_porcelain(&unpack_tree_opts
, "reset");
3852 unpack_tree_opts
.head_idx
= 1;
3853 unpack_tree_opts
.src_index
= r
->index
;
3854 unpack_tree_opts
.dst_index
= r
->index
;
3855 unpack_tree_opts
.fn
= oneway_merge
;
3856 unpack_tree_opts
.merge
= 1;
3857 unpack_tree_opts
.update
= 1;
3858 unpack_tree_opts
.preserve_ignored
= 0; /* FIXME: !overwrite_ignore */
3859 unpack_tree_opts
.skip_cache_tree_update
= 1;
3860 init_checkout_metadata(&unpack_tree_opts
.meta
, name
, &oid
, NULL
);
3862 if (repo_read_index_unmerged(r
)) {
3863 ret
= error_resolve_conflict(action_name(opts
));
3867 if (!fill_tree_descriptor(r
, &desc
, &oid
)) {
3868 ret
= error(_("failed to find tree of %s"), oid_to_hex(&oid
));
3872 if (unpack_trees(1, &desc
, &unpack_tree_opts
)) {
3877 tree
= parse_tree_indirect(&oid
);
3878 prime_cache_tree(r
, r
->index
, tree
);
3880 if (write_locked_index(r
->index
, &lock
, COMMIT_LOCK
) < 0)
3881 ret
= error(_("could not write index"));
3884 ret
= update_ref(reflog_message(opts
, "reset", "'%.*s'",
3885 len
, name
), "HEAD", &oid
,
3886 NULL
, 0, UPDATE_REFS_MSG_ON_ERR
);
3888 free((void *)desc
.buffer
);
3890 rollback_lock_file(&lock
);
3891 strbuf_release(&ref_name
);
3892 clear_unpack_trees_porcelain(&unpack_tree_opts
);
3896 static int do_merge(struct repository
*r
,
3897 struct commit
*commit
,
3898 const char *arg
, int arg_len
,
3899 int flags
, int *check_todo
, struct replay_opts
*opts
)
3901 int run_commit_flags
= 0;
3902 struct strbuf ref_name
= STRBUF_INIT
;
3903 struct commit
*head_commit
, *merge_commit
, *i
;
3904 struct commit_list
*bases
, *j
;
3905 struct commit_list
*to_merge
= NULL
, **tail
= &to_merge
;
3906 const char *strategy
= !opts
->xopts_nr
&&
3908 !strcmp(opts
->strategy
, "recursive") ||
3909 !strcmp(opts
->strategy
, "ort")) ?
3910 NULL
: opts
->strategy
;
3911 struct merge_options o
;
3912 int merge_arg_len
, oneline_offset
, can_fast_forward
, ret
, k
;
3913 static struct lock_file lock
;
3916 if (repo_hold_locked_index(r
, &lock
, LOCK_REPORT_ON_ERROR
) < 0) {
3921 head_commit
= lookup_commit_reference_by_name("HEAD");
3923 ret
= error(_("cannot merge without a current revision"));
3928 * For octopus merges, the arg starts with the list of revisions to be
3929 * merged. The list is optionally followed by '#' and the oneline.
3931 merge_arg_len
= oneline_offset
= arg_len
;
3932 for (p
= arg
; p
- arg
< arg_len
; p
+= strspn(p
, " \t\n")) {
3935 if (*p
== '#' && (!p
[1] || isspace(p
[1]))) {
3936 p
+= 1 + strspn(p
+ 1, " \t\n");
3937 oneline_offset
= p
- arg
;
3940 k
= strcspn(p
, " \t\n");
3943 merge_commit
= lookup_label(r
, p
, k
, &ref_name
);
3944 if (!merge_commit
) {
3945 ret
= error(_("unable to parse '%.*s'"), k
, p
);
3948 tail
= &commit_list_insert(merge_commit
, tail
)->next
;
3950 merge_arg_len
= p
- arg
;
3954 ret
= error(_("nothing to merge: '%.*s'"), arg_len
, arg
);
3958 if (opts
->have_squash_onto
&&
3959 oideq(&head_commit
->object
.oid
, &opts
->squash_onto
)) {
3961 * When the user tells us to "merge" something into a
3962 * "[new root]", let's simply fast-forward to the merge head.
3964 rollback_lock_file(&lock
);
3966 ret
= error(_("octopus merge cannot be executed on "
3967 "top of a [new root]"));
3969 ret
= fast_forward_to(r
, &to_merge
->item
->object
.oid
,
3970 &head_commit
->object
.oid
, 0,
3976 * If HEAD is not identical to the first parent of the original merge
3977 * commit, we cannot fast-forward.
3979 can_fast_forward
= opts
->allow_ff
&& commit
&& commit
->parents
&&
3980 oideq(&commit
->parents
->item
->object
.oid
,
3981 &head_commit
->object
.oid
);
3984 * If any merge head is different from the original one, we cannot
3987 if (can_fast_forward
) {
3988 struct commit_list
*p
= commit
->parents
->next
;
3990 for (j
= to_merge
; j
&& p
; j
= j
->next
, p
= p
->next
)
3991 if (!oideq(&j
->item
->object
.oid
,
3992 &p
->item
->object
.oid
)) {
3993 can_fast_forward
= 0;
3997 * If the number of merge heads differs from the original merge
3998 * commit, we cannot fast-forward.
4001 can_fast_forward
= 0;
4004 if (can_fast_forward
) {
4005 rollback_lock_file(&lock
);
4006 ret
= fast_forward_to(r
, &commit
->object
.oid
,
4007 &head_commit
->object
.oid
, 0, opts
);
4008 if (flags
& TODO_EDIT_MERGE_MSG
)
4009 goto fast_forward_edit
;
4015 const char *encoding
= get_commit_output_encoding();
4016 const char *message
= repo_logmsg_reencode(r
, commit
, NULL
,
4022 ret
= error(_("could not get commit message of '%s'"),
4023 oid_to_hex(&commit
->object
.oid
));
4026 write_author_script(message
);
4027 find_commit_subject(message
, &body
);
4029 ret
= write_message(body
, len
, git_path_merge_msg(r
), 0);
4030 repo_unuse_commit_buffer(r
, commit
, message
);
4032 error_errno(_("could not write '%s'"),
4033 git_path_merge_msg(r
));
4037 struct strbuf buf
= STRBUF_INIT
;
4040 strbuf_addf(&buf
, "author %s", git_author_info(0));
4041 write_author_script(buf
.buf
);
4044 if (oneline_offset
< arg_len
) {
4045 p
= arg
+ oneline_offset
;
4046 len
= arg_len
- oneline_offset
;
4048 strbuf_addf(&buf
, "Merge %s '%.*s'",
4049 to_merge
->next
? "branches" : "branch",
4050 merge_arg_len
, arg
);
4055 ret
= write_message(p
, len
, git_path_merge_msg(r
), 0);
4056 strbuf_release(&buf
);
4058 error_errno(_("could not write '%s'"),
4059 git_path_merge_msg(r
));
4064 if (strategy
|| to_merge
->next
) {
4066 struct child_process cmd
= CHILD_PROCESS_INIT
;
4068 if (read_env_script(&cmd
.env
)) {
4069 const char *gpg_opt
= gpg_sign_opt_quoted(opts
);
4071 ret
= error(_(staged_changes_advice
), gpg_opt
, gpg_opt
);
4075 if (opts
->committer_date_is_author_date
)
4076 strvec_pushf(&cmd
.env
, "GIT_COMMITTER_DATE=%s",
4079 author_date_from_env(&cmd
.env
));
4080 if (opts
->ignore_date
)
4081 strvec_push(&cmd
.env
, "GIT_AUTHOR_DATE=");
4084 strvec_push(&cmd
.args
, "merge");
4085 strvec_push(&cmd
.args
, "-s");
4087 strvec_push(&cmd
.args
, "octopus");
4089 strvec_push(&cmd
.args
, strategy
);
4090 for (k
= 0; k
< opts
->xopts_nr
; k
++)
4091 strvec_pushf(&cmd
.args
,
4092 "-X%s", opts
->xopts
[k
]);
4094 if (!(flags
& TODO_EDIT_MERGE_MSG
))
4095 strvec_push(&cmd
.args
, "--no-edit");
4097 strvec_push(&cmd
.args
, "--edit");
4098 strvec_push(&cmd
.args
, "--no-ff");
4099 strvec_push(&cmd
.args
, "--no-log");
4100 strvec_push(&cmd
.args
, "--no-stat");
4101 strvec_push(&cmd
.args
, "-F");
4102 strvec_push(&cmd
.args
, git_path_merge_msg(r
));
4104 strvec_pushf(&cmd
.args
, "-S%s", opts
->gpg_sign
);
4106 strvec_push(&cmd
.args
, "--no-gpg-sign");
4108 /* Add the tips to be merged */
4109 for (j
= to_merge
; j
; j
= j
->next
)
4110 strvec_push(&cmd
.args
,
4111 oid_to_hex(&j
->item
->object
.oid
));
4113 strbuf_release(&ref_name
);
4114 refs_delete_ref(get_main_ref_store(r
), "", "CHERRY_PICK_HEAD",
4116 rollback_lock_file(&lock
);
4118 ret
= run_command(&cmd
);
4120 /* force re-reading of the cache */
4122 discard_index(r
->index
);
4123 if (repo_read_index(r
) < 0)
4124 ret
= error(_("could not read index"));
4129 merge_commit
= to_merge
->item
;
4130 bases
= repo_get_merge_bases(r
, head_commit
, merge_commit
);
4131 if (bases
&& oideq(&merge_commit
->object
.oid
,
4132 &bases
->item
->object
.oid
)) {
4134 /* skip merging an ancestor of HEAD */
4138 write_message(oid_to_hex(&merge_commit
->object
.oid
), the_hash_algo
->hexsz
,
4139 git_path_merge_head(r
), 0);
4140 write_message("no-ff", 5, git_path_merge_mode(r
), 0);
4142 bases
= reverse_commit_list(bases
);
4145 init_merge_options(&o
, r
);
4147 o
.branch2
= ref_name
.buf
;
4148 o
.buffer_output
= 2;
4150 if (!opts
->strategy
|| !strcmp(opts
->strategy
, "ort")) {
4152 * TODO: Should use merge_incore_recursive() and
4153 * merge_switch_to_result(), skipping the call to
4154 * merge_switch_to_result() when we don't actually need to
4155 * update the index and working copy immediately.
4157 ret
= merge_ort_recursive(&o
,
4158 head_commit
, merge_commit
, bases
,
4161 ret
= merge_recursive(&o
, head_commit
, merge_commit
, bases
,
4165 fputs(o
.obuf
.buf
, stdout
);
4166 strbuf_release(&o
.obuf
);
4168 error(_("could not even attempt to merge '%.*s'"),
4169 merge_arg_len
, arg
);
4173 * The return value of merge_recursive() is 1 on clean, and 0 on
4176 * Let's reverse that, so that do_merge() returns 0 upon success and
4177 * 1 upon failed merge (keeping the return value -1 for the cases where
4178 * we will want to reschedule the `merge` command).
4182 if (r
->index
->cache_changed
&&
4183 write_locked_index(r
->index
, &lock
, COMMIT_LOCK
)) {
4184 ret
= error(_("merge: Unable to write new index file"));
4188 rollback_lock_file(&lock
);
4190 repo_rerere(r
, opts
->allow_rerere_auto
);
4193 * In case of problems, we now want to return a positive
4194 * value (a negative one would indicate that the `merge`
4195 * command needs to be rescheduled).
4197 ret
= !!run_git_commit(git_path_merge_msg(r
), opts
,
4200 if (!ret
&& flags
& TODO_EDIT_MERGE_MSG
) {
4203 run_commit_flags
|= AMEND_MSG
| EDIT_MSG
| VERIFY_MSG
;
4204 ret
= !!run_git_commit(NULL
, opts
, run_commit_flags
);
4209 strbuf_release(&ref_name
);
4210 rollback_lock_file(&lock
);
4211 free_commit_list(to_merge
);
4215 static int write_update_refs_state(struct string_list
*refs_to_oids
)
4218 struct lock_file lock
= LOCK_INIT
;
4220 struct string_list_item
*item
;
4223 path
= rebase_path_update_refs(the_repository
->gitdir
);
4225 if (!refs_to_oids
->nr
) {
4226 if (unlink(path
) && errno
!= ENOENT
)
4227 result
= error_errno(_("could not unlink: %s"), path
);
4231 if (safe_create_leading_directories(path
)) {
4232 result
= error(_("unable to create leading directories of %s"),
4237 if (hold_lock_file_for_update(&lock
, path
, 0) < 0) {
4238 result
= error(_("another 'rebase' process appears to be running; "
4239 "'%s.lock' already exists"),
4244 fp
= fdopen_lock_file(&lock
, "w");
4246 result
= error_errno(_("could not open '%s' for writing"), path
);
4247 rollback_lock_file(&lock
);
4251 for_each_string_list_item(item
, refs_to_oids
) {
4252 struct update_ref_record
*rec
= item
->util
;
4253 fprintf(fp
, "%s\n%s\n%s\n", item
->string
,
4254 oid_to_hex(&rec
->before
), oid_to_hex(&rec
->after
));
4257 result
= commit_lock_file(&lock
);
4265 * Parse the update-refs file for the current rebase, then remove the
4266 * refs that do not appear in the todo_list (and have not had updated
4267 * values stored) and add refs that are in the todo_list but not
4268 * represented in the update-refs file.
4270 * If there are changes to the update-refs list, then write the new state
4273 void todo_list_filter_update_refs(struct repository
*r
,
4274 struct todo_list
*todo_list
)
4278 struct string_list update_refs
= STRING_LIST_INIT_DUP
;
4280 sequencer_get_update_refs_state(r
->gitdir
, &update_refs
);
4283 * For each item in the update_refs list, if it has no updated
4284 * value and does not appear in the todo_list, then remove it
4285 * from the update_refs list.
4287 for (i
= 0; i
< update_refs
.nr
; i
++) {
4290 const char *ref
= update_refs
.items
[i
].string
;
4291 size_t reflen
= strlen(ref
);
4292 struct update_ref_record
*rec
= update_refs
.items
[i
].util
;
4294 /* OID already stored as updated. */
4295 if (!is_null_oid(&rec
->after
))
4298 for (j
= 0; !found
&& j
< todo_list
->total_nr
; j
++) {
4299 struct todo_item
*item
= &todo_list
->items
[j
];
4300 const char *arg
= todo_list
->buf
.buf
+ item
->arg_offset
;
4302 if (item
->command
!= TODO_UPDATE_REF
)
4305 if (item
->arg_len
!= reflen
||
4306 strncmp(arg
, ref
, reflen
))
4313 free(update_refs
.items
[i
].string
);
4314 free(update_refs
.items
[i
].util
);
4317 MOVE_ARRAY(update_refs
.items
+ i
, update_refs
.items
+ i
+ 1, update_refs
.nr
- i
);
4325 * For each todo_item, check if its ref is in the update_refs list.
4326 * If not, then add it as an un-updated ref.
4328 for (i
= 0; i
< todo_list
->total_nr
; i
++) {
4329 struct todo_item
*item
= &todo_list
->items
[i
];
4330 const char *arg
= todo_list
->buf
.buf
+ item
->arg_offset
;
4333 if (item
->command
!= TODO_UPDATE_REF
)
4336 for (j
= 0; !found
&& j
< update_refs
.nr
; j
++) {
4337 const char *ref
= update_refs
.items
[j
].string
;
4339 found
= strlen(ref
) == item
->arg_len
&&
4340 !strncmp(ref
, arg
, item
->arg_len
);
4344 struct string_list_item
*inserted
;
4345 struct strbuf argref
= STRBUF_INIT
;
4347 strbuf_add(&argref
, arg
, item
->arg_len
);
4348 inserted
= string_list_insert(&update_refs
, argref
.buf
);
4349 inserted
->util
= init_update_ref_record(argref
.buf
);
4350 strbuf_release(&argref
);
4356 write_update_refs_state(&update_refs
);
4357 string_list_clear(&update_refs
, 1);
4360 static int do_update_ref(struct repository
*r
, const char *refname
)
4362 struct string_list_item
*item
;
4363 struct string_list list
= STRING_LIST_INIT_DUP
;
4365 if (sequencer_get_update_refs_state(r
->gitdir
, &list
))
4368 for_each_string_list_item(item
, &list
) {
4369 if (!strcmp(item
->string
, refname
)) {
4370 struct update_ref_record
*rec
= item
->util
;
4371 if (read_ref("HEAD", &rec
->after
))
4377 write_update_refs_state(&list
);
4378 string_list_clear(&list
, 1);
4382 static int do_update_refs(struct repository
*r
, int quiet
)
4385 struct string_list_item
*item
;
4386 struct string_list refs_to_oids
= STRING_LIST_INIT_DUP
;
4387 struct ref_store
*refs
= get_main_ref_store(r
);
4388 struct strbuf update_msg
= STRBUF_INIT
;
4389 struct strbuf error_msg
= STRBUF_INIT
;
4391 if ((res
= sequencer_get_update_refs_state(r
->gitdir
, &refs_to_oids
)))
4394 for_each_string_list_item(item
, &refs_to_oids
) {
4395 struct update_ref_record
*rec
= item
->util
;
4398 loop_res
= refs_update_ref(refs
, "rewritten during rebase",
4400 &rec
->after
, &rec
->before
,
4401 0, UPDATE_REFS_MSG_ON_ERR
);
4408 strbuf_addf(&error_msg
, "\t%s\n", item
->string
);
4410 strbuf_addf(&update_msg
, "\t%s\n", item
->string
);
4414 (update_msg
.len
|| error_msg
.len
)) {
4416 _("Updated the following refs with %s:\n%s"),
4422 _("Failed to update the following refs with %s:\n%s"),
4427 string_list_clear(&refs_to_oids
, 1);
4428 strbuf_release(&update_msg
);
4429 strbuf_release(&error_msg
);
4433 static int is_final_fixup(struct todo_list
*todo_list
)
4435 int i
= todo_list
->current
;
4437 if (!is_fixup(todo_list
->items
[i
].command
))
4440 while (++i
< todo_list
->nr
)
4441 if (is_fixup(todo_list
->items
[i
].command
))
4443 else if (!is_noop(todo_list
->items
[i
].command
))
4448 static enum todo_command
peek_command(struct todo_list
*todo_list
, int offset
)
4452 for (i
= todo_list
->current
+ offset
; i
< todo_list
->nr
; i
++)
4453 if (!is_noop(todo_list
->items
[i
].command
))
4454 return todo_list
->items
[i
].command
;
4459 void create_autostash(struct repository
*r
, const char *path
)
4461 struct strbuf buf
= STRBUF_INIT
;
4462 struct lock_file lock_file
= LOCK_INIT
;
4465 fd
= repo_hold_locked_index(r
, &lock_file
, 0);
4466 refresh_index(r
->index
, REFRESH_QUIET
, NULL
, NULL
, NULL
);
4468 repo_update_index_if_able(r
, &lock_file
);
4469 rollback_lock_file(&lock_file
);
4471 if (has_unstaged_changes(r
, 1) ||
4472 has_uncommitted_changes(r
, 1)) {
4473 struct child_process stash
= CHILD_PROCESS_INIT
;
4474 struct reset_head_opts ropts
= { .flags
= RESET_HEAD_HARD
};
4475 struct object_id oid
;
4477 strvec_pushl(&stash
.args
,
4478 "stash", "create", "autostash", NULL
);
4482 if (capture_command(&stash
, &buf
, GIT_MAX_HEXSZ
))
4483 die(_("Cannot autostash"));
4484 strbuf_trim_trailing_newline(&buf
);
4485 if (repo_get_oid(r
, buf
.buf
, &oid
))
4486 die(_("Unexpected stash response: '%s'"),
4489 strbuf_add_unique_abbrev(&buf
, &oid
, DEFAULT_ABBREV
);
4491 if (safe_create_leading_directories_const(path
))
4492 die(_("Could not create directory for '%s'"),
4494 write_file(path
, "%s", oid_to_hex(&oid
));
4495 printf(_("Created autostash: %s\n"), buf
.buf
);
4496 if (reset_head(r
, &ropts
) < 0)
4497 die(_("could not reset --hard"));
4498 discard_index(r
->index
);
4499 if (repo_read_index(r
) < 0)
4500 die(_("could not read index"));
4502 strbuf_release(&buf
);
4505 static int apply_save_autostash_oid(const char *stash_oid
, int attempt_apply
)
4507 struct child_process child
= CHILD_PROCESS_INIT
;
4510 if (attempt_apply
) {
4512 child
.no_stdout
= 1;
4513 child
.no_stderr
= 1;
4514 strvec_push(&child
.args
, "stash");
4515 strvec_push(&child
.args
, "apply");
4516 strvec_push(&child
.args
, stash_oid
);
4517 ret
= run_command(&child
);
4520 if (attempt_apply
&& !ret
)
4521 fprintf(stderr
, _("Applied autostash.\n"));
4523 struct child_process store
= CHILD_PROCESS_INIT
;
4526 strvec_push(&store
.args
, "stash");
4527 strvec_push(&store
.args
, "store");
4528 strvec_push(&store
.args
, "-m");
4529 strvec_push(&store
.args
, "autostash");
4530 strvec_push(&store
.args
, "-q");
4531 strvec_push(&store
.args
, stash_oid
);
4532 if (run_command(&store
))
4533 ret
= error(_("cannot store %s"), stash_oid
);
4537 "Your changes are safe in the stash.\n"
4538 "You can run \"git stash pop\" or"
4539 " \"git stash drop\" at any time.\n"),
4541 _("Applying autostash resulted in conflicts.") :
4542 _("Autostash exists; creating a new stash entry."));
4548 static int apply_save_autostash(const char *path
, int attempt_apply
)
4550 struct strbuf stash_oid
= STRBUF_INIT
;
4553 if (!read_oneliner(&stash_oid
, path
,
4554 READ_ONELINER_SKIP_IF_EMPTY
)) {
4555 strbuf_release(&stash_oid
);
4558 strbuf_trim(&stash_oid
);
4560 ret
= apply_save_autostash_oid(stash_oid
.buf
, attempt_apply
);
4563 strbuf_release(&stash_oid
);
4567 int save_autostash(const char *path
)
4569 return apply_save_autostash(path
, 0);
4572 int apply_autostash(const char *path
)
4574 return apply_save_autostash(path
, 1);
4577 int apply_autostash_oid(const char *stash_oid
)
4579 return apply_save_autostash_oid(stash_oid
, 1);
4582 static int checkout_onto(struct repository
*r
, struct replay_opts
*opts
,
4583 const char *onto_name
, const struct object_id
*onto
,
4584 const struct object_id
*orig_head
)
4586 struct reset_head_opts ropts
= {
4588 .orig_head
= orig_head
,
4589 .flags
= RESET_HEAD_DETACH
| RESET_ORIG_HEAD
|
4590 RESET_HEAD_RUN_POST_CHECKOUT_HOOK
,
4591 .head_msg
= reflog_message(opts
, "start", "checkout %s",
4593 .default_reflog_action
= sequencer_reflog_action(opts
)
4595 if (reset_head(r
, &ropts
)) {
4596 apply_autostash(rebase_path_autostash());
4597 sequencer_remove_state(opts
);
4598 return error(_("could not detach HEAD"));
4604 static int stopped_at_head(struct repository
*r
)
4606 struct object_id head
;
4607 struct commit
*commit
;
4608 struct commit_message message
;
4610 if (repo_get_oid(r
, "HEAD", &head
) ||
4611 !(commit
= lookup_commit(r
, &head
)) ||
4612 repo_parse_commit(r
, commit
) || get_message(commit
, &message
))
4613 fprintf(stderr
, _("Stopped at HEAD\n"));
4615 fprintf(stderr
, _("Stopped at %s\n"), message
.label
);
4616 free_message(commit
, &message
);
4622 static int reread_todo_if_changed(struct repository
*r
,
4623 struct todo_list
*todo_list
,
4624 struct replay_opts
*opts
)
4627 struct strbuf buf
= STRBUF_INIT
;
4629 if (strbuf_read_file_or_whine(&buf
, get_todo_path(opts
)) < 0)
4631 offset
= get_item_line_offset(todo_list
, todo_list
->current
+ 1);
4632 if (buf
.len
!= todo_list
->buf
.len
- offset
||
4633 memcmp(buf
.buf
, todo_list
->buf
.buf
+ offset
, buf
.len
)) {
4634 /* Reread the todo file if it has changed. */
4635 todo_list_release(todo_list
);
4636 if (read_populate_todo(r
, todo_list
, opts
))
4637 return -1; /* message was printed */
4638 /* `current` will be incremented on return */
4639 todo_list
->current
= -1;
4641 strbuf_release(&buf
);
4646 static const char rescheduled_advice
[] =
4647 N_("Could not execute the todo command\n"
4651 "It has been rescheduled; To edit the command before continuing, please\n"
4652 "edit the todo list first:\n"
4654 " git rebase --edit-todo\n"
4655 " git rebase --continue\n");
4657 static int pick_commits(struct repository
*r
,
4658 struct todo_list
*todo_list
,
4659 struct replay_opts
*opts
)
4661 int res
= 0, reschedule
= 0;
4663 opts
->reflog_message
= sequencer_reflog_action(opts
);
4665 assert(!(opts
->signoff
|| opts
->no_commit
||
4666 opts
->record_origin
|| should_edit(opts
) ||
4667 opts
->committer_date_is_author_date
||
4668 opts
->ignore_date
));
4669 if (read_and_refresh_cache(r
, opts
))
4672 while (todo_list
->current
< todo_list
->nr
) {
4673 struct todo_item
*item
= todo_list
->items
+ todo_list
->current
;
4674 const char *arg
= todo_item_get_arg(todo_list
, item
);
4677 if (save_todo(todo_list
, opts
))
4679 if (is_rebase_i(opts
)) {
4680 if (item
->command
!= TODO_COMMENT
) {
4681 FILE *f
= fopen(rebase_path_msgnum(), "w");
4683 todo_list
->done_nr
++;
4686 fprintf(f
, "%d\n", todo_list
->done_nr
);
4690 fprintf(stderr
, _("Rebasing (%d/%d)%s"),
4692 todo_list
->total_nr
,
4693 opts
->verbose
? "\n" : "\r");
4695 unlink(rebase_path_message());
4696 unlink(rebase_path_author_script());
4697 unlink(rebase_path_stopped_sha());
4698 unlink(rebase_path_amend());
4699 unlink(git_path_merge_head(r
));
4700 unlink(git_path_auto_merge(r
));
4701 delete_ref(NULL
, "REBASE_HEAD", NULL
, REF_NO_DEREF
);
4703 if (item
->command
== TODO_BREAK
) {
4706 return stopped_at_head(r
);
4709 if (item
->command
<= TODO_SQUASH
) {
4710 if (is_rebase_i(opts
))
4711 opts
->reflog_message
= reflog_message(opts
,
4712 command_to_string(item
->command
), NULL
);
4714 res
= do_pick_commit(r
, item
, opts
,
4715 is_final_fixup(todo_list
),
4717 if (is_rebase_i(opts
) && res
< 0) {
4719 advise(_(rescheduled_advice
),
4720 get_item_line_length(todo_list
,
4721 todo_list
->current
),
4722 get_item_line(todo_list
,
4723 todo_list
->current
));
4724 todo_list
->current
--;
4725 if (save_todo(todo_list
, opts
))
4728 if (item
->command
== TODO_EDIT
) {
4729 struct commit
*commit
= item
->commit
;
4734 _("Stopped at %s... %.*s\n"),
4735 short_commit_name(commit
),
4736 item
->arg_len
, arg
);
4738 return error_with_patch(r
, commit
,
4739 arg
, item
->arg_len
, opts
, res
, !res
);
4741 if (is_rebase_i(opts
) && !res
)
4742 record_in_rewritten(&item
->commit
->object
.oid
,
4743 peek_command(todo_list
, 1));
4744 if (res
&& is_fixup(item
->command
)) {
4747 return error_failed_squash(r
, item
->commit
, opts
,
4748 item
->arg_len
, arg
);
4749 } else if (res
&& is_rebase_i(opts
) && item
->commit
) {
4751 struct object_id oid
;
4754 * If we are rewording and have either
4755 * fast-forwarded already, or are about to
4756 * create a new root commit, we want to amend,
4757 * otherwise we do not.
4759 if (item
->command
== TODO_REWORD
&&
4760 !repo_get_oid(r
, "HEAD", &oid
) &&
4761 (oideq(&item
->commit
->object
.oid
, &oid
) ||
4762 (opts
->have_squash_onto
&&
4763 oideq(&opts
->squash_onto
, &oid
))))
4766 return res
| error_with_patch(r
, item
->commit
,
4767 arg
, item
->arg_len
, opts
,
4770 } else if (item
->command
== TODO_EXEC
) {
4771 char *end_of_arg
= (char *)(arg
+ item
->arg_len
);
4772 int saved
= *end_of_arg
;
4777 res
= do_exec(r
, arg
);
4778 *end_of_arg
= saved
;
4781 if (opts
->reschedule_failed_exec
)
4785 } else if (item
->command
== TODO_LABEL
) {
4786 if ((res
= do_label(r
, arg
, item
->arg_len
)))
4788 } else if (item
->command
== TODO_RESET
) {
4789 if ((res
= do_reset(r
, arg
, item
->arg_len
, opts
)))
4791 } else if (item
->command
== TODO_MERGE
) {
4792 if ((res
= do_merge(r
, item
->commit
, arg
, item
->arg_len
,
4793 item
->flags
, &check_todo
, opts
)) < 0)
4795 else if (item
->commit
)
4796 record_in_rewritten(&item
->commit
->object
.oid
,
4797 peek_command(todo_list
, 1));
4799 /* failed with merge conflicts */
4800 return error_with_patch(r
, item
->commit
,
4803 } else if (item
->command
== TODO_UPDATE_REF
) {
4804 struct strbuf ref
= STRBUF_INIT
;
4805 strbuf_add(&ref
, arg
, item
->arg_len
);
4806 if ((res
= do_update_ref(r
, ref
.buf
)))
4808 strbuf_release(&ref
);
4809 } else if (!is_noop(item
->command
))
4810 return error(_("unknown command %d"), item
->command
);
4813 advise(_(rescheduled_advice
),
4814 get_item_line_length(todo_list
,
4815 todo_list
->current
),
4816 get_item_line(todo_list
, todo_list
->current
));
4817 todo_list
->current
--;
4818 if (save_todo(todo_list
, opts
))
4821 return error_with_patch(r
,
4825 } else if (is_rebase_i(opts
) && check_todo
&& !res
&&
4826 reread_todo_if_changed(r
, todo_list
, opts
)) {
4830 todo_list
->current
++;
4835 if (is_rebase_i(opts
)) {
4836 struct strbuf head_ref
= STRBUF_INIT
, buf
= STRBUF_INIT
;
4839 /* Stopped in the middle, as planned? */
4840 if (todo_list
->current
< todo_list
->nr
)
4843 if (read_oneliner(&head_ref
, rebase_path_head_name(), 0) &&
4844 starts_with(head_ref
.buf
, "refs/")) {
4846 struct object_id head
, orig
;
4849 if (repo_get_oid(r
, "HEAD", &head
)) {
4850 res
= error(_("cannot read HEAD"));
4852 strbuf_release(&head_ref
);
4853 strbuf_release(&buf
);
4856 if (!read_oneliner(&buf
, rebase_path_orig_head(), 0) ||
4857 get_oid_hex(buf
.buf
, &orig
)) {
4858 res
= error(_("could not read orig-head"));
4859 goto cleanup_head_ref
;
4862 if (!read_oneliner(&buf
, rebase_path_onto(), 0)) {
4863 res
= error(_("could not read 'onto'"));
4864 goto cleanup_head_ref
;
4866 msg
= reflog_message(opts
, "finish", "%s onto %s",
4867 head_ref
.buf
, buf
.buf
);
4868 if (update_ref(msg
, head_ref
.buf
, &head
, &orig
,
4869 REF_NO_DEREF
, UPDATE_REFS_MSG_ON_ERR
)) {
4870 res
= error(_("could not update %s"),
4872 goto cleanup_head_ref
;
4874 msg
= reflog_message(opts
, "finish", "returning to %s",
4876 if (create_symref("HEAD", head_ref
.buf
, msg
)) {
4877 res
= error(_("could not update HEAD to %s"),
4879 goto cleanup_head_ref
;
4884 if (opts
->verbose
) {
4885 struct rev_info log_tree_opt
;
4886 struct object_id orig
, head
;
4888 memset(&log_tree_opt
, 0, sizeof(log_tree_opt
));
4889 repo_init_revisions(r
, &log_tree_opt
, NULL
);
4890 log_tree_opt
.diff
= 1;
4891 log_tree_opt
.diffopt
.output_format
=
4892 DIFF_FORMAT_DIFFSTAT
;
4893 log_tree_opt
.disable_stdin
= 1;
4895 if (read_oneliner(&buf
, rebase_path_orig_head(), 0) &&
4896 !repo_get_oid(r
, buf
.buf
, &orig
) &&
4897 !repo_get_oid(r
, "HEAD", &head
)) {
4898 diff_tree_oid(&orig
, &head
, "",
4899 &log_tree_opt
.diffopt
);
4900 log_tree_diff_flush(&log_tree_opt
);
4902 release_revisions(&log_tree_opt
);
4904 flush_rewritten_pending();
4905 if (!stat(rebase_path_rewritten_list(), &st
) &&
4907 struct child_process child
= CHILD_PROCESS_INIT
;
4908 struct run_hooks_opt hook_opt
= RUN_HOOKS_OPT_INIT
;
4910 child
.in
= open(rebase_path_rewritten_list(), O_RDONLY
);
4912 strvec_push(&child
.args
, "notes");
4913 strvec_push(&child
.args
, "copy");
4914 strvec_push(&child
.args
, "--for-rewrite=rebase");
4915 /* we don't care if this copying failed */
4916 run_command(&child
);
4918 hook_opt
.path_to_stdin
= rebase_path_rewritten_list();
4919 strvec_push(&hook_opt
.args
, "rebase");
4920 run_hooks_opt("post-rewrite", &hook_opt
);
4922 apply_autostash(rebase_path_autostash());
4928 _("Successfully rebased and updated %s.\n"),
4932 strbuf_release(&buf
);
4933 strbuf_release(&head_ref
);
4935 if (do_update_refs(r
, opts
->quiet
))
4940 * Sequence of picks finished successfully; cleanup by
4941 * removing the .git/sequencer directory
4943 return sequencer_remove_state(opts
);
4946 static int continue_single_pick(struct repository
*r
, struct replay_opts
*opts
)
4948 struct child_process cmd
= CHILD_PROCESS_INIT
;
4950 if (!refs_ref_exists(get_main_ref_store(r
), "CHERRY_PICK_HEAD") &&
4951 !refs_ref_exists(get_main_ref_store(r
), "REVERT_HEAD"))
4952 return error(_("no cherry-pick or revert in progress"));
4955 strvec_push(&cmd
.args
, "commit");
4958 * continue_single_pick() handles the case of recovering from a
4959 * conflict. should_edit() doesn't handle that case; for a conflict,
4960 * we want to edit if the user asked for it, or if they didn't specify
4961 * and stdin is a tty.
4963 if (!opts
->edit
|| (opts
->edit
< 0 && !isatty(0)))
4965 * Include --cleanup=strip as well because we don't want the
4966 * "# Conflicts:" messages.
4968 strvec_pushl(&cmd
.args
, "--no-edit", "--cleanup=strip", NULL
);
4970 return run_command(&cmd
);
4973 static int commit_staged_changes(struct repository
*r
,
4974 struct replay_opts
*opts
,
4975 struct todo_list
*todo_list
)
4977 unsigned int flags
= ALLOW_EMPTY
| EDIT_MSG
;
4978 unsigned int final_fixup
= 0, is_clean
;
4980 if (has_unstaged_changes(r
, 1))
4981 return error(_("cannot rebase: You have unstaged changes."));
4983 is_clean
= !has_uncommitted_changes(r
, 0);
4985 if (file_exists(rebase_path_amend())) {
4986 struct strbuf rev
= STRBUF_INIT
;
4987 struct object_id head
, to_amend
;
4989 if (repo_get_oid(r
, "HEAD", &head
))
4990 return error(_("cannot amend non-existing commit"));
4991 if (!read_oneliner(&rev
, rebase_path_amend(), 0))
4992 return error(_("invalid file: '%s'"), rebase_path_amend());
4993 if (get_oid_hex(rev
.buf
, &to_amend
))
4994 return error(_("invalid contents: '%s'"),
4995 rebase_path_amend());
4996 if (!is_clean
&& !oideq(&head
, &to_amend
))
4997 return error(_("\nYou have uncommitted changes in your "
4998 "working tree. Please, commit them\n"
4999 "first and then run 'git rebase "
5000 "--continue' again."));
5002 * When skipping a failed fixup/squash, we need to edit the
5003 * commit message, the current fixup list and count, and if it
5004 * was the last fixup/squash in the chain, we need to clean up
5005 * the commit message and if there was a squash, let the user
5008 if (!is_clean
|| !opts
->current_fixup_count
)
5009 ; /* this is not the final fixup */
5010 else if (!oideq(&head
, &to_amend
) ||
5011 !file_exists(rebase_path_stopped_sha())) {
5012 /* was a final fixup or squash done manually? */
5013 if (!is_fixup(peek_command(todo_list
, 0))) {
5014 unlink(rebase_path_fixup_msg());
5015 unlink(rebase_path_squash_msg());
5016 unlink(rebase_path_current_fixups());
5017 strbuf_reset(&opts
->current_fixups
);
5018 opts
->current_fixup_count
= 0;
5021 /* we are in a fixup/squash chain */
5022 const char *p
= opts
->current_fixups
.buf
;
5023 int len
= opts
->current_fixups
.len
;
5025 opts
->current_fixup_count
--;
5027 BUG("Incorrect current_fixups:\n%s", p
);
5028 while (len
&& p
[len
- 1] != '\n')
5030 strbuf_setlen(&opts
->current_fixups
, len
);
5031 if (write_message(p
, len
, rebase_path_current_fixups(),
5033 return error(_("could not write file: '%s'"),
5034 rebase_path_current_fixups());
5037 * If a fixup/squash in a fixup/squash chain failed, the
5038 * commit message is already correct, no need to commit
5041 * Only if it is the final command in the fixup/squash
5042 * chain, and only if the chain is longer than a single
5043 * fixup/squash command (which was just skipped), do we
5044 * actually need to re-commit with a cleaned up commit
5047 if (opts
->current_fixup_count
> 0 &&
5048 !is_fixup(peek_command(todo_list
, 0))) {
5051 * If there was not a single "squash" in the
5052 * chain, we only need to clean up the commit
5053 * message, no need to bother the user with
5054 * opening the commit message in the editor.
5056 if (!starts_with(p
, "squash ") &&
5057 !strstr(p
, "\nsquash "))
5058 flags
= (flags
& ~EDIT_MSG
) | CLEANUP_MSG
;
5059 } else if (is_fixup(peek_command(todo_list
, 0))) {
5061 * We need to update the squash message to skip
5062 * the latest commit message.
5064 struct commit
*commit
;
5065 const char *path
= rebase_path_squash_msg();
5066 const char *encoding
= get_commit_output_encoding();
5068 if (parse_head(r
, &commit
) ||
5069 !(p
= repo_logmsg_reencode(r
, commit
, NULL
, encoding
)) ||
5070 write_message(p
, strlen(p
), path
, 0)) {
5071 repo_unuse_commit_buffer(r
, commit
, p
);
5072 return error(_("could not write file: "
5075 repo_unuse_commit_buffer(r
,
5080 strbuf_release(&rev
);
5085 if (refs_ref_exists(get_main_ref_store(r
),
5086 "CHERRY_PICK_HEAD") &&
5087 refs_delete_ref(get_main_ref_store(r
), "",
5088 "CHERRY_PICK_HEAD", NULL
, 0))
5089 return error(_("could not remove CHERRY_PICK_HEAD"));
5090 if (unlink(git_path_merge_msg(r
)) && errno
!= ENOENT
)
5091 return error_errno(_("could not remove '%s'"),
5092 git_path_merge_msg(r
));
5097 if (run_git_commit(final_fixup
? NULL
: rebase_path_message(),
5099 return error(_("could not commit staged changes."));
5100 unlink(rebase_path_amend());
5101 unlink(git_path_merge_head(r
));
5102 unlink(git_path_auto_merge(r
));
5104 unlink(rebase_path_fixup_msg());
5105 unlink(rebase_path_squash_msg());
5107 if (opts
->current_fixup_count
> 0) {
5109 * Whether final fixup or not, we just cleaned up the commit
5112 unlink(rebase_path_current_fixups());
5113 strbuf_reset(&opts
->current_fixups
);
5114 opts
->current_fixup_count
= 0;
5119 int sequencer_continue(struct repository
*r
, struct replay_opts
*opts
)
5121 struct todo_list todo_list
= TODO_LIST_INIT
;
5124 if (read_and_refresh_cache(r
, opts
))
5127 if (read_populate_opts(opts
))
5129 if (is_rebase_i(opts
)) {
5130 if ((res
= read_populate_todo(r
, &todo_list
, opts
)))
5131 goto release_todo_list
;
5133 if (file_exists(rebase_path_dropped())) {
5134 if ((res
= todo_list_check_against_backup(r
, &todo_list
)))
5135 goto release_todo_list
;
5137 unlink(rebase_path_dropped());
5140 opts
->reflog_message
= reflog_message(opts
, "continue", NULL
);
5141 if (commit_staged_changes(r
, opts
, &todo_list
)) {
5143 goto release_todo_list
;
5145 } else if (!file_exists(get_todo_path(opts
)))
5146 return continue_single_pick(r
, opts
);
5147 else if ((res
= read_populate_todo(r
, &todo_list
, opts
)))
5148 goto release_todo_list
;
5150 if (!is_rebase_i(opts
)) {
5151 /* Verify that the conflict has been resolved */
5152 if (refs_ref_exists(get_main_ref_store(r
),
5153 "CHERRY_PICK_HEAD") ||
5154 refs_ref_exists(get_main_ref_store(r
), "REVERT_HEAD")) {
5155 res
= continue_single_pick(r
, opts
);
5157 goto release_todo_list
;
5159 if (index_differs_from(r
, "HEAD", NULL
, 0)) {
5160 res
= error_dirty_index(r
, opts
);
5161 goto release_todo_list
;
5163 todo_list
.current
++;
5164 } else if (file_exists(rebase_path_stopped_sha())) {
5165 struct strbuf buf
= STRBUF_INIT
;
5166 struct object_id oid
;
5168 if (read_oneliner(&buf
, rebase_path_stopped_sha(),
5169 READ_ONELINER_SKIP_IF_EMPTY
) &&
5170 !get_oid_hex(buf
.buf
, &oid
))
5171 record_in_rewritten(&oid
, peek_command(&todo_list
, 0));
5172 strbuf_release(&buf
);
5175 res
= pick_commits(r
, &todo_list
, opts
);
5177 todo_list_release(&todo_list
);
5181 static int single_pick(struct repository
*r
,
5182 struct commit
*cmit
,
5183 struct replay_opts
*opts
)
5186 struct todo_item item
;
5188 item
.command
= opts
->action
== REPLAY_PICK
?
5189 TODO_PICK
: TODO_REVERT
;
5192 opts
->reflog_message
= sequencer_reflog_action(opts
);
5193 return do_pick_commit(r
, &item
, opts
, 0, &check_todo
);
5196 int sequencer_pick_revisions(struct repository
*r
,
5197 struct replay_opts
*opts
)
5199 struct todo_list todo_list
= TODO_LIST_INIT
;
5200 struct object_id oid
;
5204 if (read_and_refresh_cache(r
, opts
))
5207 for (i
= 0; i
< opts
->revs
->pending
.nr
; i
++) {
5208 struct object_id oid
;
5209 const char *name
= opts
->revs
->pending
.objects
[i
].name
;
5211 /* This happens when using --stdin. */
5215 if (!repo_get_oid(r
, name
, &oid
)) {
5216 if (!lookup_commit_reference_gently(r
, &oid
, 1)) {
5217 enum object_type type
= oid_object_info(r
,
5220 return error(_("%s: can't cherry-pick a %s"),
5221 name
, type_name(type
));
5224 return error(_("%s: bad revision"), name
);
5228 * If we were called as "git cherry-pick <commit>", just
5229 * cherry-pick/revert it, set CHERRY_PICK_HEAD /
5230 * REVERT_HEAD, and don't touch the sequencer state.
5231 * This means it is possible to cherry-pick in the middle
5232 * of a cherry-pick sequence.
5234 if (opts
->revs
->cmdline
.nr
== 1 &&
5235 opts
->revs
->cmdline
.rev
->whence
== REV_CMD_REV
&&
5236 opts
->revs
->no_walk
&&
5237 !opts
->revs
->cmdline
.rev
->flags
) {
5238 struct commit
*cmit
;
5239 if (prepare_revision_walk(opts
->revs
))
5240 return error(_("revision walk setup failed"));
5241 cmit
= get_revision(opts
->revs
);
5243 return error(_("empty commit set passed"));
5244 if (get_revision(opts
->revs
))
5245 BUG("unexpected extra commit from walk");
5246 return single_pick(r
, cmit
, opts
);
5250 * Start a new cherry-pick/ revert sequence; but
5251 * first, make sure that an existing one isn't in
5255 if (walk_revs_populate_todo(&todo_list
, opts
) ||
5256 create_seq_dir(r
) < 0)
5258 if (repo_get_oid(r
, "HEAD", &oid
) && (opts
->action
== REPLAY_REVERT
))
5259 return error(_("can't revert as initial commit"));
5260 if (save_head(oid_to_hex(&oid
)))
5262 if (save_opts(opts
))
5264 update_abort_safety_file();
5265 res
= pick_commits(r
, &todo_list
, opts
);
5266 todo_list_release(&todo_list
);
5270 void append_signoff(struct strbuf
*msgbuf
, size_t ignore_footer
, unsigned flag
)
5272 unsigned no_dup_sob
= flag
& APPEND_SIGNOFF_DEDUP
;
5273 struct strbuf sob
= STRBUF_INIT
;
5276 strbuf_addstr(&sob
, sign_off_header
);
5277 strbuf_addstr(&sob
, fmt_name(WANT_COMMITTER_IDENT
));
5278 strbuf_addch(&sob
, '\n');
5281 strbuf_complete_line(msgbuf
);
5284 * If the whole message buffer is equal to the sob, pretend that we
5285 * found a conforming footer with a matching sob
5287 if (msgbuf
->len
- ignore_footer
== sob
.len
&&
5288 !strncmp(msgbuf
->buf
, sob
.buf
, sob
.len
))
5291 has_footer
= has_conforming_footer(msgbuf
, &sob
, ignore_footer
);
5294 const char *append_newlines
= NULL
;
5295 size_t len
= msgbuf
->len
- ignore_footer
;
5299 * The buffer is completely empty. Leave foom for
5300 * the title and body to be filled in by the user.
5302 append_newlines
= "\n\n";
5303 } else if (len
== 1) {
5305 * Buffer contains a single newline. Add another
5306 * so that we leave room for the title and body.
5308 append_newlines
= "\n";
5309 } else if (msgbuf
->buf
[len
- 2] != '\n') {
5311 * Buffer ends with a single newline. Add another
5312 * so that there is an empty line between the message
5315 append_newlines
= "\n";
5316 } /* else, the buffer already ends with two newlines. */
5318 if (append_newlines
)
5319 strbuf_splice(msgbuf
, msgbuf
->len
- ignore_footer
, 0,
5320 append_newlines
, strlen(append_newlines
));
5323 if (has_footer
!= 3 && (!no_dup_sob
|| has_footer
!= 2))
5324 strbuf_splice(msgbuf
, msgbuf
->len
- ignore_footer
, 0,
5327 strbuf_release(&sob
);
5330 struct labels_entry
{
5331 struct hashmap_entry entry
;
5332 char label
[FLEX_ARRAY
];
5335 static int labels_cmp(const void *fndata UNUSED
,
5336 const struct hashmap_entry
*eptr
,
5337 const struct hashmap_entry
*entry_or_key
, const void *key
)
5339 const struct labels_entry
*a
, *b
;
5341 a
= container_of(eptr
, const struct labels_entry
, entry
);
5342 b
= container_of(entry_or_key
, const struct labels_entry
, entry
);
5344 return key
? strcmp(a
->label
, key
) : strcmp(a
->label
, b
->label
);
5347 struct string_entry
{
5348 struct oidmap_entry entry
;
5349 char string
[FLEX_ARRAY
];
5352 struct label_state
{
5353 struct oidmap commit2label
;
5354 struct hashmap labels
;
5358 static const char *label_oid(struct object_id
*oid
, const char *label
,
5359 struct label_state
*state
)
5361 struct labels_entry
*labels_entry
;
5362 struct string_entry
*string_entry
;
5363 struct object_id dummy
;
5366 string_entry
= oidmap_get(&state
->commit2label
, oid
);
5368 return string_entry
->string
;
5371 * For "uninteresting" commits, i.e. commits that are not to be
5372 * rebased, and which can therefore not be labeled, we use a unique
5373 * abbreviation of the commit name. This is slightly more complicated
5374 * than calling repo_find_unique_abbrev() because we also need to make
5375 * sure that the abbreviation does not conflict with any other
5378 * We disallow "interesting" commits to be labeled by a string that
5379 * is a valid full-length hash, to ensure that we always can find an
5380 * abbreviation for any uninteresting commit's names that does not
5381 * clash with any other label.
5383 strbuf_reset(&state
->buf
);
5387 strbuf_grow(&state
->buf
, GIT_MAX_HEXSZ
);
5388 label
= p
= state
->buf
.buf
;
5390 repo_find_unique_abbrev_r(the_repository
, p
, oid
,
5394 * We may need to extend the abbreviated hash so that there is
5395 * no conflicting label.
5397 if (hashmap_get_from_hash(&state
->labels
, strihash(p
), p
)) {
5398 size_t i
= strlen(p
) + 1;
5400 oid_to_hex_r(p
, oid
);
5401 for (; i
< the_hash_algo
->hexsz
; i
++) {
5404 if (!hashmap_get_from_hash(&state
->labels
,
5411 struct strbuf
*buf
= &state
->buf
;
5414 * Sanitize labels by replacing non-alpha-numeric characters
5415 * (including white-space ones) by dashes, as they might be
5416 * illegal in file names (and hence in ref names).
5418 * Note that we retain non-ASCII UTF-8 characters (identified
5419 * via the most significant bit). They should be all acceptable
5420 * in file names. We do not validate the UTF-8 here, that's not
5421 * the job of this function.
5423 for (; *label
; label
++)
5424 if ((*label
& 0x80) || isalnum(*label
))
5425 strbuf_addch(buf
, *label
);
5426 /* avoid leading dash and double-dashes */
5427 else if (buf
->len
&& buf
->buf
[buf
->len
- 1] != '-')
5428 strbuf_addch(buf
, '-');
5430 strbuf_addstr(buf
, "rev-");
5431 strbuf_add_unique_abbrev(buf
, oid
, default_abbrev
);
5435 if ((buf
->len
== the_hash_algo
->hexsz
&&
5436 !get_oid_hex(label
, &dummy
)) ||
5437 (buf
->len
== 1 && *label
== '#') ||
5438 hashmap_get_from_hash(&state
->labels
,
5439 strihash(label
), label
)) {
5441 * If the label already exists, or if the label is a
5442 * valid full OID, or the label is a '#' (which we use
5443 * as a separator between merge heads and oneline), we
5444 * append a dash and a number to make it unique.
5446 size_t len
= buf
->len
;
5448 for (i
= 2; ; i
++) {
5449 strbuf_setlen(buf
, len
);
5450 strbuf_addf(buf
, "-%d", i
);
5451 if (!hashmap_get_from_hash(&state
->labels
,
5461 FLEX_ALLOC_STR(labels_entry
, label
, label
);
5462 hashmap_entry_init(&labels_entry
->entry
, strihash(label
));
5463 hashmap_add(&state
->labels
, &labels_entry
->entry
);
5465 FLEX_ALLOC_STR(string_entry
, string
, label
);
5466 oidcpy(&string_entry
->entry
.oid
, oid
);
5467 oidmap_put(&state
->commit2label
, string_entry
);
5469 return string_entry
->string
;
5472 static int make_script_with_merges(struct pretty_print_context
*pp
,
5473 struct rev_info
*revs
, struct strbuf
*out
,
5476 int keep_empty
= flags
& TODO_LIST_KEEP_EMPTY
;
5477 int rebase_cousins
= flags
& TODO_LIST_REBASE_COUSINS
;
5478 int root_with_onto
= flags
& TODO_LIST_ROOT_WITH_ONTO
;
5479 int skipped_commit
= 0;
5480 struct strbuf buf
= STRBUF_INIT
, oneline
= STRBUF_INIT
;
5481 struct strbuf label
= STRBUF_INIT
;
5482 struct commit_list
*commits
= NULL
, **tail
= &commits
, *iter
;
5483 struct commit_list
*tips
= NULL
, **tips_tail
= &tips
;
5484 struct commit
*commit
;
5485 struct oidmap commit2todo
= OIDMAP_INIT
;
5486 struct string_entry
*entry
;
5487 struct oidset interesting
= OIDSET_INIT
, child_seen
= OIDSET_INIT
,
5488 shown
= OIDSET_INIT
;
5489 struct label_state state
= { OIDMAP_INIT
, { NULL
}, STRBUF_INIT
};
5491 int abbr
= flags
& TODO_LIST_ABBREVIATE_CMDS
;
5492 const char *cmd_pick
= abbr
? "p" : "pick",
5493 *cmd_label
= abbr
? "l" : "label",
5494 *cmd_reset
= abbr
? "t" : "reset",
5495 *cmd_merge
= abbr
? "m" : "merge";
5497 oidmap_init(&commit2todo
, 0);
5498 oidmap_init(&state
.commit2label
, 0);
5499 hashmap_init(&state
.labels
, labels_cmp
, NULL
, 0);
5500 strbuf_init(&state
.buf
, 32);
5502 if (revs
->cmdline
.nr
&& (revs
->cmdline
.rev
[0].flags
& BOTTOM
)) {
5503 struct labels_entry
*onto_label_entry
;
5504 struct object_id
*oid
= &revs
->cmdline
.rev
[0].item
->oid
;
5505 FLEX_ALLOC_STR(entry
, string
, "onto");
5506 oidcpy(&entry
->entry
.oid
, oid
);
5507 oidmap_put(&state
.commit2label
, entry
);
5509 FLEX_ALLOC_STR(onto_label_entry
, label
, "onto");
5510 hashmap_entry_init(&onto_label_entry
->entry
, strihash("onto"));
5511 hashmap_add(&state
.labels
, &onto_label_entry
->entry
);
5516 * - get onelines for all commits
5517 * - gather all branch tips (i.e. 2nd or later parents of merges)
5518 * - label all branch tips
5520 while ((commit
= get_revision(revs
))) {
5521 struct commit_list
*to_merge
;
5522 const char *p1
, *p2
;
5523 struct object_id
*oid
;
5526 tail
= &commit_list_insert(commit
, tail
)->next
;
5527 oidset_insert(&interesting
, &commit
->object
.oid
);
5529 is_empty
= is_original_commit_empty(commit
);
5530 if (!is_empty
&& (commit
->object
.flags
& PATCHSAME
)) {
5531 if (flags
& TODO_LIST_WARN_SKIPPED_CHERRY_PICKS
)
5532 warning(_("skipped previously applied commit %s"),
5533 short_commit_name(commit
));
5537 if (is_empty
&& !keep_empty
)
5540 strbuf_reset(&oneline
);
5541 pretty_print_commit(pp
, commit
, &oneline
);
5543 to_merge
= commit
->parents
? commit
->parents
->next
: NULL
;
5545 /* non-merge commit: easy case */
5547 strbuf_addf(&buf
, "%s %s %s", cmd_pick
,
5548 oid_to_hex(&commit
->object
.oid
),
5551 strbuf_addf(&buf
, " %c empty",
5554 FLEX_ALLOC_STR(entry
, string
, buf
.buf
);
5555 oidcpy(&entry
->entry
.oid
, &commit
->object
.oid
);
5556 oidmap_put(&commit2todo
, entry
);
5561 /* Create a label */
5562 strbuf_reset(&label
);
5563 if (skip_prefix(oneline
.buf
, "Merge ", &p1
) &&
5564 (p1
= strchr(p1
, '\'')) &&
5565 (p2
= strchr(++p1
, '\'')))
5566 strbuf_add(&label
, p1
, p2
- p1
);
5567 else if (skip_prefix(oneline
.buf
, "Merge pull request ",
5569 (p1
= strstr(p1
, " from ")))
5570 strbuf_addstr(&label
, p1
+ strlen(" from "));
5572 strbuf_addbuf(&label
, &oneline
);
5575 strbuf_addf(&buf
, "%s -C %s",
5576 cmd_merge
, oid_to_hex(&commit
->object
.oid
));
5578 /* label the tips of merged branches */
5579 for (; to_merge
; to_merge
= to_merge
->next
) {
5580 oid
= &to_merge
->item
->object
.oid
;
5581 strbuf_addch(&buf
, ' ');
5583 if (!oidset_contains(&interesting
, oid
)) {
5584 strbuf_addstr(&buf
, label_oid(oid
, NULL
,
5589 tips_tail
= &commit_list_insert(to_merge
->item
,
5592 strbuf_addstr(&buf
, label_oid(oid
, label
.buf
, &state
));
5594 strbuf_addf(&buf
, " # %s", oneline
.buf
);
5596 FLEX_ALLOC_STR(entry
, string
, buf
.buf
);
5597 oidcpy(&entry
->entry
.oid
, &commit
->object
.oid
);
5598 oidmap_put(&commit2todo
, entry
);
5601 advise_if_enabled(ADVICE_SKIPPED_CHERRY_PICKS
,
5602 _("use --reapply-cherry-picks to include skipped commits"));
5606 * - label branch points
5607 * - add HEAD to the branch tips
5609 for (iter
= commits
; iter
; iter
= iter
->next
) {
5610 struct commit_list
*parent
= iter
->item
->parents
;
5611 for (; parent
; parent
= parent
->next
) {
5612 struct object_id
*oid
= &parent
->item
->object
.oid
;
5613 if (!oidset_contains(&interesting
, oid
))
5615 if (oidset_insert(&child_seen
, oid
))
5616 label_oid(oid
, "branch-point", &state
);
5619 /* Add HEAD as implicit "tip of branch" */
5621 tips_tail
= &commit_list_insert(iter
->item
,
5626 * Third phase: output the todo list. This is a bit tricky, as we
5627 * want to avoid jumping back and forth between revisions. To
5628 * accomplish that goal, we walk backwards from the branch tips,
5629 * gathering commits not yet shown, reversing the list on the fly,
5630 * then outputting that list (labeling revisions as needed).
5632 strbuf_addf(out
, "%s onto\n", cmd_label
);
5633 for (iter
= tips
; iter
; iter
= iter
->next
) {
5634 struct commit_list
*list
= NULL
, *iter2
;
5636 commit
= iter
->item
;
5637 if (oidset_contains(&shown
, &commit
->object
.oid
))
5639 entry
= oidmap_get(&state
.commit2label
, &commit
->object
.oid
);
5642 strbuf_addf(out
, "\n%c Branch %s\n", comment_line_char
, entry
->string
);
5644 strbuf_addch(out
, '\n');
5646 while (oidset_contains(&interesting
, &commit
->object
.oid
) &&
5647 !oidset_contains(&shown
, &commit
->object
.oid
)) {
5648 commit_list_insert(commit
, &list
);
5649 if (!commit
->parents
) {
5653 commit
= commit
->parents
->item
;
5657 strbuf_addf(out
, "%s %s\n", cmd_reset
,
5658 rebase_cousins
|| root_with_onto
?
5659 "onto" : "[new root]");
5661 const char *to
= NULL
;
5663 entry
= oidmap_get(&state
.commit2label
,
5664 &commit
->object
.oid
);
5667 else if (!rebase_cousins
)
5668 to
= label_oid(&commit
->object
.oid
, NULL
,
5671 if (!to
|| !strcmp(to
, "onto"))
5672 strbuf_addf(out
, "%s onto\n", cmd_reset
);
5674 strbuf_reset(&oneline
);
5675 pretty_print_commit(pp
, commit
, &oneline
);
5676 strbuf_addf(out
, "%s %s # %s\n",
5677 cmd_reset
, to
, oneline
.buf
);
5681 for (iter2
= list
; iter2
; iter2
= iter2
->next
) {
5682 struct object_id
*oid
= &iter2
->item
->object
.oid
;
5683 entry
= oidmap_get(&commit2todo
, oid
);
5684 /* only show if not already upstream */
5686 strbuf_addf(out
, "%s\n", entry
->string
);
5687 entry
= oidmap_get(&state
.commit2label
, oid
);
5689 strbuf_addf(out
, "%s %s\n",
5690 cmd_label
, entry
->string
);
5691 oidset_insert(&shown
, oid
);
5694 free_commit_list(list
);
5697 free_commit_list(commits
);
5698 free_commit_list(tips
);
5700 strbuf_release(&label
);
5701 strbuf_release(&oneline
);
5702 strbuf_release(&buf
);
5704 oidmap_free(&commit2todo
, 1);
5705 oidmap_free(&state
.commit2label
, 1);
5706 hashmap_clear_and_free(&state
.labels
, struct labels_entry
, entry
);
5707 strbuf_release(&state
.buf
);
5712 int sequencer_make_script(struct repository
*r
, struct strbuf
*out
, int argc
,
5713 const char **argv
, unsigned flags
)
5715 char *format
= NULL
;
5716 struct pretty_print_context pp
= {0};
5717 struct rev_info revs
;
5718 struct commit
*commit
;
5719 int keep_empty
= flags
& TODO_LIST_KEEP_EMPTY
;
5720 const char *insn
= flags
& TODO_LIST_ABBREVIATE_CMDS
? "p" : "pick";
5721 int rebase_merges
= flags
& TODO_LIST_REBASE_MERGES
;
5722 int reapply_cherry_picks
= flags
& TODO_LIST_REAPPLY_CHERRY_PICKS
;
5723 int skipped_commit
= 0;
5726 repo_init_revisions(r
, &revs
, NULL
);
5727 revs
.verbose_header
= 1;
5729 revs
.max_parents
= 1;
5730 revs
.cherry_mark
= !reapply_cherry_picks
;
5733 revs
.right_only
= 1;
5734 revs
.sort_order
= REV_SORT_IN_GRAPH_ORDER
;
5735 revs
.topo_order
= 1;
5737 revs
.pretty_given
= 1;
5738 git_config_get_string("rebase.instructionFormat", &format
);
5739 if (!format
|| !*format
) {
5741 format
= xstrdup("%s");
5743 get_commit_format(format
, &revs
);
5745 pp
.fmt
= revs
.commit_format
;
5746 pp
.output_encoding
= get_log_output_encoding();
5748 if (setup_revisions(argc
, argv
, &revs
, NULL
) > 1) {
5749 ret
= error(_("make_script: unhandled options"));
5753 if (prepare_revision_walk(&revs
) < 0) {
5754 ret
= error(_("make_script: error preparing revisions"));
5758 if (rebase_merges
) {
5759 ret
= make_script_with_merges(&pp
, &revs
, out
, flags
);
5763 while ((commit
= get_revision(&revs
))) {
5764 int is_empty
= is_original_commit_empty(commit
);
5766 if (!is_empty
&& (commit
->object
.flags
& PATCHSAME
)) {
5767 if (flags
& TODO_LIST_WARN_SKIPPED_CHERRY_PICKS
)
5768 warning(_("skipped previously applied commit %s"),
5769 short_commit_name(commit
));
5773 if (is_empty
&& !keep_empty
)
5775 strbuf_addf(out
, "%s %s ", insn
,
5776 oid_to_hex(&commit
->object
.oid
));
5777 pretty_print_commit(&pp
, commit
, out
);
5779 strbuf_addf(out
, " %c empty", comment_line_char
);
5780 strbuf_addch(out
, '\n');
5783 advise_if_enabled(ADVICE_SKIPPED_CHERRY_PICKS
,
5784 _("use --reapply-cherry-picks to include skipped commits"));
5786 release_revisions(&revs
);
5791 * Add commands after pick and (series of) squash/fixup commands
5794 static void todo_list_add_exec_commands(struct todo_list
*todo_list
,
5795 struct string_list
*commands
)
5797 struct strbuf
*buf
= &todo_list
->buf
;
5798 size_t base_offset
= buf
->len
;
5799 int i
, insert
, nr
= 0, alloc
= 0;
5800 struct todo_item
*items
= NULL
, *base_items
= NULL
;
5802 CALLOC_ARRAY(base_items
, commands
->nr
);
5803 for (i
= 0; i
< commands
->nr
; i
++) {
5804 size_t command_len
= strlen(commands
->items
[i
].string
);
5806 strbuf_addstr(buf
, commands
->items
[i
].string
);
5807 strbuf_addch(buf
, '\n');
5809 base_items
[i
].command
= TODO_EXEC
;
5810 base_items
[i
].offset_in_buf
= base_offset
;
5811 base_items
[i
].arg_offset
= base_offset
;
5812 base_items
[i
].arg_len
= command_len
;
5814 base_offset
+= command_len
+ 1;
5818 * Insert <commands> after every pick. Here, fixup/squash chains
5819 * are considered part of the pick, so we insert the commands *after*
5820 * those chains if there are any.
5822 * As we insert the exec commands immediately after rearranging
5823 * any fixups and before the user edits the list, a fixup chain
5824 * can never contain comments (any comments are empty picks that
5825 * have been commented out because the user did not specify
5826 * --keep-empty). So, it is safe to insert an exec command
5827 * without looking at the command following a comment.
5830 for (i
= 0; i
< todo_list
->nr
; i
++) {
5831 enum todo_command command
= todo_list
->items
[i
].command
;
5832 if (insert
&& !is_fixup(command
)) {
5833 ALLOC_GROW(items
, nr
+ commands
->nr
, alloc
);
5834 COPY_ARRAY(items
+ nr
, base_items
, commands
->nr
);
5840 ALLOC_GROW(items
, nr
+ 1, alloc
);
5841 items
[nr
++] = todo_list
->items
[i
];
5843 if (command
== TODO_PICK
|| command
== TODO_MERGE
)
5847 /* insert or append final <commands> */
5849 ALLOC_GROW(items
, nr
+ commands
->nr
, alloc
);
5850 COPY_ARRAY(items
+ nr
, base_items
, commands
->nr
);
5855 FREE_AND_NULL(todo_list
->items
);
5856 todo_list
->items
= items
;
5858 todo_list
->alloc
= alloc
;
5861 static void todo_list_to_strbuf(struct repository
*r
, struct todo_list
*todo_list
,
5862 struct strbuf
*buf
, int num
, unsigned flags
)
5864 struct todo_item
*item
;
5865 int i
, max
= todo_list
->nr
;
5867 if (num
> 0 && num
< max
)
5870 for (item
= todo_list
->items
, i
= 0; i
< max
; i
++, item
++) {
5873 /* if the item is not a command write it and continue */
5874 if (item
->command
>= TODO_COMMENT
) {
5875 strbuf_addf(buf
, "%.*s\n", item
->arg_len
,
5876 todo_item_get_arg(todo_list
, item
));
5880 /* add command to the buffer */
5881 cmd
= command_to_char(item
->command
);
5882 if ((flags
& TODO_LIST_ABBREVIATE_CMDS
) && cmd
)
5883 strbuf_addch(buf
, cmd
);
5885 strbuf_addstr(buf
, command_to_string(item
->command
));
5889 const char *oid
= flags
& TODO_LIST_SHORTEN_IDS
?
5890 short_commit_name(item
->commit
) :
5891 oid_to_hex(&item
->commit
->object
.oid
);
5893 if (item
->command
== TODO_FIXUP
) {
5894 if (item
->flags
& TODO_EDIT_FIXUP_MSG
)
5895 strbuf_addstr(buf
, " -c");
5896 else if (item
->flags
& TODO_REPLACE_FIXUP_MSG
) {
5897 strbuf_addstr(buf
, " -C");
5901 if (item
->command
== TODO_MERGE
) {
5902 if (item
->flags
& TODO_EDIT_MERGE_MSG
)
5903 strbuf_addstr(buf
, " -c");
5905 strbuf_addstr(buf
, " -C");
5908 strbuf_addf(buf
, " %s", oid
);
5911 /* add all the rest */
5913 strbuf_addch(buf
, '\n');
5915 strbuf_addf(buf
, " %.*s\n", item
->arg_len
,
5916 todo_item_get_arg(todo_list
, item
));
5920 int todo_list_write_to_file(struct repository
*r
, struct todo_list
*todo_list
,
5921 const char *file
, const char *shortrevisions
,
5922 const char *shortonto
, int num
, unsigned flags
)
5925 struct strbuf buf
= STRBUF_INIT
;
5927 todo_list_to_strbuf(r
, todo_list
, &buf
, num
, flags
);
5928 if (flags
& TODO_LIST_APPEND_TODO_HELP
)
5929 append_todo_help(count_commands(todo_list
),
5930 shortrevisions
, shortonto
, &buf
);
5932 res
= write_message(buf
.buf
, buf
.len
, file
, 0);
5933 strbuf_release(&buf
);
5938 /* skip picking commits whose parents are unchanged */
5939 static int skip_unnecessary_picks(struct repository
*r
,
5940 struct todo_list
*todo_list
,
5941 struct object_id
*base_oid
)
5943 struct object_id
*parent_oid
;
5946 for (i
= 0; i
< todo_list
->nr
; i
++) {
5947 struct todo_item
*item
= todo_list
->items
+ i
;
5949 if (item
->command
>= TODO_NOOP
)
5951 if (item
->command
!= TODO_PICK
)
5953 if (repo_parse_commit(r
, item
->commit
)) {
5954 return error(_("could not parse commit '%s'"),
5955 oid_to_hex(&item
->commit
->object
.oid
));
5957 if (!item
->commit
->parents
)
5958 break; /* root commit */
5959 if (item
->commit
->parents
->next
)
5960 break; /* merge commit */
5961 parent_oid
= &item
->commit
->parents
->item
->object
.oid
;
5962 if (!oideq(parent_oid
, base_oid
))
5964 oidcpy(base_oid
, &item
->commit
->object
.oid
);
5967 const char *done_path
= rebase_path_done();
5969 if (todo_list_write_to_file(r
, todo_list
, done_path
, NULL
, NULL
, i
, 0)) {
5970 error_errno(_("could not write to '%s'"), done_path
);
5974 MOVE_ARRAY(todo_list
->items
, todo_list
->items
+ i
, todo_list
->nr
- i
);
5976 todo_list
->current
= 0;
5977 todo_list
->done_nr
+= i
;
5979 if (is_fixup(peek_command(todo_list
, 0)))
5980 record_in_rewritten(base_oid
, peek_command(todo_list
, 0));
5986 struct todo_add_branch_context
{
5987 struct todo_item
*items
;
5991 struct commit
*commit
;
5992 struct string_list refs_to_oids
;
5995 static int add_decorations_to_list(const struct commit
*commit
,
5996 struct todo_add_branch_context
*ctx
)
5998 const struct name_decoration
*decoration
= get_name_decoration(&commit
->object
);
5999 const char *head_ref
= resolve_ref_unsafe("HEAD",
6000 RESOLVE_REF_READING
,
6004 while (decoration
) {
6005 struct todo_item
*item
;
6007 size_t base_offset
= ctx
->buf
->len
;
6010 * If the branch is the current HEAD, then it will be
6011 * updated by the default rebase behavior.
6013 if (head_ref
&& !strcmp(head_ref
, decoration
->name
)) {
6014 decoration
= decoration
->next
;
6018 ALLOC_GROW(ctx
->items
,
6021 item
= &ctx
->items
[ctx
->items_nr
];
6022 memset(item
, 0, sizeof(*item
));
6024 /* If the branch is checked out, then leave a comment instead. */
6025 if ((path
= branch_checked_out(decoration
->name
))) {
6026 item
->command
= TODO_COMMENT
;
6027 strbuf_addf(ctx
->buf
, "# Ref %s checked out at '%s'\n",
6028 decoration
->name
, path
);
6030 struct string_list_item
*sti
;
6031 item
->command
= TODO_UPDATE_REF
;
6032 strbuf_addf(ctx
->buf
, "%s\n", decoration
->name
);
6034 sti
= string_list_insert(&ctx
->refs_to_oids
,
6036 sti
->util
= init_update_ref_record(decoration
->name
);
6039 item
->offset_in_buf
= base_offset
;
6040 item
->arg_offset
= base_offset
;
6041 item
->arg_len
= ctx
->buf
->len
- base_offset
;
6044 decoration
= decoration
->next
;
6051 * For each 'pick' command, find out if the commit has a decoration in
6052 * refs/heads/. If so, then add a 'label for-update-refs/' command.
6054 static int todo_list_add_update_ref_commands(struct todo_list
*todo_list
)
6057 static struct string_list decorate_refs_exclude
= STRING_LIST_INIT_NODUP
;
6058 static struct string_list decorate_refs_exclude_config
= STRING_LIST_INIT_NODUP
;
6059 static struct string_list decorate_refs_include
= STRING_LIST_INIT_NODUP
;
6060 struct decoration_filter decoration_filter
= {
6061 .include_ref_pattern
= &decorate_refs_include
,
6062 .exclude_ref_pattern
= &decorate_refs_exclude
,
6063 .exclude_ref_config_pattern
= &decorate_refs_exclude_config
,
6065 struct todo_add_branch_context ctx
= {
6066 .buf
= &todo_list
->buf
,
6067 .refs_to_oids
= STRING_LIST_INIT_DUP
,
6070 ctx
.items_alloc
= 2 * todo_list
->nr
+ 1;
6071 ALLOC_ARRAY(ctx
.items
, ctx
.items_alloc
);
6073 string_list_append(&decorate_refs_include
, "refs/heads/");
6074 load_ref_decorations(&decoration_filter
, 0);
6076 for (i
= 0; i
< todo_list
->nr
; ) {
6077 struct todo_item
*item
= &todo_list
->items
[i
];
6079 /* insert ith item into new list */
6080 ALLOC_GROW(ctx
.items
,
6084 ctx
.items
[ctx
.items_nr
++] = todo_list
->items
[i
++];
6087 ctx
.commit
= item
->commit
;
6088 add_decorations_to_list(item
->commit
, &ctx
);
6092 res
= write_update_refs_state(&ctx
.refs_to_oids
);
6094 string_list_clear(&ctx
.refs_to_oids
, 1);
6097 /* we failed, so clean up the new list. */
6102 free(todo_list
->items
);
6103 todo_list
->items
= ctx
.items
;
6104 todo_list
->nr
= ctx
.items_nr
;
6105 todo_list
->alloc
= ctx
.items_alloc
;
6110 int complete_action(struct repository
*r
, struct replay_opts
*opts
, unsigned flags
,
6111 const char *shortrevisions
, const char *onto_name
,
6112 struct commit
*onto
, const struct object_id
*orig_head
,
6113 struct string_list
*commands
, unsigned autosquash
,
6114 unsigned update_refs
,
6115 struct todo_list
*todo_list
)
6117 char shortonto
[GIT_MAX_HEXSZ
+ 1];
6118 const char *todo_file
= rebase_path_todo();
6119 struct todo_list new_todo
= TODO_LIST_INIT
;
6120 struct strbuf
*buf
= &todo_list
->buf
, buf2
= STRBUF_INIT
;
6121 struct object_id oid
= onto
->object
.oid
;
6124 repo_find_unique_abbrev_r(r
, shortonto
, &oid
,
6127 if (buf
->len
== 0) {
6128 struct todo_item
*item
= append_new_todo(todo_list
);
6129 item
->command
= TODO_NOOP
;
6130 item
->commit
= NULL
;
6131 item
->arg_len
= item
->arg_offset
= item
->flags
= item
->offset_in_buf
= 0;
6134 if (update_refs
&& todo_list_add_update_ref_commands(todo_list
))
6137 if (autosquash
&& todo_list_rearrange_squash(todo_list
))
6141 todo_list_add_exec_commands(todo_list
, commands
);
6143 if (count_commands(todo_list
) == 0) {
6144 apply_autostash(rebase_path_autostash());
6145 sequencer_remove_state(opts
);
6147 return error(_("nothing to do"));
6150 res
= edit_todo_list(r
, todo_list
, &new_todo
, shortrevisions
,
6154 else if (res
== -2) {
6155 apply_autostash(rebase_path_autostash());
6156 sequencer_remove_state(opts
);
6159 } else if (res
== -3) {
6160 apply_autostash(rebase_path_autostash());
6161 sequencer_remove_state(opts
);
6162 todo_list_release(&new_todo
);
6164 return error(_("nothing to do"));
6165 } else if (res
== -4) {
6166 checkout_onto(r
, opts
, onto_name
, &onto
->object
.oid
, orig_head
);
6167 todo_list_release(&new_todo
);
6172 /* Expand the commit IDs */
6173 todo_list_to_strbuf(r
, &new_todo
, &buf2
, -1, 0);
6174 strbuf_swap(&new_todo
.buf
, &buf2
);
6175 strbuf_release(&buf2
);
6176 new_todo
.total_nr
-= new_todo
.nr
;
6177 if (todo_list_parse_insn_buffer(r
, new_todo
.buf
.buf
, &new_todo
) < 0)
6178 BUG("invalid todo list after expanding IDs:\n%s",
6181 if (opts
->allow_ff
&& skip_unnecessary_picks(r
, &new_todo
, &oid
)) {
6182 todo_list_release(&new_todo
);
6183 return error(_("could not skip unnecessary pick commands"));
6186 if (todo_list_write_to_file(r
, &new_todo
, todo_file
, NULL
, NULL
, -1,
6187 flags
& ~(TODO_LIST_SHORTEN_IDS
))) {
6188 todo_list_release(&new_todo
);
6189 return error_errno(_("could not write '%s'"), todo_file
);
6194 if (checkout_onto(r
, opts
, onto_name
, &oid
, orig_head
))
6197 if (require_clean_work_tree(r
, "rebase", "", 1, 1))
6200 todo_list_write_total_nr(&new_todo
);
6201 res
= pick_commits(r
, &new_todo
, opts
);
6204 todo_list_release(&new_todo
);
6209 struct subject2item_entry
{
6210 struct hashmap_entry entry
;
6212 char subject
[FLEX_ARRAY
];
6215 static int subject2item_cmp(const void *fndata UNUSED
,
6216 const struct hashmap_entry
*eptr
,
6217 const struct hashmap_entry
*entry_or_key
,
6220 const struct subject2item_entry
*a
, *b
;
6222 a
= container_of(eptr
, const struct subject2item_entry
, entry
);
6223 b
= container_of(entry_or_key
, const struct subject2item_entry
, entry
);
6225 return key
? strcmp(a
->subject
, key
) : strcmp(a
->subject
, b
->subject
);
6228 define_commit_slab(commit_todo_item
, struct todo_item
*);
6230 static int skip_fixupish(const char *subject
, const char **p
) {
6231 return skip_prefix(subject
, "fixup! ", p
) ||
6232 skip_prefix(subject
, "amend! ", p
) ||
6233 skip_prefix(subject
, "squash! ", p
);
6237 * Rearrange the todo list that has both "pick commit-id msg" and "pick
6238 * commit-id fixup!/squash! msg" in it so that the latter is put immediately
6239 * after the former, and change "pick" to "fixup"/"squash".
6241 * Note that if the config has specified a custom instruction format, each log
6242 * message will have to be retrieved from the commit (as the oneline in the
6243 * script cannot be trusted) in order to normalize the autosquash arrangement.
6245 int todo_list_rearrange_squash(struct todo_list
*todo_list
)
6247 struct hashmap subject2item
;
6248 int rearranged
= 0, *next
, *tail
, i
, nr
= 0, alloc
= 0;
6250 struct commit_todo_item commit_todo
;
6251 struct todo_item
*items
= NULL
;
6253 init_commit_todo_item(&commit_todo
);
6255 * The hashmap maps onelines to the respective todo list index.
6257 * If any items need to be rearranged, the next[i] value will indicate
6258 * which item was moved directly after the i'th.
6260 * In that case, last[i] will indicate the index of the latest item to
6261 * be moved to appear after the i'th.
6263 hashmap_init(&subject2item
, subject2item_cmp
, NULL
, todo_list
->nr
);
6264 ALLOC_ARRAY(next
, todo_list
->nr
);
6265 ALLOC_ARRAY(tail
, todo_list
->nr
);
6266 ALLOC_ARRAY(subjects
, todo_list
->nr
);
6267 for (i
= 0; i
< todo_list
->nr
; i
++) {
6268 struct strbuf buf
= STRBUF_INIT
;
6269 struct todo_item
*item
= todo_list
->items
+ i
;
6270 const char *commit_buffer
, *subject
, *p
;
6273 struct subject2item_entry
*entry
;
6275 next
[i
] = tail
[i
] = -1;
6276 if (!item
->commit
|| item
->command
== TODO_DROP
) {
6281 if (is_fixup(item
->command
)) {
6282 clear_commit_todo_item(&commit_todo
);
6283 return error(_("the script was already rearranged."));
6286 repo_parse_commit(the_repository
, item
->commit
);
6287 commit_buffer
= repo_logmsg_reencode(the_repository
,
6290 find_commit_subject(commit_buffer
, &subject
);
6291 format_subject(&buf
, subject
, " ");
6292 subject
= subjects
[i
] = strbuf_detach(&buf
, &subject_len
);
6293 repo_unuse_commit_buffer(the_repository
, item
->commit
,
6295 if (skip_fixupish(subject
, &p
)) {
6296 struct commit
*commit2
;
6301 if (!skip_fixupish(p
, &p
))
6305 entry
= hashmap_get_entry_from_hash(&subject2item
,
6307 struct subject2item_entry
,
6310 /* found by title */
6312 else if (!strchr(p
, ' ') &&
6314 lookup_commit_reference_by_name(p
)) &&
6315 *commit_todo_item_at(&commit_todo
, commit2
))
6316 /* found by commit name */
6317 i2
= *commit_todo_item_at(&commit_todo
, commit2
)
6320 /* copy can be a prefix of the commit subject */
6321 for (i2
= 0; i2
< i
; i2
++)
6323 starts_with(subjects
[i2
], p
))
6331 if (starts_with(subject
, "fixup!")) {
6332 todo_list
->items
[i
].command
= TODO_FIXUP
;
6333 } else if (starts_with(subject
, "amend!")) {
6334 todo_list
->items
[i
].command
= TODO_FIXUP
;
6335 todo_list
->items
[i
].flags
= TODO_REPLACE_FIXUP_MSG
;
6337 todo_list
->items
[i
].command
= TODO_SQUASH
;
6343 next
[i
] = next
[tail
[i2
]];
6347 } else if (!hashmap_get_from_hash(&subject2item
,
6348 strhash(subject
), subject
)) {
6349 FLEX_ALLOC_MEM(entry
, subject
, subject
, subject_len
);
6351 hashmap_entry_init(&entry
->entry
,
6352 strhash(entry
->subject
));
6353 hashmap_put(&subject2item
, &entry
->entry
);
6356 *commit_todo_item_at(&commit_todo
, item
->commit
) = item
;
6360 for (i
= 0; i
< todo_list
->nr
; i
++) {
6361 enum todo_command command
= todo_list
->items
[i
].command
;
6365 * Initially, all commands are 'pick's. If it is a
6366 * fixup or a squash now, we have rearranged it.
6368 if (is_fixup(command
))
6372 ALLOC_GROW(items
, nr
+ 1, alloc
);
6373 items
[nr
++] = todo_list
->items
[cur
];
6378 FREE_AND_NULL(todo_list
->items
);
6379 todo_list
->items
= items
;
6381 todo_list
->alloc
= alloc
;
6386 for (i
= 0; i
< todo_list
->nr
; i
++)
6389 hashmap_clear_and_free(&subject2item
, struct subject2item_entry
, entry
);
6391 clear_commit_todo_item(&commit_todo
);
6396 int sequencer_determine_whence(struct repository
*r
, enum commit_whence
*whence
)
6398 if (refs_ref_exists(get_main_ref_store(r
), "CHERRY_PICK_HEAD")) {
6399 struct object_id cherry_pick_head
, rebase_head
;
6401 if (file_exists(git_path_seq_dir()))
6402 *whence
= FROM_CHERRY_PICK_MULTI
;
6403 if (file_exists(rebase_path()) &&
6404 !repo_get_oid(r
, "REBASE_HEAD", &rebase_head
) &&
6405 !repo_get_oid(r
, "CHERRY_PICK_HEAD", &cherry_pick_head
) &&
6406 oideq(&rebase_head
, &cherry_pick_head
))
6407 *whence
= FROM_REBASE_PICK
;
6409 *whence
= FROM_CHERRY_PICK_SINGLE
;
6417 int sequencer_get_update_refs_state(const char *wt_dir
,
6418 struct string_list
*refs
)
6422 struct strbuf ref
= STRBUF_INIT
;
6423 struct strbuf hash
= STRBUF_INIT
;
6424 struct update_ref_record
*rec
= NULL
;
6426 char *path
= rebase_path_update_refs(wt_dir
);
6428 fp
= fopen(path
, "r");
6432 while (strbuf_getline(&ref
, fp
) != EOF
) {
6433 struct string_list_item
*item
;
6435 CALLOC_ARRAY(rec
, 1);
6437 if (strbuf_getline(&hash
, fp
) == EOF
||
6438 get_oid_hex(hash
.buf
, &rec
->before
)) {
6439 warning(_("update-refs file at '%s' is invalid"),
6445 if (strbuf_getline(&hash
, fp
) == EOF
||
6446 get_oid_hex(hash
.buf
, &rec
->after
)) {
6447 warning(_("update-refs file at '%s' is invalid"),
6453 item
= string_list_insert(refs
, ref
.buf
);
6463 strbuf_release(&ref
);
6464 strbuf_release(&hash
);