5 #include "object-store.h"
10 #include "run-command.h"
13 #include "cache-tree.h"
17 #include "merge-recursive.h"
19 #include "argv-array.h"
23 #include "wt-status.h"
25 #include "notes-utils.h"
27 #include "unpack-trees.h"
31 #include "commit-slab.h"
33 #include "commit-reach.h"
34 #include "rebase-interactive.h"
36 #define GIT_REFLOG_ACTION "GIT_REFLOG_ACTION"
38 static const char sign_off_header
[] = "Signed-off-by: ";
39 static const char cherry_picked_prefix
[] = "(cherry picked from commit ";
41 GIT_PATH_FUNC(git_path_commit_editmsg
, "COMMIT_EDITMSG")
43 GIT_PATH_FUNC(git_path_seq_dir
, "sequencer")
45 static GIT_PATH_FUNC(git_path_todo_file
, "sequencer/todo")
46 static GIT_PATH_FUNC(git_path_opts_file
, "sequencer/opts")
47 static GIT_PATH_FUNC(git_path_head_file
, "sequencer/head")
48 static GIT_PATH_FUNC(git_path_abort_safety_file
, "sequencer/abort-safety")
50 static GIT_PATH_FUNC(rebase_path
, "rebase-merge")
52 * The file containing rebase commands, comments, and empty lines.
53 * This file is created by "git rebase -i" then edited by the user. As
54 * the lines are processed, they are removed from the front of this
55 * file and written to the tail of 'done'.
57 GIT_PATH_FUNC(rebase_path_todo
, "rebase-merge/git-rebase-todo")
58 GIT_PATH_FUNC(rebase_path_todo_backup
, "rebase-merge/git-rebase-todo.backup")
61 * The rebase command lines that have already been processed. A line
62 * is moved here when it is first handled, before any associated user
65 static GIT_PATH_FUNC(rebase_path_done
, "rebase-merge/done")
67 * The file to keep track of how many commands were already processed (e.g.
70 static GIT_PATH_FUNC(rebase_path_msgnum
, "rebase-merge/msgnum")
72 * The file to keep track of how many commands are to be processed in total
73 * (e.g. for the prompt).
75 static GIT_PATH_FUNC(rebase_path_msgtotal
, "rebase-merge/end")
77 * The commit message that is planned to be used for any changes that
78 * need to be committed following a user interaction.
80 static GIT_PATH_FUNC(rebase_path_message
, "rebase-merge/message")
82 * The file into which is accumulated the suggested commit message for
83 * squash/fixup commands. When the first of a series of squash/fixups
84 * is seen, the file is created and the commit message from the
85 * previous commit and from the first squash/fixup commit are written
86 * to it. The commit message for each subsequent squash/fixup commit
87 * is appended to the file as it is processed.
89 static GIT_PATH_FUNC(rebase_path_squash_msg
, "rebase-merge/message-squash")
91 * If the current series of squash/fixups has not yet included a squash
92 * command, then this file exists and holds the commit message of the
93 * original "pick" commit. (If the series ends without a "squash"
94 * command, then this can be used as the commit message of the combined
95 * commit without opening the editor.)
97 static GIT_PATH_FUNC(rebase_path_fixup_msg
, "rebase-merge/message-fixup")
99 * This file contains the list fixup/squash commands that have been
100 * accumulated into message-fixup or message-squash so far.
102 static GIT_PATH_FUNC(rebase_path_current_fixups
, "rebase-merge/current-fixups")
104 * A script to set the GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, and
105 * GIT_AUTHOR_DATE that will be used for the commit that is currently
108 static GIT_PATH_FUNC(rebase_path_author_script
, "rebase-merge/author-script")
110 * When an "edit" rebase command is being processed, the SHA1 of the
111 * commit to be edited is recorded in this file. When "git rebase
112 * --continue" is executed, if there are any staged changes then they
113 * will be amended to the HEAD commit, but only provided the HEAD
114 * commit is still the commit to be edited. When any other rebase
115 * command is processed, this file is deleted.
117 static GIT_PATH_FUNC(rebase_path_amend
, "rebase-merge/amend")
119 * When we stop at a given patch via the "edit" command, this file contains
120 * the abbreviated commit name of the corresponding patch.
122 static GIT_PATH_FUNC(rebase_path_stopped_sha
, "rebase-merge/stopped-sha")
124 * For the post-rewrite hook, we make a list of rewritten commits and
125 * their new sha1s. The rewritten-pending list keeps the sha1s of
126 * commits that have been processed, but not committed yet,
127 * e.g. because they are waiting for a 'squash' command.
129 static GIT_PATH_FUNC(rebase_path_rewritten_list
, "rebase-merge/rewritten-list")
130 static GIT_PATH_FUNC(rebase_path_rewritten_pending
,
131 "rebase-merge/rewritten-pending")
134 * The path of the file containig the OID of the "squash onto" commit, i.e.
135 * the dummy commit used for `reset [new root]`.
137 static GIT_PATH_FUNC(rebase_path_squash_onto
, "rebase-merge/squash-onto")
140 * The path of the file listing refs that need to be deleted after the rebase
141 * finishes. This is used by the `label` command to record the need for cleanup.
143 static GIT_PATH_FUNC(rebase_path_refs_to_delete
, "rebase-merge/refs-to-delete")
146 * The following files are written by git-rebase just after parsing the
149 static GIT_PATH_FUNC(rebase_path_gpg_sign_opt
, "rebase-merge/gpg_sign_opt")
150 static GIT_PATH_FUNC(rebase_path_orig_head
, "rebase-merge/orig-head")
151 static GIT_PATH_FUNC(rebase_path_verbose
, "rebase-merge/verbose")
152 static GIT_PATH_FUNC(rebase_path_quiet
, "rebase-merge/quiet")
153 static GIT_PATH_FUNC(rebase_path_signoff
, "rebase-merge/signoff")
154 static GIT_PATH_FUNC(rebase_path_head_name
, "rebase-merge/head-name")
155 static GIT_PATH_FUNC(rebase_path_onto
, "rebase-merge/onto")
156 static GIT_PATH_FUNC(rebase_path_autostash
, "rebase-merge/autostash")
157 static GIT_PATH_FUNC(rebase_path_strategy
, "rebase-merge/strategy")
158 static GIT_PATH_FUNC(rebase_path_strategy_opts
, "rebase-merge/strategy_opts")
159 static GIT_PATH_FUNC(rebase_path_allow_rerere_autoupdate
, "rebase-merge/allow_rerere_autoupdate")
160 static GIT_PATH_FUNC(rebase_path_reschedule_failed_exec
, "rebase-merge/reschedule-failed-exec")
162 static int git_sequencer_config(const char *k
, const char *v
, void *cb
)
164 struct replay_opts
*opts
= cb
;
167 if (!strcmp(k
, "commit.cleanup")) {
170 status
= git_config_string(&s
, k
, v
);
174 if (!strcmp(s
, "verbatim")) {
175 opts
->default_msg_cleanup
= COMMIT_MSG_CLEANUP_NONE
;
176 opts
->explicit_cleanup
= 1;
177 } else if (!strcmp(s
, "whitespace")) {
178 opts
->default_msg_cleanup
= COMMIT_MSG_CLEANUP_SPACE
;
179 opts
->explicit_cleanup
= 1;
180 } else if (!strcmp(s
, "strip")) {
181 opts
->default_msg_cleanup
= COMMIT_MSG_CLEANUP_ALL
;
182 opts
->explicit_cleanup
= 1;
183 } else if (!strcmp(s
, "scissors")) {
184 opts
->default_msg_cleanup
= COMMIT_MSG_CLEANUP_SCISSORS
;
185 opts
->explicit_cleanup
= 1;
187 warning(_("invalid commit message cleanup mode '%s'"),
195 if (!strcmp(k
, "commit.gpgsign")) {
196 opts
->gpg_sign
= git_config_bool(k
, v
) ? xstrdup("") : NULL
;
200 status
= git_gpg_config(k
, v
, NULL
);
204 return git_diff_basic_config(k
, v
, NULL
);
207 void sequencer_init_config(struct replay_opts
*opts
)
209 opts
->default_msg_cleanup
= COMMIT_MSG_CLEANUP_NONE
;
210 git_config(git_sequencer_config
, opts
);
213 static inline int is_rebase_i(const struct replay_opts
*opts
)
215 return opts
->action
== REPLAY_INTERACTIVE_REBASE
;
218 static const char *get_dir(const struct replay_opts
*opts
)
220 if (is_rebase_i(opts
))
221 return rebase_path();
222 return git_path_seq_dir();
225 static const char *get_todo_path(const struct replay_opts
*opts
)
227 if (is_rebase_i(opts
))
228 return rebase_path_todo();
229 return git_path_todo_file();
233 * Returns 0 for non-conforming footer
234 * Returns 1 for conforming footer
235 * Returns 2 when sob exists within conforming footer
236 * Returns 3 when sob exists within conforming footer as last entry
238 static int has_conforming_footer(struct strbuf
*sb
, struct strbuf
*sob
,
239 size_t ignore_footer
)
241 struct process_trailer_options opts
= PROCESS_TRAILER_OPTIONS_INIT
;
242 struct trailer_info info
;
244 int found_sob
= 0, found_sob_last
= 0;
248 trailer_info_get(&info
, sb
->buf
, &opts
);
250 if (info
.trailer_start
== info
.trailer_end
)
253 for (i
= 0; i
< info
.trailer_nr
; i
++)
254 if (sob
&& !strncmp(info
.trailers
[i
], sob
->buf
, sob
->len
)) {
256 if (i
== info
.trailer_nr
- 1)
260 trailer_info_release(&info
);
269 static const char *gpg_sign_opt_quoted(struct replay_opts
*opts
)
271 static struct strbuf buf
= STRBUF_INIT
;
275 sq_quotef(&buf
, "-S%s", opts
->gpg_sign
);
279 int sequencer_remove_state(struct replay_opts
*opts
)
281 struct strbuf buf
= STRBUF_INIT
;
284 if (is_rebase_i(opts
) &&
285 strbuf_read_file(&buf
, rebase_path_refs_to_delete(), 0) > 0) {
288 char *eol
= strchr(p
, '\n');
291 if (delete_ref("(rebase -i) cleanup", p
, NULL
, 0) < 0) {
292 warning(_("could not delete '%s'"), p
);
301 free(opts
->gpg_sign
);
302 free(opts
->strategy
);
303 for (i
= 0; i
< opts
->xopts_nr
; i
++)
304 free(opts
->xopts
[i
]);
306 strbuf_release(&opts
->current_fixups
);
309 strbuf_addstr(&buf
, get_dir(opts
));
310 if (remove_dir_recursively(&buf
, 0))
311 ret
= error(_("could not remove '%s'"), buf
.buf
);
312 strbuf_release(&buf
);
317 static const char *action_name(const struct replay_opts
*opts
)
319 switch (opts
->action
) {
323 return N_("cherry-pick");
324 case REPLAY_INTERACTIVE_REBASE
:
325 return N_("rebase -i");
327 die(_("unknown action: %d"), opts
->action
);
330 struct commit_message
{
337 static const char *short_commit_name(struct commit
*commit
)
339 return find_unique_abbrev(&commit
->object
.oid
, DEFAULT_ABBREV
);
342 static int get_message(struct commit
*commit
, struct commit_message
*out
)
344 const char *abbrev
, *subject
;
347 out
->message
= logmsg_reencode(commit
, NULL
, get_commit_output_encoding());
348 abbrev
= short_commit_name(commit
);
350 subject_len
= find_commit_subject(out
->message
, &subject
);
352 out
->subject
= xmemdupz(subject
, subject_len
);
353 out
->label
= xstrfmt("%s... %s", abbrev
, out
->subject
);
354 out
->parent_label
= xstrfmt("parent of %s", out
->label
);
359 static void free_message(struct commit
*commit
, struct commit_message
*msg
)
361 free(msg
->parent_label
);
364 unuse_commit_buffer(commit
, msg
->message
);
367 static void print_advice(struct repository
*r
, int show_hint
,
368 struct replay_opts
*opts
)
370 char *msg
= getenv("GIT_CHERRY_PICK_HELP");
373 fprintf(stderr
, "%s\n", msg
);
375 * A conflict has occurred but the porcelain
376 * (typically rebase --interactive) wants to take care
377 * of the commit itself so remove CHERRY_PICK_HEAD
379 unlink(git_path_cherry_pick_head(r
));
385 advise(_("after resolving the conflicts, mark the corrected paths\n"
386 "with 'git add <paths>' or 'git rm <paths>'"));
388 advise(_("after resolving the conflicts, mark the corrected paths\n"
389 "with 'git add <paths>' or 'git rm <paths>'\n"
390 "and commit the result with 'git commit'"));
394 static int write_message(const void *buf
, size_t len
, const char *filename
,
397 struct lock_file msg_file
= LOCK_INIT
;
399 int msg_fd
= hold_lock_file_for_update(&msg_file
, filename
, 0);
401 return error_errno(_("could not lock '%s'"), filename
);
402 if (write_in_full(msg_fd
, buf
, len
) < 0) {
403 error_errno(_("could not write to '%s'"), filename
);
404 rollback_lock_file(&msg_file
);
407 if (append_eol
&& write(msg_fd
, "\n", 1) < 0) {
408 error_errno(_("could not write eol to '%s'"), filename
);
409 rollback_lock_file(&msg_file
);
412 if (commit_lock_file(&msg_file
) < 0)
413 return error(_("failed to finalize '%s'"), filename
);
419 * Reads a file that was presumably written by a shell script, i.e. with an
420 * end-of-line marker that needs to be stripped.
422 * Note that only the last end-of-line marker is stripped, consistent with the
423 * behavior of "$(cat path)" in a shell script.
425 * Returns 1 if the file was read, 0 if it could not be read or does not exist.
427 static int read_oneliner(struct strbuf
*buf
,
428 const char *path
, int skip_if_empty
)
430 int orig_len
= buf
->len
;
432 if (!file_exists(path
))
435 if (strbuf_read_file(buf
, path
, 0) < 0) {
436 warning_errno(_("could not read '%s'"), path
);
440 if (buf
->len
> orig_len
&& buf
->buf
[buf
->len
- 1] == '\n') {
441 if (--buf
->len
> orig_len
&& buf
->buf
[buf
->len
- 1] == '\r')
443 buf
->buf
[buf
->len
] = '\0';
446 if (skip_if_empty
&& buf
->len
== orig_len
)
452 static struct tree
*empty_tree(struct repository
*r
)
454 return lookup_tree(r
, the_hash_algo
->empty_tree
);
457 static int error_dirty_index(struct repository
*repo
, struct replay_opts
*opts
)
459 if (repo_read_index_unmerged(repo
))
460 return error_resolve_conflict(_(action_name(opts
)));
462 error(_("your local changes would be overwritten by %s."),
463 _(action_name(opts
)));
465 if (advice_commit_before_merge
)
466 advise(_("commit your changes or stash them to proceed."));
470 static void update_abort_safety_file(void)
472 struct object_id head
;
474 /* Do nothing on a single-pick */
475 if (!file_exists(git_path_seq_dir()))
478 if (!get_oid("HEAD", &head
))
479 write_file(git_path_abort_safety_file(), "%s", oid_to_hex(&head
));
481 write_file(git_path_abort_safety_file(), "%s", "");
484 static int fast_forward_to(struct repository
*r
,
485 const struct object_id
*to
,
486 const struct object_id
*from
,
488 struct replay_opts
*opts
)
490 struct ref_transaction
*transaction
;
491 struct strbuf sb
= STRBUF_INIT
;
492 struct strbuf err
= STRBUF_INIT
;
495 if (checkout_fast_forward(r
, from
, to
, 1))
496 return -1; /* the callee should have complained already */
498 strbuf_addf(&sb
, _("%s: fast-forward"), _(action_name(opts
)));
500 transaction
= ref_transaction_begin(&err
);
502 ref_transaction_update(transaction
, "HEAD",
503 to
, unborn
&& !is_rebase_i(opts
) ?
506 ref_transaction_commit(transaction
, &err
)) {
507 ref_transaction_free(transaction
);
508 error("%s", err
.buf
);
510 strbuf_release(&err
);
515 strbuf_release(&err
);
516 ref_transaction_free(transaction
);
517 update_abort_safety_file();
521 enum commit_msg_cleanup_mode
get_cleanup_mode(const char *cleanup_arg
,
524 if (!cleanup_arg
|| !strcmp(cleanup_arg
, "default"))
525 return use_editor
? COMMIT_MSG_CLEANUP_ALL
:
526 COMMIT_MSG_CLEANUP_SPACE
;
527 else if (!strcmp(cleanup_arg
, "verbatim"))
528 return COMMIT_MSG_CLEANUP_NONE
;
529 else if (!strcmp(cleanup_arg
, "whitespace"))
530 return COMMIT_MSG_CLEANUP_SPACE
;
531 else if (!strcmp(cleanup_arg
, "strip"))
532 return COMMIT_MSG_CLEANUP_ALL
;
533 else if (!strcmp(cleanup_arg
, "scissors"))
534 return use_editor
? COMMIT_MSG_CLEANUP_SCISSORS
:
535 COMMIT_MSG_CLEANUP_SPACE
;
537 die(_("Invalid cleanup mode %s"), cleanup_arg
);
541 * NB using int rather than enum cleanup_mode to stop clang's
542 * -Wtautological-constant-out-of-range-compare complaining that the comparison
545 static const char *describe_cleanup_mode(int cleanup_mode
)
547 static const char *modes
[] = { "whitespace",
552 if (cleanup_mode
< ARRAY_SIZE(modes
))
553 return modes
[cleanup_mode
];
555 BUG("invalid cleanup_mode provided (%d)", cleanup_mode
);
558 void append_conflicts_hint(struct index_state
*istate
,
559 struct strbuf
*msgbuf
, enum commit_msg_cleanup_mode cleanup_mode
)
563 if (cleanup_mode
== COMMIT_MSG_CLEANUP_SCISSORS
) {
564 strbuf_addch(msgbuf
, '\n');
565 wt_status_append_cut_line(msgbuf
);
566 strbuf_addch(msgbuf
, comment_line_char
);
569 strbuf_addch(msgbuf
, '\n');
570 strbuf_commented_addf(msgbuf
, "Conflicts:\n");
571 for (i
= 0; i
< istate
->cache_nr
;) {
572 const struct cache_entry
*ce
= istate
->cache
[i
++];
574 strbuf_commented_addf(msgbuf
, "\t%s\n", ce
->name
);
575 while (i
< istate
->cache_nr
&&
576 !strcmp(ce
->name
, istate
->cache
[i
]->name
))
582 static int do_recursive_merge(struct repository
*r
,
583 struct commit
*base
, struct commit
*next
,
584 const char *base_label
, const char *next_label
,
585 struct object_id
*head
, struct strbuf
*msgbuf
,
586 struct replay_opts
*opts
)
588 struct merge_options o
;
589 struct tree
*result
, *next_tree
, *base_tree
, *head_tree
;
592 struct lock_file index_lock
= LOCK_INIT
;
594 if (repo_hold_locked_index(r
, &index_lock
, LOCK_REPORT_ON_ERROR
) < 0)
599 init_merge_options(&o
, r
);
600 o
.ancestor
= base
? base_label
: "(empty tree)";
602 o
.branch2
= next
? next_label
: "(empty tree)";
603 if (is_rebase_i(opts
))
605 o
.show_rename_progress
= 1;
607 head_tree
= parse_tree_indirect(head
);
608 next_tree
= next
? get_commit_tree(next
) : empty_tree(r
);
609 base_tree
= base
? get_commit_tree(base
) : empty_tree(r
);
611 for (xopt
= opts
->xopts
; xopt
!= opts
->xopts
+ opts
->xopts_nr
; xopt
++)
612 parse_merge_opt(&o
, *xopt
);
614 clean
= merge_trees(&o
,
616 next_tree
, base_tree
, &result
);
617 if (is_rebase_i(opts
) && clean
<= 0)
618 fputs(o
.obuf
.buf
, stdout
);
619 strbuf_release(&o
.obuf
);
620 diff_warn_rename_limit("merge.renamelimit", o
.needed_rename_limit
, 0);
622 rollback_lock_file(&index_lock
);
626 if (write_locked_index(r
->index
, &index_lock
,
627 COMMIT_LOCK
| SKIP_IF_UNCHANGED
))
629 * TRANSLATORS: %s will be "revert", "cherry-pick" or
632 return error(_("%s: Unable to write new index file"),
633 _(action_name(opts
)));
636 append_conflicts_hint(r
->index
, msgbuf
,
637 opts
->default_msg_cleanup
);
642 static struct object_id
*get_cache_tree_oid(struct index_state
*istate
)
644 if (!istate
->cache_tree
)
645 istate
->cache_tree
= cache_tree();
647 if (!cache_tree_fully_valid(istate
->cache_tree
))
648 if (cache_tree_update(istate
, 0)) {
649 error(_("unable to update cache tree"));
653 return &istate
->cache_tree
->oid
;
656 static int is_index_unchanged(struct repository
*r
)
658 struct object_id head_oid
, *cache_tree_oid
;
659 struct commit
*head_commit
;
660 struct index_state
*istate
= r
->index
;
662 if (!resolve_ref_unsafe("HEAD", RESOLVE_REF_READING
, &head_oid
, NULL
))
663 return error(_("could not resolve HEAD commit"));
665 head_commit
= lookup_commit(r
, &head_oid
);
668 * If head_commit is NULL, check_commit, called from
669 * lookup_commit, would have indicated that head_commit is not
670 * a commit object already. parse_commit() will return failure
671 * without further complaints in such a case. Otherwise, if
672 * the commit is invalid, parse_commit() will complain. So
673 * there is nothing for us to say here. Just return failure.
675 if (parse_commit(head_commit
))
678 if (!(cache_tree_oid
= get_cache_tree_oid(istate
)))
681 return oideq(cache_tree_oid
, get_commit_tree_oid(head_commit
));
684 static int write_author_script(const char *message
)
686 struct strbuf buf
= STRBUF_INIT
;
691 if (!*message
|| starts_with(message
, "\n")) {
693 /* Missing 'author' line? */
694 unlink(rebase_path_author_script());
696 } else if (skip_prefix(message
, "author ", &message
))
698 else if ((eol
= strchr(message
, '\n')))
703 strbuf_addstr(&buf
, "GIT_AUTHOR_NAME='");
704 while (*message
&& *message
!= '\n' && *message
!= '\r')
705 if (skip_prefix(message
, " <", &message
))
707 else if (*message
!= '\'')
708 strbuf_addch(&buf
, *(message
++));
710 strbuf_addf(&buf
, "'\\%c'", *(message
++));
711 strbuf_addstr(&buf
, "'\nGIT_AUTHOR_EMAIL='");
712 while (*message
&& *message
!= '\n' && *message
!= '\r')
713 if (skip_prefix(message
, "> ", &message
))
715 else if (*message
!= '\'')
716 strbuf_addch(&buf
, *(message
++));
718 strbuf_addf(&buf
, "'\\%c'", *(message
++));
719 strbuf_addstr(&buf
, "'\nGIT_AUTHOR_DATE='@");
720 while (*message
&& *message
!= '\n' && *message
!= '\r')
721 if (*message
!= '\'')
722 strbuf_addch(&buf
, *(message
++));
724 strbuf_addf(&buf
, "'\\%c'", *(message
++));
725 strbuf_addch(&buf
, '\'');
726 res
= write_message(buf
.buf
, buf
.len
, rebase_path_author_script(), 1);
727 strbuf_release(&buf
);
732 * Take a series of KEY='VALUE' lines where VALUE part is
733 * sq-quoted, and append <KEY, VALUE> at the end of the string list
735 static int parse_key_value_squoted(char *buf
, struct string_list
*list
)
738 struct string_list_item
*item
;
740 char *cp
= strchr(buf
, '=');
742 np
= strchrnul(buf
, '\n');
743 return error(_("no key present in '%.*s'"),
744 (int) (np
- buf
), buf
);
746 np
= strchrnul(cp
, '\n');
748 item
= string_list_append(list
, buf
);
750 buf
= np
+ (*np
== '\n');
754 return error(_("unable to dequote value of '%s'"),
756 item
->util
= xstrdup(cp
);
762 * Reads and parses the state directory's "author-script" file, and sets name,
763 * email and date accordingly.
764 * Returns 0 on success, -1 if the file could not be parsed.
766 * The author script is of the format:
768 * GIT_AUTHOR_NAME='$author_name'
769 * GIT_AUTHOR_EMAIL='$author_email'
770 * GIT_AUTHOR_DATE='$author_date'
772 * where $author_name, $author_email and $author_date are quoted. We are strict
773 * with our parsing, as the file was meant to be eval'd in the now-removed
774 * git-am.sh/git-rebase--interactive.sh scripts, and thus if the file differs
775 * from what this function expects, it is better to bail out than to do
776 * something that the user does not expect.
778 int read_author_script(const char *path
, char **name
, char **email
, char **date
,
781 struct strbuf buf
= STRBUF_INIT
;
782 struct string_list kv
= STRING_LIST_INIT_DUP
;
783 int retval
= -1; /* assume failure */
784 int i
, name_i
= -2, email_i
= -2, date_i
= -2, err
= 0;
786 if (strbuf_read_file(&buf
, path
, 256) <= 0) {
787 strbuf_release(&buf
);
788 if (errno
== ENOENT
&& allow_missing
)
791 return error_errno(_("could not open '%s' for reading"),
795 if (parse_key_value_squoted(buf
.buf
, &kv
))
798 for (i
= 0; i
< kv
.nr
; i
++) {
799 if (!strcmp(kv
.items
[i
].string
, "GIT_AUTHOR_NAME")) {
801 name_i
= error(_("'GIT_AUTHOR_NAME' already given"));
804 } else if (!strcmp(kv
.items
[i
].string
, "GIT_AUTHOR_EMAIL")) {
806 email_i
= error(_("'GIT_AUTHOR_EMAIL' already given"));
809 } else if (!strcmp(kv
.items
[i
].string
, "GIT_AUTHOR_DATE")) {
811 date_i
= error(_("'GIT_AUTHOR_DATE' already given"));
815 err
= error(_("unknown variable '%s'"),
820 error(_("missing 'GIT_AUTHOR_NAME'"));
822 error(_("missing 'GIT_AUTHOR_EMAIL'"));
824 error(_("missing 'GIT_AUTHOR_DATE'"));
825 if (date_i
< 0 || email_i
< 0 || date_i
< 0 || err
)
827 *name
= kv
.items
[name_i
].util
;
828 *email
= kv
.items
[email_i
].util
;
829 *date
= kv
.items
[date_i
].util
;
832 string_list_clear(&kv
, !!retval
);
833 strbuf_release(&buf
);
838 * Read a GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL AND GIT_AUTHOR_DATE from a
839 * file with shell quoting into struct argv_array. Returns -1 on
840 * error, 0 otherwise.
842 static int read_env_script(struct argv_array
*env
)
844 char *name
, *email
, *date
;
846 if (read_author_script(rebase_path_author_script(),
847 &name
, &email
, &date
, 0))
850 argv_array_pushf(env
, "GIT_AUTHOR_NAME=%s", name
);
851 argv_array_pushf(env
, "GIT_AUTHOR_EMAIL=%s", email
);
852 argv_array_pushf(env
, "GIT_AUTHOR_DATE=%s", date
);
860 static char *get_author(const char *message
)
865 a
= find_commit_header(message
, "author", &len
);
867 return xmemdupz(a
, len
);
872 static const char staged_changes_advice
[] =
873 N_("you have staged changes in your working tree\n"
874 "If these changes are meant to be squashed into the previous commit, run:\n"
876 " git commit --amend %s\n"
878 "If they are meant to go into a new commit, run:\n"
882 "In both cases, once you're done, continue with:\n"
884 " git rebase --continue\n");
886 #define ALLOW_EMPTY (1<<0)
887 #define EDIT_MSG (1<<1)
888 #define AMEND_MSG (1<<2)
889 #define CLEANUP_MSG (1<<3)
890 #define VERIFY_MSG (1<<4)
891 #define CREATE_ROOT_COMMIT (1<<5)
893 static int run_command_silent_on_success(struct child_process
*cmd
)
895 struct strbuf buf
= STRBUF_INIT
;
898 cmd
->stdout_to_stderr
= 1;
899 rc
= pipe_command(cmd
,
905 fputs(buf
.buf
, stderr
);
906 strbuf_release(&buf
);
911 * If we are cherry-pick, and if the merge did not result in
912 * hand-editing, we will hit this commit and inherit the original
913 * author date and name.
915 * If we are revert, or if our cherry-pick results in a hand merge,
916 * we had better say that the current user is responsible for that.
918 * An exception is when run_git_commit() is called during an
919 * interactive rebase: in that case, we will want to retain the
922 static int run_git_commit(struct repository
*r
,
924 struct replay_opts
*opts
,
927 struct child_process cmd
= CHILD_PROCESS_INIT
;
931 if (is_rebase_i(opts
) && read_env_script(&cmd
.env_array
)) {
932 const char *gpg_opt
= gpg_sign_opt_quoted(opts
);
934 return error(_(staged_changes_advice
),
938 argv_array_push(&cmd
.args
, "commit");
940 if (!(flags
& VERIFY_MSG
))
941 argv_array_push(&cmd
.args
, "-n");
942 if ((flags
& AMEND_MSG
))
943 argv_array_push(&cmd
.args
, "--amend");
945 argv_array_pushf(&cmd
.args
, "-S%s", opts
->gpg_sign
);
947 argv_array_pushl(&cmd
.args
, "-F", defmsg
, NULL
);
948 else if (!(flags
& EDIT_MSG
))
949 argv_array_pushl(&cmd
.args
, "-C", "HEAD", NULL
);
950 if ((flags
& CLEANUP_MSG
))
951 argv_array_push(&cmd
.args
, "--cleanup=strip");
952 if ((flags
& EDIT_MSG
))
953 argv_array_push(&cmd
.args
, "-e");
954 else if (!(flags
& CLEANUP_MSG
) &&
955 !opts
->signoff
&& !opts
->record_origin
&&
956 !opts
->explicit_cleanup
)
957 argv_array_push(&cmd
.args
, "--cleanup=verbatim");
959 if ((flags
& ALLOW_EMPTY
))
960 argv_array_push(&cmd
.args
, "--allow-empty");
962 if (!(flags
& EDIT_MSG
))
963 argv_array_push(&cmd
.args
, "--allow-empty-message");
965 if (is_rebase_i(opts
) && !(flags
& EDIT_MSG
))
966 return run_command_silent_on_success(&cmd
);
968 return run_command(&cmd
);
971 static int rest_is_empty(const struct strbuf
*sb
, int start
)
976 /* Check if the rest is just whitespace and Signed-off-by's. */
977 for (i
= start
; i
< sb
->len
; i
++) {
978 nl
= memchr(sb
->buf
+ i
, '\n', sb
->len
- i
);
984 if (strlen(sign_off_header
) <= eol
- i
&&
985 starts_with(sb
->buf
+ i
, sign_off_header
)) {
990 if (!isspace(sb
->buf
[i
++]))
997 void cleanup_message(struct strbuf
*msgbuf
,
998 enum commit_msg_cleanup_mode cleanup_mode
, int verbose
)
1000 if (verbose
|| /* Truncate the message just before the diff, if any. */
1001 cleanup_mode
== COMMIT_MSG_CLEANUP_SCISSORS
)
1002 strbuf_setlen(msgbuf
, wt_status_locate_end(msgbuf
->buf
, msgbuf
->len
));
1003 if (cleanup_mode
!= COMMIT_MSG_CLEANUP_NONE
)
1004 strbuf_stripspace(msgbuf
, cleanup_mode
== COMMIT_MSG_CLEANUP_ALL
);
1008 * Find out if the message in the strbuf contains only whitespace and
1009 * Signed-off-by lines.
1011 int message_is_empty(const struct strbuf
*sb
,
1012 enum commit_msg_cleanup_mode cleanup_mode
)
1014 if (cleanup_mode
== COMMIT_MSG_CLEANUP_NONE
&& sb
->len
)
1016 return rest_is_empty(sb
, 0);
1020 * See if the user edited the message in the editor or left what
1021 * was in the template intact
1023 int template_untouched(const struct strbuf
*sb
, const char *template_file
,
1024 enum commit_msg_cleanup_mode cleanup_mode
)
1026 struct strbuf tmpl
= STRBUF_INIT
;
1029 if (cleanup_mode
== COMMIT_MSG_CLEANUP_NONE
&& sb
->len
)
1032 if (!template_file
|| strbuf_read_file(&tmpl
, template_file
, 0) <= 0)
1035 strbuf_stripspace(&tmpl
, cleanup_mode
== COMMIT_MSG_CLEANUP_ALL
);
1036 if (!skip_prefix(sb
->buf
, tmpl
.buf
, &start
))
1038 strbuf_release(&tmpl
);
1039 return rest_is_empty(sb
, start
- sb
->buf
);
1042 int update_head_with_reflog(const struct commit
*old_head
,
1043 const struct object_id
*new_head
,
1044 const char *action
, const struct strbuf
*msg
,
1047 struct ref_transaction
*transaction
;
1048 struct strbuf sb
= STRBUF_INIT
;
1053 strbuf_addstr(&sb
, action
);
1054 strbuf_addstr(&sb
, ": ");
1057 nl
= strchr(msg
->buf
, '\n');
1059 strbuf_add(&sb
, msg
->buf
, nl
+ 1 - msg
->buf
);
1061 strbuf_addbuf(&sb
, msg
);
1062 strbuf_addch(&sb
, '\n');
1065 transaction
= ref_transaction_begin(err
);
1067 ref_transaction_update(transaction
, "HEAD", new_head
,
1068 old_head
? &old_head
->object
.oid
: &null_oid
,
1070 ref_transaction_commit(transaction
, err
)) {
1073 ref_transaction_free(transaction
);
1074 strbuf_release(&sb
);
1079 static int run_rewrite_hook(const struct object_id
*oldoid
,
1080 const struct object_id
*newoid
)
1082 struct child_process proc
= CHILD_PROCESS_INIT
;
1083 const char *argv
[3];
1085 struct strbuf sb
= STRBUF_INIT
;
1087 argv
[0] = find_hook("post-rewrite");
1096 proc
.stdout_to_stderr
= 1;
1097 proc
.trace2_hook_name
= "post-rewrite";
1099 code
= start_command(&proc
);
1102 strbuf_addf(&sb
, "%s %s\n", oid_to_hex(oldoid
), oid_to_hex(newoid
));
1103 sigchain_push(SIGPIPE
, SIG_IGN
);
1104 write_in_full(proc
.in
, sb
.buf
, sb
.len
);
1106 strbuf_release(&sb
);
1107 sigchain_pop(SIGPIPE
);
1108 return finish_command(&proc
);
1111 void commit_post_rewrite(struct repository
*r
,
1112 const struct commit
*old_head
,
1113 const struct object_id
*new_head
)
1115 struct notes_rewrite_cfg
*cfg
;
1117 cfg
= init_copy_notes_for_rewrite("amend");
1119 /* we are amending, so old_head is not NULL */
1120 copy_note_for_rewrite(cfg
, &old_head
->object
.oid
, new_head
);
1121 finish_copy_notes_for_rewrite(r
, cfg
, "Notes added by 'git commit --amend'");
1123 run_rewrite_hook(&old_head
->object
.oid
, new_head
);
1126 static int run_prepare_commit_msg_hook(struct repository
*r
,
1130 struct argv_array hook_env
= ARGV_ARRAY_INIT
;
1134 name
= git_path_commit_editmsg();
1135 if (write_message(msg
->buf
, msg
->len
, name
, 0))
1138 argv_array_pushf(&hook_env
, "GIT_INDEX_FILE=%s", r
->index_file
);
1139 argv_array_push(&hook_env
, "GIT_EDITOR=:");
1141 ret
= run_hook_le(hook_env
.argv
, "prepare-commit-msg", name
,
1142 "commit", commit
, NULL
);
1144 ret
= run_hook_le(hook_env
.argv
, "prepare-commit-msg", name
,
1147 ret
= error(_("'prepare-commit-msg' hook failed"));
1148 argv_array_clear(&hook_env
);
1153 static const char implicit_ident_advice_noconfig
[] =
1154 N_("Your name and email address were configured automatically based\n"
1155 "on your username and hostname. Please check that they are accurate.\n"
1156 "You can suppress this message by setting them explicitly. Run the\n"
1157 "following command and follow the instructions in your editor to edit\n"
1158 "your configuration file:\n"
1160 " git config --global --edit\n"
1162 "After doing this, you may fix the identity used for this commit with:\n"
1164 " git commit --amend --reset-author\n");
1166 static const char implicit_ident_advice_config
[] =
1167 N_("Your name and email address were configured automatically based\n"
1168 "on your username and hostname. Please check that they are accurate.\n"
1169 "You can suppress this message by setting them explicitly:\n"
1171 " git config --global user.name \"Your Name\"\n"
1172 " git config --global user.email you@example.com\n"
1174 "After doing this, you may fix the identity used for this commit with:\n"
1176 " git commit --amend --reset-author\n");
1178 static const char *implicit_ident_advice(void)
1180 char *user_config
= expand_user_path("~/.gitconfig", 0);
1181 char *xdg_config
= xdg_config_home("config");
1182 int config_exists
= file_exists(user_config
) || file_exists(xdg_config
);
1188 return _(implicit_ident_advice_config
);
1190 return _(implicit_ident_advice_noconfig
);
1194 void print_commit_summary(struct repository
*r
,
1196 const struct object_id
*oid
,
1199 struct rev_info rev
;
1200 struct commit
*commit
;
1201 struct strbuf format
= STRBUF_INIT
;
1203 struct pretty_print_context pctx
= {0};
1204 struct strbuf author_ident
= STRBUF_INIT
;
1205 struct strbuf committer_ident
= STRBUF_INIT
;
1207 commit
= lookup_commit(r
, oid
);
1209 die(_("couldn't look up newly created commit"));
1210 if (parse_commit(commit
))
1211 die(_("could not parse newly created commit"));
1213 strbuf_addstr(&format
, "format:%h] %s");
1215 format_commit_message(commit
, "%an <%ae>", &author_ident
, &pctx
);
1216 format_commit_message(commit
, "%cn <%ce>", &committer_ident
, &pctx
);
1217 if (strbuf_cmp(&author_ident
, &committer_ident
)) {
1218 strbuf_addstr(&format
, "\n Author: ");
1219 strbuf_addbuf_percentquote(&format
, &author_ident
);
1221 if (flags
& SUMMARY_SHOW_AUTHOR_DATE
) {
1222 struct strbuf date
= STRBUF_INIT
;
1224 format_commit_message(commit
, "%ad", &date
, &pctx
);
1225 strbuf_addstr(&format
, "\n Date: ");
1226 strbuf_addbuf_percentquote(&format
, &date
);
1227 strbuf_release(&date
);
1229 if (!committer_ident_sufficiently_given()) {
1230 strbuf_addstr(&format
, "\n Committer: ");
1231 strbuf_addbuf_percentquote(&format
, &committer_ident
);
1232 if (advice_implicit_identity
) {
1233 strbuf_addch(&format
, '\n');
1234 strbuf_addstr(&format
, implicit_ident_advice());
1237 strbuf_release(&author_ident
);
1238 strbuf_release(&committer_ident
);
1240 repo_init_revisions(r
, &rev
, prefix
);
1241 setup_revisions(0, NULL
, &rev
, NULL
);
1244 rev
.diffopt
.output_format
=
1245 DIFF_FORMAT_SHORTSTAT
| DIFF_FORMAT_SUMMARY
;
1247 rev
.verbose_header
= 1;
1248 rev
.show_root_diff
= 1;
1249 get_commit_format(format
.buf
, &rev
);
1250 rev
.always_show_header
= 0;
1251 rev
.diffopt
.detect_rename
= DIFF_DETECT_RENAME
;
1252 rev
.diffopt
.break_opt
= 0;
1253 diff_setup_done(&rev
.diffopt
);
1255 head
= resolve_ref_unsafe("HEAD", 0, NULL
, NULL
);
1257 die_errno(_("unable to resolve HEAD after creating commit"));
1258 if (!strcmp(head
, "HEAD"))
1259 head
= _("detached HEAD");
1261 skip_prefix(head
, "refs/heads/", &head
);
1262 printf("[%s%s ", head
, (flags
& SUMMARY_INITIAL_COMMIT
) ?
1263 _(" (root-commit)") : "");
1265 if (!log_tree_commit(&rev
, commit
)) {
1266 rev
.always_show_header
= 1;
1267 rev
.use_terminator
= 1;
1268 log_tree_commit(&rev
, commit
);
1271 strbuf_release(&format
);
1274 static int parse_head(struct repository
*r
, struct commit
**head
)
1276 struct commit
*current_head
;
1277 struct object_id oid
;
1279 if (get_oid("HEAD", &oid
)) {
1280 current_head
= NULL
;
1282 current_head
= lookup_commit_reference(r
, &oid
);
1284 return error(_("could not parse HEAD"));
1285 if (!oideq(&oid
, ¤t_head
->object
.oid
)) {
1286 warning(_("HEAD %s is not a commit!"),
1289 if (parse_commit(current_head
))
1290 return error(_("could not parse HEAD commit"));
1292 *head
= current_head
;
1298 * Try to commit without forking 'git commit'. In some cases we need
1299 * to run 'git commit' to display an error message
1302 * -1 - error unable to commit
1304 * 1 - run 'git commit'
1306 static int try_to_commit(struct repository
*r
,
1307 struct strbuf
*msg
, const char *author
,
1308 struct replay_opts
*opts
, unsigned int flags
,
1309 struct object_id
*oid
)
1311 struct object_id tree
;
1312 struct commit
*current_head
= NULL
;
1313 struct commit_list
*parents
= NULL
;
1314 struct commit_extra_header
*extra
= NULL
;
1315 struct strbuf err
= STRBUF_INIT
;
1316 struct strbuf commit_msg
= STRBUF_INIT
;
1317 char *amend_author
= NULL
;
1318 const char *hook_commit
= NULL
;
1319 enum commit_msg_cleanup_mode cleanup
;
1322 if (parse_head(r
, ¤t_head
))
1325 if (flags
& AMEND_MSG
) {
1326 const char *exclude_gpgsig
[] = { "gpgsig", NULL
};
1327 const char *out_enc
= get_commit_output_encoding();
1328 const char *message
= logmsg_reencode(current_head
, NULL
,
1332 const char *orig_message
= NULL
;
1334 find_commit_subject(message
, &orig_message
);
1336 strbuf_addstr(msg
, orig_message
);
1337 hook_commit
= "HEAD";
1339 author
= amend_author
= get_author(message
);
1340 unuse_commit_buffer(current_head
, message
);
1342 res
= error(_("unable to parse commit author"));
1345 parents
= copy_commit_list(current_head
->parents
);
1346 extra
= read_commit_extra_headers(current_head
, exclude_gpgsig
);
1347 } else if (current_head
&&
1348 (!(flags
& CREATE_ROOT_COMMIT
) || (flags
& AMEND_MSG
))) {
1349 commit_list_insert(current_head
, &parents
);
1352 if (write_index_as_tree(&tree
, r
->index
, r
->index_file
, 0, NULL
)) {
1353 res
= error(_("git write-tree failed to write a tree"));
1357 if (!(flags
& ALLOW_EMPTY
) && oideq(current_head
?
1358 get_commit_tree_oid(current_head
) :
1359 the_hash_algo
->empty_tree
, &tree
)) {
1360 res
= 1; /* run 'git commit' to display error message */
1364 if (find_hook("prepare-commit-msg")) {
1365 res
= run_prepare_commit_msg_hook(r
, msg
, hook_commit
);
1368 if (strbuf_read_file(&commit_msg
, git_path_commit_editmsg(),
1370 res
= error_errno(_("unable to read commit message "
1372 git_path_commit_editmsg());
1378 if (flags
& CLEANUP_MSG
)
1379 cleanup
= COMMIT_MSG_CLEANUP_ALL
;
1380 else if ((opts
->signoff
|| opts
->record_origin
) &&
1381 !opts
->explicit_cleanup
)
1382 cleanup
= COMMIT_MSG_CLEANUP_SPACE
;
1384 cleanup
= opts
->default_msg_cleanup
;
1386 if (cleanup
!= COMMIT_MSG_CLEANUP_NONE
)
1387 strbuf_stripspace(msg
, cleanup
== COMMIT_MSG_CLEANUP_ALL
);
1388 if ((flags
& EDIT_MSG
) && message_is_empty(msg
, cleanup
)) {
1389 res
= 1; /* run 'git commit' to display error message */
1395 if (commit_tree_extended(msg
->buf
, msg
->len
, &tree
, parents
,
1396 oid
, author
, opts
->gpg_sign
, extra
)) {
1397 res
= error(_("failed to write commit object"));
1401 if (update_head_with_reflog(current_head
, oid
,
1402 getenv("GIT_REFLOG_ACTION"), msg
, &err
)) {
1403 res
= error("%s", err
.buf
);
1407 if (flags
& AMEND_MSG
)
1408 commit_post_rewrite(r
, current_head
, oid
);
1411 free_commit_extra_headers(extra
);
1412 strbuf_release(&err
);
1413 strbuf_release(&commit_msg
);
1419 static int do_commit(struct repository
*r
,
1420 const char *msg_file
, const char *author
,
1421 struct replay_opts
*opts
, unsigned int flags
)
1425 if (!(flags
& EDIT_MSG
) && !(flags
& VERIFY_MSG
)) {
1426 struct object_id oid
;
1427 struct strbuf sb
= STRBUF_INIT
;
1429 if (msg_file
&& strbuf_read_file(&sb
, msg_file
, 2048) < 0)
1430 return error_errno(_("unable to read commit message "
1434 res
= try_to_commit(r
, msg_file
? &sb
: NULL
,
1435 author
, opts
, flags
, &oid
);
1436 strbuf_release(&sb
);
1438 unlink(git_path_cherry_pick_head(r
));
1439 unlink(git_path_merge_msg(r
));
1440 if (!is_rebase_i(opts
))
1441 print_commit_summary(r
, NULL
, &oid
,
1442 SUMMARY_SHOW_AUTHOR_DATE
);
1447 return run_git_commit(r
, msg_file
, opts
, flags
);
1452 static int is_original_commit_empty(struct commit
*commit
)
1454 const struct object_id
*ptree_oid
;
1456 if (parse_commit(commit
))
1457 return error(_("could not parse commit %s"),
1458 oid_to_hex(&commit
->object
.oid
));
1459 if (commit
->parents
) {
1460 struct commit
*parent
= commit
->parents
->item
;
1461 if (parse_commit(parent
))
1462 return error(_("could not parse parent commit %s"),
1463 oid_to_hex(&parent
->object
.oid
));
1464 ptree_oid
= get_commit_tree_oid(parent
);
1466 ptree_oid
= the_hash_algo
->empty_tree
; /* commit is root */
1469 return oideq(ptree_oid
, get_commit_tree_oid(commit
));
1473 * Do we run "git commit" with "--allow-empty"?
1475 static int allow_empty(struct repository
*r
,
1476 struct replay_opts
*opts
,
1477 struct commit
*commit
)
1479 int index_unchanged
, empty_commit
;
1484 * (1) we do not allow empty at all and error out.
1486 * (2) we allow ones that were initially empty, but
1487 * forbid the ones that become empty;
1489 * (3) we allow both.
1491 if (!opts
->allow_empty
)
1492 return 0; /* let "git commit" barf as necessary */
1494 index_unchanged
= is_index_unchanged(r
);
1495 if (index_unchanged
< 0)
1496 return index_unchanged
;
1497 if (!index_unchanged
)
1498 return 0; /* we do not have to say --allow-empty */
1500 if (opts
->keep_redundant_commits
)
1503 empty_commit
= is_original_commit_empty(commit
);
1504 if (empty_commit
< 0)
1505 return empty_commit
;
1515 } todo_command_info
[] = {
1532 static const char *command_to_string(const enum todo_command command
)
1534 if (command
< TODO_COMMENT
)
1535 return todo_command_info
[command
].str
;
1536 die(_("unknown command: %d"), command
);
1539 static char command_to_char(const enum todo_command command
)
1541 if (command
< TODO_COMMENT
&& todo_command_info
[command
].c
)
1542 return todo_command_info
[command
].c
;
1543 return comment_line_char
;
1546 static int is_noop(const enum todo_command command
)
1548 return TODO_NOOP
<= command
;
1551 static int is_fixup(enum todo_command command
)
1553 return command
== TODO_FIXUP
|| command
== TODO_SQUASH
;
1556 /* Does this command create a (non-merge) commit? */
1557 static int is_pick_or_similar(enum todo_command command
)
1572 static int update_squash_messages(struct repository
*r
,
1573 enum todo_command command
,
1574 struct commit
*commit
,
1575 struct replay_opts
*opts
)
1577 struct strbuf buf
= STRBUF_INIT
;
1579 const char *message
, *body
;
1581 if (opts
->current_fixup_count
> 0) {
1582 struct strbuf header
= STRBUF_INIT
;
1585 if (strbuf_read_file(&buf
, rebase_path_squash_msg(), 9) <= 0)
1586 return error(_("could not read '%s'"),
1587 rebase_path_squash_msg());
1589 eol
= buf
.buf
[0] != comment_line_char
?
1590 buf
.buf
: strchrnul(buf
.buf
, '\n');
1592 strbuf_addf(&header
, "%c ", comment_line_char
);
1593 strbuf_addf(&header
, _("This is a combination of %d commits."),
1594 opts
->current_fixup_count
+ 2);
1595 strbuf_splice(&buf
, 0, eol
- buf
.buf
, header
.buf
, header
.len
);
1596 strbuf_release(&header
);
1598 struct object_id head
;
1599 struct commit
*head_commit
;
1600 const char *head_message
, *body
;
1602 if (get_oid("HEAD", &head
))
1603 return error(_("need a HEAD to fixup"));
1604 if (!(head_commit
= lookup_commit_reference(r
, &head
)))
1605 return error(_("could not read HEAD"));
1606 if (!(head_message
= get_commit_buffer(head_commit
, NULL
)))
1607 return error(_("could not read HEAD's commit message"));
1609 find_commit_subject(head_message
, &body
);
1610 if (write_message(body
, strlen(body
),
1611 rebase_path_fixup_msg(), 0)) {
1612 unuse_commit_buffer(head_commit
, head_message
);
1613 return error(_("cannot write '%s'"),
1614 rebase_path_fixup_msg());
1617 strbuf_addf(&buf
, "%c ", comment_line_char
);
1618 strbuf_addf(&buf
, _("This is a combination of %d commits."), 2);
1619 strbuf_addf(&buf
, "\n%c ", comment_line_char
);
1620 strbuf_addstr(&buf
, _("This is the 1st commit message:"));
1621 strbuf_addstr(&buf
, "\n\n");
1622 strbuf_addstr(&buf
, body
);
1624 unuse_commit_buffer(head_commit
, head_message
);
1627 if (!(message
= get_commit_buffer(commit
, NULL
)))
1628 return error(_("could not read commit message of %s"),
1629 oid_to_hex(&commit
->object
.oid
));
1630 find_commit_subject(message
, &body
);
1632 if (command
== TODO_SQUASH
) {
1633 unlink(rebase_path_fixup_msg());
1634 strbuf_addf(&buf
, "\n%c ", comment_line_char
);
1635 strbuf_addf(&buf
, _("This is the commit message #%d:"),
1636 ++opts
->current_fixup_count
+ 1);
1637 strbuf_addstr(&buf
, "\n\n");
1638 strbuf_addstr(&buf
, body
);
1639 } else if (command
== TODO_FIXUP
) {
1640 strbuf_addf(&buf
, "\n%c ", comment_line_char
);
1641 strbuf_addf(&buf
, _("The commit message #%d will be skipped:"),
1642 ++opts
->current_fixup_count
+ 1);
1643 strbuf_addstr(&buf
, "\n\n");
1644 strbuf_add_commented_lines(&buf
, body
, strlen(body
));
1646 return error(_("unknown command: %d"), command
);
1647 unuse_commit_buffer(commit
, message
);
1649 res
= write_message(buf
.buf
, buf
.len
, rebase_path_squash_msg(), 0);
1650 strbuf_release(&buf
);
1653 strbuf_addf(&opts
->current_fixups
, "%s%s %s",
1654 opts
->current_fixups
.len
? "\n" : "",
1655 command_to_string(command
),
1656 oid_to_hex(&commit
->object
.oid
));
1657 res
= write_message(opts
->current_fixups
.buf
,
1658 opts
->current_fixups
.len
,
1659 rebase_path_current_fixups(), 0);
1665 static void flush_rewritten_pending(void)
1667 struct strbuf buf
= STRBUF_INIT
;
1668 struct object_id newoid
;
1671 if (strbuf_read_file(&buf
, rebase_path_rewritten_pending(), (GIT_MAX_HEXSZ
+ 1) * 2) > 0 &&
1672 !get_oid("HEAD", &newoid
) &&
1673 (out
= fopen_or_warn(rebase_path_rewritten_list(), "a"))) {
1674 char *bol
= buf
.buf
, *eol
;
1677 eol
= strchrnul(bol
, '\n');
1678 fprintf(out
, "%.*s %s\n", (int)(eol
- bol
),
1679 bol
, oid_to_hex(&newoid
));
1685 unlink(rebase_path_rewritten_pending());
1687 strbuf_release(&buf
);
1690 static void record_in_rewritten(struct object_id
*oid
,
1691 enum todo_command next_command
)
1693 FILE *out
= fopen_or_warn(rebase_path_rewritten_pending(), "a");
1698 fprintf(out
, "%s\n", oid_to_hex(oid
));
1701 if (!is_fixup(next_command
))
1702 flush_rewritten_pending();
1705 static int do_pick_commit(struct repository
*r
,
1706 enum todo_command command
,
1707 struct commit
*commit
,
1708 struct replay_opts
*opts
,
1709 int final_fixup
, int *check_todo
)
1711 unsigned int flags
= opts
->edit
? EDIT_MSG
: 0;
1712 const char *msg_file
= opts
->edit
? NULL
: git_path_merge_msg(r
);
1713 struct object_id head
;
1714 struct commit
*base
, *next
, *parent
;
1715 const char *base_label
, *next_label
;
1716 char *author
= NULL
;
1717 struct commit_message msg
= { NULL
, NULL
, NULL
, NULL
};
1718 struct strbuf msgbuf
= STRBUF_INIT
;
1719 int res
, unborn
= 0, reword
= 0, allow
;
1721 if (opts
->no_commit
) {
1723 * We do not intend to commit immediately. We just want to
1724 * merge the differences in, so let's compute the tree
1725 * that represents the "current" state for merge-recursive
1728 if (write_index_as_tree(&head
, r
->index
, r
->index_file
, 0, NULL
))
1729 return error(_("your index file is unmerged."));
1731 unborn
= get_oid("HEAD", &head
);
1732 /* Do we want to generate a root commit? */
1733 if (is_pick_or_similar(command
) && opts
->have_squash_onto
&&
1734 oideq(&head
, &opts
->squash_onto
)) {
1735 if (is_fixup(command
))
1736 return error(_("cannot fixup root commit"));
1737 flags
|= CREATE_ROOT_COMMIT
;
1740 oidcpy(&head
, the_hash_algo
->empty_tree
);
1741 if (index_differs_from(r
, unborn
? empty_tree_oid_hex() : "HEAD",
1743 return error_dirty_index(r
, opts
);
1745 discard_index(r
->index
);
1747 if (!commit
->parents
)
1749 else if (commit
->parents
->next
) {
1750 /* Reverting or cherry-picking a merge commit */
1752 struct commit_list
*p
;
1754 if (!opts
->mainline
)
1755 return error(_("commit %s is a merge but no -m option was given."),
1756 oid_to_hex(&commit
->object
.oid
));
1758 for (cnt
= 1, p
= commit
->parents
;
1759 cnt
!= opts
->mainline
&& p
;
1762 if (cnt
!= opts
->mainline
|| !p
)
1763 return error(_("commit %s does not have parent %d"),
1764 oid_to_hex(&commit
->object
.oid
), opts
->mainline
);
1766 } else if (1 < opts
->mainline
)
1768 * Non-first parent explicitly specified as mainline for
1771 return error(_("commit %s does not have parent %d"),
1772 oid_to_hex(&commit
->object
.oid
), opts
->mainline
);
1774 parent
= commit
->parents
->item
;
1776 if (get_message(commit
, &msg
) != 0)
1777 return error(_("cannot get commit message for %s"),
1778 oid_to_hex(&commit
->object
.oid
));
1780 if (opts
->allow_ff
&& !is_fixup(command
) &&
1781 ((parent
&& oideq(&parent
->object
.oid
, &head
)) ||
1782 (!parent
&& unborn
))) {
1783 if (is_rebase_i(opts
))
1784 write_author_script(msg
.message
);
1785 res
= fast_forward_to(r
, &commit
->object
.oid
, &head
, unborn
,
1787 if (res
|| command
!= TODO_REWORD
)
1791 goto fast_forward_edit
;
1793 if (parent
&& parse_commit(parent
) < 0)
1794 /* TRANSLATORS: The first %s will be a "todo" command like
1795 "revert" or "pick", the second %s a SHA1. */
1796 return error(_("%s: cannot parse parent commit %s"),
1797 command_to_string(command
),
1798 oid_to_hex(&parent
->object
.oid
));
1801 * "commit" is an existing commit. We would want to apply
1802 * the difference it introduces since its first parent "prev"
1803 * on top of the current HEAD if we are cherry-pick. Or the
1804 * reverse of it if we are revert.
1807 if (command
== TODO_REVERT
) {
1809 base_label
= msg
.label
;
1811 next_label
= msg
.parent_label
;
1812 strbuf_addstr(&msgbuf
, "Revert \"");
1813 strbuf_addstr(&msgbuf
, msg
.subject
);
1814 strbuf_addstr(&msgbuf
, "\"\n\nThis reverts commit ");
1815 strbuf_addstr(&msgbuf
, oid_to_hex(&commit
->object
.oid
));
1817 if (commit
->parents
&& commit
->parents
->next
) {
1818 strbuf_addstr(&msgbuf
, ", reversing\nchanges made to ");
1819 strbuf_addstr(&msgbuf
, oid_to_hex(&parent
->object
.oid
));
1821 strbuf_addstr(&msgbuf
, ".\n");
1826 base_label
= msg
.parent_label
;
1828 next_label
= msg
.label
;
1830 /* Append the commit log message to msgbuf. */
1831 if (find_commit_subject(msg
.message
, &p
))
1832 strbuf_addstr(&msgbuf
, p
);
1834 if (opts
->record_origin
) {
1835 strbuf_complete_line(&msgbuf
);
1836 if (!has_conforming_footer(&msgbuf
, NULL
, 0))
1837 strbuf_addch(&msgbuf
, '\n');
1838 strbuf_addstr(&msgbuf
, cherry_picked_prefix
);
1839 strbuf_addstr(&msgbuf
, oid_to_hex(&commit
->object
.oid
));
1840 strbuf_addstr(&msgbuf
, ")\n");
1842 if (!is_fixup(command
))
1843 author
= get_author(msg
.message
);
1846 if (command
== TODO_REWORD
)
1848 else if (is_fixup(command
)) {
1849 if (update_squash_messages(r
, command
, commit
, opts
))
1853 msg_file
= rebase_path_squash_msg();
1854 else if (file_exists(rebase_path_fixup_msg())) {
1855 flags
|= CLEANUP_MSG
;
1856 msg_file
= rebase_path_fixup_msg();
1858 const char *dest
= git_path_squash_msg(r
);
1860 if (copy_file(dest
, rebase_path_squash_msg(), 0666))
1861 return error(_("could not rename '%s' to '%s'"),
1862 rebase_path_squash_msg(), dest
);
1863 unlink(git_path_merge_msg(r
));
1869 if (opts
->signoff
&& !is_fixup(command
))
1870 append_signoff(&msgbuf
, 0, 0);
1872 if (is_rebase_i(opts
) && write_author_script(msg
.message
) < 0)
1874 else if (!opts
->strategy
|| !strcmp(opts
->strategy
, "recursive") || command
== TODO_REVERT
) {
1875 res
= do_recursive_merge(r
, base
, next
, base_label
, next_label
,
1876 &head
, &msgbuf
, opts
);
1880 res
|= write_message(msgbuf
.buf
, msgbuf
.len
,
1881 git_path_merge_msg(r
), 0);
1883 struct commit_list
*common
= NULL
;
1884 struct commit_list
*remotes
= NULL
;
1886 res
= write_message(msgbuf
.buf
, msgbuf
.len
,
1887 git_path_merge_msg(r
), 0);
1889 commit_list_insert(base
, &common
);
1890 commit_list_insert(next
, &remotes
);
1891 res
|= try_merge_command(r
, opts
->strategy
,
1892 opts
->xopts_nr
, (const char **)opts
->xopts
,
1893 common
, oid_to_hex(&head
), remotes
);
1894 free_commit_list(common
);
1895 free_commit_list(remotes
);
1897 strbuf_release(&msgbuf
);
1900 * If the merge was clean or if it failed due to conflict, we write
1901 * CHERRY_PICK_HEAD for the subsequent invocation of commit to use.
1902 * However, if the merge did not even start, then we don't want to
1905 if (command
== TODO_PICK
&& !opts
->no_commit
&& (res
== 0 || res
== 1) &&
1906 update_ref(NULL
, "CHERRY_PICK_HEAD", &commit
->object
.oid
, NULL
,
1907 REF_NO_DEREF
, UPDATE_REFS_MSG_ON_ERR
))
1909 if (command
== TODO_REVERT
&& ((opts
->no_commit
&& res
== 0) || res
== 1) &&
1910 update_ref(NULL
, "REVERT_HEAD", &commit
->object
.oid
, NULL
,
1911 REF_NO_DEREF
, UPDATE_REFS_MSG_ON_ERR
))
1915 error(command
== TODO_REVERT
1916 ? _("could not revert %s... %s")
1917 : _("could not apply %s... %s"),
1918 short_commit_name(commit
), msg
.subject
);
1919 print_advice(r
, res
== 1, opts
);
1920 repo_rerere(r
, opts
->allow_rerere_auto
);
1924 allow
= allow_empty(r
, opts
, commit
);
1929 flags
|= ALLOW_EMPTY
;
1930 if (!opts
->no_commit
) {
1931 if (author
|| command
== TODO_REVERT
|| (flags
& AMEND_MSG
))
1932 res
= do_commit(r
, msg_file
, author
, opts
, flags
);
1934 res
= error(_("unable to parse commit author"));
1935 *check_todo
= !!(flags
& EDIT_MSG
);
1936 if (!res
&& reword
) {
1938 res
= run_git_commit(r
, NULL
, opts
, EDIT_MSG
|
1939 VERIFY_MSG
| AMEND_MSG
|
1940 (flags
& ALLOW_EMPTY
));
1946 if (!res
&& final_fixup
) {
1947 unlink(rebase_path_fixup_msg());
1948 unlink(rebase_path_squash_msg());
1949 unlink(rebase_path_current_fixups());
1950 strbuf_reset(&opts
->current_fixups
);
1951 opts
->current_fixup_count
= 0;
1955 free_message(commit
, &msg
);
1957 update_abort_safety_file();
1962 static int prepare_revs(struct replay_opts
*opts
)
1965 * picking (but not reverting) ranges (but not individual revisions)
1966 * should be done in reverse
1968 if (opts
->action
== REPLAY_PICK
&& !opts
->revs
->no_walk
)
1969 opts
->revs
->reverse
^= 1;
1971 if (prepare_revision_walk(opts
->revs
))
1972 return error(_("revision walk setup failed"));
1977 static int read_and_refresh_cache(struct repository
*r
,
1978 struct replay_opts
*opts
)
1980 struct lock_file index_lock
= LOCK_INIT
;
1981 int index_fd
= repo_hold_locked_index(r
, &index_lock
, 0);
1982 if (repo_read_index(r
) < 0) {
1983 rollback_lock_file(&index_lock
);
1984 return error(_("git %s: failed to read the index"),
1985 _(action_name(opts
)));
1987 refresh_index(r
->index
, REFRESH_QUIET
|REFRESH_UNMERGED
, NULL
, NULL
, NULL
);
1988 if (index_fd
>= 0) {
1989 if (write_locked_index(r
->index
, &index_lock
,
1990 COMMIT_LOCK
| SKIP_IF_UNCHANGED
)) {
1991 return error(_("git %s: failed to refresh the index"),
1992 _(action_name(opts
)));
1998 enum todo_item_flags
{
1999 TODO_EDIT_MERGE_MSG
= 1
2002 void todo_list_release(struct todo_list
*todo_list
)
2004 strbuf_release(&todo_list
->buf
);
2005 FREE_AND_NULL(todo_list
->items
);
2006 todo_list
->nr
= todo_list
->alloc
= 0;
2009 static struct todo_item
*append_new_todo(struct todo_list
*todo_list
)
2011 ALLOC_GROW(todo_list
->items
, todo_list
->nr
+ 1, todo_list
->alloc
);
2012 return todo_list
->items
+ todo_list
->nr
++;
2015 const char *todo_item_get_arg(struct todo_list
*todo_list
,
2016 struct todo_item
*item
)
2018 return todo_list
->buf
.buf
+ item
->arg_offset
;
2021 static int is_command(enum todo_command command
, const char **bol
)
2023 const char *str
= todo_command_info
[command
].str
;
2024 const char nick
= todo_command_info
[command
].c
;
2025 const char *p
= *bol
+ 1;
2027 return skip_prefix(*bol
, str
, bol
) ||
2028 ((nick
&& **bol
== nick
) &&
2029 (*p
== ' ' || *p
== '\t' || *p
== '\n' || *p
== '\r' || !*p
) &&
2033 static int parse_insn_line(struct repository
*r
, struct todo_item
*item
,
2034 const char *buf
, const char *bol
, char *eol
)
2036 struct object_id commit_oid
;
2037 char *end_of_object_name
;
2038 int i
, saved
, status
, padding
;
2043 bol
+= strspn(bol
, " \t");
2045 if (bol
== eol
|| *bol
== '\r' || *bol
== comment_line_char
) {
2046 item
->command
= TODO_COMMENT
;
2047 item
->commit
= NULL
;
2048 item
->arg_offset
= bol
- buf
;
2049 item
->arg_len
= eol
- bol
;
2053 for (i
= 0; i
< TODO_COMMENT
; i
++)
2054 if (is_command(i
, &bol
)) {
2058 if (i
>= TODO_COMMENT
)
2061 /* Eat up extra spaces/ tabs before object name */
2062 padding
= strspn(bol
, " \t");
2065 if (item
->command
== TODO_NOOP
|| item
->command
== TODO_BREAK
) {
2067 return error(_("%s does not accept arguments: '%s'"),
2068 command_to_string(item
->command
), bol
);
2069 item
->commit
= NULL
;
2070 item
->arg_offset
= bol
- buf
;
2071 item
->arg_len
= eol
- bol
;
2076 return error(_("missing arguments for %s"),
2077 command_to_string(item
->command
));
2079 if (item
->command
== TODO_EXEC
|| item
->command
== TODO_LABEL
||
2080 item
->command
== TODO_RESET
) {
2081 item
->commit
= NULL
;
2082 item
->arg_offset
= bol
- buf
;
2083 item
->arg_len
= (int)(eol
- bol
);
2087 if (item
->command
== TODO_MERGE
) {
2088 if (skip_prefix(bol
, "-C", &bol
))
2089 bol
+= strspn(bol
, " \t");
2090 else if (skip_prefix(bol
, "-c", &bol
)) {
2091 bol
+= strspn(bol
, " \t");
2092 item
->flags
|= TODO_EDIT_MERGE_MSG
;
2094 item
->flags
|= TODO_EDIT_MERGE_MSG
;
2095 item
->commit
= NULL
;
2096 item
->arg_offset
= bol
- buf
;
2097 item
->arg_len
= (int)(eol
- bol
);
2102 end_of_object_name
= (char *) bol
+ strcspn(bol
, " \t\n");
2103 saved
= *end_of_object_name
;
2104 *end_of_object_name
= '\0';
2105 status
= get_oid(bol
, &commit_oid
);
2106 *end_of_object_name
= saved
;
2108 bol
= end_of_object_name
+ strspn(end_of_object_name
, " \t");
2109 item
->arg_offset
= bol
- buf
;
2110 item
->arg_len
= (int)(eol
- bol
);
2113 return error(_("could not parse '%.*s'"),
2114 (int)(end_of_object_name
- bol
), bol
);
2116 item
->commit
= lookup_commit_reference(r
, &commit_oid
);
2117 return !item
->commit
;
2120 int sequencer_get_last_command(struct repository
*r
, enum replay_action
*action
)
2122 const char *todo_file
, *bol
;
2123 struct strbuf buf
= STRBUF_INIT
;
2126 todo_file
= git_path_todo_file();
2127 if (strbuf_read_file(&buf
, todo_file
, 0) < 0) {
2128 if (errno
== ENOENT
|| errno
== ENOTDIR
)
2131 return error_errno("unable to open '%s'", todo_file
);
2133 bol
= buf
.buf
+ strspn(buf
.buf
, " \t\r\n");
2134 if (is_command(TODO_PICK
, &bol
) && (*bol
== ' ' || *bol
== '\t'))
2135 *action
= REPLAY_PICK
;
2136 else if (is_command(TODO_REVERT
, &bol
) &&
2137 (*bol
== ' ' || *bol
== '\t'))
2138 *action
= REPLAY_REVERT
;
2142 strbuf_release(&buf
);
2147 int todo_list_parse_insn_buffer(struct repository
*r
, char *buf
,
2148 struct todo_list
*todo_list
)
2150 struct todo_item
*item
;
2151 char *p
= buf
, *next_p
;
2152 int i
, res
= 0, fixup_okay
= file_exists(rebase_path_done());
2154 todo_list
->current
= todo_list
->nr
= 0;
2156 for (i
= 1; *p
; i
++, p
= next_p
) {
2157 char *eol
= strchrnul(p
, '\n');
2159 next_p
= *eol
? eol
+ 1 /* skip LF */ : eol
;
2161 if (p
!= eol
&& eol
[-1] == '\r')
2162 eol
--; /* strip Carriage Return */
2164 item
= append_new_todo(todo_list
);
2165 item
->offset_in_buf
= p
- todo_list
->buf
.buf
;
2166 if (parse_insn_line(r
, item
, buf
, p
, eol
)) {
2167 res
= error(_("invalid line %d: %.*s"),
2168 i
, (int)(eol
- p
), p
);
2169 item
->command
= TODO_COMMENT
+ 1;
2170 item
->arg_offset
= p
- buf
;
2171 item
->arg_len
= (int)(eol
- p
);
2172 item
->commit
= NULL
;
2177 else if (is_fixup(item
->command
))
2178 return error(_("cannot '%s' without a previous commit"),
2179 command_to_string(item
->command
));
2180 else if (!is_noop(item
->command
))
2187 static int count_commands(struct todo_list
*todo_list
)
2191 for (i
= 0; i
< todo_list
->nr
; i
++)
2192 if (todo_list
->items
[i
].command
!= TODO_COMMENT
)
2198 static int get_item_line_offset(struct todo_list
*todo_list
, int index
)
2200 return index
< todo_list
->nr
?
2201 todo_list
->items
[index
].offset_in_buf
: todo_list
->buf
.len
;
2204 static const char *get_item_line(struct todo_list
*todo_list
, int index
)
2206 return todo_list
->buf
.buf
+ get_item_line_offset(todo_list
, index
);
2209 static int get_item_line_length(struct todo_list
*todo_list
, int index
)
2211 return get_item_line_offset(todo_list
, index
+ 1)
2212 - get_item_line_offset(todo_list
, index
);
2215 static ssize_t
strbuf_read_file_or_whine(struct strbuf
*sb
, const char *path
)
2220 fd
= open(path
, O_RDONLY
);
2222 return error_errno(_("could not open '%s'"), path
);
2223 len
= strbuf_read(sb
, fd
, 0);
2226 return error(_("could not read '%s'."), path
);
2230 static int have_finished_the_last_pick(void)
2232 struct strbuf buf
= STRBUF_INIT
;
2234 const char *todo_path
= git_path_todo_file();
2237 if (strbuf_read_file(&buf
, todo_path
, 0) < 0) {
2238 if (errno
== ENOENT
) {
2241 error_errno("unable to open '%s'", todo_path
);
2245 /* If there is only one line then we are done */
2246 eol
= strchr(buf
.buf
, '\n');
2247 if (!eol
|| !eol
[1])
2250 strbuf_release(&buf
);
2255 void sequencer_post_commit_cleanup(struct repository
*r
, int verbose
)
2257 struct replay_opts opts
= REPLAY_OPTS_INIT
;
2258 int need_cleanup
= 0;
2260 if (file_exists(git_path_cherry_pick_head(r
))) {
2261 if (!unlink(git_path_cherry_pick_head(r
)) && verbose
)
2262 warning(_("cancelling a cherry picking in progress"));
2263 opts
.action
= REPLAY_PICK
;
2267 if (file_exists(git_path_revert_head(r
))) {
2268 if (!unlink(git_path_revert_head(r
)) && verbose
)
2269 warning(_("cancelling a revert in progress"));
2270 opts
.action
= REPLAY_REVERT
;
2277 if (!have_finished_the_last_pick())
2280 sequencer_remove_state(&opts
);
2283 static int read_populate_todo(struct repository
*r
,
2284 struct todo_list
*todo_list
,
2285 struct replay_opts
*opts
)
2288 const char *todo_file
= get_todo_path(opts
);
2291 strbuf_reset(&todo_list
->buf
);
2292 if (strbuf_read_file_or_whine(&todo_list
->buf
, todo_file
) < 0)
2295 res
= stat(todo_file
, &st
);
2297 return error(_("could not stat '%s'"), todo_file
);
2298 fill_stat_data(&todo_list
->stat
, &st
);
2300 res
= todo_list_parse_insn_buffer(r
, todo_list
->buf
.buf
, todo_list
);
2302 if (is_rebase_i(opts
))
2303 return error(_("please fix this using "
2304 "'git rebase --edit-todo'."));
2305 return error(_("unusable instruction sheet: '%s'"), todo_file
);
2308 if (!todo_list
->nr
&&
2309 (!is_rebase_i(opts
) || !file_exists(rebase_path_done())))
2310 return error(_("no commits parsed."));
2312 if (!is_rebase_i(opts
)) {
2313 enum todo_command valid
=
2314 opts
->action
== REPLAY_PICK
? TODO_PICK
: TODO_REVERT
;
2317 for (i
= 0; i
< todo_list
->nr
; i
++)
2318 if (valid
== todo_list
->items
[i
].command
)
2320 else if (valid
== TODO_PICK
)
2321 return error(_("cannot cherry-pick during a revert."));
2323 return error(_("cannot revert during a cherry-pick."));
2326 if (is_rebase_i(opts
)) {
2327 struct todo_list done
= TODO_LIST_INIT
;
2328 FILE *f
= fopen_or_warn(rebase_path_msgtotal(), "w");
2330 if (strbuf_read_file(&done
.buf
, rebase_path_done(), 0) > 0 &&
2331 !todo_list_parse_insn_buffer(r
, done
.buf
.buf
, &done
))
2332 todo_list
->done_nr
= count_commands(&done
);
2334 todo_list
->done_nr
= 0;
2336 todo_list
->total_nr
= todo_list
->done_nr
2337 + count_commands(todo_list
);
2338 todo_list_release(&done
);
2341 fprintf(f
, "%d\n", todo_list
->total_nr
);
2349 static int git_config_string_dup(char **dest
,
2350 const char *var
, const char *value
)
2353 return config_error_nonbool(var
);
2355 *dest
= xstrdup(value
);
2359 static int populate_opts_cb(const char *key
, const char *value
, void *data
)
2361 struct replay_opts
*opts
= data
;
2366 else if (!strcmp(key
, "options.no-commit"))
2367 opts
->no_commit
= git_config_bool_or_int(key
, value
, &error_flag
);
2368 else if (!strcmp(key
, "options.edit"))
2369 opts
->edit
= git_config_bool_or_int(key
, value
, &error_flag
);
2370 else if (!strcmp(key
, "options.allow-empty"))
2372 git_config_bool_or_int(key
, value
, &error_flag
);
2373 else if (!strcmp(key
, "options.allow-empty-message"))
2374 opts
->allow_empty_message
=
2375 git_config_bool_or_int(key
, value
, &error_flag
);
2376 else if (!strcmp(key
, "options.keep-redundant-commits"))
2377 opts
->keep_redundant_commits
=
2378 git_config_bool_or_int(key
, value
, &error_flag
);
2379 else if (!strcmp(key
, "options.signoff"))
2380 opts
->signoff
= git_config_bool_or_int(key
, value
, &error_flag
);
2381 else if (!strcmp(key
, "options.record-origin"))
2382 opts
->record_origin
= git_config_bool_or_int(key
, value
, &error_flag
);
2383 else if (!strcmp(key
, "options.allow-ff"))
2384 opts
->allow_ff
= git_config_bool_or_int(key
, value
, &error_flag
);
2385 else if (!strcmp(key
, "options.mainline"))
2386 opts
->mainline
= git_config_int(key
, value
);
2387 else if (!strcmp(key
, "options.strategy"))
2388 git_config_string_dup(&opts
->strategy
, key
, value
);
2389 else if (!strcmp(key
, "options.gpg-sign"))
2390 git_config_string_dup(&opts
->gpg_sign
, key
, value
);
2391 else if (!strcmp(key
, "options.strategy-option")) {
2392 ALLOC_GROW(opts
->xopts
, opts
->xopts_nr
+ 1, opts
->xopts_alloc
);
2393 opts
->xopts
[opts
->xopts_nr
++] = xstrdup(value
);
2394 } else if (!strcmp(key
, "options.allow-rerere-auto"))
2395 opts
->allow_rerere_auto
=
2396 git_config_bool_or_int(key
, value
, &error_flag
) ?
2397 RERERE_AUTOUPDATE
: RERERE_NOAUTOUPDATE
;
2398 else if (!strcmp(key
, "options.default-msg-cleanup")) {
2399 opts
->explicit_cleanup
= 1;
2400 opts
->default_msg_cleanup
= get_cleanup_mode(value
, 1);
2402 return error(_("invalid key: %s"), key
);
2405 return error(_("invalid value for %s: %s"), key
, value
);
2410 void parse_strategy_opts(struct replay_opts
*opts
, char *raw_opts
)
2413 char *strategy_opts_string
= raw_opts
;
2415 if (*strategy_opts_string
== ' ')
2416 strategy_opts_string
++;
2418 opts
->xopts_nr
= split_cmdline(strategy_opts_string
,
2419 (const char ***)&opts
->xopts
);
2420 for (i
= 0; i
< opts
->xopts_nr
; i
++) {
2421 const char *arg
= opts
->xopts
[i
];
2423 skip_prefix(arg
, "--", &arg
);
2424 opts
->xopts
[i
] = xstrdup(arg
);
2428 static void read_strategy_opts(struct replay_opts
*opts
, struct strbuf
*buf
)
2431 if (!read_oneliner(buf
, rebase_path_strategy(), 0))
2433 opts
->strategy
= strbuf_detach(buf
, NULL
);
2434 if (!read_oneliner(buf
, rebase_path_strategy_opts(), 0))
2437 parse_strategy_opts(opts
, buf
->buf
);
2440 static int read_populate_opts(struct replay_opts
*opts
)
2442 if (is_rebase_i(opts
)) {
2443 struct strbuf buf
= STRBUF_INIT
;
2445 if (read_oneliner(&buf
, rebase_path_gpg_sign_opt(), 1)) {
2446 if (!starts_with(buf
.buf
, "-S"))
2449 free(opts
->gpg_sign
);
2450 opts
->gpg_sign
= xstrdup(buf
.buf
+ 2);
2455 if (read_oneliner(&buf
, rebase_path_allow_rerere_autoupdate(), 1)) {
2456 if (!strcmp(buf
.buf
, "--rerere-autoupdate"))
2457 opts
->allow_rerere_auto
= RERERE_AUTOUPDATE
;
2458 else if (!strcmp(buf
.buf
, "--no-rerere-autoupdate"))
2459 opts
->allow_rerere_auto
= RERERE_NOAUTOUPDATE
;
2463 if (file_exists(rebase_path_verbose()))
2466 if (file_exists(rebase_path_quiet()))
2469 if (file_exists(rebase_path_signoff())) {
2474 if (file_exists(rebase_path_reschedule_failed_exec()))
2475 opts
->reschedule_failed_exec
= 1;
2477 read_strategy_opts(opts
, &buf
);
2478 strbuf_release(&buf
);
2480 if (read_oneliner(&opts
->current_fixups
,
2481 rebase_path_current_fixups(), 1)) {
2482 const char *p
= opts
->current_fixups
.buf
;
2483 opts
->current_fixup_count
= 1;
2484 while ((p
= strchr(p
, '\n'))) {
2485 opts
->current_fixup_count
++;
2490 if (read_oneliner(&buf
, rebase_path_squash_onto(), 0)) {
2491 if (get_oid_hex(buf
.buf
, &opts
->squash_onto
) < 0)
2492 return error(_("unusable squash-onto"));
2493 opts
->have_squash_onto
= 1;
2499 if (!file_exists(git_path_opts_file()))
2502 * The function git_parse_source(), called from git_config_from_file(),
2503 * may die() in case of a syntactically incorrect file. We do not care
2504 * about this case, though, because we wrote that file ourselves, so we
2505 * are pretty certain that it is syntactically correct.
2507 if (git_config_from_file(populate_opts_cb
, git_path_opts_file(), opts
) < 0)
2508 return error(_("malformed options sheet: '%s'"),
2509 git_path_opts_file());
2513 static void write_strategy_opts(struct replay_opts
*opts
)
2516 struct strbuf buf
= STRBUF_INIT
;
2518 for (i
= 0; i
< opts
->xopts_nr
; ++i
)
2519 strbuf_addf(&buf
, " --%s", opts
->xopts
[i
]);
2521 write_file(rebase_path_strategy_opts(), "%s\n", buf
.buf
);
2522 strbuf_release(&buf
);
2525 int write_basic_state(struct replay_opts
*opts
, const char *head_name
,
2526 struct commit
*onto
, const char *orig_head
)
2528 const char *quiet
= getenv("GIT_QUIET");
2531 write_file(rebase_path_head_name(), "%s\n", head_name
);
2533 write_file(rebase_path_onto(), "%s\n",
2534 oid_to_hex(&onto
->object
.oid
));
2536 write_file(rebase_path_orig_head(), "%s\n", orig_head
);
2539 write_file(rebase_path_quiet(), "%s\n", quiet
);
2541 write_file(rebase_path_verbose(), "%s", "");
2543 write_file(rebase_path_strategy(), "%s\n", opts
->strategy
);
2544 if (opts
->xopts_nr
> 0)
2545 write_strategy_opts(opts
);
2547 if (opts
->allow_rerere_auto
== RERERE_AUTOUPDATE
)
2548 write_file(rebase_path_allow_rerere_autoupdate(), "--rerere-autoupdate\n");
2549 else if (opts
->allow_rerere_auto
== RERERE_NOAUTOUPDATE
)
2550 write_file(rebase_path_allow_rerere_autoupdate(), "--no-rerere-autoupdate\n");
2553 write_file(rebase_path_gpg_sign_opt(), "-S%s\n", opts
->gpg_sign
);
2555 write_file(rebase_path_signoff(), "--signoff\n");
2556 if (opts
->reschedule_failed_exec
)
2557 write_file(rebase_path_reschedule_failed_exec(), "%s", "");
2562 static int walk_revs_populate_todo(struct todo_list
*todo_list
,
2563 struct replay_opts
*opts
)
2565 enum todo_command command
= opts
->action
== REPLAY_PICK
?
2566 TODO_PICK
: TODO_REVERT
;
2567 const char *command_string
= todo_command_info
[command
].str
;
2568 struct commit
*commit
;
2570 if (prepare_revs(opts
))
2573 while ((commit
= get_revision(opts
->revs
))) {
2574 struct todo_item
*item
= append_new_todo(todo_list
);
2575 const char *commit_buffer
= get_commit_buffer(commit
, NULL
);
2576 const char *subject
;
2579 item
->command
= command
;
2580 item
->commit
= commit
;
2581 item
->arg_offset
= 0;
2583 item
->offset_in_buf
= todo_list
->buf
.len
;
2584 subject_len
= find_commit_subject(commit_buffer
, &subject
);
2585 strbuf_addf(&todo_list
->buf
, "%s %s %.*s\n", command_string
,
2586 short_commit_name(commit
), subject_len
, subject
);
2587 unuse_commit_buffer(commit
, commit_buffer
);
2591 return error(_("empty commit set passed"));
2596 static int create_seq_dir(struct repository
*r
)
2598 enum replay_action action
;
2599 const char *in_progress_error
= NULL
;
2600 const char *in_progress_advice
= NULL
;
2601 unsigned int advise_skip
= file_exists(git_path_revert_head(r
)) ||
2602 file_exists(git_path_cherry_pick_head(r
));
2604 if (!sequencer_get_last_command(r
, &action
)) {
2607 in_progress_error
= _("revert is already in progress");
2608 in_progress_advice
=
2609 _("try \"git revert (--continue | %s--abort | --quit)\"");
2612 in_progress_error
= _("cherry-pick is already in progress");
2613 in_progress_advice
=
2614 _("try \"git cherry-pick (--continue | %s--abort | --quit)\"");
2617 BUG("unexpected action in create_seq_dir");
2620 if (in_progress_error
) {
2621 error("%s", in_progress_error
);
2622 if (advice_sequencer_in_use
)
2623 advise(in_progress_advice
,
2624 advise_skip
? "--skip | " : "");
2627 if (mkdir(git_path_seq_dir(), 0777) < 0)
2628 return error_errno(_("could not create sequencer directory '%s'"),
2629 git_path_seq_dir());
2634 static int save_head(const char *head
)
2636 struct lock_file head_lock
= LOCK_INIT
;
2637 struct strbuf buf
= STRBUF_INIT
;
2641 fd
= hold_lock_file_for_update(&head_lock
, git_path_head_file(), 0);
2643 return error_errno(_("could not lock HEAD"));
2644 strbuf_addf(&buf
, "%s\n", head
);
2645 written
= write_in_full(fd
, buf
.buf
, buf
.len
);
2646 strbuf_release(&buf
);
2648 error_errno(_("could not write to '%s'"), git_path_head_file());
2649 rollback_lock_file(&head_lock
);
2652 if (commit_lock_file(&head_lock
) < 0)
2653 return error(_("failed to finalize '%s'"), git_path_head_file());
2657 static int rollback_is_safe(void)
2659 struct strbuf sb
= STRBUF_INIT
;
2660 struct object_id expected_head
, actual_head
;
2662 if (strbuf_read_file(&sb
, git_path_abort_safety_file(), 0) >= 0) {
2664 if (get_oid_hex(sb
.buf
, &expected_head
)) {
2665 strbuf_release(&sb
);
2666 die(_("could not parse %s"), git_path_abort_safety_file());
2668 strbuf_release(&sb
);
2670 else if (errno
== ENOENT
)
2671 oidclr(&expected_head
);
2673 die_errno(_("could not read '%s'"), git_path_abort_safety_file());
2675 if (get_oid("HEAD", &actual_head
))
2676 oidclr(&actual_head
);
2678 return oideq(&actual_head
, &expected_head
);
2681 static int reset_merge(const struct object_id
*oid
)
2684 struct argv_array argv
= ARGV_ARRAY_INIT
;
2686 argv_array_pushl(&argv
, "reset", "--merge", NULL
);
2688 if (!is_null_oid(oid
))
2689 argv_array_push(&argv
, oid_to_hex(oid
));
2691 ret
= run_command_v_opt(argv
.argv
, RUN_GIT_CMD
);
2692 argv_array_clear(&argv
);
2697 static int rollback_single_pick(struct repository
*r
)
2699 struct object_id head_oid
;
2701 if (!file_exists(git_path_cherry_pick_head(r
)) &&
2702 !file_exists(git_path_revert_head(r
)))
2703 return error(_("no cherry-pick or revert in progress"));
2704 if (read_ref_full("HEAD", 0, &head_oid
, NULL
))
2705 return error(_("cannot resolve HEAD"));
2706 if (is_null_oid(&head_oid
))
2707 return error(_("cannot abort from a branch yet to be born"));
2708 return reset_merge(&head_oid
);
2711 static int skip_single_pick(void)
2713 struct object_id head
;
2715 if (read_ref_full("HEAD", 0, &head
, NULL
))
2716 return error(_("cannot resolve HEAD"));
2717 return reset_merge(&head
);
2720 int sequencer_rollback(struct repository
*r
, struct replay_opts
*opts
)
2723 struct object_id oid
;
2724 struct strbuf buf
= STRBUF_INIT
;
2727 f
= fopen(git_path_head_file(), "r");
2728 if (!f
&& errno
== ENOENT
) {
2730 * There is no multiple-cherry-pick in progress.
2731 * If CHERRY_PICK_HEAD or REVERT_HEAD indicates
2732 * a single-cherry-pick in progress, abort that.
2734 return rollback_single_pick(r
);
2737 return error_errno(_("cannot open '%s'"), git_path_head_file());
2738 if (strbuf_getline_lf(&buf
, f
)) {
2739 error(_("cannot read '%s': %s"), git_path_head_file(),
2740 ferror(f
) ? strerror(errno
) : _("unexpected end of file"));
2745 if (parse_oid_hex(buf
.buf
, &oid
, &p
) || *p
!= '\0') {
2746 error(_("stored pre-cherry-pick HEAD file '%s' is corrupt"),
2747 git_path_head_file());
2750 if (is_null_oid(&oid
)) {
2751 error(_("cannot abort from a branch yet to be born"));
2755 if (!rollback_is_safe()) {
2756 /* Do not error, just do not rollback */
2757 warning(_("You seem to have moved HEAD. "
2758 "Not rewinding, check your HEAD!"));
2760 if (reset_merge(&oid
))
2762 strbuf_release(&buf
);
2763 return sequencer_remove_state(opts
);
2765 strbuf_release(&buf
);
2769 int sequencer_skip(struct repository
*r
, struct replay_opts
*opts
)
2771 enum replay_action action
= -1;
2772 sequencer_get_last_command(r
, &action
);
2775 * Check whether the subcommand requested to skip the commit is actually
2776 * in progress and that it's safe to skip the commit.
2778 * opts->action tells us which subcommand requested to skip the commit.
2779 * If the corresponding .git/<ACTION>_HEAD exists, we know that the
2780 * action is in progress and we can skip the commit.
2782 * Otherwise we check that the last instruction was related to the
2783 * particular subcommand we're trying to execute and barf if that's not
2786 * Finally we check that the rollback is "safe", i.e., has the HEAD
2787 * moved? In this case, it doesn't make sense to "reset the merge" and
2788 * "skip the commit" as the user already handled this by committing. But
2789 * we'd not want to barf here, instead give advice on how to proceed. We
2790 * only need to check that when .git/<ACTION>_HEAD doesn't exist because
2791 * it gets removed when the user commits, so if it still exists we're
2792 * sure the user can't have committed before.
2794 switch (opts
->action
) {
2796 if (!file_exists(git_path_revert_head(r
))) {
2797 if (action
!= REPLAY_REVERT
)
2798 return error(_("no revert in progress"));
2799 if (!rollback_is_safe())
2804 if (!file_exists(git_path_cherry_pick_head(r
))) {
2805 if (action
!= REPLAY_PICK
)
2806 return error(_("no cherry-pick in progress"));
2807 if (!rollback_is_safe())
2812 BUG("unexpected action in sequencer_skip");
2815 if (skip_single_pick())
2816 return error(_("failed to skip the commit"));
2817 if (!is_directory(git_path_seq_dir()))
2820 return sequencer_continue(r
, opts
);
2823 error(_("there is nothing to skip"));
2825 if (advice_resolve_conflict
) {
2826 advise(_("have you committed already?\n"
2827 "try \"git %s --continue\""),
2828 action
== REPLAY_REVERT
? "revert" : "cherry-pick");
2833 static int save_todo(struct todo_list
*todo_list
, struct replay_opts
*opts
)
2835 struct lock_file todo_lock
= LOCK_INIT
;
2836 const char *todo_path
= get_todo_path(opts
);
2837 int next
= todo_list
->current
, offset
, fd
;
2840 * rebase -i writes "git-rebase-todo" without the currently executing
2841 * command, appending it to "done" instead.
2843 if (is_rebase_i(opts
))
2846 fd
= hold_lock_file_for_update(&todo_lock
, todo_path
, 0);
2848 return error_errno(_("could not lock '%s'"), todo_path
);
2849 offset
= get_item_line_offset(todo_list
, next
);
2850 if (write_in_full(fd
, todo_list
->buf
.buf
+ offset
,
2851 todo_list
->buf
.len
- offset
) < 0)
2852 return error_errno(_("could not write to '%s'"), todo_path
);
2853 if (commit_lock_file(&todo_lock
) < 0)
2854 return error(_("failed to finalize '%s'"), todo_path
);
2856 if (is_rebase_i(opts
) && next
> 0) {
2857 const char *done
= rebase_path_done();
2858 int fd
= open(done
, O_CREAT
| O_WRONLY
| O_APPEND
, 0666);
2863 if (write_in_full(fd
, get_item_line(todo_list
, next
- 1),
2864 get_item_line_length(todo_list
, next
- 1))
2866 ret
= error_errno(_("could not write to '%s'"), done
);
2868 ret
= error_errno(_("failed to finalize '%s'"), done
);
2874 static int save_opts(struct replay_opts
*opts
)
2876 const char *opts_file
= git_path_opts_file();
2879 if (opts
->no_commit
)
2880 res
|= git_config_set_in_file_gently(opts_file
,
2881 "options.no-commit", "true");
2883 res
|= git_config_set_in_file_gently(opts_file
,
2884 "options.edit", "true");
2885 if (opts
->allow_empty
)
2886 res
|= git_config_set_in_file_gently(opts_file
,
2887 "options.allow-empty", "true");
2888 if (opts
->allow_empty_message
)
2889 res
|= git_config_set_in_file_gently(opts_file
,
2890 "options.allow-empty-message", "true");
2891 if (opts
->keep_redundant_commits
)
2892 res
|= git_config_set_in_file_gently(opts_file
,
2893 "options.keep-redundant-commits", "true");
2895 res
|= git_config_set_in_file_gently(opts_file
,
2896 "options.signoff", "true");
2897 if (opts
->record_origin
)
2898 res
|= git_config_set_in_file_gently(opts_file
,
2899 "options.record-origin", "true");
2901 res
|= git_config_set_in_file_gently(opts_file
,
2902 "options.allow-ff", "true");
2903 if (opts
->mainline
) {
2904 struct strbuf buf
= STRBUF_INIT
;
2905 strbuf_addf(&buf
, "%d", opts
->mainline
);
2906 res
|= git_config_set_in_file_gently(opts_file
,
2907 "options.mainline", buf
.buf
);
2908 strbuf_release(&buf
);
2911 res
|= git_config_set_in_file_gently(opts_file
,
2912 "options.strategy", opts
->strategy
);
2914 res
|= git_config_set_in_file_gently(opts_file
,
2915 "options.gpg-sign", opts
->gpg_sign
);
2918 for (i
= 0; i
< opts
->xopts_nr
; i
++)
2919 res
|= git_config_set_multivar_in_file_gently(opts_file
,
2920 "options.strategy-option",
2921 opts
->xopts
[i
], "^$", 0);
2923 if (opts
->allow_rerere_auto
)
2924 res
|= git_config_set_in_file_gently(opts_file
,
2925 "options.allow-rerere-auto",
2926 opts
->allow_rerere_auto
== RERERE_AUTOUPDATE
?
2929 if (opts
->explicit_cleanup
)
2930 res
|= git_config_set_in_file_gently(opts_file
,
2931 "options.default-msg-cleanup",
2932 describe_cleanup_mode(opts
->default_msg_cleanup
));
2936 static int make_patch(struct repository
*r
,
2937 struct commit
*commit
,
2938 struct replay_opts
*opts
)
2940 struct strbuf buf
= STRBUF_INIT
;
2941 struct rev_info log_tree_opt
;
2942 const char *subject
, *p
;
2945 p
= short_commit_name(commit
);
2946 if (write_message(p
, strlen(p
), rebase_path_stopped_sha(), 1) < 0)
2948 if (update_ref("rebase", "REBASE_HEAD", &commit
->object
.oid
,
2949 NULL
, REF_NO_DEREF
, UPDATE_REFS_MSG_ON_ERR
))
2950 res
|= error(_("could not update %s"), "REBASE_HEAD");
2952 strbuf_addf(&buf
, "%s/patch", get_dir(opts
));
2953 memset(&log_tree_opt
, 0, sizeof(log_tree_opt
));
2954 repo_init_revisions(r
, &log_tree_opt
, NULL
);
2955 log_tree_opt
.abbrev
= 0;
2956 log_tree_opt
.diff
= 1;
2957 log_tree_opt
.diffopt
.output_format
= DIFF_FORMAT_PATCH
;
2958 log_tree_opt
.disable_stdin
= 1;
2959 log_tree_opt
.no_commit_id
= 1;
2960 log_tree_opt
.diffopt
.file
= fopen(buf
.buf
, "w");
2961 log_tree_opt
.diffopt
.use_color
= GIT_COLOR_NEVER
;
2962 if (!log_tree_opt
.diffopt
.file
)
2963 res
|= error_errno(_("could not open '%s'"), buf
.buf
);
2965 res
|= log_tree_commit(&log_tree_opt
, commit
);
2966 fclose(log_tree_opt
.diffopt
.file
);
2970 strbuf_addf(&buf
, "%s/message", get_dir(opts
));
2971 if (!file_exists(buf
.buf
)) {
2972 const char *commit_buffer
= get_commit_buffer(commit
, NULL
);
2973 find_commit_subject(commit_buffer
, &subject
);
2974 res
|= write_message(subject
, strlen(subject
), buf
.buf
, 1);
2975 unuse_commit_buffer(commit
, commit_buffer
);
2977 strbuf_release(&buf
);
2982 static int intend_to_amend(void)
2984 struct object_id head
;
2987 if (get_oid("HEAD", &head
))
2988 return error(_("cannot read HEAD"));
2990 p
= oid_to_hex(&head
);
2991 return write_message(p
, strlen(p
), rebase_path_amend(), 1);
2994 static int error_with_patch(struct repository
*r
,
2995 struct commit
*commit
,
2996 const char *subject
, int subject_len
,
2997 struct replay_opts
*opts
,
2998 int exit_code
, int to_amend
)
3001 if (make_patch(r
, commit
, opts
))
3003 } else if (copy_file(rebase_path_message(),
3004 git_path_merge_msg(r
), 0666))
3005 return error(_("unable to copy '%s' to '%s'"),
3006 git_path_merge_msg(r
), rebase_path_message());
3009 if (intend_to_amend())
3013 _("You can amend the commit now, with\n"
3015 " git commit --amend %s\n"
3017 "Once you are satisfied with your changes, run\n"
3019 " git rebase --continue\n"),
3020 gpg_sign_opt_quoted(opts
));
3021 } else if (exit_code
) {
3023 fprintf_ln(stderr
, _("Could not apply %s... %.*s"),
3024 short_commit_name(commit
), subject_len
, subject
);
3027 * We don't have the hash of the parent so
3028 * just print the line from the todo file.
3030 fprintf_ln(stderr
, _("Could not merge %.*s"),
3031 subject_len
, subject
);
3037 static int error_failed_squash(struct repository
*r
,
3038 struct commit
*commit
,
3039 struct replay_opts
*opts
,
3041 const char *subject
)
3043 if (copy_file(rebase_path_message(), rebase_path_squash_msg(), 0666))
3044 return error(_("could not copy '%s' to '%s'"),
3045 rebase_path_squash_msg(), rebase_path_message());
3046 unlink(git_path_merge_msg(r
));
3047 if (copy_file(git_path_merge_msg(r
), rebase_path_message(), 0666))
3048 return error(_("could not copy '%s' to '%s'"),
3049 rebase_path_message(),
3050 git_path_merge_msg(r
));
3051 return error_with_patch(r
, commit
, subject
, subject_len
, opts
, 1, 0);
3054 static int do_exec(struct repository
*r
, const char *command_line
)
3056 struct argv_array child_env
= ARGV_ARRAY_INIT
;
3057 const char *child_argv
[] = { NULL
, NULL
};
3060 fprintf(stderr
, "Executing: %s\n", command_line
);
3061 child_argv
[0] = command_line
;
3062 argv_array_pushf(&child_env
, "GIT_DIR=%s", absolute_path(get_git_dir()));
3063 argv_array_pushf(&child_env
, "GIT_WORK_TREE=%s",
3064 absolute_path(get_git_work_tree()));
3065 status
= run_command_v_opt_cd_env(child_argv
, RUN_USING_SHELL
, NULL
,
3068 /* force re-reading of the cache */
3069 if (discard_index(r
->index
) < 0 || repo_read_index(r
) < 0)
3070 return error(_("could not read index"));
3072 dirty
= require_clean_work_tree(r
, "rebase", NULL
, 1, 1);
3075 warning(_("execution failed: %s\n%s"
3076 "You can fix the problem, and then run\n"
3078 " git rebase --continue\n"
3081 dirty
? N_("and made changes to the index and/or the "
3082 "working tree\n") : "");
3084 /* command not found */
3087 warning(_("execution succeeded: %s\nbut "
3088 "left changes to the index and/or the working tree\n"
3089 "Commit or stash your changes, and then run\n"
3091 " git rebase --continue\n"
3092 "\n"), command_line
);
3096 argv_array_clear(&child_env
);
3101 static int safe_append(const char *filename
, const char *fmt
, ...)
3104 struct lock_file lock
= LOCK_INIT
;
3105 int fd
= hold_lock_file_for_update(&lock
, filename
,
3106 LOCK_REPORT_ON_ERROR
);
3107 struct strbuf buf
= STRBUF_INIT
;
3112 if (strbuf_read_file(&buf
, filename
, 0) < 0 && errno
!= ENOENT
) {
3113 error_errno(_("could not read '%s'"), filename
);
3114 rollback_lock_file(&lock
);
3117 strbuf_complete(&buf
, '\n');
3119 strbuf_vaddf(&buf
, fmt
, ap
);
3122 if (write_in_full(fd
, buf
.buf
, buf
.len
) < 0) {
3123 error_errno(_("could not write to '%s'"), filename
);
3124 strbuf_release(&buf
);
3125 rollback_lock_file(&lock
);
3128 if (commit_lock_file(&lock
) < 0) {
3129 strbuf_release(&buf
);
3130 rollback_lock_file(&lock
);
3131 return error(_("failed to finalize '%s'"), filename
);
3134 strbuf_release(&buf
);
3138 static int do_label(struct repository
*r
, const char *name
, int len
)
3140 struct ref_store
*refs
= get_main_ref_store(r
);
3141 struct ref_transaction
*transaction
;
3142 struct strbuf ref_name
= STRBUF_INIT
, err
= STRBUF_INIT
;
3143 struct strbuf msg
= STRBUF_INIT
;
3145 struct object_id head_oid
;
3147 if (len
== 1 && *name
== '#')
3148 return error(_("illegal label name: '%.*s'"), len
, name
);
3150 strbuf_addf(&ref_name
, "refs/rewritten/%.*s", len
, name
);
3151 strbuf_addf(&msg
, "rebase -i (label) '%.*s'", len
, name
);
3153 transaction
= ref_store_transaction_begin(refs
, &err
);
3155 error("%s", err
.buf
);
3157 } else if (get_oid("HEAD", &head_oid
)) {
3158 error(_("could not read HEAD"));
3160 } else if (ref_transaction_update(transaction
, ref_name
.buf
, &head_oid
,
3161 NULL
, 0, msg
.buf
, &err
) < 0 ||
3162 ref_transaction_commit(transaction
, &err
)) {
3163 error("%s", err
.buf
);
3166 ref_transaction_free(transaction
);
3167 strbuf_release(&err
);
3168 strbuf_release(&msg
);
3171 ret
= safe_append(rebase_path_refs_to_delete(),
3172 "%s\n", ref_name
.buf
);
3173 strbuf_release(&ref_name
);
3178 static const char *reflog_message(struct replay_opts
*opts
,
3179 const char *sub_action
, const char *fmt
, ...);
3181 static int do_reset(struct repository
*r
,
3182 const char *name
, int len
,
3183 struct replay_opts
*opts
)
3185 struct strbuf ref_name
= STRBUF_INIT
;
3186 struct object_id oid
;
3187 struct lock_file lock
= LOCK_INIT
;
3188 struct tree_desc desc
;
3190 struct unpack_trees_options unpack_tree_opts
;
3193 if (repo_hold_locked_index(r
, &lock
, LOCK_REPORT_ON_ERROR
) < 0)
3196 if (len
== 10 && !strncmp("[new root]", name
, len
)) {
3197 if (!opts
->have_squash_onto
) {
3199 if (commit_tree("", 0, the_hash_algo
->empty_tree
,
3200 NULL
, &opts
->squash_onto
,
3202 return error(_("writing fake root commit"));
3203 opts
->have_squash_onto
= 1;
3204 hex
= oid_to_hex(&opts
->squash_onto
);
3205 if (write_message(hex
, strlen(hex
),
3206 rebase_path_squash_onto(), 0))
3207 return error(_("writing squash-onto"));
3209 oidcpy(&oid
, &opts
->squash_onto
);
3213 /* Determine the length of the label */
3214 for (i
= 0; i
< len
; i
++)
3215 if (isspace(name
[i
]))
3219 strbuf_addf(&ref_name
, "refs/rewritten/%.*s", len
, name
);
3220 if (get_oid(ref_name
.buf
, &oid
) &&
3221 get_oid(ref_name
.buf
+ strlen("refs/rewritten/"), &oid
)) {
3222 error(_("could not read '%s'"), ref_name
.buf
);
3223 rollback_lock_file(&lock
);
3224 strbuf_release(&ref_name
);
3229 memset(&unpack_tree_opts
, 0, sizeof(unpack_tree_opts
));
3230 setup_unpack_trees_porcelain(&unpack_tree_opts
, "reset");
3231 unpack_tree_opts
.head_idx
= 1;
3232 unpack_tree_opts
.src_index
= r
->index
;
3233 unpack_tree_opts
.dst_index
= r
->index
;
3234 unpack_tree_opts
.fn
= oneway_merge
;
3235 unpack_tree_opts
.merge
= 1;
3236 unpack_tree_opts
.update
= 1;
3238 if (repo_read_index_unmerged(r
)) {
3239 rollback_lock_file(&lock
);
3240 strbuf_release(&ref_name
);
3241 return error_resolve_conflict(_(action_name(opts
)));
3244 if (!fill_tree_descriptor(r
, &desc
, &oid
)) {
3245 error(_("failed to find tree of %s"), oid_to_hex(&oid
));
3246 rollback_lock_file(&lock
);
3247 free((void *)desc
.buffer
);
3248 strbuf_release(&ref_name
);
3252 if (unpack_trees(1, &desc
, &unpack_tree_opts
)) {
3253 rollback_lock_file(&lock
);
3254 free((void *)desc
.buffer
);
3255 strbuf_release(&ref_name
);
3259 tree
= parse_tree_indirect(&oid
);
3260 prime_cache_tree(r
, r
->index
, tree
);
3262 if (write_locked_index(r
->index
, &lock
, COMMIT_LOCK
) < 0)
3263 ret
= error(_("could not write index"));
3264 free((void *)desc
.buffer
);
3267 ret
= update_ref(reflog_message(opts
, "reset", "'%.*s'",
3268 len
, name
), "HEAD", &oid
,
3269 NULL
, 0, UPDATE_REFS_MSG_ON_ERR
);
3271 strbuf_release(&ref_name
);
3275 static struct commit
*lookup_label(const char *label
, int len
,
3278 struct commit
*commit
;
3281 strbuf_addf(buf
, "refs/rewritten/%.*s", len
, label
);
3282 commit
= lookup_commit_reference_by_name(buf
->buf
);
3284 /* fall back to non-rewritten ref or commit */
3285 strbuf_splice(buf
, 0, strlen("refs/rewritten/"), "", 0);
3286 commit
= lookup_commit_reference_by_name(buf
->buf
);
3290 error(_("could not resolve '%s'"), buf
->buf
);
3295 static int do_merge(struct repository
*r
,
3296 struct commit
*commit
,
3297 const char *arg
, int arg_len
,
3298 int flags
, struct replay_opts
*opts
)
3300 int run_commit_flags
= (flags
& TODO_EDIT_MERGE_MSG
) ?
3301 EDIT_MSG
| VERIFY_MSG
: 0;
3302 struct strbuf ref_name
= STRBUF_INIT
;
3303 struct commit
*head_commit
, *merge_commit
, *i
;
3304 struct commit_list
*bases
, *j
, *reversed
= NULL
;
3305 struct commit_list
*to_merge
= NULL
, **tail
= &to_merge
;
3306 const char *strategy
= !opts
->xopts_nr
&&
3307 (!opts
->strategy
|| !strcmp(opts
->strategy
, "recursive")) ?
3308 NULL
: opts
->strategy
;
3309 struct merge_options o
;
3310 int merge_arg_len
, oneline_offset
, can_fast_forward
, ret
, k
;
3311 static struct lock_file lock
;
3314 if (repo_hold_locked_index(r
, &lock
, LOCK_REPORT_ON_ERROR
) < 0) {
3319 head_commit
= lookup_commit_reference_by_name("HEAD");
3321 ret
= error(_("cannot merge without a current revision"));
3326 * For octopus merges, the arg starts with the list of revisions to be
3327 * merged. The list is optionally followed by '#' and the oneline.
3329 merge_arg_len
= oneline_offset
= arg_len
;
3330 for (p
= arg
; p
- arg
< arg_len
; p
+= strspn(p
, " \t\n")) {
3333 if (*p
== '#' && (!p
[1] || isspace(p
[1]))) {
3334 p
+= 1 + strspn(p
+ 1, " \t\n");
3335 oneline_offset
= p
- arg
;
3338 k
= strcspn(p
, " \t\n");
3341 merge_commit
= lookup_label(p
, k
, &ref_name
);
3342 if (!merge_commit
) {
3343 ret
= error(_("unable to parse '%.*s'"), k
, p
);
3346 tail
= &commit_list_insert(merge_commit
, tail
)->next
;
3348 merge_arg_len
= p
- arg
;
3352 ret
= error(_("nothing to merge: '%.*s'"), arg_len
, arg
);
3356 if (opts
->have_squash_onto
&&
3357 oideq(&head_commit
->object
.oid
, &opts
->squash_onto
)) {
3359 * When the user tells us to "merge" something into a
3360 * "[new root]", let's simply fast-forward to the merge head.
3362 rollback_lock_file(&lock
);
3364 ret
= error(_("octopus merge cannot be executed on "
3365 "top of a [new root]"));
3367 ret
= fast_forward_to(r
, &to_merge
->item
->object
.oid
,
3368 &head_commit
->object
.oid
, 0,
3374 const char *message
= get_commit_buffer(commit
, NULL
);
3379 ret
= error(_("could not get commit message of '%s'"),
3380 oid_to_hex(&commit
->object
.oid
));
3383 write_author_script(message
);
3384 find_commit_subject(message
, &body
);
3386 ret
= write_message(body
, len
, git_path_merge_msg(r
), 0);
3387 unuse_commit_buffer(commit
, message
);
3389 error_errno(_("could not write '%s'"),
3390 git_path_merge_msg(r
));
3394 struct strbuf buf
= STRBUF_INIT
;
3397 strbuf_addf(&buf
, "author %s", git_author_info(0));
3398 write_author_script(buf
.buf
);
3401 if (oneline_offset
< arg_len
) {
3402 p
= arg
+ oneline_offset
;
3403 len
= arg_len
- oneline_offset
;
3405 strbuf_addf(&buf
, "Merge %s '%.*s'",
3406 to_merge
->next
? "branches" : "branch",
3407 merge_arg_len
, arg
);
3412 ret
= write_message(p
, len
, git_path_merge_msg(r
), 0);
3413 strbuf_release(&buf
);
3415 error_errno(_("could not write '%s'"),
3416 git_path_merge_msg(r
));
3422 * If HEAD is not identical to the first parent of the original merge
3423 * commit, we cannot fast-forward.
3425 can_fast_forward
= opts
->allow_ff
&& commit
&& commit
->parents
&&
3426 oideq(&commit
->parents
->item
->object
.oid
,
3427 &head_commit
->object
.oid
);
3430 * If any merge head is different from the original one, we cannot
3433 if (can_fast_forward
) {
3434 struct commit_list
*p
= commit
->parents
->next
;
3436 for (j
= to_merge
; j
&& p
; j
= j
->next
, p
= p
->next
)
3437 if (!oideq(&j
->item
->object
.oid
,
3438 &p
->item
->object
.oid
)) {
3439 can_fast_forward
= 0;
3443 * If the number of merge heads differs from the original merge
3444 * commit, we cannot fast-forward.
3447 can_fast_forward
= 0;
3450 if (can_fast_forward
) {
3451 rollback_lock_file(&lock
);
3452 ret
= fast_forward_to(r
, &commit
->object
.oid
,
3453 &head_commit
->object
.oid
, 0, opts
);
3454 if (flags
& TODO_EDIT_MERGE_MSG
) {
3455 run_commit_flags
|= AMEND_MSG
;
3456 goto fast_forward_edit
;
3461 if (strategy
|| to_merge
->next
) {
3463 struct child_process cmd
= CHILD_PROCESS_INIT
;
3465 if (read_env_script(&cmd
.env_array
)) {
3466 const char *gpg_opt
= gpg_sign_opt_quoted(opts
);
3468 ret
= error(_(staged_changes_advice
), gpg_opt
, gpg_opt
);
3473 argv_array_push(&cmd
.args
, "merge");
3474 argv_array_push(&cmd
.args
, "-s");
3476 argv_array_push(&cmd
.args
, "octopus");
3478 argv_array_push(&cmd
.args
, strategy
);
3479 for (k
= 0; k
< opts
->xopts_nr
; k
++)
3480 argv_array_pushf(&cmd
.args
,
3481 "-X%s", opts
->xopts
[k
]);
3483 argv_array_push(&cmd
.args
, "--no-edit");
3484 argv_array_push(&cmd
.args
, "--no-ff");
3485 argv_array_push(&cmd
.args
, "--no-log");
3486 argv_array_push(&cmd
.args
, "--no-stat");
3487 argv_array_push(&cmd
.args
, "-F");
3488 argv_array_push(&cmd
.args
, git_path_merge_msg(r
));
3490 argv_array_push(&cmd
.args
, opts
->gpg_sign
);
3492 /* Add the tips to be merged */
3493 for (j
= to_merge
; j
; j
= j
->next
)
3494 argv_array_push(&cmd
.args
,
3495 oid_to_hex(&j
->item
->object
.oid
));
3497 strbuf_release(&ref_name
);
3498 unlink(git_path_cherry_pick_head(r
));
3499 rollback_lock_file(&lock
);
3501 rollback_lock_file(&lock
);
3502 ret
= run_command(&cmd
);
3504 /* force re-reading of the cache */
3505 if (!ret
&& (discard_index(r
->index
) < 0 ||
3506 repo_read_index(r
) < 0))
3507 ret
= error(_("could not read index"));
3511 merge_commit
= to_merge
->item
;
3512 bases
= get_merge_bases(head_commit
, merge_commit
);
3513 if (bases
&& oideq(&merge_commit
->object
.oid
,
3514 &bases
->item
->object
.oid
)) {
3516 /* skip merging an ancestor of HEAD */
3520 write_message(oid_to_hex(&merge_commit
->object
.oid
), the_hash_algo
->hexsz
,
3521 git_path_merge_head(r
), 0);
3522 write_message("no-ff", 5, git_path_merge_mode(r
), 0);
3524 for (j
= bases
; j
; j
= j
->next
)
3525 commit_list_insert(j
->item
, &reversed
);
3526 free_commit_list(bases
);
3529 init_merge_options(&o
, r
);
3531 o
.branch2
= ref_name
.buf
;
3532 o
.buffer_output
= 2;
3534 ret
= merge_recursive(&o
, head_commit
, merge_commit
, reversed
, &i
);
3536 fputs(o
.obuf
.buf
, stdout
);
3537 strbuf_release(&o
.obuf
);
3539 error(_("could not even attempt to merge '%.*s'"),
3540 merge_arg_len
, arg
);
3544 * The return value of merge_recursive() is 1 on clean, and 0 on
3547 * Let's reverse that, so that do_merge() returns 0 upon success and
3548 * 1 upon failed merge (keeping the return value -1 for the cases where
3549 * we will want to reschedule the `merge` command).
3553 if (r
->index
->cache_changed
&&
3554 write_locked_index(r
->index
, &lock
, COMMIT_LOCK
)) {
3555 ret
= error(_("merge: Unable to write new index file"));
3559 rollback_lock_file(&lock
);
3561 repo_rerere(r
, opts
->allow_rerere_auto
);
3564 * In case of problems, we now want to return a positive
3565 * value (a negative one would indicate that the `merge`
3566 * command needs to be rescheduled).
3569 ret
= !!run_git_commit(r
, git_path_merge_msg(r
), opts
,
3573 strbuf_release(&ref_name
);
3574 rollback_lock_file(&lock
);
3575 free_commit_list(to_merge
);
3579 static int is_final_fixup(struct todo_list
*todo_list
)
3581 int i
= todo_list
->current
;
3583 if (!is_fixup(todo_list
->items
[i
].command
))
3586 while (++i
< todo_list
->nr
)
3587 if (is_fixup(todo_list
->items
[i
].command
))
3589 else if (!is_noop(todo_list
->items
[i
].command
))
3594 static enum todo_command
peek_command(struct todo_list
*todo_list
, int offset
)
3598 for (i
= todo_list
->current
+ offset
; i
< todo_list
->nr
; i
++)
3599 if (!is_noop(todo_list
->items
[i
].command
))
3600 return todo_list
->items
[i
].command
;
3605 static int apply_autostash(struct replay_opts
*opts
)
3607 struct strbuf stash_sha1
= STRBUF_INIT
;
3608 struct child_process child
= CHILD_PROCESS_INIT
;
3611 if (!read_oneliner(&stash_sha1
, rebase_path_autostash(), 1)) {
3612 strbuf_release(&stash_sha1
);
3615 strbuf_trim(&stash_sha1
);
3618 child
.no_stdout
= 1;
3619 child
.no_stderr
= 1;
3620 argv_array_push(&child
.args
, "stash");
3621 argv_array_push(&child
.args
, "apply");
3622 argv_array_push(&child
.args
, stash_sha1
.buf
);
3623 if (!run_command(&child
))
3624 fprintf(stderr
, _("Applied autostash.\n"));
3626 struct child_process store
= CHILD_PROCESS_INIT
;
3629 argv_array_push(&store
.args
, "stash");
3630 argv_array_push(&store
.args
, "store");
3631 argv_array_push(&store
.args
, "-m");
3632 argv_array_push(&store
.args
, "autostash");
3633 argv_array_push(&store
.args
, "-q");
3634 argv_array_push(&store
.args
, stash_sha1
.buf
);
3635 if (run_command(&store
))
3636 ret
= error(_("cannot store %s"), stash_sha1
.buf
);
3639 _("Applying autostash resulted in conflicts.\n"
3640 "Your changes are safe in the stash.\n"
3641 "You can run \"git stash pop\" or"
3642 " \"git stash drop\" at any time.\n"));
3645 strbuf_release(&stash_sha1
);
3649 static const char *reflog_message(struct replay_opts
*opts
,
3650 const char *sub_action
, const char *fmt
, ...)
3653 static struct strbuf buf
= STRBUF_INIT
;
3657 strbuf_addstr(&buf
, action_name(opts
));
3659 strbuf_addf(&buf
, " (%s)", sub_action
);
3661 strbuf_addstr(&buf
, ": ");
3662 strbuf_vaddf(&buf
, fmt
, ap
);
3669 static int run_git_checkout(struct repository
*r
, struct replay_opts
*opts
,
3670 const char *commit
, const char *action
)
3672 struct child_process cmd
= CHILD_PROCESS_INIT
;
3677 argv_array_push(&cmd
.args
, "checkout");
3678 argv_array_push(&cmd
.args
, commit
);
3679 argv_array_pushf(&cmd
.env_array
, GIT_REFLOG_ACTION
"=%s", action
);
3682 ret
= run_command(&cmd
);
3684 ret
= run_command_silent_on_success(&cmd
);
3687 discard_index(r
->index
);
3692 int prepare_branch_to_be_rebased(struct repository
*r
, struct replay_opts
*opts
,
3697 if (commit
&& *commit
) {
3698 action
= reflog_message(opts
, "start", "checkout %s", commit
);
3699 if (run_git_checkout(r
, opts
, commit
, action
))
3700 return error(_("could not checkout %s"), commit
);
3706 static int checkout_onto(struct repository
*r
, struct replay_opts
*opts
,
3707 const char *onto_name
, const struct object_id
*onto
,
3708 const char *orig_head
)
3710 struct object_id oid
;
3711 const char *action
= reflog_message(opts
, "start", "checkout %s", onto_name
);
3713 if (get_oid(orig_head
, &oid
))
3714 return error(_("%s: not a valid OID"), orig_head
);
3716 if (run_git_checkout(r
, opts
, oid_to_hex(onto
), action
)) {
3717 apply_autostash(opts
);
3718 sequencer_remove_state(opts
);
3719 return error(_("could not detach HEAD"));
3722 return update_ref(NULL
, "ORIG_HEAD", &oid
, NULL
, 0, UPDATE_REFS_MSG_ON_ERR
);
3725 static int stopped_at_head(struct repository
*r
)
3727 struct object_id head
;
3728 struct commit
*commit
;
3729 struct commit_message message
;
3731 if (get_oid("HEAD", &head
) ||
3732 !(commit
= lookup_commit(r
, &head
)) ||
3733 parse_commit(commit
) || get_message(commit
, &message
))
3734 fprintf(stderr
, _("Stopped at HEAD\n"));
3736 fprintf(stderr
, _("Stopped at %s\n"), message
.label
);
3737 free_message(commit
, &message
);
3743 static const char rescheduled_advice
[] =
3744 N_("Could not execute the todo command\n"
3748 "It has been rescheduled; To edit the command before continuing, please\n"
3749 "edit the todo list first:\n"
3751 " git rebase --edit-todo\n"
3752 " git rebase --continue\n");
3754 static int pick_commits(struct repository
*r
,
3755 struct todo_list
*todo_list
,
3756 struct replay_opts
*opts
)
3758 int res
= 0, reschedule
= 0;
3760 setenv(GIT_REFLOG_ACTION
, action_name(opts
), 0);
3762 assert(!(opts
->signoff
|| opts
->no_commit
||
3763 opts
->record_origin
|| opts
->edit
));
3764 if (read_and_refresh_cache(r
, opts
))
3767 while (todo_list
->current
< todo_list
->nr
) {
3768 struct todo_item
*item
= todo_list
->items
+ todo_list
->current
;
3769 const char *arg
= todo_item_get_arg(todo_list
, item
);
3772 if (save_todo(todo_list
, opts
))
3774 if (is_rebase_i(opts
)) {
3775 if (item
->command
!= TODO_COMMENT
) {
3776 FILE *f
= fopen(rebase_path_msgnum(), "w");
3778 todo_list
->done_nr
++;
3781 fprintf(f
, "%d\n", todo_list
->done_nr
);
3785 fprintf(stderr
, "Rebasing (%d/%d)%s",
3787 todo_list
->total_nr
,
3788 opts
->verbose
? "\n" : "\r");
3790 unlink(rebase_path_message());
3791 unlink(rebase_path_author_script());
3792 unlink(rebase_path_stopped_sha());
3793 unlink(rebase_path_amend());
3794 unlink(git_path_merge_head(r
));
3795 delete_ref(NULL
, "REBASE_HEAD", NULL
, REF_NO_DEREF
);
3797 if (item
->command
== TODO_BREAK
) {
3800 return stopped_at_head(r
);
3803 if (item
->command
<= TODO_SQUASH
) {
3804 if (is_rebase_i(opts
))
3805 setenv("GIT_REFLOG_ACTION", reflog_message(opts
,
3806 command_to_string(item
->command
), NULL
),
3808 res
= do_pick_commit(r
, item
->command
, item
->commit
,
3809 opts
, is_final_fixup(todo_list
),
3811 if (is_rebase_i(opts
) && res
< 0) {
3813 advise(_(rescheduled_advice
),
3814 get_item_line_length(todo_list
,
3815 todo_list
->current
),
3816 get_item_line(todo_list
,
3817 todo_list
->current
));
3818 todo_list
->current
--;
3819 if (save_todo(todo_list
, opts
))
3822 if (item
->command
== TODO_EDIT
) {
3823 struct commit
*commit
= item
->commit
;
3828 _("Stopped at %s... %.*s\n"),
3829 short_commit_name(commit
),
3830 item
->arg_len
, arg
);
3832 return error_with_patch(r
, commit
,
3833 arg
, item
->arg_len
, opts
, res
, !res
);
3835 if (is_rebase_i(opts
) && !res
)
3836 record_in_rewritten(&item
->commit
->object
.oid
,
3837 peek_command(todo_list
, 1));
3838 if (res
&& is_fixup(item
->command
)) {
3841 return error_failed_squash(r
, item
->commit
, opts
,
3842 item
->arg_len
, arg
);
3843 } else if (res
&& is_rebase_i(opts
) && item
->commit
) {
3845 struct object_id oid
;
3848 * If we are rewording and have either
3849 * fast-forwarded already, or are about to
3850 * create a new root commit, we want to amend,
3851 * otherwise we do not.
3853 if (item
->command
== TODO_REWORD
&&
3854 !get_oid("HEAD", &oid
) &&
3855 (oideq(&item
->commit
->object
.oid
, &oid
) ||
3856 (opts
->have_squash_onto
&&
3857 oideq(&opts
->squash_onto
, &oid
))))
3860 return res
| error_with_patch(r
, item
->commit
,
3861 arg
, item
->arg_len
, opts
,
3864 } else if (item
->command
== TODO_EXEC
) {
3865 char *end_of_arg
= (char *)(arg
+ item
->arg_len
);
3866 int saved
= *end_of_arg
;
3871 res
= do_exec(r
, arg
);
3872 *end_of_arg
= saved
;
3875 if (opts
->reschedule_failed_exec
)
3879 } else if (item
->command
== TODO_LABEL
) {
3880 if ((res
= do_label(r
, arg
, item
->arg_len
)))
3882 } else if (item
->command
== TODO_RESET
) {
3883 if ((res
= do_reset(r
, arg
, item
->arg_len
, opts
)))
3885 } else if (item
->command
== TODO_MERGE
) {
3886 if ((res
= do_merge(r
, item
->commit
,
3888 item
->flags
, opts
)) < 0)
3890 else if (item
->commit
)
3891 record_in_rewritten(&item
->commit
->object
.oid
,
3892 peek_command(todo_list
, 1));
3894 /* failed with merge conflicts */
3895 return error_with_patch(r
, item
->commit
,
3898 } else if (!is_noop(item
->command
))
3899 return error(_("unknown command %d"), item
->command
);
3902 advise(_(rescheduled_advice
),
3903 get_item_line_length(todo_list
,
3904 todo_list
->current
),
3905 get_item_line(todo_list
, todo_list
->current
));
3906 todo_list
->current
--;
3907 if (save_todo(todo_list
, opts
))
3910 return error_with_patch(r
,
3914 } else if (check_todo
&& !res
) {
3917 if (stat(get_todo_path(opts
), &st
)) {
3918 res
= error_errno(_("could not stat '%s'"),
3919 get_todo_path(opts
));
3920 } else if (match_stat_data(&todo_list
->stat
, &st
)) {
3921 /* Reread the todo file if it has changed. */
3922 todo_list_release(todo_list
);
3923 if (read_populate_todo(r
, todo_list
, opts
))
3924 res
= -1; /* message was printed */
3925 /* `current` will be incremented below */
3926 todo_list
->current
= -1;
3930 todo_list
->current
++;
3935 if (is_rebase_i(opts
)) {
3936 struct strbuf head_ref
= STRBUF_INIT
, buf
= STRBUF_INIT
;
3939 /* Stopped in the middle, as planned? */
3940 if (todo_list
->current
< todo_list
->nr
)
3943 if (read_oneliner(&head_ref
, rebase_path_head_name(), 0) &&
3944 starts_with(head_ref
.buf
, "refs/")) {
3946 struct object_id head
, orig
;
3949 if (get_oid("HEAD", &head
)) {
3950 res
= error(_("cannot read HEAD"));
3952 strbuf_release(&head_ref
);
3953 strbuf_release(&buf
);
3956 if (!read_oneliner(&buf
, rebase_path_orig_head(), 0) ||
3957 get_oid_hex(buf
.buf
, &orig
)) {
3958 res
= error(_("could not read orig-head"));
3959 goto cleanup_head_ref
;
3962 if (!read_oneliner(&buf
, rebase_path_onto(), 0)) {
3963 res
= error(_("could not read 'onto'"));
3964 goto cleanup_head_ref
;
3966 msg
= reflog_message(opts
, "finish", "%s onto %s",
3967 head_ref
.buf
, buf
.buf
);
3968 if (update_ref(msg
, head_ref
.buf
, &head
, &orig
,
3969 REF_NO_DEREF
, UPDATE_REFS_MSG_ON_ERR
)) {
3970 res
= error(_("could not update %s"),
3972 goto cleanup_head_ref
;
3974 msg
= reflog_message(opts
, "finish", "returning to %s",
3976 if (create_symref("HEAD", head_ref
.buf
, msg
)) {
3977 res
= error(_("could not update HEAD to %s"),
3979 goto cleanup_head_ref
;
3984 if (opts
->verbose
) {
3985 struct rev_info log_tree_opt
;
3986 struct object_id orig
, head
;
3988 memset(&log_tree_opt
, 0, sizeof(log_tree_opt
));
3989 repo_init_revisions(r
, &log_tree_opt
, NULL
);
3990 log_tree_opt
.diff
= 1;
3991 log_tree_opt
.diffopt
.output_format
=
3992 DIFF_FORMAT_DIFFSTAT
;
3993 log_tree_opt
.disable_stdin
= 1;
3995 if (read_oneliner(&buf
, rebase_path_orig_head(), 0) &&
3996 !get_oid(buf
.buf
, &orig
) &&
3997 !get_oid("HEAD", &head
)) {
3998 diff_tree_oid(&orig
, &head
, "",
3999 &log_tree_opt
.diffopt
);
4000 log_tree_diff_flush(&log_tree_opt
);
4003 flush_rewritten_pending();
4004 if (!stat(rebase_path_rewritten_list(), &st
) &&
4006 struct child_process child
= CHILD_PROCESS_INIT
;
4007 const char *post_rewrite_hook
=
4008 find_hook("post-rewrite");
4010 child
.in
= open(rebase_path_rewritten_list(), O_RDONLY
);
4012 argv_array_push(&child
.args
, "notes");
4013 argv_array_push(&child
.args
, "copy");
4014 argv_array_push(&child
.args
, "--for-rewrite=rebase");
4015 /* we don't care if this copying failed */
4016 run_command(&child
);
4018 if (post_rewrite_hook
) {
4019 struct child_process hook
= CHILD_PROCESS_INIT
;
4021 hook
.in
= open(rebase_path_rewritten_list(),
4023 hook
.stdout_to_stderr
= 1;
4024 hook
.trace2_hook_name
= "post-rewrite";
4025 argv_array_push(&hook
.args
, post_rewrite_hook
);
4026 argv_array_push(&hook
.args
, "rebase");
4027 /* we don't care if this hook failed */
4031 apply_autostash(opts
);
4037 "Successfully rebased and updated %s.\n",
4041 strbuf_release(&buf
);
4042 strbuf_release(&head_ref
);
4046 * Sequence of picks finished successfully; cleanup by
4047 * removing the .git/sequencer directory
4049 return sequencer_remove_state(opts
);
4052 static int continue_single_pick(struct repository
*r
)
4054 const char *argv
[] = { "commit", NULL
};
4056 if (!file_exists(git_path_cherry_pick_head(r
)) &&
4057 !file_exists(git_path_revert_head(r
)))
4058 return error(_("no cherry-pick or revert in progress"));
4059 return run_command_v_opt(argv
, RUN_GIT_CMD
);
4062 static int commit_staged_changes(struct repository
*r
,
4063 struct replay_opts
*opts
,
4064 struct todo_list
*todo_list
)
4066 unsigned int flags
= ALLOW_EMPTY
| EDIT_MSG
;
4067 unsigned int final_fixup
= 0, is_clean
;
4069 if (has_unstaged_changes(r
, 1))
4070 return error(_("cannot rebase: You have unstaged changes."));
4072 is_clean
= !has_uncommitted_changes(r
, 0);
4074 if (file_exists(rebase_path_amend())) {
4075 struct strbuf rev
= STRBUF_INIT
;
4076 struct object_id head
, to_amend
;
4078 if (get_oid("HEAD", &head
))
4079 return error(_("cannot amend non-existing commit"));
4080 if (!read_oneliner(&rev
, rebase_path_amend(), 0))
4081 return error(_("invalid file: '%s'"), rebase_path_amend());
4082 if (get_oid_hex(rev
.buf
, &to_amend
))
4083 return error(_("invalid contents: '%s'"),
4084 rebase_path_amend());
4085 if (!is_clean
&& !oideq(&head
, &to_amend
))
4086 return error(_("\nYou have uncommitted changes in your "
4087 "working tree. Please, commit them\n"
4088 "first and then run 'git rebase "
4089 "--continue' again."));
4091 * When skipping a failed fixup/squash, we need to edit the
4092 * commit message, the current fixup list and count, and if it
4093 * was the last fixup/squash in the chain, we need to clean up
4094 * the commit message and if there was a squash, let the user
4097 if (!is_clean
|| !opts
->current_fixup_count
)
4098 ; /* this is not the final fixup */
4099 else if (!oideq(&head
, &to_amend
) ||
4100 !file_exists(rebase_path_stopped_sha())) {
4101 /* was a final fixup or squash done manually? */
4102 if (!is_fixup(peek_command(todo_list
, 0))) {
4103 unlink(rebase_path_fixup_msg());
4104 unlink(rebase_path_squash_msg());
4105 unlink(rebase_path_current_fixups());
4106 strbuf_reset(&opts
->current_fixups
);
4107 opts
->current_fixup_count
= 0;
4110 /* we are in a fixup/squash chain */
4111 const char *p
= opts
->current_fixups
.buf
;
4112 int len
= opts
->current_fixups
.len
;
4114 opts
->current_fixup_count
--;
4116 BUG("Incorrect current_fixups:\n%s", p
);
4117 while (len
&& p
[len
- 1] != '\n')
4119 strbuf_setlen(&opts
->current_fixups
, len
);
4120 if (write_message(p
, len
, rebase_path_current_fixups(),
4122 return error(_("could not write file: '%s'"),
4123 rebase_path_current_fixups());
4126 * If a fixup/squash in a fixup/squash chain failed, the
4127 * commit message is already correct, no need to commit
4130 * Only if it is the final command in the fixup/squash
4131 * chain, and only if the chain is longer than a single
4132 * fixup/squash command (which was just skipped), do we
4133 * actually need to re-commit with a cleaned up commit
4136 if (opts
->current_fixup_count
> 0 &&
4137 !is_fixup(peek_command(todo_list
, 0))) {
4140 * If there was not a single "squash" in the
4141 * chain, we only need to clean up the commit
4142 * message, no need to bother the user with
4143 * opening the commit message in the editor.
4145 if (!starts_with(p
, "squash ") &&
4146 !strstr(p
, "\nsquash "))
4147 flags
= (flags
& ~EDIT_MSG
) | CLEANUP_MSG
;
4148 } else if (is_fixup(peek_command(todo_list
, 0))) {
4150 * We need to update the squash message to skip
4151 * the latest commit message.
4153 struct commit
*commit
;
4154 const char *path
= rebase_path_squash_msg();
4156 if (parse_head(r
, &commit
) ||
4157 !(p
= get_commit_buffer(commit
, NULL
)) ||
4158 write_message(p
, strlen(p
), path
, 0)) {
4159 unuse_commit_buffer(commit
, p
);
4160 return error(_("could not write file: "
4163 unuse_commit_buffer(commit
, p
);
4167 strbuf_release(&rev
);
4172 const char *cherry_pick_head
= git_path_cherry_pick_head(r
);
4174 if (file_exists(cherry_pick_head
) && unlink(cherry_pick_head
))
4175 return error(_("could not remove CHERRY_PICK_HEAD"));
4180 if (run_git_commit(r
, final_fixup
? NULL
: rebase_path_message(),
4182 return error(_("could not commit staged changes."));
4183 unlink(rebase_path_amend());
4184 unlink(git_path_merge_head(r
));
4186 unlink(rebase_path_fixup_msg());
4187 unlink(rebase_path_squash_msg());
4189 if (opts
->current_fixup_count
> 0) {
4191 * Whether final fixup or not, we just cleaned up the commit
4194 unlink(rebase_path_current_fixups());
4195 strbuf_reset(&opts
->current_fixups
);
4196 opts
->current_fixup_count
= 0;
4201 int sequencer_continue(struct repository
*r
, struct replay_opts
*opts
)
4203 struct todo_list todo_list
= TODO_LIST_INIT
;
4206 if (read_and_refresh_cache(r
, opts
))
4209 if (read_populate_opts(opts
))
4211 if (is_rebase_i(opts
)) {
4212 if ((res
= read_populate_todo(r
, &todo_list
, opts
)))
4213 goto release_todo_list
;
4214 if (commit_staged_changes(r
, opts
, &todo_list
))
4216 } else if (!file_exists(get_todo_path(opts
)))
4217 return continue_single_pick(r
);
4218 else if ((res
= read_populate_todo(r
, &todo_list
, opts
)))
4219 goto release_todo_list
;
4221 if (!is_rebase_i(opts
)) {
4222 /* Verify that the conflict has been resolved */
4223 if (file_exists(git_path_cherry_pick_head(r
)) ||
4224 file_exists(git_path_revert_head(r
))) {
4225 res
= continue_single_pick(r
);
4227 goto release_todo_list
;
4229 if (index_differs_from(r
, "HEAD", NULL
, 0)) {
4230 res
= error_dirty_index(r
, opts
);
4231 goto release_todo_list
;
4233 todo_list
.current
++;
4234 } else if (file_exists(rebase_path_stopped_sha())) {
4235 struct strbuf buf
= STRBUF_INIT
;
4236 struct object_id oid
;
4238 if (read_oneliner(&buf
, rebase_path_stopped_sha(), 1) &&
4239 !get_oid_committish(buf
.buf
, &oid
))
4240 record_in_rewritten(&oid
, peek_command(&todo_list
, 0));
4241 strbuf_release(&buf
);
4244 res
= pick_commits(r
, &todo_list
, opts
);
4246 todo_list_release(&todo_list
);
4250 static int single_pick(struct repository
*r
,
4251 struct commit
*cmit
,
4252 struct replay_opts
*opts
)
4256 setenv(GIT_REFLOG_ACTION
, action_name(opts
), 0);
4257 return do_pick_commit(r
, opts
->action
== REPLAY_PICK
?
4258 TODO_PICK
: TODO_REVERT
, cmit
, opts
, 0,
4262 int sequencer_pick_revisions(struct repository
*r
,
4263 struct replay_opts
*opts
)
4265 struct todo_list todo_list
= TODO_LIST_INIT
;
4266 struct object_id oid
;
4270 if (read_and_refresh_cache(r
, opts
))
4273 for (i
= 0; i
< opts
->revs
->pending
.nr
; i
++) {
4274 struct object_id oid
;
4275 const char *name
= opts
->revs
->pending
.objects
[i
].name
;
4277 /* This happens when using --stdin. */
4281 if (!get_oid(name
, &oid
)) {
4282 if (!lookup_commit_reference_gently(r
, &oid
, 1)) {
4283 enum object_type type
= oid_object_info(r
,
4286 return error(_("%s: can't cherry-pick a %s"),
4287 name
, type_name(type
));
4290 return error(_("%s: bad revision"), name
);
4294 * If we were called as "git cherry-pick <commit>", just
4295 * cherry-pick/revert it, set CHERRY_PICK_HEAD /
4296 * REVERT_HEAD, and don't touch the sequencer state.
4297 * This means it is possible to cherry-pick in the middle
4298 * of a cherry-pick sequence.
4300 if (opts
->revs
->cmdline
.nr
== 1 &&
4301 opts
->revs
->cmdline
.rev
->whence
== REV_CMD_REV
&&
4302 opts
->revs
->no_walk
&&
4303 !opts
->revs
->cmdline
.rev
->flags
) {
4304 struct commit
*cmit
;
4305 if (prepare_revision_walk(opts
->revs
))
4306 return error(_("revision walk setup failed"));
4307 cmit
= get_revision(opts
->revs
);
4309 return error(_("empty commit set passed"));
4310 if (get_revision(opts
->revs
))
4311 BUG("unexpected extra commit from walk");
4312 return single_pick(r
, cmit
, opts
);
4316 * Start a new cherry-pick/ revert sequence; but
4317 * first, make sure that an existing one isn't in
4321 if (walk_revs_populate_todo(&todo_list
, opts
) ||
4322 create_seq_dir(r
) < 0)
4324 if (get_oid("HEAD", &oid
) && (opts
->action
== REPLAY_REVERT
))
4325 return error(_("can't revert as initial commit"));
4326 if (save_head(oid_to_hex(&oid
)))
4328 if (save_opts(opts
))
4330 update_abort_safety_file();
4331 res
= pick_commits(r
, &todo_list
, opts
);
4332 todo_list_release(&todo_list
);
4336 void append_signoff(struct strbuf
*msgbuf
, size_t ignore_footer
, unsigned flag
)
4338 unsigned no_dup_sob
= flag
& APPEND_SIGNOFF_DEDUP
;
4339 struct strbuf sob
= STRBUF_INIT
;
4342 strbuf_addstr(&sob
, sign_off_header
);
4343 strbuf_addstr(&sob
, fmt_name(WANT_COMMITTER_IDENT
));
4344 strbuf_addch(&sob
, '\n');
4347 strbuf_complete_line(msgbuf
);
4350 * If the whole message buffer is equal to the sob, pretend that we
4351 * found a conforming footer with a matching sob
4353 if (msgbuf
->len
- ignore_footer
== sob
.len
&&
4354 !strncmp(msgbuf
->buf
, sob
.buf
, sob
.len
))
4357 has_footer
= has_conforming_footer(msgbuf
, &sob
, ignore_footer
);
4360 const char *append_newlines
= NULL
;
4361 size_t len
= msgbuf
->len
- ignore_footer
;
4365 * The buffer is completely empty. Leave foom for
4366 * the title and body to be filled in by the user.
4368 append_newlines
= "\n\n";
4369 } else if (len
== 1) {
4371 * Buffer contains a single newline. Add another
4372 * so that we leave room for the title and body.
4374 append_newlines
= "\n";
4375 } else if (msgbuf
->buf
[len
- 2] != '\n') {
4377 * Buffer ends with a single newline. Add another
4378 * so that there is an empty line between the message
4381 append_newlines
= "\n";
4382 } /* else, the buffer already ends with two newlines. */
4384 if (append_newlines
)
4385 strbuf_splice(msgbuf
, msgbuf
->len
- ignore_footer
, 0,
4386 append_newlines
, strlen(append_newlines
));
4389 if (has_footer
!= 3 && (!no_dup_sob
|| has_footer
!= 2))
4390 strbuf_splice(msgbuf
, msgbuf
->len
- ignore_footer
, 0,
4393 strbuf_release(&sob
);
4396 struct labels_entry
{
4397 struct hashmap_entry entry
;
4398 char label
[FLEX_ARRAY
];
4401 static int labels_cmp(const void *fndata
, const struct labels_entry
*a
,
4402 const struct labels_entry
*b
, const void *key
)
4404 return key
? strcmp(a
->label
, key
) : strcmp(a
->label
, b
->label
);
4407 struct string_entry
{
4408 struct oidmap_entry entry
;
4409 char string
[FLEX_ARRAY
];
4412 struct label_state
{
4413 struct oidmap commit2label
;
4414 struct hashmap labels
;
4418 static const char *label_oid(struct object_id
*oid
, const char *label
,
4419 struct label_state
*state
)
4421 struct labels_entry
*labels_entry
;
4422 struct string_entry
*string_entry
;
4423 struct object_id dummy
;
4427 string_entry
= oidmap_get(&state
->commit2label
, oid
);
4429 return string_entry
->string
;
4432 * For "uninteresting" commits, i.e. commits that are not to be
4433 * rebased, and which can therefore not be labeled, we use a unique
4434 * abbreviation of the commit name. This is slightly more complicated
4435 * than calling find_unique_abbrev() because we also need to make
4436 * sure that the abbreviation does not conflict with any other
4439 * We disallow "interesting" commits to be labeled by a string that
4440 * is a valid full-length hash, to ensure that we always can find an
4441 * abbreviation for any uninteresting commit's names that does not
4442 * clash with any other label.
4447 strbuf_reset(&state
->buf
);
4448 strbuf_grow(&state
->buf
, GIT_MAX_HEXSZ
);
4449 label
= p
= state
->buf
.buf
;
4451 find_unique_abbrev_r(p
, oid
, default_abbrev
);
4454 * We may need to extend the abbreviated hash so that there is
4455 * no conflicting label.
4457 if (hashmap_get_from_hash(&state
->labels
, strihash(p
), p
)) {
4458 size_t i
= strlen(p
) + 1;
4460 oid_to_hex_r(p
, oid
);
4461 for (; i
< the_hash_algo
->hexsz
; i
++) {
4464 if (!hashmap_get_from_hash(&state
->labels
,
4470 } else if (((len
= strlen(label
)) == the_hash_algo
->hexsz
&&
4471 !get_oid_hex(label
, &dummy
)) ||
4472 (len
== 1 && *label
== '#') ||
4473 hashmap_get_from_hash(&state
->labels
,
4474 strihash(label
), label
)) {
4476 * If the label already exists, or if the label is a valid full
4477 * OID, or the label is a '#' (which we use as a separator
4478 * between merge heads and oneline), we append a dash and a
4479 * number to make it unique.
4481 struct strbuf
*buf
= &state
->buf
;
4484 strbuf_add(buf
, label
, len
);
4486 for (i
= 2; ; i
++) {
4487 strbuf_setlen(buf
, len
);
4488 strbuf_addf(buf
, "-%d", i
);
4489 if (!hashmap_get_from_hash(&state
->labels
,
4498 FLEX_ALLOC_STR(labels_entry
, label
, label
);
4499 hashmap_entry_init(labels_entry
, strihash(label
));
4500 hashmap_add(&state
->labels
, labels_entry
);
4502 FLEX_ALLOC_STR(string_entry
, string
, label
);
4503 oidcpy(&string_entry
->entry
.oid
, oid
);
4504 oidmap_put(&state
->commit2label
, string_entry
);
4506 return string_entry
->string
;
4509 static int make_script_with_merges(struct pretty_print_context
*pp
,
4510 struct rev_info
*revs
, struct strbuf
*out
,
4513 int keep_empty
= flags
& TODO_LIST_KEEP_EMPTY
;
4514 int rebase_cousins
= flags
& TODO_LIST_REBASE_COUSINS
;
4515 int root_with_onto
= flags
& TODO_LIST_ROOT_WITH_ONTO
;
4516 struct strbuf buf
= STRBUF_INIT
, oneline
= STRBUF_INIT
;
4517 struct strbuf label
= STRBUF_INIT
;
4518 struct commit_list
*commits
= NULL
, **tail
= &commits
, *iter
;
4519 struct commit_list
*tips
= NULL
, **tips_tail
= &tips
;
4520 struct commit
*commit
;
4521 struct oidmap commit2todo
= OIDMAP_INIT
;
4522 struct string_entry
*entry
;
4523 struct oidset interesting
= OIDSET_INIT
, child_seen
= OIDSET_INIT
,
4524 shown
= OIDSET_INIT
;
4525 struct label_state state
= { OIDMAP_INIT
, { NULL
}, STRBUF_INIT
};
4527 int abbr
= flags
& TODO_LIST_ABBREVIATE_CMDS
;
4528 const char *cmd_pick
= abbr
? "p" : "pick",
4529 *cmd_label
= abbr
? "l" : "label",
4530 *cmd_reset
= abbr
? "t" : "reset",
4531 *cmd_merge
= abbr
? "m" : "merge";
4533 oidmap_init(&commit2todo
, 0);
4534 oidmap_init(&state
.commit2label
, 0);
4535 hashmap_init(&state
.labels
, (hashmap_cmp_fn
) labels_cmp
, NULL
, 0);
4536 strbuf_init(&state
.buf
, 32);
4538 if (revs
->cmdline
.nr
&& (revs
->cmdline
.rev
[0].flags
& BOTTOM
)) {
4539 struct object_id
*oid
= &revs
->cmdline
.rev
[0].item
->oid
;
4540 FLEX_ALLOC_STR(entry
, string
, "onto");
4541 oidcpy(&entry
->entry
.oid
, oid
);
4542 oidmap_put(&state
.commit2label
, entry
);
4547 * - get onelines for all commits
4548 * - gather all branch tips (i.e. 2nd or later parents of merges)
4549 * - label all branch tips
4551 while ((commit
= get_revision(revs
))) {
4552 struct commit_list
*to_merge
;
4553 const char *p1
, *p2
;
4554 struct object_id
*oid
;
4557 tail
= &commit_list_insert(commit
, tail
)->next
;
4558 oidset_insert(&interesting
, &commit
->object
.oid
);
4560 is_empty
= is_original_commit_empty(commit
);
4561 if (!is_empty
&& (commit
->object
.flags
& PATCHSAME
))
4564 strbuf_reset(&oneline
);
4565 pretty_print_commit(pp
, commit
, &oneline
);
4567 to_merge
= commit
->parents
? commit
->parents
->next
: NULL
;
4569 /* non-merge commit: easy case */
4571 if (!keep_empty
&& is_empty
)
4572 strbuf_addf(&buf
, "%c ", comment_line_char
);
4573 strbuf_addf(&buf
, "%s %s %s", cmd_pick
,
4574 oid_to_hex(&commit
->object
.oid
),
4577 FLEX_ALLOC_STR(entry
, string
, buf
.buf
);
4578 oidcpy(&entry
->entry
.oid
, &commit
->object
.oid
);
4579 oidmap_put(&commit2todo
, entry
);
4584 /* Create a label */
4585 strbuf_reset(&label
);
4586 if (skip_prefix(oneline
.buf
, "Merge ", &p1
) &&
4587 (p1
= strchr(p1
, '\'')) &&
4588 (p2
= strchr(++p1
, '\'')))
4589 strbuf_add(&label
, p1
, p2
- p1
);
4590 else if (skip_prefix(oneline
.buf
, "Merge pull request ",
4592 (p1
= strstr(p1
, " from ")))
4593 strbuf_addstr(&label
, p1
+ strlen(" from "));
4595 strbuf_addbuf(&label
, &oneline
);
4597 for (p1
= label
.buf
; *p1
; p1
++)
4602 strbuf_addf(&buf
, "%s -C %s",
4603 cmd_merge
, oid_to_hex(&commit
->object
.oid
));
4605 /* label the tips of merged branches */
4606 for (; to_merge
; to_merge
= to_merge
->next
) {
4607 oid
= &to_merge
->item
->object
.oid
;
4608 strbuf_addch(&buf
, ' ');
4610 if (!oidset_contains(&interesting
, oid
)) {
4611 strbuf_addstr(&buf
, label_oid(oid
, NULL
,
4616 tips_tail
= &commit_list_insert(to_merge
->item
,
4619 strbuf_addstr(&buf
, label_oid(oid
, label
.buf
, &state
));
4621 strbuf_addf(&buf
, " # %s", oneline
.buf
);
4623 FLEX_ALLOC_STR(entry
, string
, buf
.buf
);
4624 oidcpy(&entry
->entry
.oid
, &commit
->object
.oid
);
4625 oidmap_put(&commit2todo
, entry
);
4630 * - label branch points
4631 * - add HEAD to the branch tips
4633 for (iter
= commits
; iter
; iter
= iter
->next
) {
4634 struct commit_list
*parent
= iter
->item
->parents
;
4635 for (; parent
; parent
= parent
->next
) {
4636 struct object_id
*oid
= &parent
->item
->object
.oid
;
4637 if (!oidset_contains(&interesting
, oid
))
4639 if (oidset_insert(&child_seen
, oid
))
4640 label_oid(oid
, "branch-point", &state
);
4643 /* Add HEAD as implict "tip of branch" */
4645 tips_tail
= &commit_list_insert(iter
->item
,
4650 * Third phase: output the todo list. This is a bit tricky, as we
4651 * want to avoid jumping back and forth between revisions. To
4652 * accomplish that goal, we walk backwards from the branch tips,
4653 * gathering commits not yet shown, reversing the list on the fly,
4654 * then outputting that list (labeling revisions as needed).
4656 strbuf_addf(out
, "%s onto\n", cmd_label
);
4657 for (iter
= tips
; iter
; iter
= iter
->next
) {
4658 struct commit_list
*list
= NULL
, *iter2
;
4660 commit
= iter
->item
;
4661 if (oidset_contains(&shown
, &commit
->object
.oid
))
4663 entry
= oidmap_get(&state
.commit2label
, &commit
->object
.oid
);
4666 strbuf_addf(out
, "\n%c Branch %s\n", comment_line_char
, entry
->string
);
4668 strbuf_addch(out
, '\n');
4670 while (oidset_contains(&interesting
, &commit
->object
.oid
) &&
4671 !oidset_contains(&shown
, &commit
->object
.oid
)) {
4672 commit_list_insert(commit
, &list
);
4673 if (!commit
->parents
) {
4677 commit
= commit
->parents
->item
;
4681 strbuf_addf(out
, "%s %s\n", cmd_reset
,
4682 rebase_cousins
|| root_with_onto
?
4683 "onto" : "[new root]");
4685 const char *to
= NULL
;
4687 entry
= oidmap_get(&state
.commit2label
,
4688 &commit
->object
.oid
);
4691 else if (!rebase_cousins
)
4692 to
= label_oid(&commit
->object
.oid
, NULL
,
4695 if (!to
|| !strcmp(to
, "onto"))
4696 strbuf_addf(out
, "%s onto\n", cmd_reset
);
4698 strbuf_reset(&oneline
);
4699 pretty_print_commit(pp
, commit
, &oneline
);
4700 strbuf_addf(out
, "%s %s # %s\n",
4701 cmd_reset
, to
, oneline
.buf
);
4705 for (iter2
= list
; iter2
; iter2
= iter2
->next
) {
4706 struct object_id
*oid
= &iter2
->item
->object
.oid
;
4707 entry
= oidmap_get(&commit2todo
, oid
);
4708 /* only show if not already upstream */
4710 strbuf_addf(out
, "%s\n", entry
->string
);
4711 entry
= oidmap_get(&state
.commit2label
, oid
);
4713 strbuf_addf(out
, "%s %s\n",
4714 cmd_label
, entry
->string
);
4715 oidset_insert(&shown
, oid
);
4718 free_commit_list(list
);
4721 free_commit_list(commits
);
4722 free_commit_list(tips
);
4724 strbuf_release(&label
);
4725 strbuf_release(&oneline
);
4726 strbuf_release(&buf
);
4728 oidmap_free(&commit2todo
, 1);
4729 oidmap_free(&state
.commit2label
, 1);
4730 hashmap_free(&state
.labels
, 1);
4731 strbuf_release(&state
.buf
);
4736 int sequencer_make_script(struct repository
*r
, struct strbuf
*out
, int argc
,
4737 const char **argv
, unsigned flags
)
4739 char *format
= NULL
;
4740 struct pretty_print_context pp
= {0};
4741 struct rev_info revs
;
4742 struct commit
*commit
;
4743 int keep_empty
= flags
& TODO_LIST_KEEP_EMPTY
;
4744 const char *insn
= flags
& TODO_LIST_ABBREVIATE_CMDS
? "p" : "pick";
4745 int rebase_merges
= flags
& TODO_LIST_REBASE_MERGES
;
4747 repo_init_revisions(r
, &revs
, NULL
);
4748 revs
.verbose_header
= 1;
4750 revs
.max_parents
= 1;
4751 revs
.cherry_mark
= 1;
4754 revs
.right_only
= 1;
4755 revs
.sort_order
= REV_SORT_IN_GRAPH_ORDER
;
4756 revs
.topo_order
= 1;
4758 revs
.pretty_given
= 1;
4759 git_config_get_string("rebase.instructionFormat", &format
);
4760 if (!format
|| !*format
) {
4762 format
= xstrdup("%s");
4764 get_commit_format(format
, &revs
);
4766 pp
.fmt
= revs
.commit_format
;
4767 pp
.output_encoding
= get_log_output_encoding();
4769 if (setup_revisions(argc
, argv
, &revs
, NULL
) > 1)
4770 return error(_("make_script: unhandled options"));
4772 if (prepare_revision_walk(&revs
) < 0)
4773 return error(_("make_script: error preparing revisions"));
4776 return make_script_with_merges(&pp
, &revs
, out
, flags
);
4778 while ((commit
= get_revision(&revs
))) {
4779 int is_empty
= is_original_commit_empty(commit
);
4781 if (!is_empty
&& (commit
->object
.flags
& PATCHSAME
))
4783 if (!keep_empty
&& is_empty
)
4784 strbuf_addf(out
, "%c ", comment_line_char
);
4785 strbuf_addf(out
, "%s %s ", insn
,
4786 oid_to_hex(&commit
->object
.oid
));
4787 pretty_print_commit(&pp
, commit
, out
);
4788 strbuf_addch(out
, '\n');
4794 * Add commands after pick and (series of) squash/fixup commands
4797 void todo_list_add_exec_commands(struct todo_list
*todo_list
,
4798 struct string_list
*commands
)
4800 struct strbuf
*buf
= &todo_list
->buf
;
4801 size_t base_offset
= buf
->len
;
4802 int i
, insert
, nr
= 0, alloc
= 0;
4803 struct todo_item
*items
= NULL
, *base_items
= NULL
;
4805 base_items
= xcalloc(commands
->nr
, sizeof(struct todo_item
));
4806 for (i
= 0; i
< commands
->nr
; i
++) {
4807 size_t command_len
= strlen(commands
->items
[i
].string
);
4809 strbuf_addstr(buf
, commands
->items
[i
].string
);
4810 strbuf_addch(buf
, '\n');
4812 base_items
[i
].command
= TODO_EXEC
;
4813 base_items
[i
].offset_in_buf
= base_offset
;
4814 base_items
[i
].arg_offset
= base_offset
+ strlen("exec ");
4815 base_items
[i
].arg_len
= command_len
- strlen("exec ");
4817 base_offset
+= command_len
+ 1;
4821 * Insert <commands> after every pick. Here, fixup/squash chains
4822 * are considered part of the pick, so we insert the commands *after*
4823 * those chains if there are any.
4825 * As we insert the exec commands immediatly after rearranging
4826 * any fixups and before the user edits the list, a fixup chain
4827 * can never contain comments (any comments are empty picks that
4828 * have been commented out because the user did not specify
4829 * --keep-empty). So, it is safe to insert an exec command
4830 * without looking at the command following a comment.
4833 for (i
= 0; i
< todo_list
->nr
; i
++) {
4834 enum todo_command command
= todo_list
->items
[i
].command
;
4835 if (insert
&& !is_fixup(command
)) {
4836 ALLOC_GROW(items
, nr
+ commands
->nr
, alloc
);
4837 COPY_ARRAY(items
+ nr
, base_items
, commands
->nr
);
4843 ALLOC_GROW(items
, nr
+ 1, alloc
);
4844 items
[nr
++] = todo_list
->items
[i
];
4846 if (command
== TODO_PICK
|| command
== TODO_MERGE
)
4850 /* insert or append final <commands> */
4851 if (insert
|| nr
== todo_list
->nr
) {
4852 ALLOC_GROW(items
, nr
+ commands
->nr
, alloc
);
4853 COPY_ARRAY(items
+ nr
, base_items
, commands
->nr
);
4858 FREE_AND_NULL(todo_list
->items
);
4859 todo_list
->items
= items
;
4861 todo_list
->alloc
= alloc
;
4864 static void todo_list_to_strbuf(struct repository
*r
, struct todo_list
*todo_list
,
4865 struct strbuf
*buf
, int num
, unsigned flags
)
4867 struct todo_item
*item
;
4868 int i
, max
= todo_list
->nr
;
4870 if (num
> 0 && num
< max
)
4873 for (item
= todo_list
->items
, i
= 0; i
< max
; i
++, item
++) {
4874 /* if the item is not a command write it and continue */
4875 if (item
->command
>= TODO_COMMENT
) {
4876 strbuf_addf(buf
, "%.*s\n", item
->arg_len
,
4877 todo_item_get_arg(todo_list
, item
));
4881 /* add command to the buffer */
4882 if (flags
& TODO_LIST_ABBREVIATE_CMDS
)
4883 strbuf_addch(buf
, command_to_char(item
->command
));
4885 strbuf_addstr(buf
, command_to_string(item
->command
));
4889 const char *oid
= flags
& TODO_LIST_SHORTEN_IDS
?
4890 short_commit_name(item
->commit
) :
4891 oid_to_hex(&item
->commit
->object
.oid
);
4893 if (item
->command
== TODO_MERGE
) {
4894 if (item
->flags
& TODO_EDIT_MERGE_MSG
)
4895 strbuf_addstr(buf
, " -c");
4897 strbuf_addstr(buf
, " -C");
4900 strbuf_addf(buf
, " %s", oid
);
4903 /* add all the rest */
4905 strbuf_addch(buf
, '\n');
4907 strbuf_addf(buf
, " %.*s\n", item
->arg_len
,
4908 todo_item_get_arg(todo_list
, item
));
4912 int todo_list_write_to_file(struct repository
*r
, struct todo_list
*todo_list
,
4913 const char *file
, const char *shortrevisions
,
4914 const char *shortonto
, int num
, unsigned flags
)
4917 struct strbuf buf
= STRBUF_INIT
;
4919 todo_list_to_strbuf(r
, todo_list
, &buf
, num
, flags
);
4920 if (flags
& TODO_LIST_APPEND_TODO_HELP
)
4921 append_todo_help(flags
& TODO_LIST_KEEP_EMPTY
, count_commands(todo_list
),
4922 shortrevisions
, shortonto
, &buf
);
4924 res
= write_message(buf
.buf
, buf
.len
, file
, 0);
4925 strbuf_release(&buf
);
4930 static const char edit_todo_list_advice
[] =
4931 N_("You can fix this with 'git rebase --edit-todo' "
4932 "and then run 'git rebase --continue'.\n"
4933 "Or you can abort the rebase with 'git rebase"
4936 int check_todo_list_from_file(struct repository
*r
)
4938 struct todo_list old_todo
= TODO_LIST_INIT
, new_todo
= TODO_LIST_INIT
;
4941 if (strbuf_read_file_or_whine(&new_todo
.buf
, rebase_path_todo()) < 0) {
4946 if (strbuf_read_file_or_whine(&old_todo
.buf
, rebase_path_todo_backup()) < 0) {
4951 res
= todo_list_parse_insn_buffer(r
, old_todo
.buf
.buf
, &old_todo
);
4953 res
= todo_list_parse_insn_buffer(r
, new_todo
.buf
.buf
, &new_todo
);
4955 res
= todo_list_check(&old_todo
, &new_todo
);
4957 fprintf(stderr
, _(edit_todo_list_advice
));
4959 todo_list_release(&old_todo
);
4960 todo_list_release(&new_todo
);
4965 /* skip picking commits whose parents are unchanged */
4966 static int skip_unnecessary_picks(struct repository
*r
,
4967 struct todo_list
*todo_list
,
4968 struct object_id
*base_oid
)
4970 struct object_id
*parent_oid
;
4973 for (i
= 0; i
< todo_list
->nr
; i
++) {
4974 struct todo_item
*item
= todo_list
->items
+ i
;
4976 if (item
->command
>= TODO_NOOP
)
4978 if (item
->command
!= TODO_PICK
)
4980 if (parse_commit(item
->commit
)) {
4981 return error(_("could not parse commit '%s'"),
4982 oid_to_hex(&item
->commit
->object
.oid
));
4984 if (!item
->commit
->parents
)
4985 break; /* root commit */
4986 if (item
->commit
->parents
->next
)
4987 break; /* merge commit */
4988 parent_oid
= &item
->commit
->parents
->item
->object
.oid
;
4989 if (!oideq(parent_oid
, base_oid
))
4991 oidcpy(base_oid
, &item
->commit
->object
.oid
);
4994 const char *done_path
= rebase_path_done();
4996 if (todo_list_write_to_file(r
, todo_list
, done_path
, NULL
, NULL
, i
, 0)) {
4997 error_errno(_("could not write to '%s'"), done_path
);
5001 MOVE_ARRAY(todo_list
->items
, todo_list
->items
+ i
, todo_list
->nr
- i
);
5003 todo_list
->current
= 0;
5005 if (is_fixup(peek_command(todo_list
, 0)))
5006 record_in_rewritten(base_oid
, peek_command(todo_list
, 0));
5012 int complete_action(struct repository
*r
, struct replay_opts
*opts
, unsigned flags
,
5013 const char *shortrevisions
, const char *onto_name
,
5014 struct commit
*onto
, const char *orig_head
,
5015 struct string_list
*commands
, unsigned autosquash
,
5016 struct todo_list
*todo_list
)
5018 const char *shortonto
, *todo_file
= rebase_path_todo();
5019 struct todo_list new_todo
= TODO_LIST_INIT
;
5020 struct strbuf
*buf
= &todo_list
->buf
;
5021 struct object_id oid
= onto
->object
.oid
;
5024 shortonto
= find_unique_abbrev(&oid
, DEFAULT_ABBREV
);
5026 if (buf
->len
== 0) {
5027 struct todo_item
*item
= append_new_todo(todo_list
);
5028 item
->command
= TODO_NOOP
;
5029 item
->commit
= NULL
;
5030 item
->arg_len
= item
->arg_offset
= item
->flags
= item
->offset_in_buf
= 0;
5033 if (autosquash
&& todo_list_rearrange_squash(todo_list
))
5037 todo_list_add_exec_commands(todo_list
, commands
);
5039 if (count_commands(todo_list
) == 0) {
5040 apply_autostash(opts
);
5041 sequencer_remove_state(opts
);
5043 return error(_("nothing to do"));
5046 res
= edit_todo_list(r
, todo_list
, &new_todo
, shortrevisions
,
5050 else if (res
== -2) {
5051 apply_autostash(opts
);
5052 sequencer_remove_state(opts
);
5055 } else if (res
== -3) {
5056 apply_autostash(opts
);
5057 sequencer_remove_state(opts
);
5058 todo_list_release(&new_todo
);
5060 return error(_("nothing to do"));
5063 if (todo_list_parse_insn_buffer(r
, new_todo
.buf
.buf
, &new_todo
) ||
5064 todo_list_check(todo_list
, &new_todo
)) {
5065 fprintf(stderr
, _(edit_todo_list_advice
));
5066 checkout_onto(r
, opts
, onto_name
, &onto
->object
.oid
, orig_head
);
5067 todo_list_release(&new_todo
);
5072 if (opts
->allow_ff
&& skip_unnecessary_picks(r
, &new_todo
, &oid
)) {
5073 todo_list_release(&new_todo
);
5074 return error(_("could not skip unnecessary pick commands"));
5077 if (todo_list_write_to_file(r
, &new_todo
, todo_file
, NULL
, NULL
, -1,
5078 flags
& ~(TODO_LIST_SHORTEN_IDS
))) {
5079 todo_list_release(&new_todo
);
5080 return error_errno(_("could not write '%s'"), todo_file
);
5083 todo_list_release(&new_todo
);
5085 if (checkout_onto(r
, opts
, onto_name
, &oid
, orig_head
))
5088 if (require_clean_work_tree(r
, "rebase", "", 1, 1))
5091 return sequencer_continue(r
, opts
);
5094 struct subject2item_entry
{
5095 struct hashmap_entry entry
;
5097 char subject
[FLEX_ARRAY
];
5100 static int subject2item_cmp(const void *fndata
,
5101 const struct subject2item_entry
*a
,
5102 const struct subject2item_entry
*b
, const void *key
)
5104 return key
? strcmp(a
->subject
, key
) : strcmp(a
->subject
, b
->subject
);
5107 define_commit_slab(commit_todo_item
, struct todo_item
*);
5110 * Rearrange the todo list that has both "pick commit-id msg" and "pick
5111 * commit-id fixup!/squash! msg" in it so that the latter is put immediately
5112 * after the former, and change "pick" to "fixup"/"squash".
5114 * Note that if the config has specified a custom instruction format, each log
5115 * message will have to be retrieved from the commit (as the oneline in the
5116 * script cannot be trusted) in order to normalize the autosquash arrangement.
5118 int todo_list_rearrange_squash(struct todo_list
*todo_list
)
5120 struct hashmap subject2item
;
5121 int rearranged
= 0, *next
, *tail
, i
, nr
= 0, alloc
= 0;
5123 struct commit_todo_item commit_todo
;
5124 struct todo_item
*items
= NULL
;
5126 init_commit_todo_item(&commit_todo
);
5128 * The hashmap maps onelines to the respective todo list index.
5130 * If any items need to be rearranged, the next[i] value will indicate
5131 * which item was moved directly after the i'th.
5133 * In that case, last[i] will indicate the index of the latest item to
5134 * be moved to appear after the i'th.
5136 hashmap_init(&subject2item
, (hashmap_cmp_fn
) subject2item_cmp
,
5137 NULL
, todo_list
->nr
);
5138 ALLOC_ARRAY(next
, todo_list
->nr
);
5139 ALLOC_ARRAY(tail
, todo_list
->nr
);
5140 ALLOC_ARRAY(subjects
, todo_list
->nr
);
5141 for (i
= 0; i
< todo_list
->nr
; i
++) {
5142 struct strbuf buf
= STRBUF_INIT
;
5143 struct todo_item
*item
= todo_list
->items
+ i
;
5144 const char *commit_buffer
, *subject
, *p
;
5147 struct subject2item_entry
*entry
;
5149 next
[i
] = tail
[i
] = -1;
5150 if (!item
->commit
|| item
->command
== TODO_DROP
) {
5155 if (is_fixup(item
->command
)) {
5156 clear_commit_todo_item(&commit_todo
);
5157 return error(_("the script was already rearranged."));
5160 *commit_todo_item_at(&commit_todo
, item
->commit
) = item
;
5162 parse_commit(item
->commit
);
5163 commit_buffer
= get_commit_buffer(item
->commit
, NULL
);
5164 find_commit_subject(commit_buffer
, &subject
);
5165 format_subject(&buf
, subject
, " ");
5166 subject
= subjects
[i
] = strbuf_detach(&buf
, &subject_len
);
5167 unuse_commit_buffer(item
->commit
, commit_buffer
);
5168 if ((skip_prefix(subject
, "fixup! ", &p
) ||
5169 skip_prefix(subject
, "squash! ", &p
))) {
5170 struct commit
*commit2
;
5175 if (!skip_prefix(p
, "fixup! ", &p
) &&
5176 !skip_prefix(p
, "squash! ", &p
))
5180 if ((entry
= hashmap_get_from_hash(&subject2item
,
5182 /* found by title */
5184 else if (!strchr(p
, ' ') &&
5186 lookup_commit_reference_by_name(p
)) &&
5187 *commit_todo_item_at(&commit_todo
, commit2
))
5188 /* found by commit name */
5189 i2
= *commit_todo_item_at(&commit_todo
, commit2
)
5192 /* copy can be a prefix of the commit subject */
5193 for (i2
= 0; i2
< i
; i2
++)
5195 starts_with(subjects
[i2
], p
))
5203 todo_list
->items
[i
].command
=
5204 starts_with(subject
, "fixup!") ?
5205 TODO_FIXUP
: TODO_SQUASH
;
5211 } else if (!hashmap_get_from_hash(&subject2item
,
5212 strhash(subject
), subject
)) {
5213 FLEX_ALLOC_MEM(entry
, subject
, subject
, subject_len
);
5215 hashmap_entry_init(entry
, strhash(entry
->subject
));
5216 hashmap_put(&subject2item
, entry
);
5221 for (i
= 0; i
< todo_list
->nr
; i
++) {
5222 enum todo_command command
= todo_list
->items
[i
].command
;
5226 * Initially, all commands are 'pick's. If it is a
5227 * fixup or a squash now, we have rearranged it.
5229 if (is_fixup(command
))
5233 ALLOC_GROW(items
, nr
+ 1, alloc
);
5234 items
[nr
++] = todo_list
->items
[cur
];
5239 FREE_AND_NULL(todo_list
->items
);
5240 todo_list
->items
= items
;
5242 todo_list
->alloc
= alloc
;
5247 for (i
= 0; i
< todo_list
->nr
; i
++)
5250 hashmap_free(&subject2item
, 1);
5252 clear_commit_todo_item(&commit_todo
);