Merge branch 'so/combine-diff-simplify'
[git/gitster.git] / sequencer.c
blob3367eb5fbfb0448de4ab0dddb0d6f071f5f15944
1 #include "cache.h"
2 #include "config.h"
3 #include "lockfile.h"
4 #include "dir.h"
5 #include "object-store.h"
6 #include "object.h"
7 #include "commit.h"
8 #include "sequencer.h"
9 #include "tag.h"
10 #include "run-command.h"
11 #include "exec-cmd.h"
12 #include "utf8.h"
13 #include "cache-tree.h"
14 #include "diff.h"
15 #include "revision.h"
16 #include "rerere.h"
17 #include "merge-recursive.h"
18 #include "refs.h"
19 #include "strvec.h"
20 #include "quote.h"
21 #include "trailer.h"
22 #include "log-tree.h"
23 #include "wt-status.h"
24 #include "hashmap.h"
25 #include "notes-utils.h"
26 #include "sigchain.h"
27 #include "unpack-trees.h"
28 #include "worktree.h"
29 #include "oidmap.h"
30 #include "oidset.h"
31 #include "commit-slab.h"
32 #include "alias.h"
33 #include "commit-reach.h"
34 #include "rebase-interactive.h"
35 #include "reset.h"
37 #define GIT_REFLOG_ACTION "GIT_REFLOG_ACTION"
39 static const char sign_off_header[] = "Signed-off-by: ";
40 static const char cherry_picked_prefix[] = "(cherry picked from commit ";
42 GIT_PATH_FUNC(git_path_commit_editmsg, "COMMIT_EDITMSG")
44 static GIT_PATH_FUNC(git_path_seq_dir, "sequencer")
46 static GIT_PATH_FUNC(git_path_todo_file, "sequencer/todo")
47 static GIT_PATH_FUNC(git_path_opts_file, "sequencer/opts")
48 static GIT_PATH_FUNC(git_path_head_file, "sequencer/head")
49 static GIT_PATH_FUNC(git_path_abort_safety_file, "sequencer/abort-safety")
51 static GIT_PATH_FUNC(rebase_path, "rebase-merge")
53 * The file containing rebase commands, comments, and empty lines.
54 * This file is created by "git rebase -i" then edited by the user. As
55 * the lines are processed, they are removed from the front of this
56 * file and written to the tail of 'done'.
58 GIT_PATH_FUNC(rebase_path_todo, "rebase-merge/git-rebase-todo")
59 GIT_PATH_FUNC(rebase_path_todo_backup, "rebase-merge/git-rebase-todo.backup")
61 GIT_PATH_FUNC(rebase_path_dropped, "rebase-merge/dropped")
64 * The rebase command lines that have already been processed. A line
65 * is moved here when it is first handled, before any associated user
66 * actions.
68 static GIT_PATH_FUNC(rebase_path_done, "rebase-merge/done")
70 * The file to keep track of how many commands were already processed (e.g.
71 * for the prompt).
73 static GIT_PATH_FUNC(rebase_path_msgnum, "rebase-merge/msgnum")
75 * The file to keep track of how many commands are to be processed in total
76 * (e.g. for the prompt).
78 static GIT_PATH_FUNC(rebase_path_msgtotal, "rebase-merge/end")
80 * The commit message that is planned to be used for any changes that
81 * need to be committed following a user interaction.
83 static GIT_PATH_FUNC(rebase_path_message, "rebase-merge/message")
85 * The file into which is accumulated the suggested commit message for
86 * squash/fixup commands. When the first of a series of squash/fixups
87 * is seen, the file is created and the commit message from the
88 * previous commit and from the first squash/fixup commit are written
89 * to it. The commit message for each subsequent squash/fixup commit
90 * is appended to the file as it is processed.
92 static GIT_PATH_FUNC(rebase_path_squash_msg, "rebase-merge/message-squash")
94 * If the current series of squash/fixups has not yet included a squash
95 * command, then this file exists and holds the commit message of the
96 * original "pick" commit. (If the series ends without a "squash"
97 * command, then this can be used as the commit message of the combined
98 * commit without opening the editor.)
100 static GIT_PATH_FUNC(rebase_path_fixup_msg, "rebase-merge/message-fixup")
102 * This file contains the list fixup/squash commands that have been
103 * accumulated into message-fixup or message-squash so far.
105 static GIT_PATH_FUNC(rebase_path_current_fixups, "rebase-merge/current-fixups")
107 * A script to set the GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, and
108 * GIT_AUTHOR_DATE that will be used for the commit that is currently
109 * being rebased.
111 static GIT_PATH_FUNC(rebase_path_author_script, "rebase-merge/author-script")
113 * When an "edit" rebase command is being processed, the SHA1 of the
114 * commit to be edited is recorded in this file. When "git rebase
115 * --continue" is executed, if there are any staged changes then they
116 * will be amended to the HEAD commit, but only provided the HEAD
117 * commit is still the commit to be edited. When any other rebase
118 * command is processed, this file is deleted.
120 static GIT_PATH_FUNC(rebase_path_amend, "rebase-merge/amend")
122 * When we stop at a given patch via the "edit" command, this file contains
123 * the commit object name of the corresponding patch.
125 static GIT_PATH_FUNC(rebase_path_stopped_sha, "rebase-merge/stopped-sha")
127 * For the post-rewrite hook, we make a list of rewritten commits and
128 * their new sha1s. The rewritten-pending list keeps the sha1s of
129 * commits that have been processed, but not committed yet,
130 * e.g. because they are waiting for a 'squash' command.
132 static GIT_PATH_FUNC(rebase_path_rewritten_list, "rebase-merge/rewritten-list")
133 static GIT_PATH_FUNC(rebase_path_rewritten_pending,
134 "rebase-merge/rewritten-pending")
137 * The path of the file containing the OID of the "squash onto" commit, i.e.
138 * the dummy commit used for `reset [new root]`.
140 static GIT_PATH_FUNC(rebase_path_squash_onto, "rebase-merge/squash-onto")
143 * The path of the file listing refs that need to be deleted after the rebase
144 * finishes. This is used by the `label` command to record the need for cleanup.
146 static GIT_PATH_FUNC(rebase_path_refs_to_delete, "rebase-merge/refs-to-delete")
149 * The following files are written by git-rebase just after parsing the
150 * command-line.
152 static GIT_PATH_FUNC(rebase_path_gpg_sign_opt, "rebase-merge/gpg_sign_opt")
153 static GIT_PATH_FUNC(rebase_path_cdate_is_adate, "rebase-merge/cdate_is_adate")
154 static GIT_PATH_FUNC(rebase_path_ignore_date, "rebase-merge/ignore_date")
155 static GIT_PATH_FUNC(rebase_path_orig_head, "rebase-merge/orig-head")
156 static GIT_PATH_FUNC(rebase_path_verbose, "rebase-merge/verbose")
157 static GIT_PATH_FUNC(rebase_path_quiet, "rebase-merge/quiet")
158 static GIT_PATH_FUNC(rebase_path_signoff, "rebase-merge/signoff")
159 static GIT_PATH_FUNC(rebase_path_head_name, "rebase-merge/head-name")
160 static GIT_PATH_FUNC(rebase_path_onto, "rebase-merge/onto")
161 static GIT_PATH_FUNC(rebase_path_autostash, "rebase-merge/autostash")
162 static GIT_PATH_FUNC(rebase_path_strategy, "rebase-merge/strategy")
163 static GIT_PATH_FUNC(rebase_path_strategy_opts, "rebase-merge/strategy_opts")
164 static GIT_PATH_FUNC(rebase_path_allow_rerere_autoupdate, "rebase-merge/allow_rerere_autoupdate")
165 static GIT_PATH_FUNC(rebase_path_reschedule_failed_exec, "rebase-merge/reschedule-failed-exec")
166 static GIT_PATH_FUNC(rebase_path_drop_redundant_commits, "rebase-merge/drop_redundant_commits")
167 static GIT_PATH_FUNC(rebase_path_keep_redundant_commits, "rebase-merge/keep_redundant_commits")
169 static int git_sequencer_config(const char *k, const char *v, void *cb)
171 struct replay_opts *opts = cb;
172 int status;
174 if (!strcmp(k, "commit.cleanup")) {
175 const char *s;
177 status = git_config_string(&s, k, v);
178 if (status)
179 return status;
181 if (!strcmp(s, "verbatim")) {
182 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_NONE;
183 opts->explicit_cleanup = 1;
184 } else if (!strcmp(s, "whitespace")) {
185 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_SPACE;
186 opts->explicit_cleanup = 1;
187 } else if (!strcmp(s, "strip")) {
188 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_ALL;
189 opts->explicit_cleanup = 1;
190 } else if (!strcmp(s, "scissors")) {
191 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_SCISSORS;
192 opts->explicit_cleanup = 1;
193 } else {
194 warning(_("invalid commit message cleanup mode '%s'"),
198 free((char *)s);
199 return status;
202 if (!strcmp(k, "commit.gpgsign")) {
203 opts->gpg_sign = git_config_bool(k, v) ? xstrdup("") : NULL;
204 return 0;
207 status = git_gpg_config(k, v, NULL);
208 if (status)
209 return status;
211 return git_diff_basic_config(k, v, NULL);
214 void sequencer_init_config(struct replay_opts *opts)
216 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_NONE;
217 git_config(git_sequencer_config, opts);
220 static inline int is_rebase_i(const struct replay_opts *opts)
222 return opts->action == REPLAY_INTERACTIVE_REBASE;
225 static const char *get_dir(const struct replay_opts *opts)
227 if (is_rebase_i(opts))
228 return rebase_path();
229 return git_path_seq_dir();
232 static const char *get_todo_path(const struct replay_opts *opts)
234 if (is_rebase_i(opts))
235 return rebase_path_todo();
236 return git_path_todo_file();
240 * Returns 0 for non-conforming footer
241 * Returns 1 for conforming footer
242 * Returns 2 when sob exists within conforming footer
243 * Returns 3 when sob exists within conforming footer as last entry
245 static int has_conforming_footer(struct strbuf *sb, struct strbuf *sob,
246 size_t ignore_footer)
248 struct process_trailer_options opts = PROCESS_TRAILER_OPTIONS_INIT;
249 struct trailer_info info;
250 size_t i;
251 int found_sob = 0, found_sob_last = 0;
253 opts.no_divider = 1;
255 trailer_info_get(&info, sb->buf, &opts);
257 if (info.trailer_start == info.trailer_end)
258 return 0;
260 for (i = 0; i < info.trailer_nr; i++)
261 if (sob && !strncmp(info.trailers[i], sob->buf, sob->len)) {
262 found_sob = 1;
263 if (i == info.trailer_nr - 1)
264 found_sob_last = 1;
267 trailer_info_release(&info);
269 if (found_sob_last)
270 return 3;
271 if (found_sob)
272 return 2;
273 return 1;
276 static const char *gpg_sign_opt_quoted(struct replay_opts *opts)
278 static struct strbuf buf = STRBUF_INIT;
280 strbuf_reset(&buf);
281 if (opts->gpg_sign)
282 sq_quotef(&buf, "-S%s", opts->gpg_sign);
283 return buf.buf;
286 int sequencer_remove_state(struct replay_opts *opts)
288 struct strbuf buf = STRBUF_INIT;
289 int i, ret = 0;
291 if (is_rebase_i(opts) &&
292 strbuf_read_file(&buf, rebase_path_refs_to_delete(), 0) > 0) {
293 char *p = buf.buf;
294 while (*p) {
295 char *eol = strchr(p, '\n');
296 if (eol)
297 *eol = '\0';
298 if (delete_ref("(rebase) cleanup", p, NULL, 0) < 0) {
299 warning(_("could not delete '%s'"), p);
300 ret = -1;
302 if (!eol)
303 break;
304 p = eol + 1;
308 free(opts->committer_name);
309 free(opts->committer_email);
310 free(opts->gpg_sign);
311 free(opts->strategy);
312 for (i = 0; i < opts->xopts_nr; i++)
313 free(opts->xopts[i]);
314 free(opts->xopts);
315 strbuf_release(&opts->current_fixups);
317 strbuf_reset(&buf);
318 strbuf_addstr(&buf, get_dir(opts));
319 if (remove_dir_recursively(&buf, 0))
320 ret = error(_("could not remove '%s'"), buf.buf);
321 strbuf_release(&buf);
323 return ret;
326 static const char *action_name(const struct replay_opts *opts)
328 switch (opts->action) {
329 case REPLAY_REVERT:
330 return N_("revert");
331 case REPLAY_PICK:
332 return N_("cherry-pick");
333 case REPLAY_INTERACTIVE_REBASE:
334 return N_("rebase");
336 die(_("unknown action: %d"), opts->action);
339 struct commit_message {
340 char *parent_label;
341 char *label;
342 char *subject;
343 const char *message;
346 static const char *short_commit_name(struct commit *commit)
348 return find_unique_abbrev(&commit->object.oid, DEFAULT_ABBREV);
351 static int get_message(struct commit *commit, struct commit_message *out)
353 const char *abbrev, *subject;
354 int subject_len;
356 out->message = logmsg_reencode(commit, NULL, get_commit_output_encoding());
357 abbrev = short_commit_name(commit);
359 subject_len = find_commit_subject(out->message, &subject);
361 out->subject = xmemdupz(subject, subject_len);
362 out->label = xstrfmt("%s (%s)", abbrev, out->subject);
363 out->parent_label = xstrfmt("parent of %s", out->label);
365 return 0;
368 static void free_message(struct commit *commit, struct commit_message *msg)
370 free(msg->parent_label);
371 free(msg->label);
372 free(msg->subject);
373 unuse_commit_buffer(commit, msg->message);
376 static void print_advice(struct repository *r, int show_hint,
377 struct replay_opts *opts)
379 char *msg = getenv("GIT_CHERRY_PICK_HELP");
381 if (msg) {
382 fprintf(stderr, "%s\n", msg);
384 * A conflict has occurred but the porcelain
385 * (typically rebase --interactive) wants to take care
386 * of the commit itself so remove CHERRY_PICK_HEAD
388 refs_delete_ref(get_main_ref_store(r), "", "CHERRY_PICK_HEAD",
389 NULL, 0);
390 return;
393 if (show_hint) {
394 if (opts->no_commit)
395 advise(_("after resolving the conflicts, mark the corrected paths\n"
396 "with 'git add <paths>' or 'git rm <paths>'"));
397 else
398 advise(_("after resolving the conflicts, mark the corrected paths\n"
399 "with 'git add <paths>' or 'git rm <paths>'\n"
400 "and commit the result with 'git commit'"));
404 static int write_message(const void *buf, size_t len, const char *filename,
405 int append_eol)
407 struct lock_file msg_file = LOCK_INIT;
409 int msg_fd = hold_lock_file_for_update(&msg_file, filename, 0);
410 if (msg_fd < 0)
411 return error_errno(_("could not lock '%s'"), filename);
412 if (write_in_full(msg_fd, buf, len) < 0) {
413 error_errno(_("could not write to '%s'"), filename);
414 rollback_lock_file(&msg_file);
415 return -1;
417 if (append_eol && write(msg_fd, "\n", 1) < 0) {
418 error_errno(_("could not write eol to '%s'"), filename);
419 rollback_lock_file(&msg_file);
420 return -1;
422 if (commit_lock_file(&msg_file) < 0)
423 return error(_("failed to finalize '%s'"), filename);
425 return 0;
428 int read_oneliner(struct strbuf *buf,
429 const char *path, unsigned flags)
431 int orig_len = buf->len;
433 if (strbuf_read_file(buf, path, 0) < 0) {
434 if ((flags & READ_ONELINER_WARN_MISSING) ||
435 (errno != ENOENT && errno != ENOTDIR))
436 warning_errno(_("could not read '%s'"), path);
437 return 0;
440 if (buf->len > orig_len && buf->buf[buf->len - 1] == '\n') {
441 if (--buf->len > orig_len && buf->buf[buf->len - 1] == '\r')
442 --buf->len;
443 buf->buf[buf->len] = '\0';
446 if ((flags & READ_ONELINER_SKIP_IF_EMPTY) && buf->len == orig_len)
447 return 0;
449 return 1;
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."));
467 return -1;
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()))
476 return;
478 if (!get_oid("HEAD", &head))
479 write_file(git_path_abort_safety_file(), "%s", oid_to_hex(&head));
480 else
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,
487 int unborn,
488 struct replay_opts *opts)
490 struct ref_transaction *transaction;
491 struct strbuf sb = STRBUF_INIT;
492 struct strbuf err = STRBUF_INIT;
494 repo_read_index(r);
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);
501 if (!transaction ||
502 ref_transaction_update(transaction, "HEAD",
503 to, unborn && !is_rebase_i(opts) ?
504 &null_oid : from,
505 0, sb.buf, &err) ||
506 ref_transaction_commit(transaction, &err)) {
507 ref_transaction_free(transaction);
508 error("%s", err.buf);
509 strbuf_release(&sb);
510 strbuf_release(&err);
511 return -1;
514 strbuf_release(&sb);
515 strbuf_release(&err);
516 ref_transaction_free(transaction);
517 update_abort_safety_file();
518 return 0;
521 enum commit_msg_cleanup_mode get_cleanup_mode(const char *cleanup_arg,
522 int use_editor)
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;
536 else
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
543 * is always true.
545 static const char *describe_cleanup_mode(int cleanup_mode)
547 static const char *modes[] = { "whitespace",
548 "verbatim",
549 "scissors",
550 "strip" };
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)
561 int i;
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++];
573 if (ce_stage(ce)) {
574 strbuf_commented_addf(msgbuf, "\t%s\n", ce->name);
575 while (i < istate->cache_nr &&
576 !strcmp(ce->name, istate->cache[i]->name))
577 i++;
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 *next_tree, *base_tree, *head_tree;
590 int clean;
591 int i;
592 struct lock_file index_lock = LOCK_INIT;
594 if (repo_hold_locked_index(r, &index_lock, LOCK_REPORT_ON_ERROR) < 0)
595 return -1;
597 repo_read_index(r);
599 init_merge_options(&o, r);
600 o.ancestor = base ? base_label : "(empty tree)";
601 o.branch1 = "HEAD";
602 o.branch2 = next ? next_label : "(empty tree)";
603 if (is_rebase_i(opts))
604 o.buffer_output = 2;
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 (i = 0; i < opts->xopts_nr; i++)
612 parse_merge_opt(&o, opts->xopts[i]);
614 clean = merge_trees(&o,
615 head_tree,
616 next_tree, base_tree);
617 if (is_rebase_i(opts) && clean <= 0)
618 fputs(o.obuf.buf, stdout);
619 strbuf_release(&o.obuf);
620 if (clean < 0) {
621 rollback_lock_file(&index_lock);
622 return clean;
625 if (write_locked_index(r->index, &index_lock,
626 COMMIT_LOCK | SKIP_IF_UNCHANGED))
628 * TRANSLATORS: %s will be "revert", "cherry-pick" or
629 * "rebase".
631 return error(_("%s: Unable to write new index file"),
632 _(action_name(opts)));
634 if (!clean)
635 append_conflicts_hint(r->index, msgbuf,
636 opts->default_msg_cleanup);
638 return !clean;
641 static struct object_id *get_cache_tree_oid(struct index_state *istate)
643 if (!istate->cache_tree)
644 istate->cache_tree = cache_tree();
646 if (!cache_tree_fully_valid(istate->cache_tree))
647 if (cache_tree_update(istate, 0)) {
648 error(_("unable to update cache tree"));
649 return NULL;
652 return &istate->cache_tree->oid;
655 static int is_index_unchanged(struct repository *r)
657 struct object_id head_oid, *cache_tree_oid;
658 struct commit *head_commit;
659 struct index_state *istate = r->index;
661 if (!resolve_ref_unsafe("HEAD", RESOLVE_REF_READING, &head_oid, NULL))
662 return error(_("could not resolve HEAD commit"));
664 head_commit = lookup_commit(r, &head_oid);
667 * If head_commit is NULL, check_commit, called from
668 * lookup_commit, would have indicated that head_commit is not
669 * a commit object already. parse_commit() will return failure
670 * without further complaints in such a case. Otherwise, if
671 * the commit is invalid, parse_commit() will complain. So
672 * there is nothing for us to say here. Just return failure.
674 if (parse_commit(head_commit))
675 return -1;
677 if (!(cache_tree_oid = get_cache_tree_oid(istate)))
678 return -1;
680 return oideq(cache_tree_oid, get_commit_tree_oid(head_commit));
683 static int write_author_script(const char *message)
685 struct strbuf buf = STRBUF_INIT;
686 const char *eol;
687 int res;
689 for (;;)
690 if (!*message || starts_with(message, "\n")) {
691 missing_author:
692 /* Missing 'author' line? */
693 unlink(rebase_path_author_script());
694 return 0;
695 } else if (skip_prefix(message, "author ", &message))
696 break;
697 else if ((eol = strchr(message, '\n')))
698 message = eol + 1;
699 else
700 goto missing_author;
702 strbuf_addstr(&buf, "GIT_AUTHOR_NAME='");
703 while (*message && *message != '\n' && *message != '\r')
704 if (skip_prefix(message, " <", &message))
705 break;
706 else if (*message != '\'')
707 strbuf_addch(&buf, *(message++));
708 else
709 strbuf_addf(&buf, "'\\%c'", *(message++));
710 strbuf_addstr(&buf, "'\nGIT_AUTHOR_EMAIL='");
711 while (*message && *message != '\n' && *message != '\r')
712 if (skip_prefix(message, "> ", &message))
713 break;
714 else if (*message != '\'')
715 strbuf_addch(&buf, *(message++));
716 else
717 strbuf_addf(&buf, "'\\%c'", *(message++));
718 strbuf_addstr(&buf, "'\nGIT_AUTHOR_DATE='@");
719 while (*message && *message != '\n' && *message != '\r')
720 if (*message != '\'')
721 strbuf_addch(&buf, *(message++));
722 else
723 strbuf_addf(&buf, "'\\%c'", *(message++));
724 strbuf_addch(&buf, '\'');
725 res = write_message(buf.buf, buf.len, rebase_path_author_script(), 1);
726 strbuf_release(&buf);
727 return res;
731 * Take a series of KEY='VALUE' lines where VALUE part is
732 * sq-quoted, and append <KEY, VALUE> at the end of the string list
734 static int parse_key_value_squoted(char *buf, struct string_list *list)
736 while (*buf) {
737 struct string_list_item *item;
738 char *np;
739 char *cp = strchr(buf, '=');
740 if (!cp) {
741 np = strchrnul(buf, '\n');
742 return error(_("no key present in '%.*s'"),
743 (int) (np - buf), buf);
745 np = strchrnul(cp, '\n');
746 *cp++ = '\0';
747 item = string_list_append(list, buf);
749 buf = np + (*np == '\n');
750 *np = '\0';
751 cp = sq_dequote(cp);
752 if (!cp)
753 return error(_("unable to dequote value of '%s'"),
754 item->string);
755 item->util = xstrdup(cp);
757 return 0;
761 * Reads and parses the state directory's "author-script" file, and sets name,
762 * email and date accordingly.
763 * Returns 0 on success, -1 if the file could not be parsed.
765 * The author script is of the format:
767 * GIT_AUTHOR_NAME='$author_name'
768 * GIT_AUTHOR_EMAIL='$author_email'
769 * GIT_AUTHOR_DATE='$author_date'
771 * where $author_name, $author_email and $author_date are quoted. We are strict
772 * with our parsing, as the file was meant to be eval'd in the now-removed
773 * git-am.sh/git-rebase--interactive.sh scripts, and thus if the file differs
774 * from what this function expects, it is better to bail out than to do
775 * something that the user does not expect.
777 int read_author_script(const char *path, char **name, char **email, char **date,
778 int allow_missing)
780 struct strbuf buf = STRBUF_INIT;
781 struct string_list kv = STRING_LIST_INIT_DUP;
782 int retval = -1; /* assume failure */
783 int i, name_i = -2, email_i = -2, date_i = -2, err = 0;
785 if (strbuf_read_file(&buf, path, 256) <= 0) {
786 strbuf_release(&buf);
787 if (errno == ENOENT && allow_missing)
788 return 0;
789 else
790 return error_errno(_("could not open '%s' for reading"),
791 path);
794 if (parse_key_value_squoted(buf.buf, &kv))
795 goto finish;
797 for (i = 0; i < kv.nr; i++) {
798 if (!strcmp(kv.items[i].string, "GIT_AUTHOR_NAME")) {
799 if (name_i != -2)
800 name_i = error(_("'GIT_AUTHOR_NAME' already given"));
801 else
802 name_i = i;
803 } else if (!strcmp(kv.items[i].string, "GIT_AUTHOR_EMAIL")) {
804 if (email_i != -2)
805 email_i = error(_("'GIT_AUTHOR_EMAIL' already given"));
806 else
807 email_i = i;
808 } else if (!strcmp(kv.items[i].string, "GIT_AUTHOR_DATE")) {
809 if (date_i != -2)
810 date_i = error(_("'GIT_AUTHOR_DATE' already given"));
811 else
812 date_i = i;
813 } else {
814 err = error(_("unknown variable '%s'"),
815 kv.items[i].string);
818 if (name_i == -2)
819 error(_("missing 'GIT_AUTHOR_NAME'"));
820 if (email_i == -2)
821 error(_("missing 'GIT_AUTHOR_EMAIL'"));
822 if (date_i == -2)
823 error(_("missing 'GIT_AUTHOR_DATE'"));
824 if (date_i < 0 || email_i < 0 || date_i < 0 || err)
825 goto finish;
826 *name = kv.items[name_i].util;
827 *email = kv.items[email_i].util;
828 *date = kv.items[date_i].util;
829 retval = 0;
830 finish:
831 string_list_clear(&kv, !!retval);
832 strbuf_release(&buf);
833 return retval;
837 * Read a GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL AND GIT_AUTHOR_DATE from a
838 * file with shell quoting into struct strvec. Returns -1 on
839 * error, 0 otherwise.
841 static int read_env_script(struct strvec *env)
843 char *name, *email, *date;
845 if (read_author_script(rebase_path_author_script(),
846 &name, &email, &date, 0))
847 return -1;
849 strvec_pushf(env, "GIT_AUTHOR_NAME=%s", name);
850 strvec_pushf(env, "GIT_AUTHOR_EMAIL=%s", email);
851 strvec_pushf(env, "GIT_AUTHOR_DATE=%s", date);
852 free(name);
853 free(email);
854 free(date);
856 return 0;
859 static char *get_author(const char *message)
861 size_t len;
862 const char *a;
864 a = find_commit_header(message, "author", &len);
865 if (a)
866 return xmemdupz(a, len);
868 return NULL;
871 static const char *author_date_from_env_array(const struct strvec *env)
873 int i;
874 const char *date;
876 for (i = 0; i < env->nr; i++)
877 if (skip_prefix(env->v[i],
878 "GIT_AUTHOR_DATE=", &date))
879 return date;
881 * If GIT_AUTHOR_DATE is missing we should have already errored out when
882 * reading the script
884 BUG("GIT_AUTHOR_DATE missing from author script");
887 static const char staged_changes_advice[] =
888 N_("you have staged changes in your working tree\n"
889 "If these changes are meant to be squashed into the previous commit, run:\n"
890 "\n"
891 " git commit --amend %s\n"
892 "\n"
893 "If they are meant to go into a new commit, run:\n"
894 "\n"
895 " git commit %s\n"
896 "\n"
897 "In both cases, once you're done, continue with:\n"
898 "\n"
899 " git rebase --continue\n");
901 #define ALLOW_EMPTY (1<<0)
902 #define EDIT_MSG (1<<1)
903 #define AMEND_MSG (1<<2)
904 #define CLEANUP_MSG (1<<3)
905 #define VERIFY_MSG (1<<4)
906 #define CREATE_ROOT_COMMIT (1<<5)
908 static int run_command_silent_on_success(struct child_process *cmd)
910 struct strbuf buf = STRBUF_INIT;
911 int rc;
913 cmd->stdout_to_stderr = 1;
914 rc = pipe_command(cmd,
915 NULL, 0,
916 NULL, 0,
917 &buf, 0);
919 if (rc)
920 fputs(buf.buf, stderr);
921 strbuf_release(&buf);
922 return rc;
926 * If we are cherry-pick, and if the merge did not result in
927 * hand-editing, we will hit this commit and inherit the original
928 * author date and name.
930 * If we are revert, or if our cherry-pick results in a hand merge,
931 * we had better say that the current user is responsible for that.
933 * An exception is when run_git_commit() is called during an
934 * interactive rebase: in that case, we will want to retain the
935 * author metadata.
937 static int run_git_commit(struct repository *r,
938 const char *defmsg,
939 struct replay_opts *opts,
940 unsigned int flags)
942 struct child_process cmd = CHILD_PROCESS_INIT;
944 cmd.git_cmd = 1;
946 if (is_rebase_i(opts) && read_env_script(&cmd.env_array)) {
947 const char *gpg_opt = gpg_sign_opt_quoted(opts);
949 return error(_(staged_changes_advice),
950 gpg_opt, gpg_opt);
953 if (opts->committer_date_is_author_date)
954 strvec_pushf(&cmd.env_array, "GIT_COMMITTER_DATE=%s",
955 opts->ignore_date ?
956 "" :
957 author_date_from_env_array(&cmd.env_array));
958 if (opts->ignore_date)
959 strvec_push(&cmd.env_array, "GIT_AUTHOR_DATE=");
961 strvec_push(&cmd.args, "commit");
963 if (!(flags & VERIFY_MSG))
964 strvec_push(&cmd.args, "-n");
965 if ((flags & AMEND_MSG))
966 strvec_push(&cmd.args, "--amend");
967 if (opts->gpg_sign)
968 strvec_pushf(&cmd.args, "-S%s", opts->gpg_sign);
969 else
970 strvec_push(&cmd.args, "--no-gpg-sign");
971 if (defmsg)
972 strvec_pushl(&cmd.args, "-F", defmsg, NULL);
973 else if (!(flags & EDIT_MSG))
974 strvec_pushl(&cmd.args, "-C", "HEAD", NULL);
975 if ((flags & CLEANUP_MSG))
976 strvec_push(&cmd.args, "--cleanup=strip");
977 if ((flags & EDIT_MSG))
978 strvec_push(&cmd.args, "-e");
979 else if (!(flags & CLEANUP_MSG) &&
980 !opts->signoff && !opts->record_origin &&
981 !opts->explicit_cleanup)
982 strvec_push(&cmd.args, "--cleanup=verbatim");
984 if ((flags & ALLOW_EMPTY))
985 strvec_push(&cmd.args, "--allow-empty");
987 if (!(flags & EDIT_MSG))
988 strvec_push(&cmd.args, "--allow-empty-message");
990 if (is_rebase_i(opts) && !(flags & EDIT_MSG))
991 return run_command_silent_on_success(&cmd);
992 else
993 return run_command(&cmd);
996 static int rest_is_empty(const struct strbuf *sb, int start)
998 int i, eol;
999 const char *nl;
1001 /* Check if the rest is just whitespace and Signed-off-by's. */
1002 for (i = start; i < sb->len; i++) {
1003 nl = memchr(sb->buf + i, '\n', sb->len - i);
1004 if (nl)
1005 eol = nl - sb->buf;
1006 else
1007 eol = sb->len;
1009 if (strlen(sign_off_header) <= eol - i &&
1010 starts_with(sb->buf + i, sign_off_header)) {
1011 i = eol;
1012 continue;
1014 while (i < eol)
1015 if (!isspace(sb->buf[i++]))
1016 return 0;
1019 return 1;
1022 void cleanup_message(struct strbuf *msgbuf,
1023 enum commit_msg_cleanup_mode cleanup_mode, int verbose)
1025 if (verbose || /* Truncate the message just before the diff, if any. */
1026 cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS)
1027 strbuf_setlen(msgbuf, wt_status_locate_end(msgbuf->buf, msgbuf->len));
1028 if (cleanup_mode != COMMIT_MSG_CLEANUP_NONE)
1029 strbuf_stripspace(msgbuf, cleanup_mode == COMMIT_MSG_CLEANUP_ALL);
1033 * Find out if the message in the strbuf contains only whitespace and
1034 * Signed-off-by lines.
1036 int message_is_empty(const struct strbuf *sb,
1037 enum commit_msg_cleanup_mode cleanup_mode)
1039 if (cleanup_mode == COMMIT_MSG_CLEANUP_NONE && sb->len)
1040 return 0;
1041 return rest_is_empty(sb, 0);
1045 * See if the user edited the message in the editor or left what
1046 * was in the template intact
1048 int template_untouched(const struct strbuf *sb, const char *template_file,
1049 enum commit_msg_cleanup_mode cleanup_mode)
1051 struct strbuf tmpl = STRBUF_INIT;
1052 const char *start;
1054 if (cleanup_mode == COMMIT_MSG_CLEANUP_NONE && sb->len)
1055 return 0;
1057 if (!template_file || strbuf_read_file(&tmpl, template_file, 0) <= 0)
1058 return 0;
1060 strbuf_stripspace(&tmpl, cleanup_mode == COMMIT_MSG_CLEANUP_ALL);
1061 if (!skip_prefix(sb->buf, tmpl.buf, &start))
1062 start = sb->buf;
1063 strbuf_release(&tmpl);
1064 return rest_is_empty(sb, start - sb->buf);
1067 int update_head_with_reflog(const struct commit *old_head,
1068 const struct object_id *new_head,
1069 const char *action, const struct strbuf *msg,
1070 struct strbuf *err)
1072 struct ref_transaction *transaction;
1073 struct strbuf sb = STRBUF_INIT;
1074 const char *nl;
1075 int ret = 0;
1077 if (action) {
1078 strbuf_addstr(&sb, action);
1079 strbuf_addstr(&sb, ": ");
1082 nl = strchr(msg->buf, '\n');
1083 if (nl) {
1084 strbuf_add(&sb, msg->buf, nl + 1 - msg->buf);
1085 } else {
1086 strbuf_addbuf(&sb, msg);
1087 strbuf_addch(&sb, '\n');
1090 transaction = ref_transaction_begin(err);
1091 if (!transaction ||
1092 ref_transaction_update(transaction, "HEAD", new_head,
1093 old_head ? &old_head->object.oid : &null_oid,
1094 0, sb.buf, err) ||
1095 ref_transaction_commit(transaction, err)) {
1096 ret = -1;
1098 ref_transaction_free(transaction);
1099 strbuf_release(&sb);
1101 return ret;
1104 static int run_rewrite_hook(const struct object_id *oldoid,
1105 const struct object_id *newoid)
1107 struct child_process proc = CHILD_PROCESS_INIT;
1108 const char *argv[3];
1109 int code;
1110 struct strbuf sb = STRBUF_INIT;
1112 argv[0] = find_hook("post-rewrite");
1113 if (!argv[0])
1114 return 0;
1116 argv[1] = "amend";
1117 argv[2] = NULL;
1119 proc.argv = argv;
1120 proc.in = -1;
1121 proc.stdout_to_stderr = 1;
1122 proc.trace2_hook_name = "post-rewrite";
1124 code = start_command(&proc);
1125 if (code)
1126 return code;
1127 strbuf_addf(&sb, "%s %s\n", oid_to_hex(oldoid), oid_to_hex(newoid));
1128 sigchain_push(SIGPIPE, SIG_IGN);
1129 write_in_full(proc.in, sb.buf, sb.len);
1130 close(proc.in);
1131 strbuf_release(&sb);
1132 sigchain_pop(SIGPIPE);
1133 return finish_command(&proc);
1136 void commit_post_rewrite(struct repository *r,
1137 const struct commit *old_head,
1138 const struct object_id *new_head)
1140 struct notes_rewrite_cfg *cfg;
1142 cfg = init_copy_notes_for_rewrite("amend");
1143 if (cfg) {
1144 /* we are amending, so old_head is not NULL */
1145 copy_note_for_rewrite(cfg, &old_head->object.oid, new_head);
1146 finish_copy_notes_for_rewrite(r, cfg, "Notes added by 'git commit --amend'");
1148 run_rewrite_hook(&old_head->object.oid, new_head);
1151 static int run_prepare_commit_msg_hook(struct repository *r,
1152 struct strbuf *msg,
1153 const char *commit)
1155 int ret = 0;
1156 const char *name, *arg1 = NULL, *arg2 = NULL;
1158 name = git_path_commit_editmsg();
1159 if (write_message(msg->buf, msg->len, name, 0))
1160 return -1;
1162 if (commit) {
1163 arg1 = "commit";
1164 arg2 = commit;
1165 } else {
1166 arg1 = "message";
1168 if (run_commit_hook(0, r->index_file, "prepare-commit-msg", name,
1169 arg1, arg2, NULL))
1170 ret = error(_("'prepare-commit-msg' hook failed"));
1172 return ret;
1175 static const char implicit_ident_advice_noconfig[] =
1176 N_("Your name and email address were configured automatically based\n"
1177 "on your username and hostname. Please check that they are accurate.\n"
1178 "You can suppress this message by setting them explicitly. Run the\n"
1179 "following command and follow the instructions in your editor to edit\n"
1180 "your configuration file:\n"
1181 "\n"
1182 " git config --global --edit\n"
1183 "\n"
1184 "After doing this, you may fix the identity used for this commit with:\n"
1185 "\n"
1186 " git commit --amend --reset-author\n");
1188 static const char implicit_ident_advice_config[] =
1189 N_("Your name and email address were configured automatically based\n"
1190 "on your username and hostname. Please check that they are accurate.\n"
1191 "You can suppress this message by setting them explicitly:\n"
1192 "\n"
1193 " git config --global user.name \"Your Name\"\n"
1194 " git config --global user.email you@example.com\n"
1195 "\n"
1196 "After doing this, you may fix the identity used for this commit with:\n"
1197 "\n"
1198 " git commit --amend --reset-author\n");
1200 static const char *implicit_ident_advice(void)
1202 char *user_config = expand_user_path("~/.gitconfig", 0);
1203 char *xdg_config = xdg_config_home("config");
1204 int config_exists = file_exists(user_config) || file_exists(xdg_config);
1206 free(user_config);
1207 free(xdg_config);
1209 if (config_exists)
1210 return _(implicit_ident_advice_config);
1211 else
1212 return _(implicit_ident_advice_noconfig);
1216 void print_commit_summary(struct repository *r,
1217 const char *prefix,
1218 const struct object_id *oid,
1219 unsigned int flags)
1221 struct rev_info rev;
1222 struct commit *commit;
1223 struct strbuf format = STRBUF_INIT;
1224 const char *head;
1225 struct pretty_print_context pctx = {0};
1226 struct strbuf author_ident = STRBUF_INIT;
1227 struct strbuf committer_ident = STRBUF_INIT;
1229 commit = lookup_commit(r, oid);
1230 if (!commit)
1231 die(_("couldn't look up newly created commit"));
1232 if (parse_commit(commit))
1233 die(_("could not parse newly created commit"));
1235 strbuf_addstr(&format, "format:%h] %s");
1237 format_commit_message(commit, "%an <%ae>", &author_ident, &pctx);
1238 format_commit_message(commit, "%cn <%ce>", &committer_ident, &pctx);
1239 if (strbuf_cmp(&author_ident, &committer_ident)) {
1240 strbuf_addstr(&format, "\n Author: ");
1241 strbuf_addbuf_percentquote(&format, &author_ident);
1243 if (flags & SUMMARY_SHOW_AUTHOR_DATE) {
1244 struct strbuf date = STRBUF_INIT;
1246 format_commit_message(commit, "%ad", &date, &pctx);
1247 strbuf_addstr(&format, "\n Date: ");
1248 strbuf_addbuf_percentquote(&format, &date);
1249 strbuf_release(&date);
1251 if (!committer_ident_sufficiently_given()) {
1252 strbuf_addstr(&format, "\n Committer: ");
1253 strbuf_addbuf_percentquote(&format, &committer_ident);
1254 if (advice_implicit_identity) {
1255 strbuf_addch(&format, '\n');
1256 strbuf_addstr(&format, implicit_ident_advice());
1259 strbuf_release(&author_ident);
1260 strbuf_release(&committer_ident);
1262 repo_init_revisions(r, &rev, prefix);
1263 setup_revisions(0, NULL, &rev, NULL);
1265 rev.diff = 1;
1266 rev.diffopt.output_format =
1267 DIFF_FORMAT_SHORTSTAT | DIFF_FORMAT_SUMMARY;
1269 rev.verbose_header = 1;
1270 rev.show_root_diff = 1;
1271 get_commit_format(format.buf, &rev);
1272 rev.always_show_header = 0;
1273 rev.diffopt.detect_rename = DIFF_DETECT_RENAME;
1274 rev.diffopt.break_opt = 0;
1275 diff_setup_done(&rev.diffopt);
1277 head = resolve_ref_unsafe("HEAD", 0, NULL, NULL);
1278 if (!head)
1279 die_errno(_("unable to resolve HEAD after creating commit"));
1280 if (!strcmp(head, "HEAD"))
1281 head = _("detached HEAD");
1282 else
1283 skip_prefix(head, "refs/heads/", &head);
1284 printf("[%s%s ", head, (flags & SUMMARY_INITIAL_COMMIT) ?
1285 _(" (root-commit)") : "");
1287 if (!log_tree_commit(&rev, commit)) {
1288 rev.always_show_header = 1;
1289 rev.use_terminator = 1;
1290 log_tree_commit(&rev, commit);
1293 strbuf_release(&format);
1296 static int parse_head(struct repository *r, struct commit **head)
1298 struct commit *current_head;
1299 struct object_id oid;
1301 if (get_oid("HEAD", &oid)) {
1302 current_head = NULL;
1303 } else {
1304 current_head = lookup_commit_reference(r, &oid);
1305 if (!current_head)
1306 return error(_("could not parse HEAD"));
1307 if (!oideq(&oid, &current_head->object.oid)) {
1308 warning(_("HEAD %s is not a commit!"),
1309 oid_to_hex(&oid));
1311 if (parse_commit(current_head))
1312 return error(_("could not parse HEAD commit"));
1314 *head = current_head;
1316 return 0;
1320 * Try to commit without forking 'git commit'. In some cases we need
1321 * to run 'git commit' to display an error message
1323 * Returns:
1324 * -1 - error unable to commit
1325 * 0 - success
1326 * 1 - run 'git commit'
1328 static int try_to_commit(struct repository *r,
1329 struct strbuf *msg, const char *author,
1330 struct replay_opts *opts, unsigned int flags,
1331 struct object_id *oid)
1333 struct object_id tree;
1334 struct commit *current_head = NULL;
1335 struct commit_list *parents = NULL;
1336 struct commit_extra_header *extra = NULL;
1337 struct strbuf err = STRBUF_INIT;
1338 struct strbuf commit_msg = STRBUF_INIT;
1339 char *amend_author = NULL;
1340 const char *committer = NULL;
1341 const char *hook_commit = NULL;
1342 enum commit_msg_cleanup_mode cleanup;
1343 int res = 0;
1345 if (parse_head(r, &current_head))
1346 return -1;
1348 if (flags & AMEND_MSG) {
1349 const char *exclude_gpgsig[] = { "gpgsig", "gpgsig-sha256", NULL };
1350 const char *out_enc = get_commit_output_encoding();
1351 const char *message = logmsg_reencode(current_head, NULL,
1352 out_enc);
1354 if (!msg) {
1355 const char *orig_message = NULL;
1357 find_commit_subject(message, &orig_message);
1358 msg = &commit_msg;
1359 strbuf_addstr(msg, orig_message);
1360 hook_commit = "HEAD";
1362 author = amend_author = get_author(message);
1363 unuse_commit_buffer(current_head, message);
1364 if (!author) {
1365 res = error(_("unable to parse commit author"));
1366 goto out;
1368 parents = copy_commit_list(current_head->parents);
1369 extra = read_commit_extra_headers(current_head, exclude_gpgsig);
1370 } else if (current_head &&
1371 (!(flags & CREATE_ROOT_COMMIT) || (flags & AMEND_MSG))) {
1372 commit_list_insert(current_head, &parents);
1375 if (write_index_as_tree(&tree, r->index, r->index_file, 0, NULL)) {
1376 res = error(_("git write-tree failed to write a tree"));
1377 goto out;
1380 if (!(flags & ALLOW_EMPTY)) {
1381 struct commit *first_parent = current_head;
1383 if (flags & AMEND_MSG) {
1384 if (current_head->parents) {
1385 first_parent = current_head->parents->item;
1386 if (repo_parse_commit(r, first_parent)) {
1387 res = error(_("could not parse HEAD commit"));
1388 goto out;
1390 } else {
1391 first_parent = NULL;
1394 if (oideq(first_parent
1395 ? get_commit_tree_oid(first_parent)
1396 : the_hash_algo->empty_tree,
1397 &tree)) {
1398 res = 1; /* run 'git commit' to display error message */
1399 goto out;
1403 if (find_hook("prepare-commit-msg")) {
1404 res = run_prepare_commit_msg_hook(r, msg, hook_commit);
1405 if (res)
1406 goto out;
1407 if (strbuf_read_file(&commit_msg, git_path_commit_editmsg(),
1408 2048) < 0) {
1409 res = error_errno(_("unable to read commit message "
1410 "from '%s'"),
1411 git_path_commit_editmsg());
1412 goto out;
1414 msg = &commit_msg;
1417 if (flags & CLEANUP_MSG)
1418 cleanup = COMMIT_MSG_CLEANUP_ALL;
1419 else if ((opts->signoff || opts->record_origin) &&
1420 !opts->explicit_cleanup)
1421 cleanup = COMMIT_MSG_CLEANUP_SPACE;
1422 else
1423 cleanup = opts->default_msg_cleanup;
1425 if (cleanup != COMMIT_MSG_CLEANUP_NONE)
1426 strbuf_stripspace(msg, cleanup == COMMIT_MSG_CLEANUP_ALL);
1427 if ((flags & EDIT_MSG) && message_is_empty(msg, cleanup)) {
1428 res = 1; /* run 'git commit' to display error message */
1429 goto out;
1432 if (opts->committer_date_is_author_date) {
1433 struct ident_split id;
1434 struct strbuf date = STRBUF_INIT;
1436 if (!opts->ignore_date) {
1437 if (split_ident_line(&id, author, (int)strlen(author)) < 0) {
1438 res = error(_("invalid author identity '%s'"),
1439 author);
1440 goto out;
1442 if (!id.date_begin) {
1443 res = error(_(
1444 "corrupt author: missing date information"));
1445 goto out;
1447 strbuf_addf(&date, "@%.*s %.*s",
1448 (int)(id.date_end - id.date_begin),
1449 id.date_begin,
1450 (int)(id.tz_end - id.tz_begin),
1451 id.tz_begin);
1452 } else {
1453 reset_ident_date();
1455 committer = fmt_ident(opts->committer_name,
1456 opts->committer_email,
1457 WANT_COMMITTER_IDENT,
1458 opts->ignore_date ? NULL : date.buf,
1459 IDENT_STRICT);
1460 strbuf_release(&date);
1461 } else {
1462 reset_ident_date();
1465 if (opts->ignore_date) {
1466 struct ident_split id;
1467 char *name, *email;
1469 if (split_ident_line(&id, author, strlen(author)) < 0) {
1470 error(_("invalid author identity '%s'"), author);
1471 goto out;
1473 name = xmemdupz(id.name_begin, id.name_end - id.name_begin);
1474 email = xmemdupz(id.mail_begin, id.mail_end - id.mail_begin);
1475 author = fmt_ident(name, email, WANT_AUTHOR_IDENT, NULL,
1476 IDENT_STRICT);
1477 free(name);
1478 free(email);
1481 if (commit_tree_extended(msg->buf, msg->len, &tree, parents, oid,
1482 author, committer, opts->gpg_sign, extra)) {
1483 res = error(_("failed to write commit object"));
1484 goto out;
1487 if (update_head_with_reflog(current_head, oid,
1488 getenv("GIT_REFLOG_ACTION"), msg, &err)) {
1489 res = error("%s", err.buf);
1490 goto out;
1493 run_commit_hook(0, r->index_file, "post-commit", NULL);
1494 if (flags & AMEND_MSG)
1495 commit_post_rewrite(r, current_head, oid);
1497 out:
1498 free_commit_extra_headers(extra);
1499 strbuf_release(&err);
1500 strbuf_release(&commit_msg);
1501 free(amend_author);
1503 return res;
1506 static int write_rebase_head(struct object_id *oid)
1508 if (update_ref("rebase", "REBASE_HEAD", oid,
1509 NULL, REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1510 return error(_("could not update %s"), "REBASE_HEAD");
1512 return 0;
1515 static int do_commit(struct repository *r,
1516 const char *msg_file, const char *author,
1517 struct replay_opts *opts, unsigned int flags,
1518 struct object_id *oid)
1520 int res = 1;
1522 if (!(flags & EDIT_MSG) && !(flags & VERIFY_MSG)) {
1523 struct object_id oid;
1524 struct strbuf sb = STRBUF_INIT;
1526 if (msg_file && strbuf_read_file(&sb, msg_file, 2048) < 0)
1527 return error_errno(_("unable to read commit message "
1528 "from '%s'"),
1529 msg_file);
1531 res = try_to_commit(r, msg_file ? &sb : NULL,
1532 author, opts, flags, &oid);
1533 strbuf_release(&sb);
1534 if (!res) {
1535 refs_delete_ref(get_main_ref_store(r), "",
1536 "CHERRY_PICK_HEAD", NULL, 0);
1537 unlink(git_path_merge_msg(r));
1538 if (!is_rebase_i(opts))
1539 print_commit_summary(r, NULL, &oid,
1540 SUMMARY_SHOW_AUTHOR_DATE);
1541 return res;
1544 if (res == 1) {
1545 if (is_rebase_i(opts) && oid)
1546 if (write_rebase_head(oid))
1547 return -1;
1548 return run_git_commit(r, msg_file, opts, flags);
1551 return res;
1554 static int is_original_commit_empty(struct commit *commit)
1556 const struct object_id *ptree_oid;
1558 if (parse_commit(commit))
1559 return error(_("could not parse commit %s"),
1560 oid_to_hex(&commit->object.oid));
1561 if (commit->parents) {
1562 struct commit *parent = commit->parents->item;
1563 if (parse_commit(parent))
1564 return error(_("could not parse parent commit %s"),
1565 oid_to_hex(&parent->object.oid));
1566 ptree_oid = get_commit_tree_oid(parent);
1567 } else {
1568 ptree_oid = the_hash_algo->empty_tree; /* commit is root */
1571 return oideq(ptree_oid, get_commit_tree_oid(commit));
1575 * Should empty commits be allowed? Return status:
1576 * <0: Error in is_index_unchanged(r) or is_original_commit_empty(commit)
1577 * 0: Halt on empty commit
1578 * 1: Allow empty commit
1579 * 2: Drop empty commit
1581 static int allow_empty(struct repository *r,
1582 struct replay_opts *opts,
1583 struct commit *commit)
1585 int index_unchanged, originally_empty;
1588 * Four cases:
1590 * (1) we do not allow empty at all and error out.
1592 * (2) we allow ones that were initially empty, and
1593 * just drop the ones that become empty
1595 * (3) we allow ones that were initially empty, but
1596 * halt for the ones that become empty;
1598 * (4) we allow both.
1600 if (!opts->allow_empty)
1601 return 0; /* let "git commit" barf as necessary */
1603 index_unchanged = is_index_unchanged(r);
1604 if (index_unchanged < 0)
1605 return index_unchanged;
1606 if (!index_unchanged)
1607 return 0; /* we do not have to say --allow-empty */
1609 if (opts->keep_redundant_commits)
1610 return 1;
1612 originally_empty = is_original_commit_empty(commit);
1613 if (originally_empty < 0)
1614 return originally_empty;
1615 if (originally_empty)
1616 return 1;
1617 else if (opts->drop_redundant_commits)
1618 return 2;
1619 else
1620 return 0;
1623 static struct {
1624 char c;
1625 const char *str;
1626 } todo_command_info[] = {
1627 { 'p', "pick" },
1628 { 0, "revert" },
1629 { 'e', "edit" },
1630 { 'r', "reword" },
1631 { 'f', "fixup" },
1632 { 's', "squash" },
1633 { 'x', "exec" },
1634 { 'b', "break" },
1635 { 'l', "label" },
1636 { 't', "reset" },
1637 { 'm', "merge" },
1638 { 0, "noop" },
1639 { 'd', "drop" },
1640 { 0, NULL }
1643 static const char *command_to_string(const enum todo_command command)
1645 if (command < TODO_COMMENT)
1646 return todo_command_info[command].str;
1647 die(_("unknown command: %d"), command);
1650 static char command_to_char(const enum todo_command command)
1652 if (command < TODO_COMMENT)
1653 return todo_command_info[command].c;
1654 return comment_line_char;
1657 static int is_noop(const enum todo_command command)
1659 return TODO_NOOP <= command;
1662 static int is_fixup(enum todo_command command)
1664 return command == TODO_FIXUP || command == TODO_SQUASH;
1667 /* Does this command create a (non-merge) commit? */
1668 static int is_pick_or_similar(enum todo_command command)
1670 switch (command) {
1671 case TODO_PICK:
1672 case TODO_REVERT:
1673 case TODO_EDIT:
1674 case TODO_REWORD:
1675 case TODO_FIXUP:
1676 case TODO_SQUASH:
1677 return 1;
1678 default:
1679 return 0;
1683 static int update_squash_messages(struct repository *r,
1684 enum todo_command command,
1685 struct commit *commit,
1686 struct replay_opts *opts)
1688 struct strbuf buf = STRBUF_INIT;
1689 int res;
1690 const char *message, *body;
1691 const char *encoding = get_commit_output_encoding();
1693 if (opts->current_fixup_count > 0) {
1694 struct strbuf header = STRBUF_INIT;
1695 char *eol;
1697 if (strbuf_read_file(&buf, rebase_path_squash_msg(), 9) <= 0)
1698 return error(_("could not read '%s'"),
1699 rebase_path_squash_msg());
1701 eol = buf.buf[0] != comment_line_char ?
1702 buf.buf : strchrnul(buf.buf, '\n');
1704 strbuf_addf(&header, "%c ", comment_line_char);
1705 strbuf_addf(&header, _("This is a combination of %d commits."),
1706 opts->current_fixup_count + 2);
1707 strbuf_splice(&buf, 0, eol - buf.buf, header.buf, header.len);
1708 strbuf_release(&header);
1709 } else {
1710 struct object_id head;
1711 struct commit *head_commit;
1712 const char *head_message, *body;
1714 if (get_oid("HEAD", &head))
1715 return error(_("need a HEAD to fixup"));
1716 if (!(head_commit = lookup_commit_reference(r, &head)))
1717 return error(_("could not read HEAD"));
1718 if (!(head_message = logmsg_reencode(head_commit, NULL, encoding)))
1719 return error(_("could not read HEAD's commit message"));
1721 find_commit_subject(head_message, &body);
1722 if (write_message(body, strlen(body),
1723 rebase_path_fixup_msg(), 0)) {
1724 unuse_commit_buffer(head_commit, head_message);
1725 return error(_("cannot write '%s'"),
1726 rebase_path_fixup_msg());
1729 strbuf_addf(&buf, "%c ", comment_line_char);
1730 strbuf_addf(&buf, _("This is a combination of %d commits."), 2);
1731 strbuf_addf(&buf, "\n%c ", comment_line_char);
1732 strbuf_addstr(&buf, _("This is the 1st commit message:"));
1733 strbuf_addstr(&buf, "\n\n");
1734 strbuf_addstr(&buf, body);
1736 unuse_commit_buffer(head_commit, head_message);
1739 if (!(message = logmsg_reencode(commit, NULL, encoding)))
1740 return error(_("could not read commit message of %s"),
1741 oid_to_hex(&commit->object.oid));
1742 find_commit_subject(message, &body);
1744 if (command == TODO_SQUASH) {
1745 unlink(rebase_path_fixup_msg());
1746 strbuf_addf(&buf, "\n%c ", comment_line_char);
1747 strbuf_addf(&buf, _("This is the commit message #%d:"),
1748 ++opts->current_fixup_count + 1);
1749 strbuf_addstr(&buf, "\n\n");
1750 strbuf_addstr(&buf, body);
1751 } else if (command == TODO_FIXUP) {
1752 strbuf_addf(&buf, "\n%c ", comment_line_char);
1753 strbuf_addf(&buf, _("The commit message #%d will be skipped:"),
1754 ++opts->current_fixup_count + 1);
1755 strbuf_addstr(&buf, "\n\n");
1756 strbuf_add_commented_lines(&buf, body, strlen(body));
1757 } else
1758 return error(_("unknown command: %d"), command);
1759 unuse_commit_buffer(commit, message);
1761 res = write_message(buf.buf, buf.len, rebase_path_squash_msg(), 0);
1762 strbuf_release(&buf);
1764 if (!res) {
1765 strbuf_addf(&opts->current_fixups, "%s%s %s",
1766 opts->current_fixups.len ? "\n" : "",
1767 command_to_string(command),
1768 oid_to_hex(&commit->object.oid));
1769 res = write_message(opts->current_fixups.buf,
1770 opts->current_fixups.len,
1771 rebase_path_current_fixups(), 0);
1774 return res;
1777 static void flush_rewritten_pending(void)
1779 struct strbuf buf = STRBUF_INIT;
1780 struct object_id newoid;
1781 FILE *out;
1783 if (strbuf_read_file(&buf, rebase_path_rewritten_pending(), (GIT_MAX_HEXSZ + 1) * 2) > 0 &&
1784 !get_oid("HEAD", &newoid) &&
1785 (out = fopen_or_warn(rebase_path_rewritten_list(), "a"))) {
1786 char *bol = buf.buf, *eol;
1788 while (*bol) {
1789 eol = strchrnul(bol, '\n');
1790 fprintf(out, "%.*s %s\n", (int)(eol - bol),
1791 bol, oid_to_hex(&newoid));
1792 if (!*eol)
1793 break;
1794 bol = eol + 1;
1796 fclose(out);
1797 unlink(rebase_path_rewritten_pending());
1799 strbuf_release(&buf);
1802 static void record_in_rewritten(struct object_id *oid,
1803 enum todo_command next_command)
1805 FILE *out = fopen_or_warn(rebase_path_rewritten_pending(), "a");
1807 if (!out)
1808 return;
1810 fprintf(out, "%s\n", oid_to_hex(oid));
1811 fclose(out);
1813 if (!is_fixup(next_command))
1814 flush_rewritten_pending();
1817 static int do_pick_commit(struct repository *r,
1818 enum todo_command command,
1819 struct commit *commit,
1820 struct replay_opts *opts,
1821 int final_fixup, int *check_todo)
1823 unsigned int flags = opts->edit ? EDIT_MSG : 0;
1824 const char *msg_file = opts->edit ? NULL : git_path_merge_msg(r);
1825 struct object_id head;
1826 struct commit *base, *next, *parent;
1827 const char *base_label, *next_label;
1828 char *author = NULL;
1829 struct commit_message msg = { NULL, NULL, NULL, NULL };
1830 struct strbuf msgbuf = STRBUF_INIT;
1831 int res, unborn = 0, reword = 0, allow, drop_commit;
1833 if (opts->no_commit) {
1835 * We do not intend to commit immediately. We just want to
1836 * merge the differences in, so let's compute the tree
1837 * that represents the "current" state for merge-recursive
1838 * to work on.
1840 if (write_index_as_tree(&head, r->index, r->index_file, 0, NULL))
1841 return error(_("your index file is unmerged."));
1842 } else {
1843 unborn = get_oid("HEAD", &head);
1844 /* Do we want to generate a root commit? */
1845 if (is_pick_or_similar(command) && opts->have_squash_onto &&
1846 oideq(&head, &opts->squash_onto)) {
1847 if (is_fixup(command))
1848 return error(_("cannot fixup root commit"));
1849 flags |= CREATE_ROOT_COMMIT;
1850 unborn = 1;
1851 } else if (unborn)
1852 oidcpy(&head, the_hash_algo->empty_tree);
1853 if (index_differs_from(r, unborn ? empty_tree_oid_hex() : "HEAD",
1854 NULL, 0))
1855 return error_dirty_index(r, opts);
1857 discard_index(r->index);
1859 if (!commit->parents)
1860 parent = NULL;
1861 else if (commit->parents->next) {
1862 /* Reverting or cherry-picking a merge commit */
1863 int cnt;
1864 struct commit_list *p;
1866 if (!opts->mainline)
1867 return error(_("commit %s is a merge but no -m option was given."),
1868 oid_to_hex(&commit->object.oid));
1870 for (cnt = 1, p = commit->parents;
1871 cnt != opts->mainline && p;
1872 cnt++)
1873 p = p->next;
1874 if (cnt != opts->mainline || !p)
1875 return error(_("commit %s does not have parent %d"),
1876 oid_to_hex(&commit->object.oid), opts->mainline);
1877 parent = p->item;
1878 } else if (1 < opts->mainline)
1880 * Non-first parent explicitly specified as mainline for
1881 * non-merge commit
1883 return error(_("commit %s does not have parent %d"),
1884 oid_to_hex(&commit->object.oid), opts->mainline);
1885 else
1886 parent = commit->parents->item;
1888 if (get_message(commit, &msg) != 0)
1889 return error(_("cannot get commit message for %s"),
1890 oid_to_hex(&commit->object.oid));
1892 if (opts->allow_ff && !is_fixup(command) &&
1893 ((parent && oideq(&parent->object.oid, &head)) ||
1894 (!parent && unborn))) {
1895 if (is_rebase_i(opts))
1896 write_author_script(msg.message);
1897 res = fast_forward_to(r, &commit->object.oid, &head, unborn,
1898 opts);
1899 if (res || command != TODO_REWORD)
1900 goto leave;
1901 reword = 1;
1902 msg_file = NULL;
1903 goto fast_forward_edit;
1905 if (parent && parse_commit(parent) < 0)
1906 /* TRANSLATORS: The first %s will be a "todo" command like
1907 "revert" or "pick", the second %s a SHA1. */
1908 return error(_("%s: cannot parse parent commit %s"),
1909 command_to_string(command),
1910 oid_to_hex(&parent->object.oid));
1913 * "commit" is an existing commit. We would want to apply
1914 * the difference it introduces since its first parent "prev"
1915 * on top of the current HEAD if we are cherry-pick. Or the
1916 * reverse of it if we are revert.
1919 if (command == TODO_REVERT) {
1920 base = commit;
1921 base_label = msg.label;
1922 next = parent;
1923 next_label = msg.parent_label;
1924 strbuf_addstr(&msgbuf, "Revert \"");
1925 strbuf_addstr(&msgbuf, msg.subject);
1926 strbuf_addstr(&msgbuf, "\"\n\nThis reverts commit ");
1927 strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1929 if (commit->parents && commit->parents->next) {
1930 strbuf_addstr(&msgbuf, ", reversing\nchanges made to ");
1931 strbuf_addstr(&msgbuf, oid_to_hex(&parent->object.oid));
1933 strbuf_addstr(&msgbuf, ".\n");
1934 } else {
1935 const char *p;
1937 base = parent;
1938 base_label = msg.parent_label;
1939 next = commit;
1940 next_label = msg.label;
1942 /* Append the commit log message to msgbuf. */
1943 if (find_commit_subject(msg.message, &p))
1944 strbuf_addstr(&msgbuf, p);
1946 if (opts->record_origin) {
1947 strbuf_complete_line(&msgbuf);
1948 if (!has_conforming_footer(&msgbuf, NULL, 0))
1949 strbuf_addch(&msgbuf, '\n');
1950 strbuf_addstr(&msgbuf, cherry_picked_prefix);
1951 strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1952 strbuf_addstr(&msgbuf, ")\n");
1954 if (!is_fixup(command))
1955 author = get_author(msg.message);
1958 if (command == TODO_REWORD)
1959 reword = 1;
1960 else if (is_fixup(command)) {
1961 if (update_squash_messages(r, command, commit, opts))
1962 return -1;
1963 flags |= AMEND_MSG;
1964 if (!final_fixup)
1965 msg_file = rebase_path_squash_msg();
1966 else if (file_exists(rebase_path_fixup_msg())) {
1967 flags |= CLEANUP_MSG;
1968 msg_file = rebase_path_fixup_msg();
1969 } else {
1970 const char *dest = git_path_squash_msg(r);
1971 unlink(dest);
1972 if (copy_file(dest, rebase_path_squash_msg(), 0666))
1973 return error(_("could not rename '%s' to '%s'"),
1974 rebase_path_squash_msg(), dest);
1975 unlink(git_path_merge_msg(r));
1976 msg_file = dest;
1977 flags |= EDIT_MSG;
1981 if (opts->signoff && !is_fixup(command))
1982 append_signoff(&msgbuf, 0, 0);
1984 if (is_rebase_i(opts) && write_author_script(msg.message) < 0)
1985 res = -1;
1986 else if (!opts->strategy || !strcmp(opts->strategy, "recursive") || command == TODO_REVERT) {
1987 res = do_recursive_merge(r, base, next, base_label, next_label,
1988 &head, &msgbuf, opts);
1989 if (res < 0)
1990 goto leave;
1992 res |= write_message(msgbuf.buf, msgbuf.len,
1993 git_path_merge_msg(r), 0);
1994 } else {
1995 struct commit_list *common = NULL;
1996 struct commit_list *remotes = NULL;
1998 res = write_message(msgbuf.buf, msgbuf.len,
1999 git_path_merge_msg(r), 0);
2001 commit_list_insert(base, &common);
2002 commit_list_insert(next, &remotes);
2003 res |= try_merge_command(r, opts->strategy,
2004 opts->xopts_nr, (const char **)opts->xopts,
2005 common, oid_to_hex(&head), remotes);
2006 free_commit_list(common);
2007 free_commit_list(remotes);
2009 strbuf_release(&msgbuf);
2012 * If the merge was clean or if it failed due to conflict, we write
2013 * CHERRY_PICK_HEAD for the subsequent invocation of commit to use.
2014 * However, if the merge did not even start, then we don't want to
2015 * write it at all.
2017 if ((command == TODO_PICK || command == TODO_REWORD ||
2018 command == TODO_EDIT) && !opts->no_commit &&
2019 (res == 0 || res == 1) &&
2020 update_ref(NULL, "CHERRY_PICK_HEAD", &commit->object.oid, NULL,
2021 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
2022 res = -1;
2023 if (command == TODO_REVERT && ((opts->no_commit && res == 0) || res == 1) &&
2024 update_ref(NULL, "REVERT_HEAD", &commit->object.oid, NULL,
2025 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
2026 res = -1;
2028 if (res) {
2029 error(command == TODO_REVERT
2030 ? _("could not revert %s... %s")
2031 : _("could not apply %s... %s"),
2032 short_commit_name(commit), msg.subject);
2033 print_advice(r, res == 1, opts);
2034 repo_rerere(r, opts->allow_rerere_auto);
2035 goto leave;
2038 drop_commit = 0;
2039 allow = allow_empty(r, opts, commit);
2040 if (allow < 0) {
2041 res = allow;
2042 goto leave;
2043 } else if (allow == 1) {
2044 flags |= ALLOW_EMPTY;
2045 } else if (allow == 2) {
2046 drop_commit = 1;
2047 refs_delete_ref(get_main_ref_store(r), "", "CHERRY_PICK_HEAD",
2048 NULL, 0);
2049 unlink(git_path_merge_msg(r));
2050 fprintf(stderr,
2051 _("dropping %s %s -- patch contents already upstream\n"),
2052 oid_to_hex(&commit->object.oid), msg.subject);
2053 } /* else allow == 0 and there's nothing special to do */
2054 if (!opts->no_commit && !drop_commit) {
2055 if (author || command == TODO_REVERT || (flags & AMEND_MSG))
2056 res = do_commit(r, msg_file, author, opts, flags,
2057 commit? &commit->object.oid : NULL);
2058 else
2059 res = error(_("unable to parse commit author"));
2060 *check_todo = !!(flags & EDIT_MSG);
2061 if (!res && reword) {
2062 fast_forward_edit:
2063 res = run_git_commit(r, NULL, opts, EDIT_MSG |
2064 VERIFY_MSG | AMEND_MSG |
2065 (flags & ALLOW_EMPTY));
2066 *check_todo = 1;
2071 if (!res && final_fixup) {
2072 unlink(rebase_path_fixup_msg());
2073 unlink(rebase_path_squash_msg());
2074 unlink(rebase_path_current_fixups());
2075 strbuf_reset(&opts->current_fixups);
2076 opts->current_fixup_count = 0;
2079 leave:
2080 free_message(commit, &msg);
2081 free(author);
2082 update_abort_safety_file();
2084 return res;
2087 static int prepare_revs(struct replay_opts *opts)
2090 * picking (but not reverting) ranges (but not individual revisions)
2091 * should be done in reverse
2093 if (opts->action == REPLAY_PICK && !opts->revs->no_walk)
2094 opts->revs->reverse ^= 1;
2096 if (prepare_revision_walk(opts->revs))
2097 return error(_("revision walk setup failed"));
2099 return 0;
2102 static int read_and_refresh_cache(struct repository *r,
2103 struct replay_opts *opts)
2105 struct lock_file index_lock = LOCK_INIT;
2106 int index_fd = repo_hold_locked_index(r, &index_lock, 0);
2107 if (repo_read_index(r) < 0) {
2108 rollback_lock_file(&index_lock);
2109 return error(_("git %s: failed to read the index"),
2110 _(action_name(opts)));
2112 refresh_index(r->index, REFRESH_QUIET|REFRESH_UNMERGED, NULL, NULL, NULL);
2113 if (index_fd >= 0) {
2114 if (write_locked_index(r->index, &index_lock,
2115 COMMIT_LOCK | SKIP_IF_UNCHANGED)) {
2116 return error(_("git %s: failed to refresh the index"),
2117 _(action_name(opts)));
2120 return 0;
2123 enum todo_item_flags {
2124 TODO_EDIT_MERGE_MSG = 1
2127 void todo_list_release(struct todo_list *todo_list)
2129 strbuf_release(&todo_list->buf);
2130 FREE_AND_NULL(todo_list->items);
2131 todo_list->nr = todo_list->alloc = 0;
2134 static struct todo_item *append_new_todo(struct todo_list *todo_list)
2136 ALLOC_GROW(todo_list->items, todo_list->nr + 1, todo_list->alloc);
2137 todo_list->total_nr++;
2138 return todo_list->items + todo_list->nr++;
2141 const char *todo_item_get_arg(struct todo_list *todo_list,
2142 struct todo_item *item)
2144 return todo_list->buf.buf + item->arg_offset;
2147 static int is_command(enum todo_command command, const char **bol)
2149 const char *str = todo_command_info[command].str;
2150 const char nick = todo_command_info[command].c;
2151 const char *p = *bol + 1;
2153 return skip_prefix(*bol, str, bol) ||
2154 ((nick && **bol == nick) &&
2155 (*p == ' ' || *p == '\t' || *p == '\n' || *p == '\r' || !*p) &&
2156 (*bol = p));
2159 static int parse_insn_line(struct repository *r, struct todo_item *item,
2160 const char *buf, const char *bol, char *eol)
2162 struct object_id commit_oid;
2163 char *end_of_object_name;
2164 int i, saved, status, padding;
2166 item->flags = 0;
2168 /* left-trim */
2169 bol += strspn(bol, " \t");
2171 if (bol == eol || *bol == '\r' || *bol == comment_line_char) {
2172 item->command = TODO_COMMENT;
2173 item->commit = NULL;
2174 item->arg_offset = bol - buf;
2175 item->arg_len = eol - bol;
2176 return 0;
2179 for (i = 0; i < TODO_COMMENT; i++)
2180 if (is_command(i, &bol)) {
2181 item->command = i;
2182 break;
2184 if (i >= TODO_COMMENT)
2185 return -1;
2187 /* Eat up extra spaces/ tabs before object name */
2188 padding = strspn(bol, " \t");
2189 bol += padding;
2191 if (item->command == TODO_NOOP || item->command == TODO_BREAK) {
2192 if (bol != eol)
2193 return error(_("%s does not accept arguments: '%s'"),
2194 command_to_string(item->command), bol);
2195 item->commit = NULL;
2196 item->arg_offset = bol - buf;
2197 item->arg_len = eol - bol;
2198 return 0;
2201 if (!padding)
2202 return error(_("missing arguments for %s"),
2203 command_to_string(item->command));
2205 if (item->command == TODO_EXEC || item->command == TODO_LABEL ||
2206 item->command == TODO_RESET) {
2207 item->commit = NULL;
2208 item->arg_offset = bol - buf;
2209 item->arg_len = (int)(eol - bol);
2210 return 0;
2213 if (item->command == TODO_MERGE) {
2214 if (skip_prefix(bol, "-C", &bol))
2215 bol += strspn(bol, " \t");
2216 else if (skip_prefix(bol, "-c", &bol)) {
2217 bol += strspn(bol, " \t");
2218 item->flags |= TODO_EDIT_MERGE_MSG;
2219 } else {
2220 item->flags |= TODO_EDIT_MERGE_MSG;
2221 item->commit = NULL;
2222 item->arg_offset = bol - buf;
2223 item->arg_len = (int)(eol - bol);
2224 return 0;
2228 end_of_object_name = (char *) bol + strcspn(bol, " \t\n");
2229 saved = *end_of_object_name;
2230 *end_of_object_name = '\0';
2231 status = get_oid(bol, &commit_oid);
2232 if (status < 0)
2233 error(_("could not parse '%s'"), bol); /* return later */
2234 *end_of_object_name = saved;
2236 bol = end_of_object_name + strspn(end_of_object_name, " \t");
2237 item->arg_offset = bol - buf;
2238 item->arg_len = (int)(eol - bol);
2240 if (status < 0)
2241 return status;
2243 item->commit = lookup_commit_reference(r, &commit_oid);
2244 return item->commit ? 0 : -1;
2247 int sequencer_get_last_command(struct repository *r, enum replay_action *action)
2249 const char *todo_file, *bol;
2250 struct strbuf buf = STRBUF_INIT;
2251 int ret = 0;
2253 todo_file = git_path_todo_file();
2254 if (strbuf_read_file(&buf, todo_file, 0) < 0) {
2255 if (errno == ENOENT || errno == ENOTDIR)
2256 return -1;
2257 else
2258 return error_errno("unable to open '%s'", todo_file);
2260 bol = buf.buf + strspn(buf.buf, " \t\r\n");
2261 if (is_command(TODO_PICK, &bol) && (*bol == ' ' || *bol == '\t'))
2262 *action = REPLAY_PICK;
2263 else if (is_command(TODO_REVERT, &bol) &&
2264 (*bol == ' ' || *bol == '\t'))
2265 *action = REPLAY_REVERT;
2266 else
2267 ret = -1;
2269 strbuf_release(&buf);
2271 return ret;
2274 int todo_list_parse_insn_buffer(struct repository *r, char *buf,
2275 struct todo_list *todo_list)
2277 struct todo_item *item;
2278 char *p = buf, *next_p;
2279 int i, res = 0, fixup_okay = file_exists(rebase_path_done());
2281 todo_list->current = todo_list->nr = 0;
2283 for (i = 1; *p; i++, p = next_p) {
2284 char *eol = strchrnul(p, '\n');
2286 next_p = *eol ? eol + 1 /* skip LF */ : eol;
2288 if (p != eol && eol[-1] == '\r')
2289 eol--; /* strip Carriage Return */
2291 item = append_new_todo(todo_list);
2292 item->offset_in_buf = p - todo_list->buf.buf;
2293 if (parse_insn_line(r, item, buf, p, eol)) {
2294 res = error(_("invalid line %d: %.*s"),
2295 i, (int)(eol - p), p);
2296 item->command = TODO_COMMENT + 1;
2297 item->arg_offset = p - buf;
2298 item->arg_len = (int)(eol - p);
2299 item->commit = NULL;
2302 if (fixup_okay)
2303 ; /* do nothing */
2304 else if (is_fixup(item->command))
2305 return error(_("cannot '%s' without a previous commit"),
2306 command_to_string(item->command));
2307 else if (!is_noop(item->command))
2308 fixup_okay = 1;
2311 return res;
2314 static int count_commands(struct todo_list *todo_list)
2316 int count = 0, i;
2318 for (i = 0; i < todo_list->nr; i++)
2319 if (todo_list->items[i].command != TODO_COMMENT)
2320 count++;
2322 return count;
2325 static int get_item_line_offset(struct todo_list *todo_list, int index)
2327 return index < todo_list->nr ?
2328 todo_list->items[index].offset_in_buf : todo_list->buf.len;
2331 static const char *get_item_line(struct todo_list *todo_list, int index)
2333 return todo_list->buf.buf + get_item_line_offset(todo_list, index);
2336 static int get_item_line_length(struct todo_list *todo_list, int index)
2338 return get_item_line_offset(todo_list, index + 1)
2339 - get_item_line_offset(todo_list, index);
2342 static ssize_t strbuf_read_file_or_whine(struct strbuf *sb, const char *path)
2344 int fd;
2345 ssize_t len;
2347 fd = open(path, O_RDONLY);
2348 if (fd < 0)
2349 return error_errno(_("could not open '%s'"), path);
2350 len = strbuf_read(sb, fd, 0);
2351 close(fd);
2352 if (len < 0)
2353 return error(_("could not read '%s'."), path);
2354 return len;
2357 static int have_finished_the_last_pick(void)
2359 struct strbuf buf = STRBUF_INIT;
2360 const char *eol;
2361 const char *todo_path = git_path_todo_file();
2362 int ret = 0;
2364 if (strbuf_read_file(&buf, todo_path, 0) < 0) {
2365 if (errno == ENOENT) {
2366 return 0;
2367 } else {
2368 error_errno("unable to open '%s'", todo_path);
2369 return 0;
2372 /* If there is only one line then we are done */
2373 eol = strchr(buf.buf, '\n');
2374 if (!eol || !eol[1])
2375 ret = 1;
2377 strbuf_release(&buf);
2379 return ret;
2382 void sequencer_post_commit_cleanup(struct repository *r, int verbose)
2384 struct replay_opts opts = REPLAY_OPTS_INIT;
2385 int need_cleanup = 0;
2387 if (refs_ref_exists(get_main_ref_store(r), "CHERRY_PICK_HEAD")) {
2388 if (!refs_delete_ref(get_main_ref_store(r), "",
2389 "CHERRY_PICK_HEAD", NULL, 0) &&
2390 verbose)
2391 warning(_("cancelling a cherry picking in progress"));
2392 opts.action = REPLAY_PICK;
2393 need_cleanup = 1;
2396 if (refs_ref_exists(get_main_ref_store(r), "REVERT_HEAD")) {
2397 if (!refs_delete_ref(get_main_ref_store(r), "", "REVERT_HEAD",
2398 NULL, 0) &&
2399 verbose)
2400 warning(_("cancelling a revert in progress"));
2401 opts.action = REPLAY_REVERT;
2402 need_cleanup = 1;
2405 if (!need_cleanup)
2406 return;
2408 if (!have_finished_the_last_pick())
2409 return;
2411 sequencer_remove_state(&opts);
2414 static void todo_list_write_total_nr(struct todo_list *todo_list)
2416 FILE *f = fopen_or_warn(rebase_path_msgtotal(), "w");
2418 if (f) {
2419 fprintf(f, "%d\n", todo_list->total_nr);
2420 fclose(f);
2424 static int read_populate_todo(struct repository *r,
2425 struct todo_list *todo_list,
2426 struct replay_opts *opts)
2428 struct stat st;
2429 const char *todo_file = get_todo_path(opts);
2430 int res;
2432 strbuf_reset(&todo_list->buf);
2433 if (strbuf_read_file_or_whine(&todo_list->buf, todo_file) < 0)
2434 return -1;
2436 res = stat(todo_file, &st);
2437 if (res)
2438 return error(_("could not stat '%s'"), todo_file);
2439 fill_stat_data(&todo_list->stat, &st);
2441 res = todo_list_parse_insn_buffer(r, todo_list->buf.buf, todo_list);
2442 if (res) {
2443 if (is_rebase_i(opts))
2444 return error(_("please fix this using "
2445 "'git rebase --edit-todo'."));
2446 return error(_("unusable instruction sheet: '%s'"), todo_file);
2449 if (!todo_list->nr &&
2450 (!is_rebase_i(opts) || !file_exists(rebase_path_done())))
2451 return error(_("no commits parsed."));
2453 if (!is_rebase_i(opts)) {
2454 enum todo_command valid =
2455 opts->action == REPLAY_PICK ? TODO_PICK : TODO_REVERT;
2456 int i;
2458 for (i = 0; i < todo_list->nr; i++)
2459 if (valid == todo_list->items[i].command)
2460 continue;
2461 else if (valid == TODO_PICK)
2462 return error(_("cannot cherry-pick during a revert."));
2463 else
2464 return error(_("cannot revert during a cherry-pick."));
2467 if (is_rebase_i(opts)) {
2468 struct todo_list done = TODO_LIST_INIT;
2470 if (strbuf_read_file(&done.buf, rebase_path_done(), 0) > 0 &&
2471 !todo_list_parse_insn_buffer(r, done.buf.buf, &done))
2472 todo_list->done_nr = count_commands(&done);
2473 else
2474 todo_list->done_nr = 0;
2476 todo_list->total_nr = todo_list->done_nr
2477 + count_commands(todo_list);
2478 todo_list_release(&done);
2480 todo_list_write_total_nr(todo_list);
2483 return 0;
2486 static int git_config_string_dup(char **dest,
2487 const char *var, const char *value)
2489 if (!value)
2490 return config_error_nonbool(var);
2491 free(*dest);
2492 *dest = xstrdup(value);
2493 return 0;
2496 static int populate_opts_cb(const char *key, const char *value, void *data)
2498 struct replay_opts *opts = data;
2499 int error_flag = 1;
2501 if (!value)
2502 error_flag = 0;
2503 else if (!strcmp(key, "options.no-commit"))
2504 opts->no_commit = git_config_bool_or_int(key, value, &error_flag);
2505 else if (!strcmp(key, "options.edit"))
2506 opts->edit = git_config_bool_or_int(key, value, &error_flag);
2507 else if (!strcmp(key, "options.allow-empty"))
2508 opts->allow_empty =
2509 git_config_bool_or_int(key, value, &error_flag);
2510 else if (!strcmp(key, "options.allow-empty-message"))
2511 opts->allow_empty_message =
2512 git_config_bool_or_int(key, value, &error_flag);
2513 else if (!strcmp(key, "options.keep-redundant-commits"))
2514 opts->keep_redundant_commits =
2515 git_config_bool_or_int(key, value, &error_flag);
2516 else if (!strcmp(key, "options.signoff"))
2517 opts->signoff = git_config_bool_or_int(key, value, &error_flag);
2518 else if (!strcmp(key, "options.record-origin"))
2519 opts->record_origin = git_config_bool_or_int(key, value, &error_flag);
2520 else if (!strcmp(key, "options.allow-ff"))
2521 opts->allow_ff = git_config_bool_or_int(key, value, &error_flag);
2522 else if (!strcmp(key, "options.mainline"))
2523 opts->mainline = git_config_int(key, value);
2524 else if (!strcmp(key, "options.strategy"))
2525 git_config_string_dup(&opts->strategy, key, value);
2526 else if (!strcmp(key, "options.gpg-sign"))
2527 git_config_string_dup(&opts->gpg_sign, key, value);
2528 else if (!strcmp(key, "options.strategy-option")) {
2529 ALLOC_GROW(opts->xopts, opts->xopts_nr + 1, opts->xopts_alloc);
2530 opts->xopts[opts->xopts_nr++] = xstrdup(value);
2531 } else if (!strcmp(key, "options.allow-rerere-auto"))
2532 opts->allow_rerere_auto =
2533 git_config_bool_or_int(key, value, &error_flag) ?
2534 RERERE_AUTOUPDATE : RERERE_NOAUTOUPDATE;
2535 else if (!strcmp(key, "options.default-msg-cleanup")) {
2536 opts->explicit_cleanup = 1;
2537 opts->default_msg_cleanup = get_cleanup_mode(value, 1);
2538 } else
2539 return error(_("invalid key: %s"), key);
2541 if (!error_flag)
2542 return error(_("invalid value for %s: %s"), key, value);
2544 return 0;
2547 void parse_strategy_opts(struct replay_opts *opts, char *raw_opts)
2549 int i;
2550 char *strategy_opts_string = raw_opts;
2552 if (*strategy_opts_string == ' ')
2553 strategy_opts_string++;
2555 opts->xopts_nr = split_cmdline(strategy_opts_string,
2556 (const char ***)&opts->xopts);
2557 for (i = 0; i < opts->xopts_nr; i++) {
2558 const char *arg = opts->xopts[i];
2560 skip_prefix(arg, "--", &arg);
2561 opts->xopts[i] = xstrdup(arg);
2565 static void read_strategy_opts(struct replay_opts *opts, struct strbuf *buf)
2567 strbuf_reset(buf);
2568 if (!read_oneliner(buf, rebase_path_strategy(), 0))
2569 return;
2570 opts->strategy = strbuf_detach(buf, NULL);
2571 if (!read_oneliner(buf, rebase_path_strategy_opts(), 0))
2572 return;
2574 parse_strategy_opts(opts, buf->buf);
2577 static int read_populate_opts(struct replay_opts *opts)
2579 if (is_rebase_i(opts)) {
2580 struct strbuf buf = STRBUF_INIT;
2581 int ret = 0;
2583 if (read_oneliner(&buf, rebase_path_gpg_sign_opt(),
2584 READ_ONELINER_SKIP_IF_EMPTY)) {
2585 if (!starts_with(buf.buf, "-S"))
2586 strbuf_reset(&buf);
2587 else {
2588 free(opts->gpg_sign);
2589 opts->gpg_sign = xstrdup(buf.buf + 2);
2591 strbuf_reset(&buf);
2594 if (read_oneliner(&buf, rebase_path_allow_rerere_autoupdate(),
2595 READ_ONELINER_SKIP_IF_EMPTY)) {
2596 if (!strcmp(buf.buf, "--rerere-autoupdate"))
2597 opts->allow_rerere_auto = RERERE_AUTOUPDATE;
2598 else if (!strcmp(buf.buf, "--no-rerere-autoupdate"))
2599 opts->allow_rerere_auto = RERERE_NOAUTOUPDATE;
2600 strbuf_reset(&buf);
2603 if (file_exists(rebase_path_verbose()))
2604 opts->verbose = 1;
2606 if (file_exists(rebase_path_quiet()))
2607 opts->quiet = 1;
2609 if (file_exists(rebase_path_signoff())) {
2610 opts->allow_ff = 0;
2611 opts->signoff = 1;
2614 if (file_exists(rebase_path_cdate_is_adate())) {
2615 opts->allow_ff = 0;
2616 opts->committer_date_is_author_date = 1;
2619 if (file_exists(rebase_path_ignore_date())) {
2620 opts->allow_ff = 0;
2621 opts->ignore_date = 1;
2624 if (file_exists(rebase_path_reschedule_failed_exec()))
2625 opts->reschedule_failed_exec = 1;
2627 if (file_exists(rebase_path_drop_redundant_commits()))
2628 opts->drop_redundant_commits = 1;
2630 if (file_exists(rebase_path_keep_redundant_commits()))
2631 opts->keep_redundant_commits = 1;
2633 read_strategy_opts(opts, &buf);
2634 strbuf_reset(&buf);
2636 if (read_oneliner(&opts->current_fixups,
2637 rebase_path_current_fixups(),
2638 READ_ONELINER_SKIP_IF_EMPTY)) {
2639 const char *p = opts->current_fixups.buf;
2640 opts->current_fixup_count = 1;
2641 while ((p = strchr(p, '\n'))) {
2642 opts->current_fixup_count++;
2643 p++;
2647 if (read_oneliner(&buf, rebase_path_squash_onto(), 0)) {
2648 if (get_oid_hex(buf.buf, &opts->squash_onto) < 0) {
2649 ret = error(_("unusable squash-onto"));
2650 goto done_rebase_i;
2652 opts->have_squash_onto = 1;
2655 done_rebase_i:
2656 strbuf_release(&buf);
2657 return ret;
2660 if (!file_exists(git_path_opts_file()))
2661 return 0;
2663 * The function git_parse_source(), called from git_config_from_file(),
2664 * may die() in case of a syntactically incorrect file. We do not care
2665 * about this case, though, because we wrote that file ourselves, so we
2666 * are pretty certain that it is syntactically correct.
2668 if (git_config_from_file(populate_opts_cb, git_path_opts_file(), opts) < 0)
2669 return error(_("malformed options sheet: '%s'"),
2670 git_path_opts_file());
2671 return 0;
2674 static void write_strategy_opts(struct replay_opts *opts)
2676 int i;
2677 struct strbuf buf = STRBUF_INIT;
2679 for (i = 0; i < opts->xopts_nr; ++i)
2680 strbuf_addf(&buf, " --%s", opts->xopts[i]);
2682 write_file(rebase_path_strategy_opts(), "%s\n", buf.buf);
2683 strbuf_release(&buf);
2686 int write_basic_state(struct replay_opts *opts, const char *head_name,
2687 struct commit *onto, const char *orig_head)
2689 if (head_name)
2690 write_file(rebase_path_head_name(), "%s\n", head_name);
2691 if (onto)
2692 write_file(rebase_path_onto(), "%s\n",
2693 oid_to_hex(&onto->object.oid));
2694 if (orig_head)
2695 write_file(rebase_path_orig_head(), "%s\n", orig_head);
2697 if (opts->quiet)
2698 write_file(rebase_path_quiet(), "%s", "");
2699 if (opts->verbose)
2700 write_file(rebase_path_verbose(), "%s", "");
2701 if (opts->strategy)
2702 write_file(rebase_path_strategy(), "%s\n", opts->strategy);
2703 if (opts->xopts_nr > 0)
2704 write_strategy_opts(opts);
2706 if (opts->allow_rerere_auto == RERERE_AUTOUPDATE)
2707 write_file(rebase_path_allow_rerere_autoupdate(), "--rerere-autoupdate\n");
2708 else if (opts->allow_rerere_auto == RERERE_NOAUTOUPDATE)
2709 write_file(rebase_path_allow_rerere_autoupdate(), "--no-rerere-autoupdate\n");
2711 if (opts->gpg_sign)
2712 write_file(rebase_path_gpg_sign_opt(), "-S%s\n", opts->gpg_sign);
2713 if (opts->signoff)
2714 write_file(rebase_path_signoff(), "--signoff\n");
2715 if (opts->drop_redundant_commits)
2716 write_file(rebase_path_drop_redundant_commits(), "%s", "");
2717 if (opts->keep_redundant_commits)
2718 write_file(rebase_path_keep_redundant_commits(), "%s", "");
2719 if (opts->committer_date_is_author_date)
2720 write_file(rebase_path_cdate_is_adate(), "%s", "");
2721 if (opts->ignore_date)
2722 write_file(rebase_path_ignore_date(), "%s", "");
2723 if (opts->reschedule_failed_exec)
2724 write_file(rebase_path_reschedule_failed_exec(), "%s", "");
2726 return 0;
2729 static int walk_revs_populate_todo(struct todo_list *todo_list,
2730 struct replay_opts *opts)
2732 enum todo_command command = opts->action == REPLAY_PICK ?
2733 TODO_PICK : TODO_REVERT;
2734 const char *command_string = todo_command_info[command].str;
2735 const char *encoding;
2736 struct commit *commit;
2738 if (prepare_revs(opts))
2739 return -1;
2741 encoding = get_log_output_encoding();
2743 while ((commit = get_revision(opts->revs))) {
2744 struct todo_item *item = append_new_todo(todo_list);
2745 const char *commit_buffer = logmsg_reencode(commit, NULL, encoding);
2746 const char *subject;
2747 int subject_len;
2749 item->command = command;
2750 item->commit = commit;
2751 item->arg_offset = 0;
2752 item->arg_len = 0;
2753 item->offset_in_buf = todo_list->buf.len;
2754 subject_len = find_commit_subject(commit_buffer, &subject);
2755 strbuf_addf(&todo_list->buf, "%s %s %.*s\n", command_string,
2756 short_commit_name(commit), subject_len, subject);
2757 unuse_commit_buffer(commit, commit_buffer);
2760 if (!todo_list->nr)
2761 return error(_("empty commit set passed"));
2763 return 0;
2766 static int create_seq_dir(struct repository *r)
2768 enum replay_action action;
2769 const char *in_progress_error = NULL;
2770 const char *in_progress_advice = NULL;
2771 unsigned int advise_skip =
2772 refs_ref_exists(get_main_ref_store(r), "REVERT_HEAD") ||
2773 refs_ref_exists(get_main_ref_store(r), "CHERRY_PICK_HEAD");
2775 if (!sequencer_get_last_command(r, &action)) {
2776 switch (action) {
2777 case REPLAY_REVERT:
2778 in_progress_error = _("revert is already in progress");
2779 in_progress_advice =
2780 _("try \"git revert (--continue | %s--abort | --quit)\"");
2781 break;
2782 case REPLAY_PICK:
2783 in_progress_error = _("cherry-pick is already in progress");
2784 in_progress_advice =
2785 _("try \"git cherry-pick (--continue | %s--abort | --quit)\"");
2786 break;
2787 default:
2788 BUG("unexpected action in create_seq_dir");
2791 if (in_progress_error) {
2792 error("%s", in_progress_error);
2793 if (advice_sequencer_in_use)
2794 advise(in_progress_advice,
2795 advise_skip ? "--skip | " : "");
2796 return -1;
2798 if (mkdir(git_path_seq_dir(), 0777) < 0)
2799 return error_errno(_("could not create sequencer directory '%s'"),
2800 git_path_seq_dir());
2802 return 0;
2805 static int save_head(const char *head)
2807 struct lock_file head_lock = LOCK_INIT;
2808 struct strbuf buf = STRBUF_INIT;
2809 int fd;
2810 ssize_t written;
2812 fd = hold_lock_file_for_update(&head_lock, git_path_head_file(), 0);
2813 if (fd < 0)
2814 return error_errno(_("could not lock HEAD"));
2815 strbuf_addf(&buf, "%s\n", head);
2816 written = write_in_full(fd, buf.buf, buf.len);
2817 strbuf_release(&buf);
2818 if (written < 0) {
2819 error_errno(_("could not write to '%s'"), git_path_head_file());
2820 rollback_lock_file(&head_lock);
2821 return -1;
2823 if (commit_lock_file(&head_lock) < 0)
2824 return error(_("failed to finalize '%s'"), git_path_head_file());
2825 return 0;
2828 static int rollback_is_safe(void)
2830 struct strbuf sb = STRBUF_INIT;
2831 struct object_id expected_head, actual_head;
2833 if (strbuf_read_file(&sb, git_path_abort_safety_file(), 0) >= 0) {
2834 strbuf_trim(&sb);
2835 if (get_oid_hex(sb.buf, &expected_head)) {
2836 strbuf_release(&sb);
2837 die(_("could not parse %s"), git_path_abort_safety_file());
2839 strbuf_release(&sb);
2841 else if (errno == ENOENT)
2842 oidclr(&expected_head);
2843 else
2844 die_errno(_("could not read '%s'"), git_path_abort_safety_file());
2846 if (get_oid("HEAD", &actual_head))
2847 oidclr(&actual_head);
2849 return oideq(&actual_head, &expected_head);
2852 static int reset_merge(const struct object_id *oid)
2854 int ret;
2855 struct strvec argv = STRVEC_INIT;
2857 strvec_pushl(&argv, "reset", "--merge", NULL);
2859 if (!is_null_oid(oid))
2860 strvec_push(&argv, oid_to_hex(oid));
2862 ret = run_command_v_opt(argv.v, RUN_GIT_CMD);
2863 strvec_clear(&argv);
2865 return ret;
2868 static int rollback_single_pick(struct repository *r)
2870 struct object_id head_oid;
2872 if (!refs_ref_exists(get_main_ref_store(r), "CHERRY_PICK_HEAD") &&
2873 !refs_ref_exists(get_main_ref_store(r), "REVERT_HEAD"))
2874 return error(_("no cherry-pick or revert in progress"));
2875 if (read_ref_full("HEAD", 0, &head_oid, NULL))
2876 return error(_("cannot resolve HEAD"));
2877 if (is_null_oid(&head_oid))
2878 return error(_("cannot abort from a branch yet to be born"));
2879 return reset_merge(&head_oid);
2882 static int skip_single_pick(void)
2884 struct object_id head;
2886 if (read_ref_full("HEAD", 0, &head, NULL))
2887 return error(_("cannot resolve HEAD"));
2888 return reset_merge(&head);
2891 int sequencer_rollback(struct repository *r, struct replay_opts *opts)
2893 FILE *f;
2894 struct object_id oid;
2895 struct strbuf buf = STRBUF_INIT;
2896 const char *p;
2898 f = fopen(git_path_head_file(), "r");
2899 if (!f && errno == ENOENT) {
2901 * There is no multiple-cherry-pick in progress.
2902 * If CHERRY_PICK_HEAD or REVERT_HEAD indicates
2903 * a single-cherry-pick in progress, abort that.
2905 return rollback_single_pick(r);
2907 if (!f)
2908 return error_errno(_("cannot open '%s'"), git_path_head_file());
2909 if (strbuf_getline_lf(&buf, f)) {
2910 error(_("cannot read '%s': %s"), git_path_head_file(),
2911 ferror(f) ? strerror(errno) : _("unexpected end of file"));
2912 fclose(f);
2913 goto fail;
2915 fclose(f);
2916 if (parse_oid_hex(buf.buf, &oid, &p) || *p != '\0') {
2917 error(_("stored pre-cherry-pick HEAD file '%s' is corrupt"),
2918 git_path_head_file());
2919 goto fail;
2921 if (is_null_oid(&oid)) {
2922 error(_("cannot abort from a branch yet to be born"));
2923 goto fail;
2926 if (!rollback_is_safe()) {
2927 /* Do not error, just do not rollback */
2928 warning(_("You seem to have moved HEAD. "
2929 "Not rewinding, check your HEAD!"));
2930 } else
2931 if (reset_merge(&oid))
2932 goto fail;
2933 strbuf_release(&buf);
2934 return sequencer_remove_state(opts);
2935 fail:
2936 strbuf_release(&buf);
2937 return -1;
2940 int sequencer_skip(struct repository *r, struct replay_opts *opts)
2942 enum replay_action action = -1;
2943 sequencer_get_last_command(r, &action);
2946 * Check whether the subcommand requested to skip the commit is actually
2947 * in progress and that it's safe to skip the commit.
2949 * opts->action tells us which subcommand requested to skip the commit.
2950 * If the corresponding .git/<ACTION>_HEAD exists, we know that the
2951 * action is in progress and we can skip the commit.
2953 * Otherwise we check that the last instruction was related to the
2954 * particular subcommand we're trying to execute and barf if that's not
2955 * the case.
2957 * Finally we check that the rollback is "safe", i.e., has the HEAD
2958 * moved? In this case, it doesn't make sense to "reset the merge" and
2959 * "skip the commit" as the user already handled this by committing. But
2960 * we'd not want to barf here, instead give advice on how to proceed. We
2961 * only need to check that when .git/<ACTION>_HEAD doesn't exist because
2962 * it gets removed when the user commits, so if it still exists we're
2963 * sure the user can't have committed before.
2965 switch (opts->action) {
2966 case REPLAY_REVERT:
2967 if (!refs_ref_exists(get_main_ref_store(r), "REVERT_HEAD")) {
2968 if (action != REPLAY_REVERT)
2969 return error(_("no revert in progress"));
2970 if (!rollback_is_safe())
2971 goto give_advice;
2973 break;
2974 case REPLAY_PICK:
2975 if (!refs_ref_exists(get_main_ref_store(r),
2976 "CHERRY_PICK_HEAD")) {
2977 if (action != REPLAY_PICK)
2978 return error(_("no cherry-pick in progress"));
2979 if (!rollback_is_safe())
2980 goto give_advice;
2982 break;
2983 default:
2984 BUG("unexpected action in sequencer_skip");
2987 if (skip_single_pick())
2988 return error(_("failed to skip the commit"));
2989 if (!is_directory(git_path_seq_dir()))
2990 return 0;
2992 return sequencer_continue(r, opts);
2994 give_advice:
2995 error(_("there is nothing to skip"));
2997 if (advice_resolve_conflict) {
2998 advise(_("have you committed already?\n"
2999 "try \"git %s --continue\""),
3000 action == REPLAY_REVERT ? "revert" : "cherry-pick");
3002 return -1;
3005 static int save_todo(struct todo_list *todo_list, struct replay_opts *opts)
3007 struct lock_file todo_lock = LOCK_INIT;
3008 const char *todo_path = get_todo_path(opts);
3009 int next = todo_list->current, offset, fd;
3012 * rebase -i writes "git-rebase-todo" without the currently executing
3013 * command, appending it to "done" instead.
3015 if (is_rebase_i(opts))
3016 next++;
3018 fd = hold_lock_file_for_update(&todo_lock, todo_path, 0);
3019 if (fd < 0)
3020 return error_errno(_("could not lock '%s'"), todo_path);
3021 offset = get_item_line_offset(todo_list, next);
3022 if (write_in_full(fd, todo_list->buf.buf + offset,
3023 todo_list->buf.len - offset) < 0)
3024 return error_errno(_("could not write to '%s'"), todo_path);
3025 if (commit_lock_file(&todo_lock) < 0)
3026 return error(_("failed to finalize '%s'"), todo_path);
3028 if (is_rebase_i(opts) && next > 0) {
3029 const char *done = rebase_path_done();
3030 int fd = open(done, O_CREAT | O_WRONLY | O_APPEND, 0666);
3031 int ret = 0;
3033 if (fd < 0)
3034 return 0;
3035 if (write_in_full(fd, get_item_line(todo_list, next - 1),
3036 get_item_line_length(todo_list, next - 1))
3037 < 0)
3038 ret = error_errno(_("could not write to '%s'"), done);
3039 if (close(fd) < 0)
3040 ret = error_errno(_("failed to finalize '%s'"), done);
3041 return ret;
3043 return 0;
3046 static int save_opts(struct replay_opts *opts)
3048 const char *opts_file = git_path_opts_file();
3049 int res = 0;
3051 if (opts->no_commit)
3052 res |= git_config_set_in_file_gently(opts_file,
3053 "options.no-commit", "true");
3054 if (opts->edit)
3055 res |= git_config_set_in_file_gently(opts_file,
3056 "options.edit", "true");
3057 if (opts->allow_empty)
3058 res |= git_config_set_in_file_gently(opts_file,
3059 "options.allow-empty", "true");
3060 if (opts->allow_empty_message)
3061 res |= git_config_set_in_file_gently(opts_file,
3062 "options.allow-empty-message", "true");
3063 if (opts->keep_redundant_commits)
3064 res |= git_config_set_in_file_gently(opts_file,
3065 "options.keep-redundant-commits", "true");
3066 if (opts->signoff)
3067 res |= git_config_set_in_file_gently(opts_file,
3068 "options.signoff", "true");
3069 if (opts->record_origin)
3070 res |= git_config_set_in_file_gently(opts_file,
3071 "options.record-origin", "true");
3072 if (opts->allow_ff)
3073 res |= git_config_set_in_file_gently(opts_file,
3074 "options.allow-ff", "true");
3075 if (opts->mainline) {
3076 struct strbuf buf = STRBUF_INIT;
3077 strbuf_addf(&buf, "%d", opts->mainline);
3078 res |= git_config_set_in_file_gently(opts_file,
3079 "options.mainline", buf.buf);
3080 strbuf_release(&buf);
3082 if (opts->strategy)
3083 res |= git_config_set_in_file_gently(opts_file,
3084 "options.strategy", opts->strategy);
3085 if (opts->gpg_sign)
3086 res |= git_config_set_in_file_gently(opts_file,
3087 "options.gpg-sign", opts->gpg_sign);
3088 if (opts->xopts) {
3089 int i;
3090 for (i = 0; i < opts->xopts_nr; i++)
3091 res |= git_config_set_multivar_in_file_gently(opts_file,
3092 "options.strategy-option",
3093 opts->xopts[i], "^$", 0);
3095 if (opts->allow_rerere_auto)
3096 res |= git_config_set_in_file_gently(opts_file,
3097 "options.allow-rerere-auto",
3098 opts->allow_rerere_auto == RERERE_AUTOUPDATE ?
3099 "true" : "false");
3101 if (opts->explicit_cleanup)
3102 res |= git_config_set_in_file_gently(opts_file,
3103 "options.default-msg-cleanup",
3104 describe_cleanup_mode(opts->default_msg_cleanup));
3105 return res;
3108 static int make_patch(struct repository *r,
3109 struct commit *commit,
3110 struct replay_opts *opts)
3112 struct strbuf buf = STRBUF_INIT;
3113 struct rev_info log_tree_opt;
3114 const char *subject;
3115 char hex[GIT_MAX_HEXSZ + 1];
3116 int res = 0;
3118 oid_to_hex_r(hex, &commit->object.oid);
3119 if (write_message(hex, strlen(hex), rebase_path_stopped_sha(), 1) < 0)
3120 return -1;
3121 res |= write_rebase_head(&commit->object.oid);
3123 strbuf_addf(&buf, "%s/patch", get_dir(opts));
3124 memset(&log_tree_opt, 0, sizeof(log_tree_opt));
3125 repo_init_revisions(r, &log_tree_opt, NULL);
3126 log_tree_opt.abbrev = 0;
3127 log_tree_opt.diff = 1;
3128 log_tree_opt.diffopt.output_format = DIFF_FORMAT_PATCH;
3129 log_tree_opt.disable_stdin = 1;
3130 log_tree_opt.no_commit_id = 1;
3131 log_tree_opt.diffopt.file = fopen(buf.buf, "w");
3132 log_tree_opt.diffopt.use_color = GIT_COLOR_NEVER;
3133 if (!log_tree_opt.diffopt.file)
3134 res |= error_errno(_("could not open '%s'"), buf.buf);
3135 else {
3136 res |= log_tree_commit(&log_tree_opt, commit);
3137 fclose(log_tree_opt.diffopt.file);
3139 strbuf_reset(&buf);
3141 strbuf_addf(&buf, "%s/message", get_dir(opts));
3142 if (!file_exists(buf.buf)) {
3143 const char *encoding = get_commit_output_encoding();
3144 const char *commit_buffer = logmsg_reencode(commit, NULL, encoding);
3145 find_commit_subject(commit_buffer, &subject);
3146 res |= write_message(subject, strlen(subject), buf.buf, 1);
3147 unuse_commit_buffer(commit, commit_buffer);
3149 strbuf_release(&buf);
3151 return res;
3154 static int intend_to_amend(void)
3156 struct object_id head;
3157 char *p;
3159 if (get_oid("HEAD", &head))
3160 return error(_("cannot read HEAD"));
3162 p = oid_to_hex(&head);
3163 return write_message(p, strlen(p), rebase_path_amend(), 1);
3166 static int error_with_patch(struct repository *r,
3167 struct commit *commit,
3168 const char *subject, int subject_len,
3169 struct replay_opts *opts,
3170 int exit_code, int to_amend)
3172 if (commit) {
3173 if (make_patch(r, commit, opts))
3174 return -1;
3175 } else if (copy_file(rebase_path_message(),
3176 git_path_merge_msg(r), 0666))
3177 return error(_("unable to copy '%s' to '%s'"),
3178 git_path_merge_msg(r), rebase_path_message());
3180 if (to_amend) {
3181 if (intend_to_amend())
3182 return -1;
3184 fprintf(stderr,
3185 _("You can amend the commit now, with\n"
3186 "\n"
3187 " git commit --amend %s\n"
3188 "\n"
3189 "Once you are satisfied with your changes, run\n"
3190 "\n"
3191 " git rebase --continue\n"),
3192 gpg_sign_opt_quoted(opts));
3193 } else if (exit_code) {
3194 if (commit)
3195 fprintf_ln(stderr, _("Could not apply %s... %.*s"),
3196 short_commit_name(commit), subject_len, subject);
3197 else
3199 * We don't have the hash of the parent so
3200 * just print the line from the todo file.
3202 fprintf_ln(stderr, _("Could not merge %.*s"),
3203 subject_len, subject);
3206 return exit_code;
3209 static int error_failed_squash(struct repository *r,
3210 struct commit *commit,
3211 struct replay_opts *opts,
3212 int subject_len,
3213 const char *subject)
3215 if (copy_file(rebase_path_message(), rebase_path_squash_msg(), 0666))
3216 return error(_("could not copy '%s' to '%s'"),
3217 rebase_path_squash_msg(), rebase_path_message());
3218 unlink(git_path_merge_msg(r));
3219 if (copy_file(git_path_merge_msg(r), rebase_path_message(), 0666))
3220 return error(_("could not copy '%s' to '%s'"),
3221 rebase_path_message(),
3222 git_path_merge_msg(r));
3223 return error_with_patch(r, commit, subject, subject_len, opts, 1, 0);
3226 static int do_exec(struct repository *r, const char *command_line)
3228 struct strvec child_env = STRVEC_INIT;
3229 const char *child_argv[] = { NULL, NULL };
3230 int dirty, status;
3232 fprintf(stderr, _("Executing: %s\n"), command_line);
3233 child_argv[0] = command_line;
3234 strvec_pushf(&child_env, "GIT_DIR=%s", absolute_path(get_git_dir()));
3235 strvec_pushf(&child_env, "GIT_WORK_TREE=%s",
3236 absolute_path(get_git_work_tree()));
3237 status = run_command_v_opt_cd_env(child_argv, RUN_USING_SHELL, NULL,
3238 child_env.v);
3240 /* force re-reading of the cache */
3241 if (discard_index(r->index) < 0 || repo_read_index(r) < 0)
3242 return error(_("could not read index"));
3244 dirty = require_clean_work_tree(r, "rebase", NULL, 1, 1);
3246 if (status) {
3247 warning(_("execution failed: %s\n%s"
3248 "You can fix the problem, and then run\n"
3249 "\n"
3250 " git rebase --continue\n"
3251 "\n"),
3252 command_line,
3253 dirty ? N_("and made changes to the index and/or the "
3254 "working tree\n") : "");
3255 if (status == 127)
3256 /* command not found */
3257 status = 1;
3258 } else if (dirty) {
3259 warning(_("execution succeeded: %s\nbut "
3260 "left changes to the index and/or the working tree\n"
3261 "Commit or stash your changes, and then run\n"
3262 "\n"
3263 " git rebase --continue\n"
3264 "\n"), command_line);
3265 status = 1;
3268 strvec_clear(&child_env);
3270 return status;
3273 static int safe_append(const char *filename, const char *fmt, ...)
3275 va_list ap;
3276 struct lock_file lock = LOCK_INIT;
3277 int fd = hold_lock_file_for_update(&lock, filename,
3278 LOCK_REPORT_ON_ERROR);
3279 struct strbuf buf = STRBUF_INIT;
3281 if (fd < 0)
3282 return -1;
3284 if (strbuf_read_file(&buf, filename, 0) < 0 && errno != ENOENT) {
3285 error_errno(_("could not read '%s'"), filename);
3286 rollback_lock_file(&lock);
3287 return -1;
3289 strbuf_complete(&buf, '\n');
3290 va_start(ap, fmt);
3291 strbuf_vaddf(&buf, fmt, ap);
3292 va_end(ap);
3294 if (write_in_full(fd, buf.buf, buf.len) < 0) {
3295 error_errno(_("could not write to '%s'"), filename);
3296 strbuf_release(&buf);
3297 rollback_lock_file(&lock);
3298 return -1;
3300 if (commit_lock_file(&lock) < 0) {
3301 strbuf_release(&buf);
3302 rollback_lock_file(&lock);
3303 return error(_("failed to finalize '%s'"), filename);
3306 strbuf_release(&buf);
3307 return 0;
3310 static int do_label(struct repository *r, const char *name, int len)
3312 struct ref_store *refs = get_main_ref_store(r);
3313 struct ref_transaction *transaction;
3314 struct strbuf ref_name = STRBUF_INIT, err = STRBUF_INIT;
3315 struct strbuf msg = STRBUF_INIT;
3316 int ret = 0;
3317 struct object_id head_oid;
3319 if (len == 1 && *name == '#')
3320 return error(_("illegal label name: '%.*s'"), len, name);
3322 strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
3323 strbuf_addf(&msg, "rebase (label) '%.*s'", len, name);
3325 transaction = ref_store_transaction_begin(refs, &err);
3326 if (!transaction) {
3327 error("%s", err.buf);
3328 ret = -1;
3329 } else if (get_oid("HEAD", &head_oid)) {
3330 error(_("could not read HEAD"));
3331 ret = -1;
3332 } else if (ref_transaction_update(transaction, ref_name.buf, &head_oid,
3333 NULL, 0, msg.buf, &err) < 0 ||
3334 ref_transaction_commit(transaction, &err)) {
3335 error("%s", err.buf);
3336 ret = -1;
3338 ref_transaction_free(transaction);
3339 strbuf_release(&err);
3340 strbuf_release(&msg);
3342 if (!ret)
3343 ret = safe_append(rebase_path_refs_to_delete(),
3344 "%s\n", ref_name.buf);
3345 strbuf_release(&ref_name);
3347 return ret;
3350 static const char *reflog_message(struct replay_opts *opts,
3351 const char *sub_action, const char *fmt, ...);
3353 static int do_reset(struct repository *r,
3354 const char *name, int len,
3355 struct replay_opts *opts)
3357 struct strbuf ref_name = STRBUF_INIT;
3358 struct object_id oid;
3359 struct lock_file lock = LOCK_INIT;
3360 struct tree_desc desc;
3361 struct tree *tree;
3362 struct unpack_trees_options unpack_tree_opts;
3363 int ret = 0;
3365 if (repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0)
3366 return -1;
3368 if (len == 10 && !strncmp("[new root]", name, len)) {
3369 if (!opts->have_squash_onto) {
3370 const char *hex;
3371 if (commit_tree("", 0, the_hash_algo->empty_tree,
3372 NULL, &opts->squash_onto,
3373 NULL, NULL))
3374 return error(_("writing fake root commit"));
3375 opts->have_squash_onto = 1;
3376 hex = oid_to_hex(&opts->squash_onto);
3377 if (write_message(hex, strlen(hex),
3378 rebase_path_squash_onto(), 0))
3379 return error(_("writing squash-onto"));
3381 oidcpy(&oid, &opts->squash_onto);
3382 } else {
3383 int i;
3385 /* Determine the length of the label */
3386 for (i = 0; i < len; i++)
3387 if (isspace(name[i]))
3388 break;
3389 len = i;
3391 strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
3392 if (get_oid(ref_name.buf, &oid) &&
3393 get_oid(ref_name.buf + strlen("refs/rewritten/"), &oid)) {
3394 error(_("could not read '%s'"), ref_name.buf);
3395 rollback_lock_file(&lock);
3396 strbuf_release(&ref_name);
3397 return -1;
3401 memset(&unpack_tree_opts, 0, sizeof(unpack_tree_opts));
3402 setup_unpack_trees_porcelain(&unpack_tree_opts, "reset");
3403 unpack_tree_opts.head_idx = 1;
3404 unpack_tree_opts.src_index = r->index;
3405 unpack_tree_opts.dst_index = r->index;
3406 unpack_tree_opts.fn = oneway_merge;
3407 unpack_tree_opts.merge = 1;
3408 unpack_tree_opts.update = 1;
3409 init_checkout_metadata(&unpack_tree_opts.meta, name, &oid, NULL);
3411 if (repo_read_index_unmerged(r)) {
3412 rollback_lock_file(&lock);
3413 strbuf_release(&ref_name);
3414 return error_resolve_conflict(_(action_name(opts)));
3417 if (!fill_tree_descriptor(r, &desc, &oid)) {
3418 error(_("failed to find tree of %s"), oid_to_hex(&oid));
3419 rollback_lock_file(&lock);
3420 free((void *)desc.buffer);
3421 strbuf_release(&ref_name);
3422 return -1;
3425 if (unpack_trees(1, &desc, &unpack_tree_opts)) {
3426 rollback_lock_file(&lock);
3427 free((void *)desc.buffer);
3428 strbuf_release(&ref_name);
3429 return -1;
3432 tree = parse_tree_indirect(&oid);
3433 prime_cache_tree(r, r->index, tree);
3435 if (write_locked_index(r->index, &lock, COMMIT_LOCK) < 0)
3436 ret = error(_("could not write index"));
3437 free((void *)desc.buffer);
3439 if (!ret)
3440 ret = update_ref(reflog_message(opts, "reset", "'%.*s'",
3441 len, name), "HEAD", &oid,
3442 NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3444 strbuf_release(&ref_name);
3445 return ret;
3448 static struct commit *lookup_label(const char *label, int len,
3449 struct strbuf *buf)
3451 struct commit *commit;
3453 strbuf_reset(buf);
3454 strbuf_addf(buf, "refs/rewritten/%.*s", len, label);
3455 commit = lookup_commit_reference_by_name(buf->buf);
3456 if (!commit) {
3457 /* fall back to non-rewritten ref or commit */
3458 strbuf_splice(buf, 0, strlen("refs/rewritten/"), "", 0);
3459 commit = lookup_commit_reference_by_name(buf->buf);
3462 if (!commit)
3463 error(_("could not resolve '%s'"), buf->buf);
3465 return commit;
3468 static int do_merge(struct repository *r,
3469 struct commit *commit,
3470 const char *arg, int arg_len,
3471 int flags, struct replay_opts *opts)
3473 int run_commit_flags = (flags & TODO_EDIT_MERGE_MSG) ?
3474 EDIT_MSG | VERIFY_MSG : 0;
3475 struct strbuf ref_name = STRBUF_INIT;
3476 struct commit *head_commit, *merge_commit, *i;
3477 struct commit_list *bases, *j, *reversed = NULL;
3478 struct commit_list *to_merge = NULL, **tail = &to_merge;
3479 const char *strategy = !opts->xopts_nr &&
3480 (!opts->strategy || !strcmp(opts->strategy, "recursive")) ?
3481 NULL : opts->strategy;
3482 struct merge_options o;
3483 int merge_arg_len, oneline_offset, can_fast_forward, ret, k;
3484 static struct lock_file lock;
3485 const char *p;
3487 if (repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0) {
3488 ret = -1;
3489 goto leave_merge;
3492 head_commit = lookup_commit_reference_by_name("HEAD");
3493 if (!head_commit) {
3494 ret = error(_("cannot merge without a current revision"));
3495 goto leave_merge;
3499 * For octopus merges, the arg starts with the list of revisions to be
3500 * merged. The list is optionally followed by '#' and the oneline.
3502 merge_arg_len = oneline_offset = arg_len;
3503 for (p = arg; p - arg < arg_len; p += strspn(p, " \t\n")) {
3504 if (!*p)
3505 break;
3506 if (*p == '#' && (!p[1] || isspace(p[1]))) {
3507 p += 1 + strspn(p + 1, " \t\n");
3508 oneline_offset = p - arg;
3509 break;
3511 k = strcspn(p, " \t\n");
3512 if (!k)
3513 continue;
3514 merge_commit = lookup_label(p, k, &ref_name);
3515 if (!merge_commit) {
3516 ret = error(_("unable to parse '%.*s'"), k, p);
3517 goto leave_merge;
3519 tail = &commit_list_insert(merge_commit, tail)->next;
3520 p += k;
3521 merge_arg_len = p - arg;
3524 if (!to_merge) {
3525 ret = error(_("nothing to merge: '%.*s'"), arg_len, arg);
3526 goto leave_merge;
3529 if (opts->have_squash_onto &&
3530 oideq(&head_commit->object.oid, &opts->squash_onto)) {
3532 * When the user tells us to "merge" something into a
3533 * "[new root]", let's simply fast-forward to the merge head.
3535 rollback_lock_file(&lock);
3536 if (to_merge->next)
3537 ret = error(_("octopus merge cannot be executed on "
3538 "top of a [new root]"));
3539 else
3540 ret = fast_forward_to(r, &to_merge->item->object.oid,
3541 &head_commit->object.oid, 0,
3542 opts);
3543 goto leave_merge;
3546 if (commit) {
3547 const char *encoding = get_commit_output_encoding();
3548 const char *message = logmsg_reencode(commit, NULL, encoding);
3549 const char *body;
3550 int len;
3552 if (!message) {
3553 ret = error(_("could not get commit message of '%s'"),
3554 oid_to_hex(&commit->object.oid));
3555 goto leave_merge;
3557 write_author_script(message);
3558 find_commit_subject(message, &body);
3559 len = strlen(body);
3560 ret = write_message(body, len, git_path_merge_msg(r), 0);
3561 unuse_commit_buffer(commit, message);
3562 if (ret) {
3563 error_errno(_("could not write '%s'"),
3564 git_path_merge_msg(r));
3565 goto leave_merge;
3567 } else {
3568 struct strbuf buf = STRBUF_INIT;
3569 int len;
3571 strbuf_addf(&buf, "author %s", git_author_info(0));
3572 write_author_script(buf.buf);
3573 strbuf_reset(&buf);
3575 if (oneline_offset < arg_len) {
3576 p = arg + oneline_offset;
3577 len = arg_len - oneline_offset;
3578 } else {
3579 strbuf_addf(&buf, "Merge %s '%.*s'",
3580 to_merge->next ? "branches" : "branch",
3581 merge_arg_len, arg);
3582 p = buf.buf;
3583 len = buf.len;
3586 ret = write_message(p, len, git_path_merge_msg(r), 0);
3587 strbuf_release(&buf);
3588 if (ret) {
3589 error_errno(_("could not write '%s'"),
3590 git_path_merge_msg(r));
3591 goto leave_merge;
3596 * If HEAD is not identical to the first parent of the original merge
3597 * commit, we cannot fast-forward.
3599 can_fast_forward = opts->allow_ff && commit && commit->parents &&
3600 oideq(&commit->parents->item->object.oid,
3601 &head_commit->object.oid);
3604 * If any merge head is different from the original one, we cannot
3605 * fast-forward.
3607 if (can_fast_forward) {
3608 struct commit_list *p = commit->parents->next;
3610 for (j = to_merge; j && p; j = j->next, p = p->next)
3611 if (!oideq(&j->item->object.oid,
3612 &p->item->object.oid)) {
3613 can_fast_forward = 0;
3614 break;
3617 * If the number of merge heads differs from the original merge
3618 * commit, we cannot fast-forward.
3620 if (j || p)
3621 can_fast_forward = 0;
3624 if (can_fast_forward) {
3625 rollback_lock_file(&lock);
3626 ret = fast_forward_to(r, &commit->object.oid,
3627 &head_commit->object.oid, 0, opts);
3628 if (flags & TODO_EDIT_MERGE_MSG) {
3629 run_commit_flags |= AMEND_MSG;
3630 goto fast_forward_edit;
3632 goto leave_merge;
3635 if (strategy || to_merge->next) {
3636 /* Octopus merge */
3637 struct child_process cmd = CHILD_PROCESS_INIT;
3639 if (read_env_script(&cmd.env_array)) {
3640 const char *gpg_opt = gpg_sign_opt_quoted(opts);
3642 ret = error(_(staged_changes_advice), gpg_opt, gpg_opt);
3643 goto leave_merge;
3646 if (opts->committer_date_is_author_date)
3647 strvec_pushf(&cmd.env_array, "GIT_COMMITTER_DATE=%s",
3648 opts->ignore_date ?
3649 "" :
3650 author_date_from_env_array(&cmd.env_array));
3651 if (opts->ignore_date)
3652 strvec_push(&cmd.env_array, "GIT_AUTHOR_DATE=");
3654 cmd.git_cmd = 1;
3655 strvec_push(&cmd.args, "merge");
3656 strvec_push(&cmd.args, "-s");
3657 if (!strategy)
3658 strvec_push(&cmd.args, "octopus");
3659 else {
3660 strvec_push(&cmd.args, strategy);
3661 for (k = 0; k < opts->xopts_nr; k++)
3662 strvec_pushf(&cmd.args,
3663 "-X%s", opts->xopts[k]);
3665 strvec_push(&cmd.args, "--no-edit");
3666 strvec_push(&cmd.args, "--no-ff");
3667 strvec_push(&cmd.args, "--no-log");
3668 strvec_push(&cmd.args, "--no-stat");
3669 strvec_push(&cmd.args, "-F");
3670 strvec_push(&cmd.args, git_path_merge_msg(r));
3671 if (opts->gpg_sign)
3672 strvec_push(&cmd.args, opts->gpg_sign);
3674 /* Add the tips to be merged */
3675 for (j = to_merge; j; j = j->next)
3676 strvec_push(&cmd.args,
3677 oid_to_hex(&j->item->object.oid));
3679 strbuf_release(&ref_name);
3680 refs_delete_ref(get_main_ref_store(r), "", "CHERRY_PICK_HEAD",
3681 NULL, 0);
3682 rollback_lock_file(&lock);
3684 rollback_lock_file(&lock);
3685 ret = run_command(&cmd);
3687 /* force re-reading of the cache */
3688 if (!ret && (discard_index(r->index) < 0 ||
3689 repo_read_index(r) < 0))
3690 ret = error(_("could not read index"));
3691 goto leave_merge;
3694 merge_commit = to_merge->item;
3695 bases = get_merge_bases(head_commit, merge_commit);
3696 if (bases && oideq(&merge_commit->object.oid,
3697 &bases->item->object.oid)) {
3698 ret = 0;
3699 /* skip merging an ancestor of HEAD */
3700 goto leave_merge;
3703 write_message(oid_to_hex(&merge_commit->object.oid), the_hash_algo->hexsz,
3704 git_path_merge_head(r), 0);
3705 write_message("no-ff", 5, git_path_merge_mode(r), 0);
3707 for (j = bases; j; j = j->next)
3708 commit_list_insert(j->item, &reversed);
3709 free_commit_list(bases);
3711 repo_read_index(r);
3712 init_merge_options(&o, r);
3713 o.branch1 = "HEAD";
3714 o.branch2 = ref_name.buf;
3715 o.buffer_output = 2;
3717 ret = merge_recursive(&o, head_commit, merge_commit, reversed, &i);
3718 if (ret <= 0)
3719 fputs(o.obuf.buf, stdout);
3720 strbuf_release(&o.obuf);
3721 if (ret < 0) {
3722 error(_("could not even attempt to merge '%.*s'"),
3723 merge_arg_len, arg);
3724 goto leave_merge;
3727 * The return value of merge_recursive() is 1 on clean, and 0 on
3728 * unclean merge.
3730 * Let's reverse that, so that do_merge() returns 0 upon success and
3731 * 1 upon failed merge (keeping the return value -1 for the cases where
3732 * we will want to reschedule the `merge` command).
3734 ret = !ret;
3736 if (r->index->cache_changed &&
3737 write_locked_index(r->index, &lock, COMMIT_LOCK)) {
3738 ret = error(_("merge: Unable to write new index file"));
3739 goto leave_merge;
3742 rollback_lock_file(&lock);
3743 if (ret)
3744 repo_rerere(r, opts->allow_rerere_auto);
3745 else
3747 * In case of problems, we now want to return a positive
3748 * value (a negative one would indicate that the `merge`
3749 * command needs to be rescheduled).
3751 fast_forward_edit:
3752 ret = !!run_git_commit(r, git_path_merge_msg(r), opts,
3753 run_commit_flags);
3755 leave_merge:
3756 strbuf_release(&ref_name);
3757 rollback_lock_file(&lock);
3758 free_commit_list(to_merge);
3759 return ret;
3762 static int is_final_fixup(struct todo_list *todo_list)
3764 int i = todo_list->current;
3766 if (!is_fixup(todo_list->items[i].command))
3767 return 0;
3769 while (++i < todo_list->nr)
3770 if (is_fixup(todo_list->items[i].command))
3771 return 0;
3772 else if (!is_noop(todo_list->items[i].command))
3773 break;
3774 return 1;
3777 static enum todo_command peek_command(struct todo_list *todo_list, int offset)
3779 int i;
3781 for (i = todo_list->current + offset; i < todo_list->nr; i++)
3782 if (!is_noop(todo_list->items[i].command))
3783 return todo_list->items[i].command;
3785 return -1;
3788 void create_autostash(struct repository *r, const char *path,
3789 const char *default_reflog_action)
3791 struct strbuf buf = STRBUF_INIT;
3792 struct lock_file lock_file = LOCK_INIT;
3793 int fd;
3795 fd = repo_hold_locked_index(r, &lock_file, 0);
3796 refresh_index(r->index, REFRESH_QUIET, NULL, NULL, NULL);
3797 if (0 <= fd)
3798 repo_update_index_if_able(r, &lock_file);
3799 rollback_lock_file(&lock_file);
3801 if (has_unstaged_changes(r, 1) ||
3802 has_uncommitted_changes(r, 1)) {
3803 struct child_process stash = CHILD_PROCESS_INIT;
3804 struct object_id oid;
3806 strvec_pushl(&stash.args,
3807 "stash", "create", "autostash", NULL);
3808 stash.git_cmd = 1;
3809 stash.no_stdin = 1;
3810 strbuf_reset(&buf);
3811 if (capture_command(&stash, &buf, GIT_MAX_HEXSZ))
3812 die(_("Cannot autostash"));
3813 strbuf_trim_trailing_newline(&buf);
3814 if (get_oid(buf.buf, &oid))
3815 die(_("Unexpected stash response: '%s'"),
3816 buf.buf);
3817 strbuf_reset(&buf);
3818 strbuf_add_unique_abbrev(&buf, &oid, DEFAULT_ABBREV);
3820 if (safe_create_leading_directories_const(path))
3821 die(_("Could not create directory for '%s'"),
3822 path);
3823 write_file(path, "%s", oid_to_hex(&oid));
3824 printf(_("Created autostash: %s\n"), buf.buf);
3825 if (reset_head(r, NULL, "reset --hard",
3826 NULL, RESET_HEAD_HARD, NULL, NULL,
3827 default_reflog_action) < 0)
3828 die(_("could not reset --hard"));
3830 if (discard_index(r->index) < 0 ||
3831 repo_read_index(r) < 0)
3832 die(_("could not read index"));
3834 strbuf_release(&buf);
3837 static int apply_save_autostash_oid(const char *stash_oid, int attempt_apply)
3839 struct child_process child = CHILD_PROCESS_INIT;
3840 int ret = 0;
3842 if (attempt_apply) {
3843 child.git_cmd = 1;
3844 child.no_stdout = 1;
3845 child.no_stderr = 1;
3846 strvec_push(&child.args, "stash");
3847 strvec_push(&child.args, "apply");
3848 strvec_push(&child.args, stash_oid);
3849 ret = run_command(&child);
3852 if (attempt_apply && !ret)
3853 fprintf(stderr, _("Applied autostash.\n"));
3854 else {
3855 struct child_process store = CHILD_PROCESS_INIT;
3857 store.git_cmd = 1;
3858 strvec_push(&store.args, "stash");
3859 strvec_push(&store.args, "store");
3860 strvec_push(&store.args, "-m");
3861 strvec_push(&store.args, "autostash");
3862 strvec_push(&store.args, "-q");
3863 strvec_push(&store.args, stash_oid);
3864 if (run_command(&store))
3865 ret = error(_("cannot store %s"), stash_oid);
3866 else
3867 fprintf(stderr,
3868 _("%s\n"
3869 "Your changes are safe in the stash.\n"
3870 "You can run \"git stash pop\" or"
3871 " \"git stash drop\" at any time.\n"),
3872 attempt_apply ?
3873 _("Applying autostash resulted in conflicts.") :
3874 _("Autostash exists; creating a new stash entry."));
3877 return ret;
3880 static int apply_save_autostash(const char *path, int attempt_apply)
3882 struct strbuf stash_oid = STRBUF_INIT;
3883 int ret = 0;
3885 if (!read_oneliner(&stash_oid, path,
3886 READ_ONELINER_SKIP_IF_EMPTY)) {
3887 strbuf_release(&stash_oid);
3888 return 0;
3890 strbuf_trim(&stash_oid);
3892 ret = apply_save_autostash_oid(stash_oid.buf, attempt_apply);
3894 unlink(path);
3895 strbuf_release(&stash_oid);
3896 return ret;
3899 int save_autostash(const char *path)
3901 return apply_save_autostash(path, 0);
3904 int apply_autostash(const char *path)
3906 return apply_save_autostash(path, 1);
3909 int apply_autostash_oid(const char *stash_oid)
3911 return apply_save_autostash_oid(stash_oid, 1);
3914 static const char *reflog_message(struct replay_opts *opts,
3915 const char *sub_action, const char *fmt, ...)
3917 va_list ap;
3918 static struct strbuf buf = STRBUF_INIT;
3919 char *reflog_action = getenv(GIT_REFLOG_ACTION);
3921 va_start(ap, fmt);
3922 strbuf_reset(&buf);
3923 strbuf_addstr(&buf, reflog_action ? reflog_action : action_name(opts));
3924 if (sub_action)
3925 strbuf_addf(&buf, " (%s)", sub_action);
3926 if (fmt) {
3927 strbuf_addstr(&buf, ": ");
3928 strbuf_vaddf(&buf, fmt, ap);
3930 va_end(ap);
3932 return buf.buf;
3935 static int run_git_checkout(struct repository *r, struct replay_opts *opts,
3936 const char *commit, const char *action)
3938 struct child_process cmd = CHILD_PROCESS_INIT;
3939 int ret;
3941 cmd.git_cmd = 1;
3943 strvec_push(&cmd.args, "checkout");
3944 strvec_push(&cmd.args, commit);
3945 strvec_pushf(&cmd.env_array, GIT_REFLOG_ACTION "=%s", action);
3947 if (opts->verbose)
3948 ret = run_command(&cmd);
3949 else
3950 ret = run_command_silent_on_success(&cmd);
3952 if (!ret)
3953 discard_index(r->index);
3955 return ret;
3958 static int checkout_onto(struct repository *r, struct replay_opts *opts,
3959 const char *onto_name, const struct object_id *onto,
3960 const char *orig_head)
3962 struct object_id oid;
3963 const char *action = reflog_message(opts, "start", "checkout %s", onto_name);
3965 if (get_oid(orig_head, &oid))
3966 return error(_("%s: not a valid OID"), orig_head);
3968 if (run_git_checkout(r, opts, oid_to_hex(onto), action)) {
3969 apply_autostash(rebase_path_autostash());
3970 sequencer_remove_state(opts);
3971 return error(_("could not detach HEAD"));
3974 return update_ref(NULL, "ORIG_HEAD", &oid, NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3977 static int stopped_at_head(struct repository *r)
3979 struct object_id head;
3980 struct commit *commit;
3981 struct commit_message message;
3983 if (get_oid("HEAD", &head) ||
3984 !(commit = lookup_commit(r, &head)) ||
3985 parse_commit(commit) || get_message(commit, &message))
3986 fprintf(stderr, _("Stopped at HEAD\n"));
3987 else {
3988 fprintf(stderr, _("Stopped at %s\n"), message.label);
3989 free_message(commit, &message);
3991 return 0;
3995 static const char rescheduled_advice[] =
3996 N_("Could not execute the todo command\n"
3997 "\n"
3998 " %.*s"
3999 "\n"
4000 "It has been rescheduled; To edit the command before continuing, please\n"
4001 "edit the todo list first:\n"
4002 "\n"
4003 " git rebase --edit-todo\n"
4004 " git rebase --continue\n");
4006 static int pick_commits(struct repository *r,
4007 struct todo_list *todo_list,
4008 struct replay_opts *opts)
4010 int res = 0, reschedule = 0;
4011 char *prev_reflog_action;
4013 /* Note that 0 for 3rd parameter of setenv means set only if not set */
4014 setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
4015 prev_reflog_action = xstrdup(getenv(GIT_REFLOG_ACTION));
4016 if (opts->allow_ff)
4017 assert(!(opts->signoff || opts->no_commit ||
4018 opts->record_origin || opts->edit ||
4019 opts->committer_date_is_author_date ||
4020 opts->ignore_date));
4021 if (read_and_refresh_cache(r, opts))
4022 return -1;
4024 while (todo_list->current < todo_list->nr) {
4025 struct todo_item *item = todo_list->items + todo_list->current;
4026 const char *arg = todo_item_get_arg(todo_list, item);
4027 int check_todo = 0;
4029 if (save_todo(todo_list, opts))
4030 return -1;
4031 if (is_rebase_i(opts)) {
4032 if (item->command != TODO_COMMENT) {
4033 FILE *f = fopen(rebase_path_msgnum(), "w");
4035 todo_list->done_nr++;
4037 if (f) {
4038 fprintf(f, "%d\n", todo_list->done_nr);
4039 fclose(f);
4041 if (!opts->quiet)
4042 fprintf(stderr, _("Rebasing (%d/%d)%s"),
4043 todo_list->done_nr,
4044 todo_list->total_nr,
4045 opts->verbose ? "\n" : "\r");
4047 unlink(rebase_path_message());
4048 unlink(rebase_path_author_script());
4049 unlink(rebase_path_stopped_sha());
4050 unlink(rebase_path_amend());
4051 unlink(git_path_merge_head(r));
4052 delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
4054 if (item->command == TODO_BREAK) {
4055 if (!opts->verbose)
4056 term_clear_line();
4057 return stopped_at_head(r);
4060 if (item->command <= TODO_SQUASH) {
4061 if (is_rebase_i(opts))
4062 setenv(GIT_REFLOG_ACTION, reflog_message(opts,
4063 command_to_string(item->command), NULL),
4065 res = do_pick_commit(r, item->command, item->commit,
4066 opts, is_final_fixup(todo_list),
4067 &check_todo);
4068 if (is_rebase_i(opts))
4069 setenv(GIT_REFLOG_ACTION, prev_reflog_action, 1);
4070 if (is_rebase_i(opts) && res < 0) {
4071 /* Reschedule */
4072 advise(_(rescheduled_advice),
4073 get_item_line_length(todo_list,
4074 todo_list->current),
4075 get_item_line(todo_list,
4076 todo_list->current));
4077 todo_list->current--;
4078 if (save_todo(todo_list, opts))
4079 return -1;
4081 if (item->command == TODO_EDIT) {
4082 struct commit *commit = item->commit;
4083 if (!res) {
4084 if (!opts->verbose)
4085 term_clear_line();
4086 fprintf(stderr,
4087 _("Stopped at %s... %.*s\n"),
4088 short_commit_name(commit),
4089 item->arg_len, arg);
4091 return error_with_patch(r, commit,
4092 arg, item->arg_len, opts, res, !res);
4094 if (is_rebase_i(opts) && !res)
4095 record_in_rewritten(&item->commit->object.oid,
4096 peek_command(todo_list, 1));
4097 if (res && is_fixup(item->command)) {
4098 if (res == 1)
4099 intend_to_amend();
4100 return error_failed_squash(r, item->commit, opts,
4101 item->arg_len, arg);
4102 } else if (res && is_rebase_i(opts) && item->commit) {
4103 int to_amend = 0;
4104 struct object_id oid;
4107 * If we are rewording and have either
4108 * fast-forwarded already, or are about to
4109 * create a new root commit, we want to amend,
4110 * otherwise we do not.
4112 if (item->command == TODO_REWORD &&
4113 !get_oid("HEAD", &oid) &&
4114 (oideq(&item->commit->object.oid, &oid) ||
4115 (opts->have_squash_onto &&
4116 oideq(&opts->squash_onto, &oid))))
4117 to_amend = 1;
4119 return res | error_with_patch(r, item->commit,
4120 arg, item->arg_len, opts,
4121 res, to_amend);
4123 } else if (item->command == TODO_EXEC) {
4124 char *end_of_arg = (char *)(arg + item->arg_len);
4125 int saved = *end_of_arg;
4127 if (!opts->verbose)
4128 term_clear_line();
4129 *end_of_arg = '\0';
4130 res = do_exec(r, arg);
4131 *end_of_arg = saved;
4133 if (res) {
4134 if (opts->reschedule_failed_exec)
4135 reschedule = 1;
4137 check_todo = 1;
4138 } else if (item->command == TODO_LABEL) {
4139 if ((res = do_label(r, arg, item->arg_len)))
4140 reschedule = 1;
4141 } else if (item->command == TODO_RESET) {
4142 if ((res = do_reset(r, arg, item->arg_len, opts)))
4143 reschedule = 1;
4144 } else if (item->command == TODO_MERGE) {
4145 if ((res = do_merge(r, item->commit,
4146 arg, item->arg_len,
4147 item->flags, opts)) < 0)
4148 reschedule = 1;
4149 else if (item->commit)
4150 record_in_rewritten(&item->commit->object.oid,
4151 peek_command(todo_list, 1));
4152 if (res > 0)
4153 /* failed with merge conflicts */
4154 return error_with_patch(r, item->commit,
4155 arg, item->arg_len,
4156 opts, res, 0);
4157 } else if (!is_noop(item->command))
4158 return error(_("unknown command %d"), item->command);
4160 if (reschedule) {
4161 advise(_(rescheduled_advice),
4162 get_item_line_length(todo_list,
4163 todo_list->current),
4164 get_item_line(todo_list, todo_list->current));
4165 todo_list->current--;
4166 if (save_todo(todo_list, opts))
4167 return -1;
4168 if (item->commit)
4169 return error_with_patch(r,
4170 item->commit,
4171 arg, item->arg_len,
4172 opts, res, 0);
4173 } else if (is_rebase_i(opts) && check_todo && !res) {
4174 struct stat st;
4176 if (stat(get_todo_path(opts), &st)) {
4177 res = error_errno(_("could not stat '%s'"),
4178 get_todo_path(opts));
4179 } else if (match_stat_data(&todo_list->stat, &st)) {
4180 /* Reread the todo file if it has changed. */
4181 todo_list_release(todo_list);
4182 if (read_populate_todo(r, todo_list, opts))
4183 res = -1; /* message was printed */
4184 /* `current` will be incremented below */
4185 todo_list->current = -1;
4189 todo_list->current++;
4190 if (res)
4191 return res;
4194 if (is_rebase_i(opts)) {
4195 struct strbuf head_ref = STRBUF_INIT, buf = STRBUF_INIT;
4196 struct stat st;
4198 /* Stopped in the middle, as planned? */
4199 if (todo_list->current < todo_list->nr)
4200 return 0;
4202 if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
4203 starts_with(head_ref.buf, "refs/")) {
4204 const char *msg;
4205 struct object_id head, orig;
4206 int res;
4208 if (get_oid("HEAD", &head)) {
4209 res = error(_("cannot read HEAD"));
4210 cleanup_head_ref:
4211 strbuf_release(&head_ref);
4212 strbuf_release(&buf);
4213 return res;
4215 if (!read_oneliner(&buf, rebase_path_orig_head(), 0) ||
4216 get_oid_hex(buf.buf, &orig)) {
4217 res = error(_("could not read orig-head"));
4218 goto cleanup_head_ref;
4220 strbuf_reset(&buf);
4221 if (!read_oneliner(&buf, rebase_path_onto(), 0)) {
4222 res = error(_("could not read 'onto'"));
4223 goto cleanup_head_ref;
4225 msg = reflog_message(opts, "finish", "%s onto %s",
4226 head_ref.buf, buf.buf);
4227 if (update_ref(msg, head_ref.buf, &head, &orig,
4228 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR)) {
4229 res = error(_("could not update %s"),
4230 head_ref.buf);
4231 goto cleanup_head_ref;
4233 msg = reflog_message(opts, "finish", "returning to %s",
4234 head_ref.buf);
4235 if (create_symref("HEAD", head_ref.buf, msg)) {
4236 res = error(_("could not update HEAD to %s"),
4237 head_ref.buf);
4238 goto cleanup_head_ref;
4240 strbuf_reset(&buf);
4243 if (opts->verbose) {
4244 struct rev_info log_tree_opt;
4245 struct object_id orig, head;
4247 memset(&log_tree_opt, 0, sizeof(log_tree_opt));
4248 repo_init_revisions(r, &log_tree_opt, NULL);
4249 log_tree_opt.diff = 1;
4250 log_tree_opt.diffopt.output_format =
4251 DIFF_FORMAT_DIFFSTAT;
4252 log_tree_opt.disable_stdin = 1;
4254 if (read_oneliner(&buf, rebase_path_orig_head(), 0) &&
4255 !get_oid(buf.buf, &orig) &&
4256 !get_oid("HEAD", &head)) {
4257 diff_tree_oid(&orig, &head, "",
4258 &log_tree_opt.diffopt);
4259 log_tree_diff_flush(&log_tree_opt);
4262 flush_rewritten_pending();
4263 if (!stat(rebase_path_rewritten_list(), &st) &&
4264 st.st_size > 0) {
4265 struct child_process child = CHILD_PROCESS_INIT;
4266 const char *post_rewrite_hook =
4267 find_hook("post-rewrite");
4269 child.in = open(rebase_path_rewritten_list(), O_RDONLY);
4270 child.git_cmd = 1;
4271 strvec_push(&child.args, "notes");
4272 strvec_push(&child.args, "copy");
4273 strvec_push(&child.args, "--for-rewrite=rebase");
4274 /* we don't care if this copying failed */
4275 run_command(&child);
4277 if (post_rewrite_hook) {
4278 struct child_process hook = CHILD_PROCESS_INIT;
4280 hook.in = open(rebase_path_rewritten_list(),
4281 O_RDONLY);
4282 hook.stdout_to_stderr = 1;
4283 hook.trace2_hook_name = "post-rewrite";
4284 strvec_push(&hook.args, post_rewrite_hook);
4285 strvec_push(&hook.args, "rebase");
4286 /* we don't care if this hook failed */
4287 run_command(&hook);
4290 apply_autostash(rebase_path_autostash());
4292 if (!opts->quiet) {
4293 if (!opts->verbose)
4294 term_clear_line();
4295 fprintf(stderr,
4296 _("Successfully rebased and updated %s.\n"),
4297 head_ref.buf);
4300 strbuf_release(&buf);
4301 strbuf_release(&head_ref);
4305 * Sequence of picks finished successfully; cleanup by
4306 * removing the .git/sequencer directory
4308 return sequencer_remove_state(opts);
4311 static int continue_single_pick(struct repository *r)
4313 const char *argv[] = { "commit", NULL };
4315 if (!refs_ref_exists(get_main_ref_store(r), "CHERRY_PICK_HEAD") &&
4316 !refs_ref_exists(get_main_ref_store(r), "REVERT_HEAD"))
4317 return error(_("no cherry-pick or revert in progress"));
4318 return run_command_v_opt(argv, RUN_GIT_CMD);
4321 static int commit_staged_changes(struct repository *r,
4322 struct replay_opts *opts,
4323 struct todo_list *todo_list)
4325 unsigned int flags = ALLOW_EMPTY | EDIT_MSG;
4326 unsigned int final_fixup = 0, is_clean;
4328 if (has_unstaged_changes(r, 1))
4329 return error(_("cannot rebase: You have unstaged changes."));
4331 is_clean = !has_uncommitted_changes(r, 0);
4333 if (file_exists(rebase_path_amend())) {
4334 struct strbuf rev = STRBUF_INIT;
4335 struct object_id head, to_amend;
4337 if (get_oid("HEAD", &head))
4338 return error(_("cannot amend non-existing commit"));
4339 if (!read_oneliner(&rev, rebase_path_amend(), 0))
4340 return error(_("invalid file: '%s'"), rebase_path_amend());
4341 if (get_oid_hex(rev.buf, &to_amend))
4342 return error(_("invalid contents: '%s'"),
4343 rebase_path_amend());
4344 if (!is_clean && !oideq(&head, &to_amend))
4345 return error(_("\nYou have uncommitted changes in your "
4346 "working tree. Please, commit them\n"
4347 "first and then run 'git rebase "
4348 "--continue' again."));
4350 * When skipping a failed fixup/squash, we need to edit the
4351 * commit message, the current fixup list and count, and if it
4352 * was the last fixup/squash in the chain, we need to clean up
4353 * the commit message and if there was a squash, let the user
4354 * edit it.
4356 if (!is_clean || !opts->current_fixup_count)
4357 ; /* this is not the final fixup */
4358 else if (!oideq(&head, &to_amend) ||
4359 !file_exists(rebase_path_stopped_sha())) {
4360 /* was a final fixup or squash done manually? */
4361 if (!is_fixup(peek_command(todo_list, 0))) {
4362 unlink(rebase_path_fixup_msg());
4363 unlink(rebase_path_squash_msg());
4364 unlink(rebase_path_current_fixups());
4365 strbuf_reset(&opts->current_fixups);
4366 opts->current_fixup_count = 0;
4368 } else {
4369 /* we are in a fixup/squash chain */
4370 const char *p = opts->current_fixups.buf;
4371 int len = opts->current_fixups.len;
4373 opts->current_fixup_count--;
4374 if (!len)
4375 BUG("Incorrect current_fixups:\n%s", p);
4376 while (len && p[len - 1] != '\n')
4377 len--;
4378 strbuf_setlen(&opts->current_fixups, len);
4379 if (write_message(p, len, rebase_path_current_fixups(),
4380 0) < 0)
4381 return error(_("could not write file: '%s'"),
4382 rebase_path_current_fixups());
4385 * If a fixup/squash in a fixup/squash chain failed, the
4386 * commit message is already correct, no need to commit
4387 * it again.
4389 * Only if it is the final command in the fixup/squash
4390 * chain, and only if the chain is longer than a single
4391 * fixup/squash command (which was just skipped), do we
4392 * actually need to re-commit with a cleaned up commit
4393 * message.
4395 if (opts->current_fixup_count > 0 &&
4396 !is_fixup(peek_command(todo_list, 0))) {
4397 final_fixup = 1;
4399 * If there was not a single "squash" in the
4400 * chain, we only need to clean up the commit
4401 * message, no need to bother the user with
4402 * opening the commit message in the editor.
4404 if (!starts_with(p, "squash ") &&
4405 !strstr(p, "\nsquash "))
4406 flags = (flags & ~EDIT_MSG) | CLEANUP_MSG;
4407 } else if (is_fixup(peek_command(todo_list, 0))) {
4409 * We need to update the squash message to skip
4410 * the latest commit message.
4412 struct commit *commit;
4413 const char *path = rebase_path_squash_msg();
4414 const char *encoding = get_commit_output_encoding();
4416 if (parse_head(r, &commit) ||
4417 !(p = logmsg_reencode(commit, NULL, encoding)) ||
4418 write_message(p, strlen(p), path, 0)) {
4419 unuse_commit_buffer(commit, p);
4420 return error(_("could not write file: "
4421 "'%s'"), path);
4423 unuse_commit_buffer(commit, p);
4427 strbuf_release(&rev);
4428 flags |= AMEND_MSG;
4431 if (is_clean) {
4432 if (refs_ref_exists(get_main_ref_store(r),
4433 "CHERRY_PICK_HEAD") &&
4434 refs_delete_ref(get_main_ref_store(r), "",
4435 "CHERRY_PICK_HEAD", NULL, 0))
4436 return error(_("could not remove CHERRY_PICK_HEAD"));
4437 if (!final_fixup)
4438 return 0;
4441 if (run_git_commit(r, final_fixup ? NULL : rebase_path_message(),
4442 opts, flags))
4443 return error(_("could not commit staged changes."));
4444 unlink(rebase_path_amend());
4445 unlink(git_path_merge_head(r));
4446 if (final_fixup) {
4447 unlink(rebase_path_fixup_msg());
4448 unlink(rebase_path_squash_msg());
4450 if (opts->current_fixup_count > 0) {
4452 * Whether final fixup or not, we just cleaned up the commit
4453 * message...
4455 unlink(rebase_path_current_fixups());
4456 strbuf_reset(&opts->current_fixups);
4457 opts->current_fixup_count = 0;
4459 return 0;
4462 static int init_committer(struct replay_opts *opts)
4464 struct ident_split id;
4465 const char *committer;
4467 committer = git_committer_info(IDENT_STRICT);
4468 if (split_ident_line(&id, committer, strlen(committer)) < 0)
4469 return error(_("invalid committer '%s'"), committer);
4470 opts->committer_name =
4471 xmemdupz(id.name_begin, id.name_end - id.name_begin);
4472 opts->committer_email =
4473 xmemdupz(id.mail_begin, id.mail_end - id.mail_end);
4475 return 0;
4478 int sequencer_continue(struct repository *r, struct replay_opts *opts)
4480 struct todo_list todo_list = TODO_LIST_INIT;
4481 int res;
4483 if (read_and_refresh_cache(r, opts))
4484 return -1;
4486 if (read_populate_opts(opts))
4487 return -1;
4488 if (is_rebase_i(opts)) {
4489 if (opts->committer_date_is_author_date && init_committer(opts))
4490 return -1;
4492 if ((res = read_populate_todo(r, &todo_list, opts)))
4493 goto release_todo_list;
4495 if (file_exists(rebase_path_dropped())) {
4496 if ((res = todo_list_check_against_backup(r, &todo_list)))
4497 goto release_todo_list;
4499 unlink(rebase_path_dropped());
4502 if (commit_staged_changes(r, opts, &todo_list)) {
4503 res = -1;
4504 goto release_todo_list;
4506 } else if (!file_exists(get_todo_path(opts)))
4507 return continue_single_pick(r);
4508 else if ((res = read_populate_todo(r, &todo_list, opts)))
4509 goto release_todo_list;
4511 if (!is_rebase_i(opts)) {
4512 /* Verify that the conflict has been resolved */
4513 if (refs_ref_exists(get_main_ref_store(r),
4514 "CHERRY_PICK_HEAD") ||
4515 refs_ref_exists(get_main_ref_store(r), "REVERT_HEAD")) {
4516 res = continue_single_pick(r);
4517 if (res)
4518 goto release_todo_list;
4520 if (index_differs_from(r, "HEAD", NULL, 0)) {
4521 res = error_dirty_index(r, opts);
4522 goto release_todo_list;
4524 todo_list.current++;
4525 } else if (file_exists(rebase_path_stopped_sha())) {
4526 struct strbuf buf = STRBUF_INIT;
4527 struct object_id oid;
4529 if (read_oneliner(&buf, rebase_path_stopped_sha(),
4530 READ_ONELINER_SKIP_IF_EMPTY) &&
4531 !get_oid_hex(buf.buf, &oid))
4532 record_in_rewritten(&oid, peek_command(&todo_list, 0));
4533 strbuf_release(&buf);
4536 res = pick_commits(r, &todo_list, opts);
4537 release_todo_list:
4538 todo_list_release(&todo_list);
4539 return res;
4542 static int single_pick(struct repository *r,
4543 struct commit *cmit,
4544 struct replay_opts *opts)
4546 int check_todo;
4548 setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
4549 return do_pick_commit(r, opts->action == REPLAY_PICK ?
4550 TODO_PICK : TODO_REVERT, cmit, opts, 0,
4551 &check_todo);
4554 int sequencer_pick_revisions(struct repository *r,
4555 struct replay_opts *opts)
4557 struct todo_list todo_list = TODO_LIST_INIT;
4558 struct object_id oid;
4559 int i, res;
4561 assert(opts->revs);
4562 if (read_and_refresh_cache(r, opts))
4563 return -1;
4565 for (i = 0; i < opts->revs->pending.nr; i++) {
4566 struct object_id oid;
4567 const char *name = opts->revs->pending.objects[i].name;
4569 /* This happens when using --stdin. */
4570 if (!strlen(name))
4571 continue;
4573 if (!get_oid(name, &oid)) {
4574 if (!lookup_commit_reference_gently(r, &oid, 1)) {
4575 enum object_type type = oid_object_info(r,
4576 &oid,
4577 NULL);
4578 return error(_("%s: can't cherry-pick a %s"),
4579 name, type_name(type));
4581 } else
4582 return error(_("%s: bad revision"), name);
4586 * If we were called as "git cherry-pick <commit>", just
4587 * cherry-pick/revert it, set CHERRY_PICK_HEAD /
4588 * REVERT_HEAD, and don't touch the sequencer state.
4589 * This means it is possible to cherry-pick in the middle
4590 * of a cherry-pick sequence.
4592 if (opts->revs->cmdline.nr == 1 &&
4593 opts->revs->cmdline.rev->whence == REV_CMD_REV &&
4594 opts->revs->no_walk &&
4595 !opts->revs->cmdline.rev->flags) {
4596 struct commit *cmit;
4597 if (prepare_revision_walk(opts->revs))
4598 return error(_("revision walk setup failed"));
4599 cmit = get_revision(opts->revs);
4600 if (!cmit)
4601 return error(_("empty commit set passed"));
4602 if (get_revision(opts->revs))
4603 BUG("unexpected extra commit from walk");
4604 return single_pick(r, cmit, opts);
4608 * Start a new cherry-pick/ revert sequence; but
4609 * first, make sure that an existing one isn't in
4610 * progress
4613 if (walk_revs_populate_todo(&todo_list, opts) ||
4614 create_seq_dir(r) < 0)
4615 return -1;
4616 if (get_oid("HEAD", &oid) && (opts->action == REPLAY_REVERT))
4617 return error(_("can't revert as initial commit"));
4618 if (save_head(oid_to_hex(&oid)))
4619 return -1;
4620 if (save_opts(opts))
4621 return -1;
4622 update_abort_safety_file();
4623 res = pick_commits(r, &todo_list, opts);
4624 todo_list_release(&todo_list);
4625 return res;
4628 void append_signoff(struct strbuf *msgbuf, size_t ignore_footer, unsigned flag)
4630 unsigned no_dup_sob = flag & APPEND_SIGNOFF_DEDUP;
4631 struct strbuf sob = STRBUF_INIT;
4632 int has_footer;
4634 strbuf_addstr(&sob, sign_off_header);
4635 strbuf_addstr(&sob, fmt_name(WANT_COMMITTER_IDENT));
4636 strbuf_addch(&sob, '\n');
4638 if (!ignore_footer)
4639 strbuf_complete_line(msgbuf);
4642 * If the whole message buffer is equal to the sob, pretend that we
4643 * found a conforming footer with a matching sob
4645 if (msgbuf->len - ignore_footer == sob.len &&
4646 !strncmp(msgbuf->buf, sob.buf, sob.len))
4647 has_footer = 3;
4648 else
4649 has_footer = has_conforming_footer(msgbuf, &sob, ignore_footer);
4651 if (!has_footer) {
4652 const char *append_newlines = NULL;
4653 size_t len = msgbuf->len - ignore_footer;
4655 if (!len) {
4657 * The buffer is completely empty. Leave foom for
4658 * the title and body to be filled in by the user.
4660 append_newlines = "\n\n";
4661 } else if (len == 1) {
4663 * Buffer contains a single newline. Add another
4664 * so that we leave room for the title and body.
4666 append_newlines = "\n";
4667 } else if (msgbuf->buf[len - 2] != '\n') {
4669 * Buffer ends with a single newline. Add another
4670 * so that there is an empty line between the message
4671 * body and the sob.
4673 append_newlines = "\n";
4674 } /* else, the buffer already ends with two newlines. */
4676 if (append_newlines)
4677 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4678 append_newlines, strlen(append_newlines));
4681 if (has_footer != 3 && (!no_dup_sob || has_footer != 2))
4682 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4683 sob.buf, sob.len);
4685 strbuf_release(&sob);
4688 struct labels_entry {
4689 struct hashmap_entry entry;
4690 char label[FLEX_ARRAY];
4693 static int labels_cmp(const void *fndata, const struct hashmap_entry *eptr,
4694 const struct hashmap_entry *entry_or_key, const void *key)
4696 const struct labels_entry *a, *b;
4698 a = container_of(eptr, const struct labels_entry, entry);
4699 b = container_of(entry_or_key, const struct labels_entry, entry);
4701 return key ? strcmp(a->label, key) : strcmp(a->label, b->label);
4704 struct string_entry {
4705 struct oidmap_entry entry;
4706 char string[FLEX_ARRAY];
4709 struct label_state {
4710 struct oidmap commit2label;
4711 struct hashmap labels;
4712 struct strbuf buf;
4715 static const char *label_oid(struct object_id *oid, const char *label,
4716 struct label_state *state)
4718 struct labels_entry *labels_entry;
4719 struct string_entry *string_entry;
4720 struct object_id dummy;
4721 int i;
4723 string_entry = oidmap_get(&state->commit2label, oid);
4724 if (string_entry)
4725 return string_entry->string;
4728 * For "uninteresting" commits, i.e. commits that are not to be
4729 * rebased, and which can therefore not be labeled, we use a unique
4730 * abbreviation of the commit name. This is slightly more complicated
4731 * than calling find_unique_abbrev() because we also need to make
4732 * sure that the abbreviation does not conflict with any other
4733 * label.
4735 * We disallow "interesting" commits to be labeled by a string that
4736 * is a valid full-length hash, to ensure that we always can find an
4737 * abbreviation for any uninteresting commit's names that does not
4738 * clash with any other label.
4740 strbuf_reset(&state->buf);
4741 if (!label) {
4742 char *p;
4744 strbuf_grow(&state->buf, GIT_MAX_HEXSZ);
4745 label = p = state->buf.buf;
4747 find_unique_abbrev_r(p, oid, default_abbrev);
4750 * We may need to extend the abbreviated hash so that there is
4751 * no conflicting label.
4753 if (hashmap_get_from_hash(&state->labels, strihash(p), p)) {
4754 size_t i = strlen(p) + 1;
4756 oid_to_hex_r(p, oid);
4757 for (; i < the_hash_algo->hexsz; i++) {
4758 char save = p[i];
4759 p[i] = '\0';
4760 if (!hashmap_get_from_hash(&state->labels,
4761 strihash(p), p))
4762 break;
4763 p[i] = save;
4766 } else {
4767 struct strbuf *buf = &state->buf;
4770 * Sanitize labels by replacing non-alpha-numeric characters
4771 * (including white-space ones) by dashes, as they might be
4772 * illegal in file names (and hence in ref names).
4774 * Note that we retain non-ASCII UTF-8 characters (identified
4775 * via the most significant bit). They should be all acceptable
4776 * in file names. We do not validate the UTF-8 here, that's not
4777 * the job of this function.
4779 for (; *label; label++)
4780 if ((*label & 0x80) || isalnum(*label))
4781 strbuf_addch(buf, *label);
4782 /* avoid leading dash and double-dashes */
4783 else if (buf->len && buf->buf[buf->len - 1] != '-')
4784 strbuf_addch(buf, '-');
4785 if (!buf->len) {
4786 strbuf_addstr(buf, "rev-");
4787 strbuf_add_unique_abbrev(buf, oid, default_abbrev);
4789 label = buf->buf;
4791 if ((buf->len == the_hash_algo->hexsz &&
4792 !get_oid_hex(label, &dummy)) ||
4793 (buf->len == 1 && *label == '#') ||
4794 hashmap_get_from_hash(&state->labels,
4795 strihash(label), label)) {
4797 * If the label already exists, or if the label is a
4798 * valid full OID, or the label is a '#' (which we use
4799 * as a separator between merge heads and oneline), we
4800 * append a dash and a number to make it unique.
4802 size_t len = buf->len;
4804 for (i = 2; ; i++) {
4805 strbuf_setlen(buf, len);
4806 strbuf_addf(buf, "-%d", i);
4807 if (!hashmap_get_from_hash(&state->labels,
4808 strihash(buf->buf),
4809 buf->buf))
4810 break;
4813 label = buf->buf;
4817 FLEX_ALLOC_STR(labels_entry, label, label);
4818 hashmap_entry_init(&labels_entry->entry, strihash(label));
4819 hashmap_add(&state->labels, &labels_entry->entry);
4821 FLEX_ALLOC_STR(string_entry, string, label);
4822 oidcpy(&string_entry->entry.oid, oid);
4823 oidmap_put(&state->commit2label, string_entry);
4825 return string_entry->string;
4828 static int make_script_with_merges(struct pretty_print_context *pp,
4829 struct rev_info *revs, struct strbuf *out,
4830 unsigned flags)
4832 int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4833 int rebase_cousins = flags & TODO_LIST_REBASE_COUSINS;
4834 int root_with_onto = flags & TODO_LIST_ROOT_WITH_ONTO;
4835 struct strbuf buf = STRBUF_INIT, oneline = STRBUF_INIT;
4836 struct strbuf label = STRBUF_INIT;
4837 struct commit_list *commits = NULL, **tail = &commits, *iter;
4838 struct commit_list *tips = NULL, **tips_tail = &tips;
4839 struct commit *commit;
4840 struct oidmap commit2todo = OIDMAP_INIT;
4841 struct string_entry *entry;
4842 struct oidset interesting = OIDSET_INIT, child_seen = OIDSET_INIT,
4843 shown = OIDSET_INIT;
4844 struct label_state state = { OIDMAP_INIT, { NULL }, STRBUF_INIT };
4846 int abbr = flags & TODO_LIST_ABBREVIATE_CMDS;
4847 const char *cmd_pick = abbr ? "p" : "pick",
4848 *cmd_label = abbr ? "l" : "label",
4849 *cmd_reset = abbr ? "t" : "reset",
4850 *cmd_merge = abbr ? "m" : "merge";
4852 oidmap_init(&commit2todo, 0);
4853 oidmap_init(&state.commit2label, 0);
4854 hashmap_init(&state.labels, labels_cmp, NULL, 0);
4855 strbuf_init(&state.buf, 32);
4857 if (revs->cmdline.nr && (revs->cmdline.rev[0].flags & BOTTOM)) {
4858 struct labels_entry *onto_label_entry;
4859 struct object_id *oid = &revs->cmdline.rev[0].item->oid;
4860 FLEX_ALLOC_STR(entry, string, "onto");
4861 oidcpy(&entry->entry.oid, oid);
4862 oidmap_put(&state.commit2label, entry);
4864 FLEX_ALLOC_STR(onto_label_entry, label, "onto");
4865 hashmap_entry_init(&onto_label_entry->entry, strihash("onto"));
4866 hashmap_add(&state.labels, &onto_label_entry->entry);
4870 * First phase:
4871 * - get onelines for all commits
4872 * - gather all branch tips (i.e. 2nd or later parents of merges)
4873 * - label all branch tips
4875 while ((commit = get_revision(revs))) {
4876 struct commit_list *to_merge;
4877 const char *p1, *p2;
4878 struct object_id *oid;
4879 int is_empty;
4881 tail = &commit_list_insert(commit, tail)->next;
4882 oidset_insert(&interesting, &commit->object.oid);
4884 is_empty = is_original_commit_empty(commit);
4885 if (!is_empty && (commit->object.flags & PATCHSAME))
4886 continue;
4887 if (is_empty && !keep_empty)
4888 continue;
4890 strbuf_reset(&oneline);
4891 pretty_print_commit(pp, commit, &oneline);
4893 to_merge = commit->parents ? commit->parents->next : NULL;
4894 if (!to_merge) {
4895 /* non-merge commit: easy case */
4896 strbuf_reset(&buf);
4897 strbuf_addf(&buf, "%s %s %s", cmd_pick,
4898 oid_to_hex(&commit->object.oid),
4899 oneline.buf);
4900 if (is_empty)
4901 strbuf_addf(&buf, " %c empty",
4902 comment_line_char);
4904 FLEX_ALLOC_STR(entry, string, buf.buf);
4905 oidcpy(&entry->entry.oid, &commit->object.oid);
4906 oidmap_put(&commit2todo, entry);
4908 continue;
4911 /* Create a label */
4912 strbuf_reset(&label);
4913 if (skip_prefix(oneline.buf, "Merge ", &p1) &&
4914 (p1 = strchr(p1, '\'')) &&
4915 (p2 = strchr(++p1, '\'')))
4916 strbuf_add(&label, p1, p2 - p1);
4917 else if (skip_prefix(oneline.buf, "Merge pull request ",
4918 &p1) &&
4919 (p1 = strstr(p1, " from ")))
4920 strbuf_addstr(&label, p1 + strlen(" from "));
4921 else
4922 strbuf_addbuf(&label, &oneline);
4924 strbuf_reset(&buf);
4925 strbuf_addf(&buf, "%s -C %s",
4926 cmd_merge, oid_to_hex(&commit->object.oid));
4928 /* label the tips of merged branches */
4929 for (; to_merge; to_merge = to_merge->next) {
4930 oid = &to_merge->item->object.oid;
4931 strbuf_addch(&buf, ' ');
4933 if (!oidset_contains(&interesting, oid)) {
4934 strbuf_addstr(&buf, label_oid(oid, NULL,
4935 &state));
4936 continue;
4939 tips_tail = &commit_list_insert(to_merge->item,
4940 tips_tail)->next;
4942 strbuf_addstr(&buf, label_oid(oid, label.buf, &state));
4944 strbuf_addf(&buf, " # %s", oneline.buf);
4946 FLEX_ALLOC_STR(entry, string, buf.buf);
4947 oidcpy(&entry->entry.oid, &commit->object.oid);
4948 oidmap_put(&commit2todo, entry);
4952 * Second phase:
4953 * - label branch points
4954 * - add HEAD to the branch tips
4956 for (iter = commits; iter; iter = iter->next) {
4957 struct commit_list *parent = iter->item->parents;
4958 for (; parent; parent = parent->next) {
4959 struct object_id *oid = &parent->item->object.oid;
4960 if (!oidset_contains(&interesting, oid))
4961 continue;
4962 if (oidset_insert(&child_seen, oid))
4963 label_oid(oid, "branch-point", &state);
4966 /* Add HEAD as implicit "tip of branch" */
4967 if (!iter->next)
4968 tips_tail = &commit_list_insert(iter->item,
4969 tips_tail)->next;
4973 * Third phase: output the todo list. This is a bit tricky, as we
4974 * want to avoid jumping back and forth between revisions. To
4975 * accomplish that goal, we walk backwards from the branch tips,
4976 * gathering commits not yet shown, reversing the list on the fly,
4977 * then outputting that list (labeling revisions as needed).
4979 strbuf_addf(out, "%s onto\n", cmd_label);
4980 for (iter = tips; iter; iter = iter->next) {
4981 struct commit_list *list = NULL, *iter2;
4983 commit = iter->item;
4984 if (oidset_contains(&shown, &commit->object.oid))
4985 continue;
4986 entry = oidmap_get(&state.commit2label, &commit->object.oid);
4988 if (entry)
4989 strbuf_addf(out, "\n%c Branch %s\n", comment_line_char, entry->string);
4990 else
4991 strbuf_addch(out, '\n');
4993 while (oidset_contains(&interesting, &commit->object.oid) &&
4994 !oidset_contains(&shown, &commit->object.oid)) {
4995 commit_list_insert(commit, &list);
4996 if (!commit->parents) {
4997 commit = NULL;
4998 break;
5000 commit = commit->parents->item;
5003 if (!commit)
5004 strbuf_addf(out, "%s %s\n", cmd_reset,
5005 rebase_cousins || root_with_onto ?
5006 "onto" : "[new root]");
5007 else {
5008 const char *to = NULL;
5010 entry = oidmap_get(&state.commit2label,
5011 &commit->object.oid);
5012 if (entry)
5013 to = entry->string;
5014 else if (!rebase_cousins)
5015 to = label_oid(&commit->object.oid, NULL,
5016 &state);
5018 if (!to || !strcmp(to, "onto"))
5019 strbuf_addf(out, "%s onto\n", cmd_reset);
5020 else {
5021 strbuf_reset(&oneline);
5022 pretty_print_commit(pp, commit, &oneline);
5023 strbuf_addf(out, "%s %s # %s\n",
5024 cmd_reset, to, oneline.buf);
5028 for (iter2 = list; iter2; iter2 = iter2->next) {
5029 struct object_id *oid = &iter2->item->object.oid;
5030 entry = oidmap_get(&commit2todo, oid);
5031 /* only show if not already upstream */
5032 if (entry)
5033 strbuf_addf(out, "%s\n", entry->string);
5034 entry = oidmap_get(&state.commit2label, oid);
5035 if (entry)
5036 strbuf_addf(out, "%s %s\n",
5037 cmd_label, entry->string);
5038 oidset_insert(&shown, oid);
5041 free_commit_list(list);
5044 free_commit_list(commits);
5045 free_commit_list(tips);
5047 strbuf_release(&label);
5048 strbuf_release(&oneline);
5049 strbuf_release(&buf);
5051 oidmap_free(&commit2todo, 1);
5052 oidmap_free(&state.commit2label, 1);
5053 hashmap_free_entries(&state.labels, struct labels_entry, entry);
5054 strbuf_release(&state.buf);
5056 return 0;
5059 int sequencer_make_script(struct repository *r, struct strbuf *out, int argc,
5060 const char **argv, unsigned flags)
5062 char *format = NULL;
5063 struct pretty_print_context pp = {0};
5064 struct rev_info revs;
5065 struct commit *commit;
5066 int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
5067 const char *insn = flags & TODO_LIST_ABBREVIATE_CMDS ? "p" : "pick";
5068 int rebase_merges = flags & TODO_LIST_REBASE_MERGES;
5069 int reapply_cherry_picks = flags & TODO_LIST_REAPPLY_CHERRY_PICKS;
5071 repo_init_revisions(r, &revs, NULL);
5072 revs.verbose_header = 1;
5073 if (!rebase_merges)
5074 revs.max_parents = 1;
5075 revs.cherry_mark = !reapply_cherry_picks;
5076 revs.limited = 1;
5077 revs.reverse = 1;
5078 revs.right_only = 1;
5079 revs.sort_order = REV_SORT_IN_GRAPH_ORDER;
5080 revs.topo_order = 1;
5082 revs.pretty_given = 1;
5083 git_config_get_string("rebase.instructionFormat", &format);
5084 if (!format || !*format) {
5085 free(format);
5086 format = xstrdup("%s");
5088 get_commit_format(format, &revs);
5089 free(format);
5090 pp.fmt = revs.commit_format;
5091 pp.output_encoding = get_log_output_encoding();
5093 if (setup_revisions(argc, argv, &revs, NULL) > 1)
5094 return error(_("make_script: unhandled options"));
5096 if (prepare_revision_walk(&revs) < 0)
5097 return error(_("make_script: error preparing revisions"));
5099 if (rebase_merges)
5100 return make_script_with_merges(&pp, &revs, out, flags);
5102 while ((commit = get_revision(&revs))) {
5103 int is_empty = is_original_commit_empty(commit);
5105 if (!is_empty && (commit->object.flags & PATCHSAME))
5106 continue;
5107 if (is_empty && !keep_empty)
5108 continue;
5109 strbuf_addf(out, "%s %s ", insn,
5110 oid_to_hex(&commit->object.oid));
5111 pretty_print_commit(&pp, commit, out);
5112 if (is_empty)
5113 strbuf_addf(out, " %c empty", comment_line_char);
5114 strbuf_addch(out, '\n');
5116 return 0;
5120 * Add commands after pick and (series of) squash/fixup commands
5121 * in the todo list.
5123 void todo_list_add_exec_commands(struct todo_list *todo_list,
5124 struct string_list *commands)
5126 struct strbuf *buf = &todo_list->buf;
5127 size_t base_offset = buf->len;
5128 int i, insert, nr = 0, alloc = 0;
5129 struct todo_item *items = NULL, *base_items = NULL;
5131 base_items = xcalloc(commands->nr, sizeof(struct todo_item));
5132 for (i = 0; i < commands->nr; i++) {
5133 size_t command_len = strlen(commands->items[i].string);
5135 strbuf_addstr(buf, commands->items[i].string);
5136 strbuf_addch(buf, '\n');
5138 base_items[i].command = TODO_EXEC;
5139 base_items[i].offset_in_buf = base_offset;
5140 base_items[i].arg_offset = base_offset + strlen("exec ");
5141 base_items[i].arg_len = command_len - strlen("exec ");
5143 base_offset += command_len + 1;
5147 * Insert <commands> after every pick. Here, fixup/squash chains
5148 * are considered part of the pick, so we insert the commands *after*
5149 * those chains if there are any.
5151 * As we insert the exec commands immediately after rearranging
5152 * any fixups and before the user edits the list, a fixup chain
5153 * can never contain comments (any comments are empty picks that
5154 * have been commented out because the user did not specify
5155 * --keep-empty). So, it is safe to insert an exec command
5156 * without looking at the command following a comment.
5158 insert = 0;
5159 for (i = 0; i < todo_list->nr; i++) {
5160 enum todo_command command = todo_list->items[i].command;
5161 if (insert && !is_fixup(command)) {
5162 ALLOC_GROW(items, nr + commands->nr, alloc);
5163 COPY_ARRAY(items + nr, base_items, commands->nr);
5164 nr += commands->nr;
5166 insert = 0;
5169 ALLOC_GROW(items, nr + 1, alloc);
5170 items[nr++] = todo_list->items[i];
5172 if (command == TODO_PICK || command == TODO_MERGE)
5173 insert = 1;
5176 /* insert or append final <commands> */
5177 if (insert || nr == todo_list->nr) {
5178 ALLOC_GROW(items, nr + commands->nr, alloc);
5179 COPY_ARRAY(items + nr, base_items, commands->nr);
5180 nr += commands->nr;
5183 free(base_items);
5184 FREE_AND_NULL(todo_list->items);
5185 todo_list->items = items;
5186 todo_list->nr = nr;
5187 todo_list->alloc = alloc;
5190 static void todo_list_to_strbuf(struct repository *r, struct todo_list *todo_list,
5191 struct strbuf *buf, int num, unsigned flags)
5193 struct todo_item *item;
5194 int i, max = todo_list->nr;
5196 if (num > 0 && num < max)
5197 max = num;
5199 for (item = todo_list->items, i = 0; i < max; i++, item++) {
5200 char cmd;
5202 /* if the item is not a command write it and continue */
5203 if (item->command >= TODO_COMMENT) {
5204 strbuf_addf(buf, "%.*s\n", item->arg_len,
5205 todo_item_get_arg(todo_list, item));
5206 continue;
5209 /* add command to the buffer */
5210 cmd = command_to_char(item->command);
5211 if ((flags & TODO_LIST_ABBREVIATE_CMDS) && cmd)
5212 strbuf_addch(buf, cmd);
5213 else
5214 strbuf_addstr(buf, command_to_string(item->command));
5216 /* add commit id */
5217 if (item->commit) {
5218 const char *oid = flags & TODO_LIST_SHORTEN_IDS ?
5219 short_commit_name(item->commit) :
5220 oid_to_hex(&item->commit->object.oid);
5222 if (item->command == TODO_MERGE) {
5223 if (item->flags & TODO_EDIT_MERGE_MSG)
5224 strbuf_addstr(buf, " -c");
5225 else
5226 strbuf_addstr(buf, " -C");
5229 strbuf_addf(buf, " %s", oid);
5232 /* add all the rest */
5233 if (!item->arg_len)
5234 strbuf_addch(buf, '\n');
5235 else
5236 strbuf_addf(buf, " %.*s\n", item->arg_len,
5237 todo_item_get_arg(todo_list, item));
5241 int todo_list_write_to_file(struct repository *r, struct todo_list *todo_list,
5242 const char *file, const char *shortrevisions,
5243 const char *shortonto, int num, unsigned flags)
5245 int res;
5246 struct strbuf buf = STRBUF_INIT;
5248 todo_list_to_strbuf(r, todo_list, &buf, num, flags);
5249 if (flags & TODO_LIST_APPEND_TODO_HELP)
5250 append_todo_help(count_commands(todo_list),
5251 shortrevisions, shortonto, &buf);
5253 res = write_message(buf.buf, buf.len, file, 0);
5254 strbuf_release(&buf);
5256 return res;
5259 /* skip picking commits whose parents are unchanged */
5260 static int skip_unnecessary_picks(struct repository *r,
5261 struct todo_list *todo_list,
5262 struct object_id *base_oid)
5264 struct object_id *parent_oid;
5265 int i;
5267 for (i = 0; i < todo_list->nr; i++) {
5268 struct todo_item *item = todo_list->items + i;
5270 if (item->command >= TODO_NOOP)
5271 continue;
5272 if (item->command != TODO_PICK)
5273 break;
5274 if (parse_commit(item->commit)) {
5275 return error(_("could not parse commit '%s'"),
5276 oid_to_hex(&item->commit->object.oid));
5278 if (!item->commit->parents)
5279 break; /* root commit */
5280 if (item->commit->parents->next)
5281 break; /* merge commit */
5282 parent_oid = &item->commit->parents->item->object.oid;
5283 if (!oideq(parent_oid, base_oid))
5284 break;
5285 oidcpy(base_oid, &item->commit->object.oid);
5287 if (i > 0) {
5288 const char *done_path = rebase_path_done();
5290 if (todo_list_write_to_file(r, todo_list, done_path, NULL, NULL, i, 0)) {
5291 error_errno(_("could not write to '%s'"), done_path);
5292 return -1;
5295 MOVE_ARRAY(todo_list->items, todo_list->items + i, todo_list->nr - i);
5296 todo_list->nr -= i;
5297 todo_list->current = 0;
5298 todo_list->done_nr += i;
5300 if (is_fixup(peek_command(todo_list, 0)))
5301 record_in_rewritten(base_oid, peek_command(todo_list, 0));
5304 return 0;
5307 int complete_action(struct repository *r, struct replay_opts *opts, unsigned flags,
5308 const char *shortrevisions, const char *onto_name,
5309 struct commit *onto, const char *orig_head,
5310 struct string_list *commands, unsigned autosquash,
5311 struct todo_list *todo_list)
5313 char shortonto[GIT_MAX_HEXSZ + 1];
5314 const char *todo_file = rebase_path_todo();
5315 struct todo_list new_todo = TODO_LIST_INIT;
5316 struct strbuf *buf = &todo_list->buf, buf2 = STRBUF_INIT;
5317 struct object_id oid = onto->object.oid;
5318 int res;
5320 find_unique_abbrev_r(shortonto, &oid, DEFAULT_ABBREV);
5322 if (buf->len == 0) {
5323 struct todo_item *item = append_new_todo(todo_list);
5324 item->command = TODO_NOOP;
5325 item->commit = NULL;
5326 item->arg_len = item->arg_offset = item->flags = item->offset_in_buf = 0;
5329 if (autosquash && todo_list_rearrange_squash(todo_list))
5330 return -1;
5332 if (commands->nr)
5333 todo_list_add_exec_commands(todo_list, commands);
5335 if (count_commands(todo_list) == 0) {
5336 apply_autostash(rebase_path_autostash());
5337 sequencer_remove_state(opts);
5339 return error(_("nothing to do"));
5342 res = edit_todo_list(r, todo_list, &new_todo, shortrevisions,
5343 shortonto, flags);
5344 if (res == -1)
5345 return -1;
5346 else if (res == -2) {
5347 apply_autostash(rebase_path_autostash());
5348 sequencer_remove_state(opts);
5350 return -1;
5351 } else if (res == -3) {
5352 apply_autostash(rebase_path_autostash());
5353 sequencer_remove_state(opts);
5354 todo_list_release(&new_todo);
5356 return error(_("nothing to do"));
5357 } else if (res == -4) {
5358 checkout_onto(r, opts, onto_name, &onto->object.oid, orig_head);
5359 todo_list_release(&new_todo);
5361 return -1;
5364 /* Expand the commit IDs */
5365 todo_list_to_strbuf(r, &new_todo, &buf2, -1, 0);
5366 strbuf_swap(&new_todo.buf, &buf2);
5367 strbuf_release(&buf2);
5368 new_todo.total_nr -= new_todo.nr;
5369 if (todo_list_parse_insn_buffer(r, new_todo.buf.buf, &new_todo) < 0)
5370 BUG("invalid todo list after expanding IDs:\n%s",
5371 new_todo.buf.buf);
5373 if (opts->allow_ff && skip_unnecessary_picks(r, &new_todo, &oid)) {
5374 todo_list_release(&new_todo);
5375 return error(_("could not skip unnecessary pick commands"));
5378 if (todo_list_write_to_file(r, &new_todo, todo_file, NULL, NULL, -1,
5379 flags & ~(TODO_LIST_SHORTEN_IDS))) {
5380 todo_list_release(&new_todo);
5381 return error_errno(_("could not write '%s'"), todo_file);
5384 res = -1;
5386 if (opts->committer_date_is_author_date && init_committer(opts))
5387 goto cleanup;
5389 if (checkout_onto(r, opts, onto_name, &oid, orig_head))
5390 goto cleanup;
5392 if (require_clean_work_tree(r, "rebase", "", 1, 1))
5393 goto cleanup;
5395 todo_list_write_total_nr(&new_todo);
5396 res = pick_commits(r, &new_todo, opts);
5398 cleanup:
5399 todo_list_release(&new_todo);
5401 return res;
5404 struct subject2item_entry {
5405 struct hashmap_entry entry;
5406 int i;
5407 char subject[FLEX_ARRAY];
5410 static int subject2item_cmp(const void *fndata,
5411 const struct hashmap_entry *eptr,
5412 const struct hashmap_entry *entry_or_key,
5413 const void *key)
5415 const struct subject2item_entry *a, *b;
5417 a = container_of(eptr, const struct subject2item_entry, entry);
5418 b = container_of(entry_or_key, const struct subject2item_entry, entry);
5420 return key ? strcmp(a->subject, key) : strcmp(a->subject, b->subject);
5423 define_commit_slab(commit_todo_item, struct todo_item *);
5426 * Rearrange the todo list that has both "pick commit-id msg" and "pick
5427 * commit-id fixup!/squash! msg" in it so that the latter is put immediately
5428 * after the former, and change "pick" to "fixup"/"squash".
5430 * Note that if the config has specified a custom instruction format, each log
5431 * message will have to be retrieved from the commit (as the oneline in the
5432 * script cannot be trusted) in order to normalize the autosquash arrangement.
5434 int todo_list_rearrange_squash(struct todo_list *todo_list)
5436 struct hashmap subject2item;
5437 int rearranged = 0, *next, *tail, i, nr = 0, alloc = 0;
5438 char **subjects;
5439 struct commit_todo_item commit_todo;
5440 struct todo_item *items = NULL;
5442 init_commit_todo_item(&commit_todo);
5444 * The hashmap maps onelines to the respective todo list index.
5446 * If any items need to be rearranged, the next[i] value will indicate
5447 * which item was moved directly after the i'th.
5449 * In that case, last[i] will indicate the index of the latest item to
5450 * be moved to appear after the i'th.
5452 hashmap_init(&subject2item, subject2item_cmp, NULL, todo_list->nr);
5453 ALLOC_ARRAY(next, todo_list->nr);
5454 ALLOC_ARRAY(tail, todo_list->nr);
5455 ALLOC_ARRAY(subjects, todo_list->nr);
5456 for (i = 0; i < todo_list->nr; i++) {
5457 struct strbuf buf = STRBUF_INIT;
5458 struct todo_item *item = todo_list->items + i;
5459 const char *commit_buffer, *subject, *p;
5460 size_t subject_len;
5461 int i2 = -1;
5462 struct subject2item_entry *entry;
5464 next[i] = tail[i] = -1;
5465 if (!item->commit || item->command == TODO_DROP) {
5466 subjects[i] = NULL;
5467 continue;
5470 if (is_fixup(item->command)) {
5471 clear_commit_todo_item(&commit_todo);
5472 return error(_("the script was already rearranged."));
5475 *commit_todo_item_at(&commit_todo, item->commit) = item;
5477 parse_commit(item->commit);
5478 commit_buffer = logmsg_reencode(item->commit, NULL, "UTF-8");
5479 find_commit_subject(commit_buffer, &subject);
5480 format_subject(&buf, subject, " ");
5481 subject = subjects[i] = strbuf_detach(&buf, &subject_len);
5482 unuse_commit_buffer(item->commit, commit_buffer);
5483 if ((skip_prefix(subject, "fixup! ", &p) ||
5484 skip_prefix(subject, "squash! ", &p))) {
5485 struct commit *commit2;
5487 for (;;) {
5488 while (isspace(*p))
5489 p++;
5490 if (!skip_prefix(p, "fixup! ", &p) &&
5491 !skip_prefix(p, "squash! ", &p))
5492 break;
5495 entry = hashmap_get_entry_from_hash(&subject2item,
5496 strhash(p), p,
5497 struct subject2item_entry,
5498 entry);
5499 if (entry)
5500 /* found by title */
5501 i2 = entry->i;
5502 else if (!strchr(p, ' ') &&
5503 (commit2 =
5504 lookup_commit_reference_by_name(p)) &&
5505 *commit_todo_item_at(&commit_todo, commit2))
5506 /* found by commit name */
5507 i2 = *commit_todo_item_at(&commit_todo, commit2)
5508 - todo_list->items;
5509 else {
5510 /* copy can be a prefix of the commit subject */
5511 for (i2 = 0; i2 < i; i2++)
5512 if (subjects[i2] &&
5513 starts_with(subjects[i2], p))
5514 break;
5515 if (i2 == i)
5516 i2 = -1;
5519 if (i2 >= 0) {
5520 rearranged = 1;
5521 todo_list->items[i].command =
5522 starts_with(subject, "fixup!") ?
5523 TODO_FIXUP : TODO_SQUASH;
5524 if (tail[i2] < 0) {
5525 next[i] = next[i2];
5526 next[i2] = i;
5527 } else {
5528 next[i] = next[tail[i2]];
5529 next[tail[i2]] = i;
5531 tail[i2] = i;
5532 } else if (!hashmap_get_from_hash(&subject2item,
5533 strhash(subject), subject)) {
5534 FLEX_ALLOC_MEM(entry, subject, subject, subject_len);
5535 entry->i = i;
5536 hashmap_entry_init(&entry->entry,
5537 strhash(entry->subject));
5538 hashmap_put(&subject2item, &entry->entry);
5542 if (rearranged) {
5543 for (i = 0; i < todo_list->nr; i++) {
5544 enum todo_command command = todo_list->items[i].command;
5545 int cur = i;
5548 * Initially, all commands are 'pick's. If it is a
5549 * fixup or a squash now, we have rearranged it.
5551 if (is_fixup(command))
5552 continue;
5554 while (cur >= 0) {
5555 ALLOC_GROW(items, nr + 1, alloc);
5556 items[nr++] = todo_list->items[cur];
5557 cur = next[cur];
5561 FREE_AND_NULL(todo_list->items);
5562 todo_list->items = items;
5563 todo_list->nr = nr;
5564 todo_list->alloc = alloc;
5567 free(next);
5568 free(tail);
5569 for (i = 0; i < todo_list->nr; i++)
5570 free(subjects[i]);
5571 free(subjects);
5572 hashmap_free_entries(&subject2item, struct subject2item_entry, entry);
5574 clear_commit_todo_item(&commit_todo);
5576 return 0;
5579 int sequencer_determine_whence(struct repository *r, enum commit_whence *whence)
5581 if (refs_ref_exists(get_main_ref_store(r), "CHERRY_PICK_HEAD")) {
5582 struct object_id cherry_pick_head, rebase_head;
5584 if (file_exists(git_path_seq_dir()))
5585 *whence = FROM_CHERRY_PICK_MULTI;
5586 if (file_exists(rebase_path()) &&
5587 !get_oid("REBASE_HEAD", &rebase_head) &&
5588 !get_oid("CHERRY_PICK_HEAD", &cherry_pick_head) &&
5589 oideq(&rebase_head, &cherry_pick_head))
5590 *whence = FROM_REBASE_PICK;
5591 else
5592 *whence = FROM_CHERRY_PICK_SINGLE;
5594 return 1;
5597 return 0;