Merge branch 'jk/pack-delta-reuse-with-bitmap'
[git.git] / sequencer.c
blobbd159991e9ca1ad85fe831d84031f6d889e3c090
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 "argv-array.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"
35 #define GIT_REFLOG_ACTION "GIT_REFLOG_ACTION"
37 const char sign_off_header[] = "Signed-off-by: ";
38 static const char cherry_picked_prefix[] = "(cherry picked from commit ";
40 GIT_PATH_FUNC(git_path_commit_editmsg, "COMMIT_EDITMSG")
42 GIT_PATH_FUNC(git_path_seq_dir, "sequencer")
44 static GIT_PATH_FUNC(git_path_todo_file, "sequencer/todo")
45 static GIT_PATH_FUNC(git_path_opts_file, "sequencer/opts")
46 static GIT_PATH_FUNC(git_path_head_file, "sequencer/head")
47 static GIT_PATH_FUNC(git_path_abort_safety_file, "sequencer/abort-safety")
49 static GIT_PATH_FUNC(rebase_path, "rebase-merge")
51 * The file containing rebase commands, comments, and empty lines.
52 * This file is created by "git rebase -i" then edited by the user. As
53 * the lines are processed, they are removed from the front of this
54 * file and written to the tail of 'done'.
56 static GIT_PATH_FUNC(rebase_path_todo, "rebase-merge/git-rebase-todo")
58 * The rebase command lines that have already been processed. A line
59 * is moved here when it is first handled, before any associated user
60 * actions.
62 static GIT_PATH_FUNC(rebase_path_done, "rebase-merge/done")
64 * The file to keep track of how many commands were already processed (e.g.
65 * for the prompt).
67 static GIT_PATH_FUNC(rebase_path_msgnum, "rebase-merge/msgnum")
69 * The file to keep track of how many commands are to be processed in total
70 * (e.g. for the prompt).
72 static GIT_PATH_FUNC(rebase_path_msgtotal, "rebase-merge/end")
74 * The commit message that is planned to be used for any changes that
75 * need to be committed following a user interaction.
77 static GIT_PATH_FUNC(rebase_path_message, "rebase-merge/message")
79 * The file into which is accumulated the suggested commit message for
80 * squash/fixup commands. When the first of a series of squash/fixups
81 * is seen, the file is created and the commit message from the
82 * previous commit and from the first squash/fixup commit are written
83 * to it. The commit message for each subsequent squash/fixup commit
84 * is appended to the file as it is processed.
86 static GIT_PATH_FUNC(rebase_path_squash_msg, "rebase-merge/message-squash")
88 * If the current series of squash/fixups has not yet included a squash
89 * command, then this file exists and holds the commit message of the
90 * original "pick" commit. (If the series ends without a "squash"
91 * command, then this can be used as the commit message of the combined
92 * commit without opening the editor.)
94 static GIT_PATH_FUNC(rebase_path_fixup_msg, "rebase-merge/message-fixup")
96 * This file contains the list fixup/squash commands that have been
97 * accumulated into message-fixup or message-squash so far.
99 static GIT_PATH_FUNC(rebase_path_current_fixups, "rebase-merge/current-fixups")
101 * A script to set the GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, and
102 * GIT_AUTHOR_DATE that will be used for the commit that is currently
103 * being rebased.
105 static GIT_PATH_FUNC(rebase_path_author_script, "rebase-merge/author-script")
107 * When an "edit" rebase command is being processed, the SHA1 of the
108 * commit to be edited is recorded in this file. When "git rebase
109 * --continue" is executed, if there are any staged changes then they
110 * will be amended to the HEAD commit, but only provided the HEAD
111 * commit is still the commit to be edited. When any other rebase
112 * command is processed, this file is deleted.
114 static GIT_PATH_FUNC(rebase_path_amend, "rebase-merge/amend")
116 * When we stop at a given patch via the "edit" command, this file contains
117 * the abbreviated commit name of the corresponding patch.
119 static GIT_PATH_FUNC(rebase_path_stopped_sha, "rebase-merge/stopped-sha")
121 * For the post-rewrite hook, we make a list of rewritten commits and
122 * their new sha1s. The rewritten-pending list keeps the sha1s of
123 * commits that have been processed, but not committed yet,
124 * e.g. because they are waiting for a 'squash' command.
126 static GIT_PATH_FUNC(rebase_path_rewritten_list, "rebase-merge/rewritten-list")
127 static GIT_PATH_FUNC(rebase_path_rewritten_pending,
128 "rebase-merge/rewritten-pending")
131 * The path of the file containig the OID of the "squash onto" commit, i.e.
132 * the dummy commit used for `reset [new root]`.
134 static GIT_PATH_FUNC(rebase_path_squash_onto, "rebase-merge/squash-onto")
137 * The path of the file listing refs that need to be deleted after the rebase
138 * finishes. This is used by the `label` command to record the need for cleanup.
140 static GIT_PATH_FUNC(rebase_path_refs_to_delete, "rebase-merge/refs-to-delete")
143 * The following files are written by git-rebase just after parsing the
144 * command-line (and are only consumed, not modified, by the sequencer).
146 static GIT_PATH_FUNC(rebase_path_gpg_sign_opt, "rebase-merge/gpg_sign_opt")
147 static GIT_PATH_FUNC(rebase_path_orig_head, "rebase-merge/orig-head")
148 static GIT_PATH_FUNC(rebase_path_verbose, "rebase-merge/verbose")
149 static GIT_PATH_FUNC(rebase_path_signoff, "rebase-merge/signoff")
150 static GIT_PATH_FUNC(rebase_path_head_name, "rebase-merge/head-name")
151 static GIT_PATH_FUNC(rebase_path_onto, "rebase-merge/onto")
152 static GIT_PATH_FUNC(rebase_path_autostash, "rebase-merge/autostash")
153 static GIT_PATH_FUNC(rebase_path_strategy, "rebase-merge/strategy")
154 static GIT_PATH_FUNC(rebase_path_strategy_opts, "rebase-merge/strategy_opts")
155 static GIT_PATH_FUNC(rebase_path_allow_rerere_autoupdate, "rebase-merge/allow_rerere_autoupdate")
157 static int git_sequencer_config(const char *k, const char *v, void *cb)
159 struct replay_opts *opts = cb;
160 int status;
162 if (!strcmp(k, "commit.cleanup")) {
163 const char *s;
165 status = git_config_string(&s, k, v);
166 if (status)
167 return status;
169 if (!strcmp(s, "verbatim"))
170 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_NONE;
171 else if (!strcmp(s, "whitespace"))
172 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_SPACE;
173 else if (!strcmp(s, "strip"))
174 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_ALL;
175 else if (!strcmp(s, "scissors"))
176 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_SPACE;
177 else
178 warning(_("invalid commit message cleanup mode '%s'"),
181 free((char *)s);
182 return status;
185 if (!strcmp(k, "commit.gpgsign")) {
186 opts->gpg_sign = git_config_bool(k, v) ? xstrdup("") : NULL;
187 return 0;
190 status = git_gpg_config(k, v, NULL);
191 if (status)
192 return status;
194 return git_diff_basic_config(k, v, NULL);
197 void sequencer_init_config(struct replay_opts *opts)
199 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_NONE;
200 git_config(git_sequencer_config, opts);
203 static inline int is_rebase_i(const struct replay_opts *opts)
205 return opts->action == REPLAY_INTERACTIVE_REBASE;
208 static const char *get_dir(const struct replay_opts *opts)
210 if (is_rebase_i(opts))
211 return rebase_path();
212 return git_path_seq_dir();
215 static const char *get_todo_path(const struct replay_opts *opts)
217 if (is_rebase_i(opts))
218 return rebase_path_todo();
219 return git_path_todo_file();
223 * Returns 0 for non-conforming footer
224 * Returns 1 for conforming footer
225 * Returns 2 when sob exists within conforming footer
226 * Returns 3 when sob exists within conforming footer as last entry
228 static int has_conforming_footer(struct strbuf *sb, struct strbuf *sob,
229 int ignore_footer)
231 struct trailer_info info;
232 int i;
233 int found_sob = 0, found_sob_last = 0;
235 trailer_info_get(&info, sb->buf);
237 if (info.trailer_start == info.trailer_end)
238 return 0;
240 for (i = 0; i < info.trailer_nr; i++)
241 if (sob && !strncmp(info.trailers[i], sob->buf, sob->len)) {
242 found_sob = 1;
243 if (i == info.trailer_nr - 1)
244 found_sob_last = 1;
247 trailer_info_release(&info);
249 if (found_sob_last)
250 return 3;
251 if (found_sob)
252 return 2;
253 return 1;
256 static const char *gpg_sign_opt_quoted(struct replay_opts *opts)
258 static struct strbuf buf = STRBUF_INIT;
260 strbuf_reset(&buf);
261 if (opts->gpg_sign)
262 sq_quotef(&buf, "-S%s", opts->gpg_sign);
263 return buf.buf;
266 int sequencer_remove_state(struct replay_opts *opts)
268 struct strbuf buf = STRBUF_INIT;
269 int i;
271 if (is_rebase_i(opts) &&
272 strbuf_read_file(&buf, rebase_path_refs_to_delete(), 0) > 0) {
273 char *p = buf.buf;
274 while (*p) {
275 char *eol = strchr(p, '\n');
276 if (eol)
277 *eol = '\0';
278 if (delete_ref("(rebase -i) cleanup", p, NULL, 0) < 0)
279 warning(_("could not delete '%s'"), p);
280 if (!eol)
281 break;
282 p = eol + 1;
286 free(opts->gpg_sign);
287 free(opts->strategy);
288 for (i = 0; i < opts->xopts_nr; i++)
289 free(opts->xopts[i]);
290 free(opts->xopts);
291 strbuf_release(&opts->current_fixups);
293 strbuf_reset(&buf);
294 strbuf_addstr(&buf, get_dir(opts));
295 remove_dir_recursively(&buf, 0);
296 strbuf_release(&buf);
298 return 0;
301 static const char *action_name(const struct replay_opts *opts)
303 switch (opts->action) {
304 case REPLAY_REVERT:
305 return N_("revert");
306 case REPLAY_PICK:
307 return N_("cherry-pick");
308 case REPLAY_INTERACTIVE_REBASE:
309 return N_("rebase -i");
311 die(_("unknown action: %d"), opts->action);
314 struct commit_message {
315 char *parent_label;
316 char *label;
317 char *subject;
318 const char *message;
321 static const char *short_commit_name(struct commit *commit)
323 return find_unique_abbrev(&commit->object.oid, DEFAULT_ABBREV);
326 static int get_message(struct commit *commit, struct commit_message *out)
328 const char *abbrev, *subject;
329 int subject_len;
331 out->message = logmsg_reencode(commit, NULL, get_commit_output_encoding());
332 abbrev = short_commit_name(commit);
334 subject_len = find_commit_subject(out->message, &subject);
336 out->subject = xmemdupz(subject, subject_len);
337 out->label = xstrfmt("%s... %s", abbrev, out->subject);
338 out->parent_label = xstrfmt("parent of %s", out->label);
340 return 0;
343 static void free_message(struct commit *commit, struct commit_message *msg)
345 free(msg->parent_label);
346 free(msg->label);
347 free(msg->subject);
348 unuse_commit_buffer(commit, msg->message);
351 static void print_advice(int show_hint, struct replay_opts *opts)
353 char *msg = getenv("GIT_CHERRY_PICK_HELP");
355 if (msg) {
356 fprintf(stderr, "%s\n", msg);
358 * A conflict has occurred but the porcelain
359 * (typically rebase --interactive) wants to take care
360 * of the commit itself so remove CHERRY_PICK_HEAD
362 unlink(git_path_cherry_pick_head(the_repository));
363 return;
366 if (show_hint) {
367 if (opts->no_commit)
368 advise(_("after resolving the conflicts, mark the corrected paths\n"
369 "with 'git add <paths>' or 'git rm <paths>'"));
370 else
371 advise(_("after resolving the conflicts, mark the corrected paths\n"
372 "with 'git add <paths>' or 'git rm <paths>'\n"
373 "and commit the result with 'git commit'"));
377 static int write_message(const void *buf, size_t len, const char *filename,
378 int append_eol)
380 struct lock_file msg_file = LOCK_INIT;
382 int msg_fd = hold_lock_file_for_update(&msg_file, filename, 0);
383 if (msg_fd < 0)
384 return error_errno(_("could not lock '%s'"), filename);
385 if (write_in_full(msg_fd, buf, len) < 0) {
386 error_errno(_("could not write to '%s'"), filename);
387 rollback_lock_file(&msg_file);
388 return -1;
390 if (append_eol && write(msg_fd, "\n", 1) < 0) {
391 error_errno(_("could not write eol to '%s'"), filename);
392 rollback_lock_file(&msg_file);
393 return -1;
395 if (commit_lock_file(&msg_file) < 0)
396 return error(_("failed to finalize '%s'"), filename);
398 return 0;
402 * Reads a file that was presumably written by a shell script, i.e. with an
403 * end-of-line marker that needs to be stripped.
405 * Note that only the last end-of-line marker is stripped, consistent with the
406 * behavior of "$(cat path)" in a shell script.
408 * Returns 1 if the file was read, 0 if it could not be read or does not exist.
410 static int read_oneliner(struct strbuf *buf,
411 const char *path, int skip_if_empty)
413 int orig_len = buf->len;
415 if (!file_exists(path))
416 return 0;
418 if (strbuf_read_file(buf, path, 0) < 0) {
419 warning_errno(_("could not read '%s'"), path);
420 return 0;
423 if (buf->len > orig_len && buf->buf[buf->len - 1] == '\n') {
424 if (--buf->len > orig_len && buf->buf[buf->len - 1] == '\r')
425 --buf->len;
426 buf->buf[buf->len] = '\0';
429 if (skip_if_empty && buf->len == orig_len)
430 return 0;
432 return 1;
435 static struct tree *empty_tree(void)
437 return lookup_tree(the_repository, the_repository->hash_algo->empty_tree);
440 static int error_dirty_index(struct replay_opts *opts)
442 if (read_cache_unmerged())
443 return error_resolve_conflict(_(action_name(opts)));
445 error(_("your local changes would be overwritten by %s."),
446 _(action_name(opts)));
448 if (advice_commit_before_merge)
449 advise(_("commit your changes or stash them to proceed."));
450 return -1;
453 static void update_abort_safety_file(void)
455 struct object_id head;
457 /* Do nothing on a single-pick */
458 if (!file_exists(git_path_seq_dir()))
459 return;
461 if (!get_oid("HEAD", &head))
462 write_file(git_path_abort_safety_file(), "%s", oid_to_hex(&head));
463 else
464 write_file(git_path_abort_safety_file(), "%s", "");
467 static int fast_forward_to(const struct object_id *to, const struct object_id *from,
468 int unborn, struct replay_opts *opts)
470 struct ref_transaction *transaction;
471 struct strbuf sb = STRBUF_INIT;
472 struct strbuf err = STRBUF_INIT;
474 read_cache();
475 if (checkout_fast_forward(from, to, 1))
476 return -1; /* the callee should have complained already */
478 strbuf_addf(&sb, _("%s: fast-forward"), _(action_name(opts)));
480 transaction = ref_transaction_begin(&err);
481 if (!transaction ||
482 ref_transaction_update(transaction, "HEAD",
483 to, unborn && !is_rebase_i(opts) ?
484 &null_oid : from,
485 0, sb.buf, &err) ||
486 ref_transaction_commit(transaction, &err)) {
487 ref_transaction_free(transaction);
488 error("%s", err.buf);
489 strbuf_release(&sb);
490 strbuf_release(&err);
491 return -1;
494 strbuf_release(&sb);
495 strbuf_release(&err);
496 ref_transaction_free(transaction);
497 update_abort_safety_file();
498 return 0;
501 void append_conflicts_hint(struct strbuf *msgbuf)
503 int i;
505 strbuf_addch(msgbuf, '\n');
506 strbuf_commented_addf(msgbuf, "Conflicts:\n");
507 for (i = 0; i < active_nr;) {
508 const struct cache_entry *ce = active_cache[i++];
509 if (ce_stage(ce)) {
510 strbuf_commented_addf(msgbuf, "\t%s\n", ce->name);
511 while (i < active_nr && !strcmp(ce->name,
512 active_cache[i]->name))
513 i++;
518 static int do_recursive_merge(struct commit *base, struct commit *next,
519 const char *base_label, const char *next_label,
520 struct object_id *head, struct strbuf *msgbuf,
521 struct replay_opts *opts)
523 struct merge_options o;
524 struct tree *result, *next_tree, *base_tree, *head_tree;
525 int clean;
526 char **xopt;
527 struct lock_file index_lock = LOCK_INIT;
529 if (hold_locked_index(&index_lock, LOCK_REPORT_ON_ERROR) < 0)
530 return -1;
532 read_cache();
534 init_merge_options(&o);
535 o.ancestor = base ? base_label : "(empty tree)";
536 o.branch1 = "HEAD";
537 o.branch2 = next ? next_label : "(empty tree)";
538 if (is_rebase_i(opts))
539 o.buffer_output = 2;
540 o.show_rename_progress = 1;
542 head_tree = parse_tree_indirect(head);
543 next_tree = next ? get_commit_tree(next) : empty_tree();
544 base_tree = base ? get_commit_tree(base) : empty_tree();
546 for (xopt = opts->xopts; xopt != opts->xopts + opts->xopts_nr; xopt++)
547 parse_merge_opt(&o, *xopt);
549 clean = merge_trees(&o,
550 head_tree,
551 next_tree, base_tree, &result);
552 if (is_rebase_i(opts) && clean <= 0)
553 fputs(o.obuf.buf, stdout);
554 strbuf_release(&o.obuf);
555 diff_warn_rename_limit("merge.renamelimit", o.needed_rename_limit, 0);
556 if (clean < 0) {
557 rollback_lock_file(&index_lock);
558 return clean;
561 if (write_locked_index(&the_index, &index_lock,
562 COMMIT_LOCK | SKIP_IF_UNCHANGED))
564 * TRANSLATORS: %s will be "revert", "cherry-pick" or
565 * "rebase -i".
567 return error(_("%s: Unable to write new index file"),
568 _(action_name(opts)));
570 if (!clean)
571 append_conflicts_hint(msgbuf);
573 return !clean;
576 static struct object_id *get_cache_tree_oid(void)
578 if (!active_cache_tree)
579 active_cache_tree = cache_tree();
581 if (!cache_tree_fully_valid(active_cache_tree))
582 if (cache_tree_update(&the_index, 0)) {
583 error(_("unable to update cache tree"));
584 return NULL;
587 return &active_cache_tree->oid;
590 static int is_index_unchanged(void)
592 struct object_id head_oid, *cache_tree_oid;
593 struct commit *head_commit;
595 if (!resolve_ref_unsafe("HEAD", RESOLVE_REF_READING, &head_oid, NULL))
596 return error(_("could not resolve HEAD commit"));
598 head_commit = lookup_commit(the_repository, &head_oid);
601 * If head_commit is NULL, check_commit, called from
602 * lookup_commit, would have indicated that head_commit is not
603 * a commit object already. parse_commit() will return failure
604 * without further complaints in such a case. Otherwise, if
605 * the commit is invalid, parse_commit() will complain. So
606 * there is nothing for us to say here. Just return failure.
608 if (parse_commit(head_commit))
609 return -1;
611 if (!(cache_tree_oid = get_cache_tree_oid()))
612 return -1;
614 return !oidcmp(cache_tree_oid, get_commit_tree_oid(head_commit));
617 static int write_author_script(const char *message)
619 struct strbuf buf = STRBUF_INIT;
620 const char *eol;
621 int res;
623 for (;;)
624 if (!*message || starts_with(message, "\n")) {
625 missing_author:
626 /* Missing 'author' line? */
627 unlink(rebase_path_author_script());
628 return 0;
629 } else if (skip_prefix(message, "author ", &message))
630 break;
631 else if ((eol = strchr(message, '\n')))
632 message = eol + 1;
633 else
634 goto missing_author;
636 strbuf_addstr(&buf, "GIT_AUTHOR_NAME='");
637 while (*message && *message != '\n' && *message != '\r')
638 if (skip_prefix(message, " <", &message))
639 break;
640 else if (*message != '\'')
641 strbuf_addch(&buf, *(message++));
642 else
643 strbuf_addf(&buf, "'\\%c'", *(message++));
644 strbuf_addstr(&buf, "'\nGIT_AUTHOR_EMAIL='");
645 while (*message && *message != '\n' && *message != '\r')
646 if (skip_prefix(message, "> ", &message))
647 break;
648 else if (*message != '\'')
649 strbuf_addch(&buf, *(message++));
650 else
651 strbuf_addf(&buf, "'\\%c'", *(message++));
652 strbuf_addstr(&buf, "'\nGIT_AUTHOR_DATE='@");
653 while (*message && *message != '\n' && *message != '\r')
654 if (*message != '\'')
655 strbuf_addch(&buf, *(message++));
656 else
657 strbuf_addf(&buf, "'\\%c'", *(message++));
658 strbuf_addch(&buf, '\'');
659 res = write_message(buf.buf, buf.len, rebase_path_author_script(), 1);
660 strbuf_release(&buf);
661 return res;
666 * write_author_script() used to fail to terminate the last line with a "'" and
667 * also escaped "'" incorrectly as "'\\\\''" rather than "'\\''". We check for
668 * the terminating "'" on the last line to see how "'" has been escaped in case
669 * git was upgraded while rebase was stopped.
671 static int quoting_is_broken(const char *s, size_t n)
673 /* Skip any empty lines in case the file was hand edited */
674 while (n > 0 && s[--n] == '\n')
675 ; /* empty */
676 if (n > 0 && s[n] != '\'')
677 return 1;
679 return 0;
683 * Read a list of environment variable assignments (such as the author-script
684 * file) into an environment block. Returns -1 on error, 0 otherwise.
686 static int read_env_script(struct argv_array *env)
688 struct strbuf script = STRBUF_INIT;
689 int i, count = 0, sq_bug;
690 const char *p2;
691 char *p;
693 if (strbuf_read_file(&script, rebase_path_author_script(), 256) <= 0)
694 return -1;
695 /* write_author_script() used to quote incorrectly */
696 sq_bug = quoting_is_broken(script.buf, script.len);
697 for (p = script.buf; *p; p++)
698 if (sq_bug && skip_prefix(p, "'\\\\''", &p2))
699 strbuf_splice(&script, p - script.buf, p2 - p, "'", 1);
700 else if (skip_prefix(p, "'\\''", &p2))
701 strbuf_splice(&script, p - script.buf, p2 - p, "'", 1);
702 else if (*p == '\'')
703 strbuf_splice(&script, p-- - script.buf, 1, "", 0);
704 else if (*p == '\n') {
705 *p = '\0';
706 count++;
709 for (i = 0, p = script.buf; i < count; i++) {
710 argv_array_push(env, p);
711 p += strlen(p) + 1;
714 return 0;
717 static char *get_author(const char *message)
719 size_t len;
720 const char *a;
722 a = find_commit_header(message, "author", &len);
723 if (a)
724 return xmemdupz(a, len);
726 return NULL;
729 /* Read author-script and return an ident line (author <email> timestamp) */
730 static const char *read_author_ident(struct strbuf *buf)
732 const char *keys[] = {
733 "GIT_AUTHOR_NAME=", "GIT_AUTHOR_EMAIL=", "GIT_AUTHOR_DATE="
735 struct strbuf out = STRBUF_INIT;
736 char *in, *eol;
737 const char *val[3];
738 int i = 0;
740 if (strbuf_read_file(buf, rebase_path_author_script(), 256) <= 0)
741 return NULL;
743 /* dequote values and construct ident line in-place */
744 for (in = buf->buf; i < 3 && in - buf->buf < buf->len; i++) {
745 if (!skip_prefix(in, keys[i], (const char **)&in)) {
746 warning(_("could not parse '%s' (looking for '%s')"),
747 rebase_path_author_script(), keys[i]);
748 return NULL;
751 eol = strchrnul(in, '\n');
752 *eol = '\0';
753 if (!sq_dequote(in)) {
754 warning(_("bad quoting on %s value in '%s'"),
755 keys[i], rebase_path_author_script());
756 return NULL;
758 val[i] = in;
759 in = eol + 1;
762 if (i < 3) {
763 warning(_("could not parse '%s' (looking for '%s')"),
764 rebase_path_author_script(), keys[i]);
765 return NULL;
768 /* validate date since fmt_ident() will die() on bad value */
769 if (parse_date(val[2], &out)){
770 warning(_("invalid date format '%s' in '%s'"),
771 val[2], rebase_path_author_script());
772 strbuf_release(&out);
773 return NULL;
776 strbuf_reset(&out);
777 strbuf_addstr(&out, fmt_ident(val[0], val[1], val[2], 0));
778 strbuf_swap(buf, &out);
779 strbuf_release(&out);
780 return buf->buf;
783 static const char staged_changes_advice[] =
784 N_("you have staged changes in your working tree\n"
785 "If these changes are meant to be squashed into the previous commit, run:\n"
786 "\n"
787 " git commit --amend %s\n"
788 "\n"
789 "If they are meant to go into a new commit, run:\n"
790 "\n"
791 " git commit %s\n"
792 "\n"
793 "In both cases, once you're done, continue with:\n"
794 "\n"
795 " git rebase --continue\n");
797 #define ALLOW_EMPTY (1<<0)
798 #define EDIT_MSG (1<<1)
799 #define AMEND_MSG (1<<2)
800 #define CLEANUP_MSG (1<<3)
801 #define VERIFY_MSG (1<<4)
802 #define CREATE_ROOT_COMMIT (1<<5)
805 * If we are cherry-pick, and if the merge did not result in
806 * hand-editing, we will hit this commit and inherit the original
807 * author date and name.
809 * If we are revert, or if our cherry-pick results in a hand merge,
810 * we had better say that the current user is responsible for that.
812 * An exception is when run_git_commit() is called during an
813 * interactive rebase: in that case, we will want to retain the
814 * author metadata.
816 static int run_git_commit(const char *defmsg, struct replay_opts *opts,
817 unsigned int flags)
819 struct child_process cmd = CHILD_PROCESS_INIT;
820 const char *value;
822 if ((flags & CREATE_ROOT_COMMIT) && !(flags & AMEND_MSG)) {
823 struct strbuf msg = STRBUF_INIT, script = STRBUF_INIT;
824 const char *author = NULL;
825 struct object_id root_commit, *cache_tree_oid;
826 int res = 0;
828 if (is_rebase_i(opts)) {
829 author = read_author_ident(&script);
830 if (!author) {
831 strbuf_release(&script);
832 return -1;
836 if (!defmsg)
837 BUG("root commit without message");
839 if (!(cache_tree_oid = get_cache_tree_oid()))
840 res = -1;
842 if (!res)
843 res = strbuf_read_file(&msg, defmsg, 0);
845 if (res <= 0)
846 res = error_errno(_("could not read '%s'"), defmsg);
847 else
848 res = commit_tree(msg.buf, msg.len, cache_tree_oid,
849 NULL, &root_commit, author,
850 opts->gpg_sign);
852 strbuf_release(&msg);
853 strbuf_release(&script);
854 if (!res) {
855 update_ref(NULL, "CHERRY_PICK_HEAD", &root_commit, NULL,
856 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR);
857 res = update_ref(NULL, "HEAD", &root_commit, NULL, 0,
858 UPDATE_REFS_MSG_ON_ERR);
860 return res < 0 ? error(_("writing root commit")) : 0;
863 cmd.git_cmd = 1;
865 if (is_rebase_i(opts)) {
866 if (!(flags & EDIT_MSG)) {
867 cmd.stdout_to_stderr = 1;
868 cmd.err = -1;
871 if (read_env_script(&cmd.env_array)) {
872 const char *gpg_opt = gpg_sign_opt_quoted(opts);
874 return error(_(staged_changes_advice),
875 gpg_opt, gpg_opt);
879 argv_array_push(&cmd.args, "commit");
881 if (!(flags & VERIFY_MSG))
882 argv_array_push(&cmd.args, "-n");
883 if ((flags & AMEND_MSG))
884 argv_array_push(&cmd.args, "--amend");
885 if (opts->gpg_sign)
886 argv_array_pushf(&cmd.args, "-S%s", opts->gpg_sign);
887 if (defmsg)
888 argv_array_pushl(&cmd.args, "-F", defmsg, NULL);
889 else if (!(flags & EDIT_MSG))
890 argv_array_pushl(&cmd.args, "-C", "HEAD", NULL);
891 if ((flags & CLEANUP_MSG))
892 argv_array_push(&cmd.args, "--cleanup=strip");
893 if ((flags & EDIT_MSG))
894 argv_array_push(&cmd.args, "-e");
895 else if (!(flags & CLEANUP_MSG) &&
896 !opts->signoff && !opts->record_origin &&
897 git_config_get_value("commit.cleanup", &value))
898 argv_array_push(&cmd.args, "--cleanup=verbatim");
900 if ((flags & ALLOW_EMPTY))
901 argv_array_push(&cmd.args, "--allow-empty");
903 if (opts->allow_empty_message)
904 argv_array_push(&cmd.args, "--allow-empty-message");
906 if (cmd.err == -1) {
907 /* hide stderr on success */
908 struct strbuf buf = STRBUF_INIT;
909 int rc = pipe_command(&cmd,
910 NULL, 0,
911 /* stdout is already redirected */
912 NULL, 0,
913 &buf, 0);
914 if (rc)
915 fputs(buf.buf, stderr);
916 strbuf_release(&buf);
917 return rc;
920 return run_command(&cmd);
923 static int rest_is_empty(const struct strbuf *sb, int start)
925 int i, eol;
926 const char *nl;
928 /* Check if the rest is just whitespace and Signed-off-by's. */
929 for (i = start; i < sb->len; i++) {
930 nl = memchr(sb->buf + i, '\n', sb->len - i);
931 if (nl)
932 eol = nl - sb->buf;
933 else
934 eol = sb->len;
936 if (strlen(sign_off_header) <= eol - i &&
937 starts_with(sb->buf + i, sign_off_header)) {
938 i = eol;
939 continue;
941 while (i < eol)
942 if (!isspace(sb->buf[i++]))
943 return 0;
946 return 1;
950 * Find out if the message in the strbuf contains only whitespace and
951 * Signed-off-by lines.
953 int message_is_empty(const struct strbuf *sb,
954 enum commit_msg_cleanup_mode cleanup_mode)
956 if (cleanup_mode == COMMIT_MSG_CLEANUP_NONE && sb->len)
957 return 0;
958 return rest_is_empty(sb, 0);
962 * See if the user edited the message in the editor or left what
963 * was in the template intact
965 int template_untouched(const struct strbuf *sb, const char *template_file,
966 enum commit_msg_cleanup_mode cleanup_mode)
968 struct strbuf tmpl = STRBUF_INIT;
969 const char *start;
971 if (cleanup_mode == COMMIT_MSG_CLEANUP_NONE && sb->len)
972 return 0;
974 if (!template_file || strbuf_read_file(&tmpl, template_file, 0) <= 0)
975 return 0;
977 strbuf_stripspace(&tmpl, cleanup_mode == COMMIT_MSG_CLEANUP_ALL);
978 if (!skip_prefix(sb->buf, tmpl.buf, &start))
979 start = sb->buf;
980 strbuf_release(&tmpl);
981 return rest_is_empty(sb, start - sb->buf);
984 int update_head_with_reflog(const struct commit *old_head,
985 const struct object_id *new_head,
986 const char *action, const struct strbuf *msg,
987 struct strbuf *err)
989 struct ref_transaction *transaction;
990 struct strbuf sb = STRBUF_INIT;
991 const char *nl;
992 int ret = 0;
994 if (action) {
995 strbuf_addstr(&sb, action);
996 strbuf_addstr(&sb, ": ");
999 nl = strchr(msg->buf, '\n');
1000 if (nl) {
1001 strbuf_add(&sb, msg->buf, nl + 1 - msg->buf);
1002 } else {
1003 strbuf_addbuf(&sb, msg);
1004 strbuf_addch(&sb, '\n');
1007 transaction = ref_transaction_begin(err);
1008 if (!transaction ||
1009 ref_transaction_update(transaction, "HEAD", new_head,
1010 old_head ? &old_head->object.oid : &null_oid,
1011 0, sb.buf, err) ||
1012 ref_transaction_commit(transaction, err)) {
1013 ret = -1;
1015 ref_transaction_free(transaction);
1016 strbuf_release(&sb);
1018 return ret;
1021 static int run_rewrite_hook(const struct object_id *oldoid,
1022 const struct object_id *newoid)
1024 struct child_process proc = CHILD_PROCESS_INIT;
1025 const char *argv[3];
1026 int code;
1027 struct strbuf sb = STRBUF_INIT;
1029 argv[0] = find_hook("post-rewrite");
1030 if (!argv[0])
1031 return 0;
1033 argv[1] = "amend";
1034 argv[2] = NULL;
1036 proc.argv = argv;
1037 proc.in = -1;
1038 proc.stdout_to_stderr = 1;
1040 code = start_command(&proc);
1041 if (code)
1042 return code;
1043 strbuf_addf(&sb, "%s %s\n", oid_to_hex(oldoid), oid_to_hex(newoid));
1044 sigchain_push(SIGPIPE, SIG_IGN);
1045 write_in_full(proc.in, sb.buf, sb.len);
1046 close(proc.in);
1047 strbuf_release(&sb);
1048 sigchain_pop(SIGPIPE);
1049 return finish_command(&proc);
1052 void commit_post_rewrite(const struct commit *old_head,
1053 const struct object_id *new_head)
1055 struct notes_rewrite_cfg *cfg;
1057 cfg = init_copy_notes_for_rewrite("amend");
1058 if (cfg) {
1059 /* we are amending, so old_head is not NULL */
1060 copy_note_for_rewrite(cfg, &old_head->object.oid, new_head);
1061 finish_copy_notes_for_rewrite(cfg, "Notes added by 'git commit --amend'");
1063 run_rewrite_hook(&old_head->object.oid, new_head);
1066 static int run_prepare_commit_msg_hook(struct strbuf *msg, const char *commit)
1068 struct argv_array hook_env = ARGV_ARRAY_INIT;
1069 int ret;
1070 const char *name;
1072 name = git_path_commit_editmsg();
1073 if (write_message(msg->buf, msg->len, name, 0))
1074 return -1;
1076 argv_array_pushf(&hook_env, "GIT_INDEX_FILE=%s", get_index_file());
1077 argv_array_push(&hook_env, "GIT_EDITOR=:");
1078 if (commit)
1079 ret = run_hook_le(hook_env.argv, "prepare-commit-msg", name,
1080 "commit", commit, NULL);
1081 else
1082 ret = run_hook_le(hook_env.argv, "prepare-commit-msg", name,
1083 "message", NULL);
1084 if (ret)
1085 ret = error(_("'prepare-commit-msg' hook failed"));
1086 argv_array_clear(&hook_env);
1088 return ret;
1091 static const char implicit_ident_advice_noconfig[] =
1092 N_("Your name and email address were configured automatically based\n"
1093 "on your username and hostname. Please check that they are accurate.\n"
1094 "You can suppress this message by setting them explicitly. Run the\n"
1095 "following command and follow the instructions in your editor to edit\n"
1096 "your configuration file:\n"
1097 "\n"
1098 " git config --global --edit\n"
1099 "\n"
1100 "After doing this, you may fix the identity used for this commit with:\n"
1101 "\n"
1102 " git commit --amend --reset-author\n");
1104 static const char implicit_ident_advice_config[] =
1105 N_("Your name and email address were configured automatically based\n"
1106 "on your username and hostname. Please check that they are accurate.\n"
1107 "You can suppress this message by setting them explicitly:\n"
1108 "\n"
1109 " git config --global user.name \"Your Name\"\n"
1110 " git config --global user.email you@example.com\n"
1111 "\n"
1112 "After doing this, you may fix the identity used for this commit with:\n"
1113 "\n"
1114 " git commit --amend --reset-author\n");
1116 static const char *implicit_ident_advice(void)
1118 char *user_config = expand_user_path("~/.gitconfig", 0);
1119 char *xdg_config = xdg_config_home("config");
1120 int config_exists = file_exists(user_config) || file_exists(xdg_config);
1122 free(user_config);
1123 free(xdg_config);
1125 if (config_exists)
1126 return _(implicit_ident_advice_config);
1127 else
1128 return _(implicit_ident_advice_noconfig);
1132 void print_commit_summary(const char *prefix, const struct object_id *oid,
1133 unsigned int flags)
1135 struct rev_info rev;
1136 struct commit *commit;
1137 struct strbuf format = STRBUF_INIT;
1138 const char *head;
1139 struct pretty_print_context pctx = {0};
1140 struct strbuf author_ident = STRBUF_INIT;
1141 struct strbuf committer_ident = STRBUF_INIT;
1143 commit = lookup_commit(the_repository, oid);
1144 if (!commit)
1145 die(_("couldn't look up newly created commit"));
1146 if (parse_commit(commit))
1147 die(_("could not parse newly created commit"));
1149 strbuf_addstr(&format, "format:%h] %s");
1151 format_commit_message(commit, "%an <%ae>", &author_ident, &pctx);
1152 format_commit_message(commit, "%cn <%ce>", &committer_ident, &pctx);
1153 if (strbuf_cmp(&author_ident, &committer_ident)) {
1154 strbuf_addstr(&format, "\n Author: ");
1155 strbuf_addbuf_percentquote(&format, &author_ident);
1157 if (flags & SUMMARY_SHOW_AUTHOR_DATE) {
1158 struct strbuf date = STRBUF_INIT;
1160 format_commit_message(commit, "%ad", &date, &pctx);
1161 strbuf_addstr(&format, "\n Date: ");
1162 strbuf_addbuf_percentquote(&format, &date);
1163 strbuf_release(&date);
1165 if (!committer_ident_sufficiently_given()) {
1166 strbuf_addstr(&format, "\n Committer: ");
1167 strbuf_addbuf_percentquote(&format, &committer_ident);
1168 if (advice_implicit_identity) {
1169 strbuf_addch(&format, '\n');
1170 strbuf_addstr(&format, implicit_ident_advice());
1173 strbuf_release(&author_ident);
1174 strbuf_release(&committer_ident);
1176 init_revisions(&rev, prefix);
1177 setup_revisions(0, NULL, &rev, NULL);
1179 rev.diff = 1;
1180 rev.diffopt.output_format =
1181 DIFF_FORMAT_SHORTSTAT | DIFF_FORMAT_SUMMARY;
1183 rev.verbose_header = 1;
1184 rev.show_root_diff = 1;
1185 get_commit_format(format.buf, &rev);
1186 rev.always_show_header = 0;
1187 rev.diffopt.detect_rename = DIFF_DETECT_RENAME;
1188 rev.diffopt.break_opt = 0;
1189 diff_setup_done(&rev.diffopt);
1191 head = resolve_ref_unsafe("HEAD", 0, NULL, NULL);
1192 if (!head)
1193 die_errno(_("unable to resolve HEAD after creating commit"));
1194 if (!strcmp(head, "HEAD"))
1195 head = _("detached HEAD");
1196 else
1197 skip_prefix(head, "refs/heads/", &head);
1198 printf("[%s%s ", head, (flags & SUMMARY_INITIAL_COMMIT) ?
1199 _(" (root-commit)") : "");
1201 if (!log_tree_commit(&rev, commit)) {
1202 rev.always_show_header = 1;
1203 rev.use_terminator = 1;
1204 log_tree_commit(&rev, commit);
1207 strbuf_release(&format);
1210 static int parse_head(struct commit **head)
1212 struct commit *current_head;
1213 struct object_id oid;
1215 if (get_oid("HEAD", &oid)) {
1216 current_head = NULL;
1217 } else {
1218 current_head = lookup_commit_reference(the_repository, &oid);
1219 if (!current_head)
1220 return error(_("could not parse HEAD"));
1221 if (oidcmp(&oid, &current_head->object.oid)) {
1222 warning(_("HEAD %s is not a commit!"),
1223 oid_to_hex(&oid));
1225 if (parse_commit(current_head))
1226 return error(_("could not parse HEAD commit"));
1228 *head = current_head;
1230 return 0;
1234 * Try to commit without forking 'git commit'. In some cases we need
1235 * to run 'git commit' to display an error message
1237 * Returns:
1238 * -1 - error unable to commit
1239 * 0 - success
1240 * 1 - run 'git commit'
1242 static int try_to_commit(struct strbuf *msg, const char *author,
1243 struct replay_opts *opts, unsigned int flags,
1244 struct object_id *oid)
1246 struct object_id tree;
1247 struct commit *current_head;
1248 struct commit_list *parents = NULL;
1249 struct commit_extra_header *extra = NULL;
1250 struct strbuf err = STRBUF_INIT;
1251 struct strbuf commit_msg = STRBUF_INIT;
1252 char *amend_author = NULL;
1253 const char *hook_commit = NULL;
1254 enum commit_msg_cleanup_mode cleanup;
1255 int res = 0;
1257 if (parse_head(&current_head))
1258 return -1;
1260 if (flags & AMEND_MSG) {
1261 const char *exclude_gpgsig[] = { "gpgsig", NULL };
1262 const char *out_enc = get_commit_output_encoding();
1263 const char *message = logmsg_reencode(current_head, NULL,
1264 out_enc);
1266 if (!msg) {
1267 const char *orig_message = NULL;
1269 find_commit_subject(message, &orig_message);
1270 msg = &commit_msg;
1271 strbuf_addstr(msg, orig_message);
1272 hook_commit = "HEAD";
1274 author = amend_author = get_author(message);
1275 unuse_commit_buffer(current_head, message);
1276 if (!author) {
1277 res = error(_("unable to parse commit author"));
1278 goto out;
1280 parents = copy_commit_list(current_head->parents);
1281 extra = read_commit_extra_headers(current_head, exclude_gpgsig);
1282 } else if (current_head) {
1283 commit_list_insert(current_head, &parents);
1286 if (write_index_as_tree(&tree, &the_index, get_index_file(), 0, NULL)) {
1287 res = error(_("git write-tree failed to write a tree"));
1288 goto out;
1291 if (!(flags & ALLOW_EMPTY) && !oidcmp(current_head ?
1292 get_commit_tree_oid(current_head) :
1293 the_hash_algo->empty_tree, &tree)) {
1294 res = 1; /* run 'git commit' to display error message */
1295 goto out;
1298 if (find_hook("prepare-commit-msg")) {
1299 res = run_prepare_commit_msg_hook(msg, hook_commit);
1300 if (res)
1301 goto out;
1302 if (strbuf_read_file(&commit_msg, git_path_commit_editmsg(),
1303 2048) < 0) {
1304 res = error_errno(_("unable to read commit message "
1305 "from '%s'"),
1306 git_path_commit_editmsg());
1307 goto out;
1309 msg = &commit_msg;
1312 cleanup = (flags & CLEANUP_MSG) ? COMMIT_MSG_CLEANUP_ALL :
1313 opts->default_msg_cleanup;
1315 if (cleanup != COMMIT_MSG_CLEANUP_NONE)
1316 strbuf_stripspace(msg, cleanup == COMMIT_MSG_CLEANUP_ALL);
1317 if (!opts->allow_empty_message && message_is_empty(msg, cleanup)) {
1318 res = 1; /* run 'git commit' to display error message */
1319 goto out;
1322 reset_ident_date();
1324 if (commit_tree_extended(msg->buf, msg->len, &tree, parents,
1325 oid, author, opts->gpg_sign, extra)) {
1326 res = error(_("failed to write commit object"));
1327 goto out;
1330 if (update_head_with_reflog(current_head, oid,
1331 getenv("GIT_REFLOG_ACTION"), msg, &err)) {
1332 res = error("%s", err.buf);
1333 goto out;
1336 if (flags & AMEND_MSG)
1337 commit_post_rewrite(current_head, oid);
1339 out:
1340 free_commit_extra_headers(extra);
1341 strbuf_release(&err);
1342 strbuf_release(&commit_msg);
1343 free(amend_author);
1345 return res;
1348 static int do_commit(const char *msg_file, const char *author,
1349 struct replay_opts *opts, unsigned int flags)
1351 int res = 1;
1353 if (!(flags & EDIT_MSG) && !(flags & VERIFY_MSG) &&
1354 !(flags & CREATE_ROOT_COMMIT)) {
1355 struct object_id oid;
1356 struct strbuf sb = STRBUF_INIT;
1358 if (msg_file && strbuf_read_file(&sb, msg_file, 2048) < 0)
1359 return error_errno(_("unable to read commit message "
1360 "from '%s'"),
1361 msg_file);
1363 res = try_to_commit(msg_file ? &sb : NULL, author, opts, flags,
1364 &oid);
1365 strbuf_release(&sb);
1366 if (!res) {
1367 unlink(git_path_cherry_pick_head(the_repository));
1368 unlink(git_path_merge_msg(the_repository));
1369 if (!is_rebase_i(opts))
1370 print_commit_summary(NULL, &oid,
1371 SUMMARY_SHOW_AUTHOR_DATE);
1372 return res;
1375 if (res == 1)
1376 return run_git_commit(msg_file, opts, flags);
1378 return res;
1381 static int is_original_commit_empty(struct commit *commit)
1383 const struct object_id *ptree_oid;
1385 if (parse_commit(commit))
1386 return error(_("could not parse commit %s"),
1387 oid_to_hex(&commit->object.oid));
1388 if (commit->parents) {
1389 struct commit *parent = commit->parents->item;
1390 if (parse_commit(parent))
1391 return error(_("could not parse parent commit %s"),
1392 oid_to_hex(&parent->object.oid));
1393 ptree_oid = get_commit_tree_oid(parent);
1394 } else {
1395 ptree_oid = the_hash_algo->empty_tree; /* commit is root */
1398 return !oidcmp(ptree_oid, get_commit_tree_oid(commit));
1402 * Do we run "git commit" with "--allow-empty"?
1404 static int allow_empty(struct replay_opts *opts, struct commit *commit)
1406 int index_unchanged, empty_commit;
1409 * Three cases:
1411 * (1) we do not allow empty at all and error out.
1413 * (2) we allow ones that were initially empty, but
1414 * forbid the ones that become empty;
1416 * (3) we allow both.
1418 if (!opts->allow_empty)
1419 return 0; /* let "git commit" barf as necessary */
1421 index_unchanged = is_index_unchanged();
1422 if (index_unchanged < 0)
1423 return index_unchanged;
1424 if (!index_unchanged)
1425 return 0; /* we do not have to say --allow-empty */
1427 if (opts->keep_redundant_commits)
1428 return 1;
1430 empty_commit = is_original_commit_empty(commit);
1431 if (empty_commit < 0)
1432 return empty_commit;
1433 if (!empty_commit)
1434 return 0;
1435 else
1436 return 1;
1440 * Note that ordering matters in this enum. Not only must it match the mapping
1441 * below, it is also divided into several sections that matter. When adding
1442 * new commands, make sure you add it in the right section.
1444 enum todo_command {
1445 /* commands that handle commits */
1446 TODO_PICK = 0,
1447 TODO_REVERT,
1448 TODO_EDIT,
1449 TODO_REWORD,
1450 TODO_FIXUP,
1451 TODO_SQUASH,
1452 /* commands that do something else than handling a single commit */
1453 TODO_EXEC,
1454 TODO_LABEL,
1455 TODO_RESET,
1456 TODO_MERGE,
1457 /* commands that do nothing but are counted for reporting progress */
1458 TODO_NOOP,
1459 TODO_DROP,
1460 /* comments (not counted for reporting progress) */
1461 TODO_COMMENT
1464 static struct {
1465 char c;
1466 const char *str;
1467 } todo_command_info[] = {
1468 { 'p', "pick" },
1469 { 0, "revert" },
1470 { 'e', "edit" },
1471 { 'r', "reword" },
1472 { 'f', "fixup" },
1473 { 's', "squash" },
1474 { 'x', "exec" },
1475 { 'l', "label" },
1476 { 't', "reset" },
1477 { 'm', "merge" },
1478 { 0, "noop" },
1479 { 'd', "drop" },
1480 { 0, NULL }
1483 static const char *command_to_string(const enum todo_command command)
1485 if (command < TODO_COMMENT)
1486 return todo_command_info[command].str;
1487 die(_("unknown command: %d"), command);
1490 static char command_to_char(const enum todo_command command)
1492 if (command < TODO_COMMENT && todo_command_info[command].c)
1493 return todo_command_info[command].c;
1494 return comment_line_char;
1497 static int is_noop(const enum todo_command command)
1499 return TODO_NOOP <= command;
1502 static int is_fixup(enum todo_command command)
1504 return command == TODO_FIXUP || command == TODO_SQUASH;
1507 /* Does this command create a (non-merge) commit? */
1508 static int is_pick_or_similar(enum todo_command command)
1510 switch (command) {
1511 case TODO_PICK:
1512 case TODO_REVERT:
1513 case TODO_EDIT:
1514 case TODO_REWORD:
1515 case TODO_FIXUP:
1516 case TODO_SQUASH:
1517 return 1;
1518 default:
1519 return 0;
1523 static int update_squash_messages(enum todo_command command,
1524 struct commit *commit, struct replay_opts *opts)
1526 struct strbuf buf = STRBUF_INIT;
1527 int res;
1528 const char *message, *body;
1530 if (opts->current_fixup_count > 0) {
1531 struct strbuf header = STRBUF_INIT;
1532 char *eol;
1534 if (strbuf_read_file(&buf, rebase_path_squash_msg(), 9) <= 0)
1535 return error(_("could not read '%s'"),
1536 rebase_path_squash_msg());
1538 eol = buf.buf[0] != comment_line_char ?
1539 buf.buf : strchrnul(buf.buf, '\n');
1541 strbuf_addf(&header, "%c ", comment_line_char);
1542 strbuf_addf(&header, _("This is a combination of %d commits."),
1543 opts->current_fixup_count + 2);
1544 strbuf_splice(&buf, 0, eol - buf.buf, header.buf, header.len);
1545 strbuf_release(&header);
1546 } else {
1547 struct object_id head;
1548 struct commit *head_commit;
1549 const char *head_message, *body;
1551 if (get_oid("HEAD", &head))
1552 return error(_("need a HEAD to fixup"));
1553 if (!(head_commit = lookup_commit_reference(the_repository, &head)))
1554 return error(_("could not read HEAD"));
1555 if (!(head_message = get_commit_buffer(head_commit, NULL)))
1556 return error(_("could not read HEAD's commit message"));
1558 find_commit_subject(head_message, &body);
1559 if (write_message(body, strlen(body),
1560 rebase_path_fixup_msg(), 0)) {
1561 unuse_commit_buffer(head_commit, head_message);
1562 return error(_("cannot write '%s'"),
1563 rebase_path_fixup_msg());
1566 strbuf_addf(&buf, "%c ", comment_line_char);
1567 strbuf_addf(&buf, _("This is a combination of %d commits."), 2);
1568 strbuf_addf(&buf, "\n%c ", comment_line_char);
1569 strbuf_addstr(&buf, _("This is the 1st commit message:"));
1570 strbuf_addstr(&buf, "\n\n");
1571 strbuf_addstr(&buf, body);
1573 unuse_commit_buffer(head_commit, head_message);
1576 if (!(message = get_commit_buffer(commit, NULL)))
1577 return error(_("could not read commit message of %s"),
1578 oid_to_hex(&commit->object.oid));
1579 find_commit_subject(message, &body);
1581 if (command == TODO_SQUASH) {
1582 unlink(rebase_path_fixup_msg());
1583 strbuf_addf(&buf, "\n%c ", comment_line_char);
1584 strbuf_addf(&buf, _("This is the commit message #%d:"),
1585 ++opts->current_fixup_count + 1);
1586 strbuf_addstr(&buf, "\n\n");
1587 strbuf_addstr(&buf, body);
1588 } else if (command == TODO_FIXUP) {
1589 strbuf_addf(&buf, "\n%c ", comment_line_char);
1590 strbuf_addf(&buf, _("The commit message #%d will be skipped:"),
1591 ++opts->current_fixup_count + 1);
1592 strbuf_addstr(&buf, "\n\n");
1593 strbuf_add_commented_lines(&buf, body, strlen(body));
1594 } else
1595 return error(_("unknown command: %d"), command);
1596 unuse_commit_buffer(commit, message);
1598 res = write_message(buf.buf, buf.len, rebase_path_squash_msg(), 0);
1599 strbuf_release(&buf);
1601 if (!res) {
1602 strbuf_addf(&opts->current_fixups, "%s%s %s",
1603 opts->current_fixups.len ? "\n" : "",
1604 command_to_string(command),
1605 oid_to_hex(&commit->object.oid));
1606 res = write_message(opts->current_fixups.buf,
1607 opts->current_fixups.len,
1608 rebase_path_current_fixups(), 0);
1611 return res;
1614 static void flush_rewritten_pending(void) {
1615 struct strbuf buf = STRBUF_INIT;
1616 struct object_id newoid;
1617 FILE *out;
1619 if (strbuf_read_file(&buf, rebase_path_rewritten_pending(), (GIT_MAX_HEXSZ + 1) * 2) > 0 &&
1620 !get_oid("HEAD", &newoid) &&
1621 (out = fopen_or_warn(rebase_path_rewritten_list(), "a"))) {
1622 char *bol = buf.buf, *eol;
1624 while (*bol) {
1625 eol = strchrnul(bol, '\n');
1626 fprintf(out, "%.*s %s\n", (int)(eol - bol),
1627 bol, oid_to_hex(&newoid));
1628 if (!*eol)
1629 break;
1630 bol = eol + 1;
1632 fclose(out);
1633 unlink(rebase_path_rewritten_pending());
1635 strbuf_release(&buf);
1638 static void record_in_rewritten(struct object_id *oid,
1639 enum todo_command next_command) {
1640 FILE *out = fopen_or_warn(rebase_path_rewritten_pending(), "a");
1642 if (!out)
1643 return;
1645 fprintf(out, "%s\n", oid_to_hex(oid));
1646 fclose(out);
1648 if (!is_fixup(next_command))
1649 flush_rewritten_pending();
1652 static int do_pick_commit(enum todo_command command, struct commit *commit,
1653 struct replay_opts *opts, int final_fixup)
1655 unsigned int flags = opts->edit ? EDIT_MSG : 0;
1656 const char *msg_file = opts->edit ? NULL : git_path_merge_msg(the_repository);
1657 struct object_id head;
1658 struct commit *base, *next, *parent;
1659 const char *base_label, *next_label;
1660 char *author = NULL;
1661 struct commit_message msg = { NULL, NULL, NULL, NULL };
1662 struct strbuf msgbuf = STRBUF_INIT;
1663 int res, unborn = 0, allow;
1665 if (opts->no_commit) {
1667 * We do not intend to commit immediately. We just want to
1668 * merge the differences in, so let's compute the tree
1669 * that represents the "current" state for merge-recursive
1670 * to work on.
1672 if (write_index_as_tree(&head, &the_index, get_index_file(), 0, NULL))
1673 return error(_("your index file is unmerged."));
1674 } else {
1675 unborn = get_oid("HEAD", &head);
1676 /* Do we want to generate a root commit? */
1677 if (is_pick_or_similar(command) && opts->have_squash_onto &&
1678 !oidcmp(&head, &opts->squash_onto)) {
1679 if (is_fixup(command))
1680 return error(_("cannot fixup root commit"));
1681 flags |= CREATE_ROOT_COMMIT;
1682 unborn = 1;
1683 } else if (unborn)
1684 oidcpy(&head, the_hash_algo->empty_tree);
1685 if (index_differs_from(unborn ? empty_tree_oid_hex() : "HEAD",
1686 NULL, 0))
1687 return error_dirty_index(opts);
1689 discard_cache();
1691 if (!commit->parents)
1692 parent = NULL;
1693 else if (commit->parents->next) {
1694 /* Reverting or cherry-picking a merge commit */
1695 int cnt;
1696 struct commit_list *p;
1698 if (!opts->mainline)
1699 return error(_("commit %s is a merge but no -m option was given."),
1700 oid_to_hex(&commit->object.oid));
1702 for (cnt = 1, p = commit->parents;
1703 cnt != opts->mainline && p;
1704 cnt++)
1705 p = p->next;
1706 if (cnt != opts->mainline || !p)
1707 return error(_("commit %s does not have parent %d"),
1708 oid_to_hex(&commit->object.oid), opts->mainline);
1709 parent = p->item;
1710 } else if (0 < opts->mainline)
1711 return error(_("mainline was specified but commit %s is not a merge."),
1712 oid_to_hex(&commit->object.oid));
1713 else
1714 parent = commit->parents->item;
1716 if (get_message(commit, &msg) != 0)
1717 return error(_("cannot get commit message for %s"),
1718 oid_to_hex(&commit->object.oid));
1720 if (opts->allow_ff && !is_fixup(command) &&
1721 ((parent && !oidcmp(&parent->object.oid, &head)) ||
1722 (!parent && unborn))) {
1723 if (is_rebase_i(opts))
1724 write_author_script(msg.message);
1725 res = fast_forward_to(&commit->object.oid, &head, unborn,
1726 opts);
1727 if (res || command != TODO_REWORD)
1728 goto leave;
1729 flags |= EDIT_MSG | AMEND_MSG | VERIFY_MSG;
1730 msg_file = NULL;
1731 goto fast_forward_edit;
1733 if (parent && parse_commit(parent) < 0)
1734 /* TRANSLATORS: The first %s will be a "todo" command like
1735 "revert" or "pick", the second %s a SHA1. */
1736 return error(_("%s: cannot parse parent commit %s"),
1737 command_to_string(command),
1738 oid_to_hex(&parent->object.oid));
1741 * "commit" is an existing commit. We would want to apply
1742 * the difference it introduces since its first parent "prev"
1743 * on top of the current HEAD if we are cherry-pick. Or the
1744 * reverse of it if we are revert.
1747 if (command == TODO_REVERT) {
1748 base = commit;
1749 base_label = msg.label;
1750 next = parent;
1751 next_label = msg.parent_label;
1752 strbuf_addstr(&msgbuf, "Revert \"");
1753 strbuf_addstr(&msgbuf, msg.subject);
1754 strbuf_addstr(&msgbuf, "\"\n\nThis reverts commit ");
1755 strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1757 if (commit->parents && commit->parents->next) {
1758 strbuf_addstr(&msgbuf, ", reversing\nchanges made to ");
1759 strbuf_addstr(&msgbuf, oid_to_hex(&parent->object.oid));
1761 strbuf_addstr(&msgbuf, ".\n");
1762 } else {
1763 const char *p;
1765 base = parent;
1766 base_label = msg.parent_label;
1767 next = commit;
1768 next_label = msg.label;
1770 /* Append the commit log message to msgbuf. */
1771 if (find_commit_subject(msg.message, &p))
1772 strbuf_addstr(&msgbuf, p);
1774 if (opts->record_origin) {
1775 strbuf_complete_line(&msgbuf);
1776 if (!has_conforming_footer(&msgbuf, NULL, 0))
1777 strbuf_addch(&msgbuf, '\n');
1778 strbuf_addstr(&msgbuf, cherry_picked_prefix);
1779 strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1780 strbuf_addstr(&msgbuf, ")\n");
1782 if (!is_fixup(command))
1783 author = get_author(msg.message);
1786 if (command == TODO_REWORD)
1787 flags |= EDIT_MSG | VERIFY_MSG;
1788 else if (is_fixup(command)) {
1789 if (update_squash_messages(command, commit, opts))
1790 return -1;
1791 flags |= AMEND_MSG;
1792 if (!final_fixup)
1793 msg_file = rebase_path_squash_msg();
1794 else if (file_exists(rebase_path_fixup_msg())) {
1795 flags |= CLEANUP_MSG;
1796 msg_file = rebase_path_fixup_msg();
1797 } else {
1798 const char *dest = git_path_squash_msg(the_repository);
1799 unlink(dest);
1800 if (copy_file(dest, rebase_path_squash_msg(), 0666))
1801 return error(_("could not rename '%s' to '%s'"),
1802 rebase_path_squash_msg(), dest);
1803 unlink(git_path_merge_msg(the_repository));
1804 msg_file = dest;
1805 flags |= EDIT_MSG;
1809 if (opts->signoff && !is_fixup(command))
1810 append_signoff(&msgbuf, 0, 0);
1812 if (is_rebase_i(opts) && write_author_script(msg.message) < 0)
1813 res = -1;
1814 else if (!opts->strategy || !strcmp(opts->strategy, "recursive") || command == TODO_REVERT) {
1815 res = do_recursive_merge(base, next, base_label, next_label,
1816 &head, &msgbuf, opts);
1817 if (res < 0)
1818 goto leave;
1820 res |= write_message(msgbuf.buf, msgbuf.len,
1821 git_path_merge_msg(the_repository), 0);
1822 } else {
1823 struct commit_list *common = NULL;
1824 struct commit_list *remotes = NULL;
1826 res = write_message(msgbuf.buf, msgbuf.len,
1827 git_path_merge_msg(the_repository), 0);
1829 commit_list_insert(base, &common);
1830 commit_list_insert(next, &remotes);
1831 res |= try_merge_command(opts->strategy,
1832 opts->xopts_nr, (const char **)opts->xopts,
1833 common, oid_to_hex(&head), remotes);
1834 free_commit_list(common);
1835 free_commit_list(remotes);
1837 strbuf_release(&msgbuf);
1840 * If the merge was clean or if it failed due to conflict, we write
1841 * CHERRY_PICK_HEAD for the subsequent invocation of commit to use.
1842 * However, if the merge did not even start, then we don't want to
1843 * write it at all.
1845 if (command == TODO_PICK && !opts->no_commit && (res == 0 || res == 1) &&
1846 update_ref(NULL, "CHERRY_PICK_HEAD", &commit->object.oid, NULL,
1847 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1848 res = -1;
1849 if (command == TODO_REVERT && ((opts->no_commit && res == 0) || res == 1) &&
1850 update_ref(NULL, "REVERT_HEAD", &commit->object.oid, NULL,
1851 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1852 res = -1;
1854 if (res) {
1855 error(command == TODO_REVERT
1856 ? _("could not revert %s... %s")
1857 : _("could not apply %s... %s"),
1858 short_commit_name(commit), msg.subject);
1859 print_advice(res == 1, opts);
1860 rerere(opts->allow_rerere_auto);
1861 goto leave;
1864 allow = allow_empty(opts, commit);
1865 if (allow < 0) {
1866 res = allow;
1867 goto leave;
1868 } else if (allow)
1869 flags |= ALLOW_EMPTY;
1870 if (!opts->no_commit) {
1871 fast_forward_edit:
1872 if (author || command == TODO_REVERT || (flags & AMEND_MSG))
1873 res = do_commit(msg_file, author, opts, flags);
1874 else
1875 res = error(_("unable to parse commit author"));
1878 if (!res && final_fixup) {
1879 unlink(rebase_path_fixup_msg());
1880 unlink(rebase_path_squash_msg());
1881 unlink(rebase_path_current_fixups());
1882 strbuf_reset(&opts->current_fixups);
1883 opts->current_fixup_count = 0;
1886 leave:
1887 free_message(commit, &msg);
1888 free(author);
1889 update_abort_safety_file();
1891 return res;
1894 static int prepare_revs(struct replay_opts *opts)
1897 * picking (but not reverting) ranges (but not individual revisions)
1898 * should be done in reverse
1900 if (opts->action == REPLAY_PICK && !opts->revs->no_walk)
1901 opts->revs->reverse ^= 1;
1903 if (prepare_revision_walk(opts->revs))
1904 return error(_("revision walk setup failed"));
1906 return 0;
1909 static int read_and_refresh_cache(struct replay_opts *opts)
1911 struct lock_file index_lock = LOCK_INIT;
1912 int index_fd = hold_locked_index(&index_lock, 0);
1913 if (read_index_preload(&the_index, NULL) < 0) {
1914 rollback_lock_file(&index_lock);
1915 return error(_("git %s: failed to read the index"),
1916 _(action_name(opts)));
1918 refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED, NULL, NULL, NULL);
1919 if (index_fd >= 0) {
1920 if (write_locked_index(&the_index, &index_lock,
1921 COMMIT_LOCK | SKIP_IF_UNCHANGED)) {
1922 return error(_("git %s: failed to refresh the index"),
1923 _(action_name(opts)));
1926 return 0;
1929 enum todo_item_flags {
1930 TODO_EDIT_MERGE_MSG = 1
1933 struct todo_item {
1934 enum todo_command command;
1935 struct commit *commit;
1936 unsigned int flags;
1937 const char *arg;
1938 int arg_len;
1939 size_t offset_in_buf;
1942 struct todo_list {
1943 struct strbuf buf;
1944 struct todo_item *items;
1945 int nr, alloc, current;
1946 int done_nr, total_nr;
1947 struct stat_data stat;
1950 #define TODO_LIST_INIT { STRBUF_INIT }
1952 static void todo_list_release(struct todo_list *todo_list)
1954 strbuf_release(&todo_list->buf);
1955 FREE_AND_NULL(todo_list->items);
1956 todo_list->nr = todo_list->alloc = 0;
1959 static struct todo_item *append_new_todo(struct todo_list *todo_list)
1961 ALLOC_GROW(todo_list->items, todo_list->nr + 1, todo_list->alloc);
1962 return todo_list->items + todo_list->nr++;
1965 static int parse_insn_line(struct todo_item *item, const char *bol, char *eol)
1967 struct object_id commit_oid;
1968 char *end_of_object_name;
1969 int i, saved, status, padding;
1971 item->flags = 0;
1973 /* left-trim */
1974 bol += strspn(bol, " \t");
1976 if (bol == eol || *bol == '\r' || *bol == comment_line_char) {
1977 item->command = TODO_COMMENT;
1978 item->commit = NULL;
1979 item->arg = bol;
1980 item->arg_len = eol - bol;
1981 return 0;
1984 for (i = 0; i < TODO_COMMENT; i++)
1985 if (skip_prefix(bol, todo_command_info[i].str, &bol)) {
1986 item->command = i;
1987 break;
1988 } else if (bol[1] == ' ' && *bol == todo_command_info[i].c) {
1989 bol++;
1990 item->command = i;
1991 break;
1993 if (i >= TODO_COMMENT)
1994 return -1;
1996 /* Eat up extra spaces/ tabs before object name */
1997 padding = strspn(bol, " \t");
1998 bol += padding;
2000 if (item->command == TODO_NOOP) {
2001 if (bol != eol)
2002 return error(_("%s does not accept arguments: '%s'"),
2003 command_to_string(item->command), bol);
2004 item->commit = NULL;
2005 item->arg = bol;
2006 item->arg_len = eol - bol;
2007 return 0;
2010 if (!padding)
2011 return error(_("missing arguments for %s"),
2012 command_to_string(item->command));
2014 if (item->command == TODO_EXEC || item->command == TODO_LABEL ||
2015 item->command == TODO_RESET) {
2016 item->commit = NULL;
2017 item->arg = bol;
2018 item->arg_len = (int)(eol - bol);
2019 return 0;
2022 if (item->command == TODO_MERGE) {
2023 if (skip_prefix(bol, "-C", &bol))
2024 bol += strspn(bol, " \t");
2025 else if (skip_prefix(bol, "-c", &bol)) {
2026 bol += strspn(bol, " \t");
2027 item->flags |= TODO_EDIT_MERGE_MSG;
2028 } else {
2029 item->flags |= TODO_EDIT_MERGE_MSG;
2030 item->commit = NULL;
2031 item->arg = bol;
2032 item->arg_len = (int)(eol - bol);
2033 return 0;
2037 end_of_object_name = (char *) bol + strcspn(bol, " \t\n");
2038 saved = *end_of_object_name;
2039 *end_of_object_name = '\0';
2040 status = get_oid(bol, &commit_oid);
2041 *end_of_object_name = saved;
2043 item->arg = end_of_object_name + strspn(end_of_object_name, " \t");
2044 item->arg_len = (int)(eol - item->arg);
2046 if (status < 0)
2047 return -1;
2049 item->commit = lookup_commit_reference(the_repository, &commit_oid);
2050 return !item->commit;
2053 static int parse_insn_buffer(char *buf, struct todo_list *todo_list)
2055 struct todo_item *item;
2056 char *p = buf, *next_p;
2057 int i, res = 0, fixup_okay = file_exists(rebase_path_done());
2059 for (i = 1; *p; i++, p = next_p) {
2060 char *eol = strchrnul(p, '\n');
2062 next_p = *eol ? eol + 1 /* skip LF */ : eol;
2064 if (p != eol && eol[-1] == '\r')
2065 eol--; /* strip Carriage Return */
2067 item = append_new_todo(todo_list);
2068 item->offset_in_buf = p - todo_list->buf.buf;
2069 if (parse_insn_line(item, p, eol)) {
2070 res = error(_("invalid line %d: %.*s"),
2071 i, (int)(eol - p), p);
2072 item->command = TODO_NOOP;
2075 if (fixup_okay)
2076 ; /* do nothing */
2077 else if (is_fixup(item->command))
2078 return error(_("cannot '%s' without a previous commit"),
2079 command_to_string(item->command));
2080 else if (!is_noop(item->command))
2081 fixup_okay = 1;
2084 return res;
2087 static int count_commands(struct todo_list *todo_list)
2089 int count = 0, i;
2091 for (i = 0; i < todo_list->nr; i++)
2092 if (todo_list->items[i].command != TODO_COMMENT)
2093 count++;
2095 return count;
2098 static int get_item_line_offset(struct todo_list *todo_list, int index)
2100 return index < todo_list->nr ?
2101 todo_list->items[index].offset_in_buf : todo_list->buf.len;
2104 static const char *get_item_line(struct todo_list *todo_list, int index)
2106 return todo_list->buf.buf + get_item_line_offset(todo_list, index);
2109 static int get_item_line_length(struct todo_list *todo_list, int index)
2111 return get_item_line_offset(todo_list, index + 1)
2112 - get_item_line_offset(todo_list, index);
2115 static ssize_t strbuf_read_file_or_whine(struct strbuf *sb, const char *path)
2117 int fd;
2118 ssize_t len;
2120 fd = open(path, O_RDONLY);
2121 if (fd < 0)
2122 return error_errno(_("could not open '%s'"), path);
2123 len = strbuf_read(sb, fd, 0);
2124 close(fd);
2125 if (len < 0)
2126 return error(_("could not read '%s'."), path);
2127 return len;
2130 static int read_populate_todo(struct todo_list *todo_list,
2131 struct replay_opts *opts)
2133 struct stat st;
2134 const char *todo_file = get_todo_path(opts);
2135 int res;
2137 strbuf_reset(&todo_list->buf);
2138 if (strbuf_read_file_or_whine(&todo_list->buf, todo_file) < 0)
2139 return -1;
2141 res = stat(todo_file, &st);
2142 if (res)
2143 return error(_("could not stat '%s'"), todo_file);
2144 fill_stat_data(&todo_list->stat, &st);
2146 res = parse_insn_buffer(todo_list->buf.buf, todo_list);
2147 if (res) {
2148 if (is_rebase_i(opts))
2149 return error(_("please fix this using "
2150 "'git rebase --edit-todo'."));
2151 return error(_("unusable instruction sheet: '%s'"), todo_file);
2154 if (!todo_list->nr &&
2155 (!is_rebase_i(opts) || !file_exists(rebase_path_done())))
2156 return error(_("no commits parsed."));
2158 if (!is_rebase_i(opts)) {
2159 enum todo_command valid =
2160 opts->action == REPLAY_PICK ? TODO_PICK : TODO_REVERT;
2161 int i;
2163 for (i = 0; i < todo_list->nr; i++)
2164 if (valid == todo_list->items[i].command)
2165 continue;
2166 else if (valid == TODO_PICK)
2167 return error(_("cannot cherry-pick during a revert."));
2168 else
2169 return error(_("cannot revert during a cherry-pick."));
2172 if (is_rebase_i(opts)) {
2173 struct todo_list done = TODO_LIST_INIT;
2174 FILE *f = fopen_or_warn(rebase_path_msgtotal(), "w");
2176 if (strbuf_read_file(&done.buf, rebase_path_done(), 0) > 0 &&
2177 !parse_insn_buffer(done.buf.buf, &done))
2178 todo_list->done_nr = count_commands(&done);
2179 else
2180 todo_list->done_nr = 0;
2182 todo_list->total_nr = todo_list->done_nr
2183 + count_commands(todo_list);
2184 todo_list_release(&done);
2186 if (f) {
2187 fprintf(f, "%d\n", todo_list->total_nr);
2188 fclose(f);
2192 return 0;
2195 static int git_config_string_dup(char **dest,
2196 const char *var, const char *value)
2198 if (!value)
2199 return config_error_nonbool(var);
2200 free(*dest);
2201 *dest = xstrdup(value);
2202 return 0;
2205 static int populate_opts_cb(const char *key, const char *value, void *data)
2207 struct replay_opts *opts = data;
2208 int error_flag = 1;
2210 if (!value)
2211 error_flag = 0;
2212 else if (!strcmp(key, "options.no-commit"))
2213 opts->no_commit = git_config_bool_or_int(key, value, &error_flag);
2214 else if (!strcmp(key, "options.edit"))
2215 opts->edit = git_config_bool_or_int(key, value, &error_flag);
2216 else if (!strcmp(key, "options.signoff"))
2217 opts->signoff = git_config_bool_or_int(key, value, &error_flag);
2218 else if (!strcmp(key, "options.record-origin"))
2219 opts->record_origin = git_config_bool_or_int(key, value, &error_flag);
2220 else if (!strcmp(key, "options.allow-ff"))
2221 opts->allow_ff = git_config_bool_or_int(key, value, &error_flag);
2222 else if (!strcmp(key, "options.mainline"))
2223 opts->mainline = git_config_int(key, value);
2224 else if (!strcmp(key, "options.strategy"))
2225 git_config_string_dup(&opts->strategy, key, value);
2226 else if (!strcmp(key, "options.gpg-sign"))
2227 git_config_string_dup(&opts->gpg_sign, key, value);
2228 else if (!strcmp(key, "options.strategy-option")) {
2229 ALLOC_GROW(opts->xopts, opts->xopts_nr + 1, opts->xopts_alloc);
2230 opts->xopts[opts->xopts_nr++] = xstrdup(value);
2231 } else if (!strcmp(key, "options.allow-rerere-auto"))
2232 opts->allow_rerere_auto =
2233 git_config_bool_or_int(key, value, &error_flag) ?
2234 RERERE_AUTOUPDATE : RERERE_NOAUTOUPDATE;
2235 else
2236 return error(_("invalid key: %s"), key);
2238 if (!error_flag)
2239 return error(_("invalid value for %s: %s"), key, value);
2241 return 0;
2244 static void read_strategy_opts(struct replay_opts *opts, struct strbuf *buf)
2246 int i;
2247 char *strategy_opts_string;
2249 strbuf_reset(buf);
2250 if (!read_oneliner(buf, rebase_path_strategy(), 0))
2251 return;
2252 opts->strategy = strbuf_detach(buf, NULL);
2253 if (!read_oneliner(buf, rebase_path_strategy_opts(), 0))
2254 return;
2256 strategy_opts_string = buf->buf;
2257 if (*strategy_opts_string == ' ')
2258 strategy_opts_string++;
2259 opts->xopts_nr = split_cmdline(strategy_opts_string,
2260 (const char ***)&opts->xopts);
2261 for (i = 0; i < opts->xopts_nr; i++) {
2262 const char *arg = opts->xopts[i];
2264 skip_prefix(arg, "--", &arg);
2265 opts->xopts[i] = xstrdup(arg);
2269 static int read_populate_opts(struct replay_opts *opts)
2271 if (is_rebase_i(opts)) {
2272 struct strbuf buf = STRBUF_INIT;
2274 if (read_oneliner(&buf, rebase_path_gpg_sign_opt(), 1)) {
2275 if (!starts_with(buf.buf, "-S"))
2276 strbuf_reset(&buf);
2277 else {
2278 free(opts->gpg_sign);
2279 opts->gpg_sign = xstrdup(buf.buf + 2);
2281 strbuf_reset(&buf);
2284 if (read_oneliner(&buf, rebase_path_allow_rerere_autoupdate(), 1)) {
2285 if (!strcmp(buf.buf, "--rerere-autoupdate"))
2286 opts->allow_rerere_auto = RERERE_AUTOUPDATE;
2287 else if (!strcmp(buf.buf, "--no-rerere-autoupdate"))
2288 opts->allow_rerere_auto = RERERE_NOAUTOUPDATE;
2289 strbuf_reset(&buf);
2292 if (file_exists(rebase_path_verbose()))
2293 opts->verbose = 1;
2295 if (file_exists(rebase_path_signoff())) {
2296 opts->allow_ff = 0;
2297 opts->signoff = 1;
2300 read_strategy_opts(opts, &buf);
2301 strbuf_release(&buf);
2303 if (read_oneliner(&opts->current_fixups,
2304 rebase_path_current_fixups(), 1)) {
2305 const char *p = opts->current_fixups.buf;
2306 opts->current_fixup_count = 1;
2307 while ((p = strchr(p, '\n'))) {
2308 opts->current_fixup_count++;
2309 p++;
2313 if (read_oneliner(&buf, rebase_path_squash_onto(), 0)) {
2314 if (get_oid_hex(buf.buf, &opts->squash_onto) < 0)
2315 return error(_("unusable squash-onto"));
2316 opts->have_squash_onto = 1;
2319 return 0;
2322 if (!file_exists(git_path_opts_file()))
2323 return 0;
2325 * The function git_parse_source(), called from git_config_from_file(),
2326 * may die() in case of a syntactically incorrect file. We do not care
2327 * about this case, though, because we wrote that file ourselves, so we
2328 * are pretty certain that it is syntactically correct.
2330 if (git_config_from_file(populate_opts_cb, git_path_opts_file(), opts) < 0)
2331 return error(_("malformed options sheet: '%s'"),
2332 git_path_opts_file());
2333 return 0;
2336 static int walk_revs_populate_todo(struct todo_list *todo_list,
2337 struct replay_opts *opts)
2339 enum todo_command command = opts->action == REPLAY_PICK ?
2340 TODO_PICK : TODO_REVERT;
2341 const char *command_string = todo_command_info[command].str;
2342 struct commit *commit;
2344 if (prepare_revs(opts))
2345 return -1;
2347 while ((commit = get_revision(opts->revs))) {
2348 struct todo_item *item = append_new_todo(todo_list);
2349 const char *commit_buffer = get_commit_buffer(commit, NULL);
2350 const char *subject;
2351 int subject_len;
2353 item->command = command;
2354 item->commit = commit;
2355 item->arg = NULL;
2356 item->arg_len = 0;
2357 item->offset_in_buf = todo_list->buf.len;
2358 subject_len = find_commit_subject(commit_buffer, &subject);
2359 strbuf_addf(&todo_list->buf, "%s %s %.*s\n", command_string,
2360 short_commit_name(commit), subject_len, subject);
2361 unuse_commit_buffer(commit, commit_buffer);
2364 if (!todo_list->nr)
2365 return error(_("empty commit set passed"));
2367 return 0;
2370 static int create_seq_dir(void)
2372 if (file_exists(git_path_seq_dir())) {
2373 error(_("a cherry-pick or revert is already in progress"));
2374 advise(_("try \"git cherry-pick (--continue | --quit | --abort)\""));
2375 return -1;
2376 } else if (mkdir(git_path_seq_dir(), 0777) < 0)
2377 return error_errno(_("could not create sequencer directory '%s'"),
2378 git_path_seq_dir());
2379 return 0;
2382 static int save_head(const char *head)
2384 struct lock_file head_lock = LOCK_INIT;
2385 struct strbuf buf = STRBUF_INIT;
2386 int fd;
2387 ssize_t written;
2389 fd = hold_lock_file_for_update(&head_lock, git_path_head_file(), 0);
2390 if (fd < 0)
2391 return error_errno(_("could not lock HEAD"));
2392 strbuf_addf(&buf, "%s\n", head);
2393 written = write_in_full(fd, buf.buf, buf.len);
2394 strbuf_release(&buf);
2395 if (written < 0) {
2396 error_errno(_("could not write to '%s'"), git_path_head_file());
2397 rollback_lock_file(&head_lock);
2398 return -1;
2400 if (commit_lock_file(&head_lock) < 0)
2401 return error(_("failed to finalize '%s'"), git_path_head_file());
2402 return 0;
2405 static int rollback_is_safe(void)
2407 struct strbuf sb = STRBUF_INIT;
2408 struct object_id expected_head, actual_head;
2410 if (strbuf_read_file(&sb, git_path_abort_safety_file(), 0) >= 0) {
2411 strbuf_trim(&sb);
2412 if (get_oid_hex(sb.buf, &expected_head)) {
2413 strbuf_release(&sb);
2414 die(_("could not parse %s"), git_path_abort_safety_file());
2416 strbuf_release(&sb);
2418 else if (errno == ENOENT)
2419 oidclr(&expected_head);
2420 else
2421 die_errno(_("could not read '%s'"), git_path_abort_safety_file());
2423 if (get_oid("HEAD", &actual_head))
2424 oidclr(&actual_head);
2426 return !oidcmp(&actual_head, &expected_head);
2429 static int reset_for_rollback(const struct object_id *oid)
2431 const char *argv[4]; /* reset --merge <arg> + NULL */
2433 argv[0] = "reset";
2434 argv[1] = "--merge";
2435 argv[2] = oid_to_hex(oid);
2436 argv[3] = NULL;
2437 return run_command_v_opt(argv, RUN_GIT_CMD);
2440 static int rollback_single_pick(void)
2442 struct object_id head_oid;
2444 if (!file_exists(git_path_cherry_pick_head(the_repository)) &&
2445 !file_exists(git_path_revert_head(the_repository)))
2446 return error(_("no cherry-pick or revert in progress"));
2447 if (read_ref_full("HEAD", 0, &head_oid, NULL))
2448 return error(_("cannot resolve HEAD"));
2449 if (is_null_oid(&head_oid))
2450 return error(_("cannot abort from a branch yet to be born"));
2451 return reset_for_rollback(&head_oid);
2454 int sequencer_rollback(struct replay_opts *opts)
2456 FILE *f;
2457 struct object_id oid;
2458 struct strbuf buf = STRBUF_INIT;
2459 const char *p;
2461 f = fopen(git_path_head_file(), "r");
2462 if (!f && errno == ENOENT) {
2464 * There is no multiple-cherry-pick in progress.
2465 * If CHERRY_PICK_HEAD or REVERT_HEAD indicates
2466 * a single-cherry-pick in progress, abort that.
2468 return rollback_single_pick();
2470 if (!f)
2471 return error_errno(_("cannot open '%s'"), git_path_head_file());
2472 if (strbuf_getline_lf(&buf, f)) {
2473 error(_("cannot read '%s': %s"), git_path_head_file(),
2474 ferror(f) ? strerror(errno) : _("unexpected end of file"));
2475 fclose(f);
2476 goto fail;
2478 fclose(f);
2479 if (parse_oid_hex(buf.buf, &oid, &p) || *p != '\0') {
2480 error(_("stored pre-cherry-pick HEAD file '%s' is corrupt"),
2481 git_path_head_file());
2482 goto fail;
2484 if (is_null_oid(&oid)) {
2485 error(_("cannot abort from a branch yet to be born"));
2486 goto fail;
2489 if (!rollback_is_safe()) {
2490 /* Do not error, just do not rollback */
2491 warning(_("You seem to have moved HEAD. "
2492 "Not rewinding, check your HEAD!"));
2493 } else
2494 if (reset_for_rollback(&oid))
2495 goto fail;
2496 strbuf_release(&buf);
2497 return sequencer_remove_state(opts);
2498 fail:
2499 strbuf_release(&buf);
2500 return -1;
2503 static int save_todo(struct todo_list *todo_list, struct replay_opts *opts)
2505 struct lock_file todo_lock = LOCK_INIT;
2506 const char *todo_path = get_todo_path(opts);
2507 int next = todo_list->current, offset, fd;
2510 * rebase -i writes "git-rebase-todo" without the currently executing
2511 * command, appending it to "done" instead.
2513 if (is_rebase_i(opts))
2514 next++;
2516 fd = hold_lock_file_for_update(&todo_lock, todo_path, 0);
2517 if (fd < 0)
2518 return error_errno(_("could not lock '%s'"), todo_path);
2519 offset = get_item_line_offset(todo_list, next);
2520 if (write_in_full(fd, todo_list->buf.buf + offset,
2521 todo_list->buf.len - offset) < 0)
2522 return error_errno(_("could not write to '%s'"), todo_path);
2523 if (commit_lock_file(&todo_lock) < 0)
2524 return error(_("failed to finalize '%s'"), todo_path);
2526 if (is_rebase_i(opts) && next > 0) {
2527 const char *done = rebase_path_done();
2528 int fd = open(done, O_CREAT | O_WRONLY | O_APPEND, 0666);
2529 int ret = 0;
2531 if (fd < 0)
2532 return 0;
2533 if (write_in_full(fd, get_item_line(todo_list, next - 1),
2534 get_item_line_length(todo_list, next - 1))
2535 < 0)
2536 ret = error_errno(_("could not write to '%s'"), done);
2537 if (close(fd) < 0)
2538 ret = error_errno(_("failed to finalize '%s'"), done);
2539 return ret;
2541 return 0;
2544 static int save_opts(struct replay_opts *opts)
2546 const char *opts_file = git_path_opts_file();
2547 int res = 0;
2549 if (opts->no_commit)
2550 res |= git_config_set_in_file_gently(opts_file, "options.no-commit", "true");
2551 if (opts->edit)
2552 res |= git_config_set_in_file_gently(opts_file, "options.edit", "true");
2553 if (opts->signoff)
2554 res |= git_config_set_in_file_gently(opts_file, "options.signoff", "true");
2555 if (opts->record_origin)
2556 res |= git_config_set_in_file_gently(opts_file, "options.record-origin", "true");
2557 if (opts->allow_ff)
2558 res |= git_config_set_in_file_gently(opts_file, "options.allow-ff", "true");
2559 if (opts->mainline) {
2560 struct strbuf buf = STRBUF_INIT;
2561 strbuf_addf(&buf, "%d", opts->mainline);
2562 res |= git_config_set_in_file_gently(opts_file, "options.mainline", buf.buf);
2563 strbuf_release(&buf);
2565 if (opts->strategy)
2566 res |= git_config_set_in_file_gently(opts_file, "options.strategy", opts->strategy);
2567 if (opts->gpg_sign)
2568 res |= git_config_set_in_file_gently(opts_file, "options.gpg-sign", opts->gpg_sign);
2569 if (opts->xopts) {
2570 int i;
2571 for (i = 0; i < opts->xopts_nr; i++)
2572 res |= git_config_set_multivar_in_file_gently(opts_file,
2573 "options.strategy-option",
2574 opts->xopts[i], "^$", 0);
2576 if (opts->allow_rerere_auto)
2577 res |= git_config_set_in_file_gently(opts_file, "options.allow-rerere-auto",
2578 opts->allow_rerere_auto == RERERE_AUTOUPDATE ?
2579 "true" : "false");
2580 return res;
2583 static int make_patch(struct commit *commit, struct replay_opts *opts)
2585 struct strbuf buf = STRBUF_INIT;
2586 struct rev_info log_tree_opt;
2587 const char *subject, *p;
2588 int res = 0;
2590 p = short_commit_name(commit);
2591 if (write_message(p, strlen(p), rebase_path_stopped_sha(), 1) < 0)
2592 return -1;
2593 if (update_ref("rebase", "REBASE_HEAD", &commit->object.oid,
2594 NULL, REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
2595 res |= error(_("could not update %s"), "REBASE_HEAD");
2597 strbuf_addf(&buf, "%s/patch", get_dir(opts));
2598 memset(&log_tree_opt, 0, sizeof(log_tree_opt));
2599 init_revisions(&log_tree_opt, NULL);
2600 log_tree_opt.abbrev = 0;
2601 log_tree_opt.diff = 1;
2602 log_tree_opt.diffopt.output_format = DIFF_FORMAT_PATCH;
2603 log_tree_opt.disable_stdin = 1;
2604 log_tree_opt.no_commit_id = 1;
2605 log_tree_opt.diffopt.file = fopen(buf.buf, "w");
2606 log_tree_opt.diffopt.use_color = GIT_COLOR_NEVER;
2607 if (!log_tree_opt.diffopt.file)
2608 res |= error_errno(_("could not open '%s'"), buf.buf);
2609 else {
2610 res |= log_tree_commit(&log_tree_opt, commit);
2611 fclose(log_tree_opt.diffopt.file);
2613 strbuf_reset(&buf);
2615 strbuf_addf(&buf, "%s/message", get_dir(opts));
2616 if (!file_exists(buf.buf)) {
2617 const char *commit_buffer = get_commit_buffer(commit, NULL);
2618 find_commit_subject(commit_buffer, &subject);
2619 res |= write_message(subject, strlen(subject), buf.buf, 1);
2620 unuse_commit_buffer(commit, commit_buffer);
2622 strbuf_release(&buf);
2624 return res;
2627 static int intend_to_amend(void)
2629 struct object_id head;
2630 char *p;
2632 if (get_oid("HEAD", &head))
2633 return error(_("cannot read HEAD"));
2635 p = oid_to_hex(&head);
2636 return write_message(p, strlen(p), rebase_path_amend(), 1);
2639 static int error_with_patch(struct commit *commit,
2640 const char *subject, int subject_len,
2641 struct replay_opts *opts, int exit_code, int to_amend)
2643 if (commit) {
2644 if (make_patch(commit, opts))
2645 return -1;
2646 } else if (copy_file(rebase_path_message(),
2647 git_path_merge_msg(the_repository), 0666))
2648 return error(_("unable to copy '%s' to '%s'"),
2649 git_path_merge_msg(the_repository), rebase_path_message());
2651 if (to_amend) {
2652 if (intend_to_amend())
2653 return -1;
2655 fprintf(stderr,
2656 _("You can amend the commit now, with\n"
2657 "\n"
2658 " git commit --amend %s\n"
2659 "\n"
2660 "Once you are satisfied with your changes, run\n"
2661 "\n"
2662 " git rebase --continue\n"),
2663 gpg_sign_opt_quoted(opts));
2664 } else if (exit_code) {
2665 if (commit)
2666 fprintf_ln(stderr, _("Could not apply %s... %.*s"),
2667 short_commit_name(commit), subject_len, subject);
2668 else
2670 * We don't have the hash of the parent so
2671 * just print the line from the todo file.
2673 fprintf_ln(stderr, _("Could not merge %.*s"),
2674 subject_len, subject);
2677 return exit_code;
2680 static int error_failed_squash(struct commit *commit,
2681 struct replay_opts *opts, int subject_len, const char *subject)
2683 if (copy_file(rebase_path_message(), rebase_path_squash_msg(), 0666))
2684 return error(_("could not copy '%s' to '%s'"),
2685 rebase_path_squash_msg(), rebase_path_message());
2686 unlink(git_path_merge_msg(the_repository));
2687 if (copy_file(git_path_merge_msg(the_repository), rebase_path_message(), 0666))
2688 return error(_("could not copy '%s' to '%s'"),
2689 rebase_path_message(),
2690 git_path_merge_msg(the_repository));
2691 return error_with_patch(commit, subject, subject_len, opts, 1, 0);
2694 static int do_exec(const char *command_line)
2696 struct argv_array child_env = ARGV_ARRAY_INIT;
2697 const char *child_argv[] = { NULL, NULL };
2698 int dirty, status;
2700 fprintf(stderr, "Executing: %s\n", command_line);
2701 child_argv[0] = command_line;
2702 argv_array_pushf(&child_env, "GIT_DIR=%s", absolute_path(get_git_dir()));
2703 argv_array_pushf(&child_env, "GIT_WORK_TREE=%s",
2704 absolute_path(get_git_work_tree()));
2705 status = run_command_v_opt_cd_env(child_argv, RUN_USING_SHELL, NULL,
2706 child_env.argv);
2708 /* force re-reading of the cache */
2709 if (discard_cache() < 0 || read_cache() < 0)
2710 return error(_("could not read index"));
2712 dirty = require_clean_work_tree("rebase", NULL, 1, 1);
2714 if (status) {
2715 warning(_("execution failed: %s\n%s"
2716 "You can fix the problem, and then run\n"
2717 "\n"
2718 " git rebase --continue\n"
2719 "\n"),
2720 command_line,
2721 dirty ? N_("and made changes to the index and/or the "
2722 "working tree\n") : "");
2723 if (status == 127)
2724 /* command not found */
2725 status = 1;
2726 } else if (dirty) {
2727 warning(_("execution succeeded: %s\nbut "
2728 "left changes to the index and/or the working tree\n"
2729 "Commit or stash your changes, and then run\n"
2730 "\n"
2731 " git rebase --continue\n"
2732 "\n"), command_line);
2733 status = 1;
2736 argv_array_clear(&child_env);
2738 return status;
2741 static int safe_append(const char *filename, const char *fmt, ...)
2743 va_list ap;
2744 struct lock_file lock = LOCK_INIT;
2745 int fd = hold_lock_file_for_update(&lock, filename,
2746 LOCK_REPORT_ON_ERROR);
2747 struct strbuf buf = STRBUF_INIT;
2749 if (fd < 0)
2750 return -1;
2752 if (strbuf_read_file(&buf, filename, 0) < 0 && errno != ENOENT) {
2753 error_errno(_("could not read '%s'"), filename);
2754 rollback_lock_file(&lock);
2755 return -1;
2757 strbuf_complete(&buf, '\n');
2758 va_start(ap, fmt);
2759 strbuf_vaddf(&buf, fmt, ap);
2760 va_end(ap);
2762 if (write_in_full(fd, buf.buf, buf.len) < 0) {
2763 error_errno(_("could not write to '%s'"), filename);
2764 strbuf_release(&buf);
2765 rollback_lock_file(&lock);
2766 return -1;
2768 if (commit_lock_file(&lock) < 0) {
2769 strbuf_release(&buf);
2770 rollback_lock_file(&lock);
2771 return error(_("failed to finalize '%s'"), filename);
2774 strbuf_release(&buf);
2775 return 0;
2778 static int do_label(const char *name, int len)
2780 struct ref_store *refs = get_main_ref_store(the_repository);
2781 struct ref_transaction *transaction;
2782 struct strbuf ref_name = STRBUF_INIT, err = STRBUF_INIT;
2783 struct strbuf msg = STRBUF_INIT;
2784 int ret = 0;
2785 struct object_id head_oid;
2787 if (len == 1 && *name == '#')
2788 return error(_("illegal label name: '%.*s'"), len, name);
2790 strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
2791 strbuf_addf(&msg, "rebase -i (label) '%.*s'", len, name);
2793 transaction = ref_store_transaction_begin(refs, &err);
2794 if (!transaction) {
2795 error("%s", err.buf);
2796 ret = -1;
2797 } else if (get_oid("HEAD", &head_oid)) {
2798 error(_("could not read HEAD"));
2799 ret = -1;
2800 } else if (ref_transaction_update(transaction, ref_name.buf, &head_oid,
2801 NULL, 0, msg.buf, &err) < 0 ||
2802 ref_transaction_commit(transaction, &err)) {
2803 error("%s", err.buf);
2804 ret = -1;
2806 ref_transaction_free(transaction);
2807 strbuf_release(&err);
2808 strbuf_release(&msg);
2810 if (!ret)
2811 ret = safe_append(rebase_path_refs_to_delete(),
2812 "%s\n", ref_name.buf);
2813 strbuf_release(&ref_name);
2815 return ret;
2818 static const char *reflog_message(struct replay_opts *opts,
2819 const char *sub_action, const char *fmt, ...);
2821 static int do_reset(const char *name, int len, struct replay_opts *opts)
2823 struct strbuf ref_name = STRBUF_INIT;
2824 struct object_id oid;
2825 struct lock_file lock = LOCK_INIT;
2826 struct tree_desc desc;
2827 struct tree *tree;
2828 struct unpack_trees_options unpack_tree_opts;
2829 int ret = 0, i;
2831 if (hold_locked_index(&lock, LOCK_REPORT_ON_ERROR) < 0)
2832 return -1;
2834 if (len == 10 && !strncmp("[new root]", name, len)) {
2835 if (!opts->have_squash_onto) {
2836 const char *hex;
2837 if (commit_tree("", 0, the_hash_algo->empty_tree,
2838 NULL, &opts->squash_onto,
2839 NULL, NULL))
2840 return error(_("writing fake root commit"));
2841 opts->have_squash_onto = 1;
2842 hex = oid_to_hex(&opts->squash_onto);
2843 if (write_message(hex, strlen(hex),
2844 rebase_path_squash_onto(), 0))
2845 return error(_("writing squash-onto"));
2847 oidcpy(&oid, &opts->squash_onto);
2848 } else {
2849 /* Determine the length of the label */
2850 for (i = 0; i < len; i++)
2851 if (isspace(name[i]))
2852 len = i;
2854 strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
2855 if (get_oid(ref_name.buf, &oid) &&
2856 get_oid(ref_name.buf + strlen("refs/rewritten/"), &oid)) {
2857 error(_("could not read '%s'"), ref_name.buf);
2858 rollback_lock_file(&lock);
2859 strbuf_release(&ref_name);
2860 return -1;
2864 memset(&unpack_tree_opts, 0, sizeof(unpack_tree_opts));
2865 setup_unpack_trees_porcelain(&unpack_tree_opts, "reset");
2866 unpack_tree_opts.head_idx = 1;
2867 unpack_tree_opts.src_index = &the_index;
2868 unpack_tree_opts.dst_index = &the_index;
2869 unpack_tree_opts.fn = oneway_merge;
2870 unpack_tree_opts.merge = 1;
2871 unpack_tree_opts.update = 1;
2873 if (read_cache_unmerged()) {
2874 rollback_lock_file(&lock);
2875 strbuf_release(&ref_name);
2876 return error_resolve_conflict(_(action_name(opts)));
2879 if (!fill_tree_descriptor(&desc, &oid)) {
2880 error(_("failed to find tree of %s"), oid_to_hex(&oid));
2881 rollback_lock_file(&lock);
2882 free((void *)desc.buffer);
2883 strbuf_release(&ref_name);
2884 return -1;
2887 if (unpack_trees(1, &desc, &unpack_tree_opts)) {
2888 rollback_lock_file(&lock);
2889 free((void *)desc.buffer);
2890 strbuf_release(&ref_name);
2891 return -1;
2894 tree = parse_tree_indirect(&oid);
2895 prime_cache_tree(&the_index, tree);
2897 if (write_locked_index(&the_index, &lock, COMMIT_LOCK) < 0)
2898 ret = error(_("could not write index"));
2899 free((void *)desc.buffer);
2901 if (!ret)
2902 ret = update_ref(reflog_message(opts, "reset", "'%.*s'",
2903 len, name), "HEAD", &oid,
2904 NULL, 0, UPDATE_REFS_MSG_ON_ERR);
2906 strbuf_release(&ref_name);
2907 return ret;
2910 static struct commit *lookup_label(const char *label, int len,
2911 struct strbuf *buf)
2913 struct commit *commit;
2915 strbuf_reset(buf);
2916 strbuf_addf(buf, "refs/rewritten/%.*s", len, label);
2917 commit = lookup_commit_reference_by_name(buf->buf);
2918 if (!commit) {
2919 /* fall back to non-rewritten ref or commit */
2920 strbuf_splice(buf, 0, strlen("refs/rewritten/"), "", 0);
2921 commit = lookup_commit_reference_by_name(buf->buf);
2924 if (!commit)
2925 error(_("could not resolve '%s'"), buf->buf);
2927 return commit;
2930 static int do_merge(struct commit *commit, const char *arg, int arg_len,
2931 int flags, struct replay_opts *opts)
2933 int run_commit_flags = (flags & TODO_EDIT_MERGE_MSG) ?
2934 EDIT_MSG | VERIFY_MSG : 0;
2935 struct strbuf ref_name = STRBUF_INIT;
2936 struct commit *head_commit, *merge_commit, *i;
2937 struct commit_list *bases, *j, *reversed = NULL;
2938 struct commit_list *to_merge = NULL, **tail = &to_merge;
2939 struct merge_options o;
2940 int merge_arg_len, oneline_offset, can_fast_forward, ret, k;
2941 static struct lock_file lock;
2942 const char *p;
2944 if (hold_locked_index(&lock, LOCK_REPORT_ON_ERROR) < 0) {
2945 ret = -1;
2946 goto leave_merge;
2949 head_commit = lookup_commit_reference_by_name("HEAD");
2950 if (!head_commit) {
2951 ret = error(_("cannot merge without a current revision"));
2952 goto leave_merge;
2956 * For octopus merges, the arg starts with the list of revisions to be
2957 * merged. The list is optionally followed by '#' and the oneline.
2959 merge_arg_len = oneline_offset = arg_len;
2960 for (p = arg; p - arg < arg_len; p += strspn(p, " \t\n")) {
2961 if (!*p)
2962 break;
2963 if (*p == '#' && (!p[1] || isspace(p[1]))) {
2964 p += 1 + strspn(p + 1, " \t\n");
2965 oneline_offset = p - arg;
2966 break;
2968 k = strcspn(p, " \t\n");
2969 if (!k)
2970 continue;
2971 merge_commit = lookup_label(p, k, &ref_name);
2972 if (!merge_commit) {
2973 ret = error(_("unable to parse '%.*s'"), k, p);
2974 goto leave_merge;
2976 tail = &commit_list_insert(merge_commit, tail)->next;
2977 p += k;
2978 merge_arg_len = p - arg;
2981 if (!to_merge) {
2982 ret = error(_("nothing to merge: '%.*s'"), arg_len, arg);
2983 goto leave_merge;
2986 if (opts->have_squash_onto &&
2987 !oidcmp(&head_commit->object.oid, &opts->squash_onto)) {
2989 * When the user tells us to "merge" something into a
2990 * "[new root]", let's simply fast-forward to the merge head.
2992 rollback_lock_file(&lock);
2993 if (to_merge->next)
2994 ret = error(_("octopus merge cannot be executed on "
2995 "top of a [new root]"));
2996 else
2997 ret = fast_forward_to(&to_merge->item->object.oid,
2998 &head_commit->object.oid, 0,
2999 opts);
3000 goto leave_merge;
3003 if (commit) {
3004 const char *message = get_commit_buffer(commit, NULL);
3005 const char *body;
3006 int len;
3008 if (!message) {
3009 ret = error(_("could not get commit message of '%s'"),
3010 oid_to_hex(&commit->object.oid));
3011 goto leave_merge;
3013 write_author_script(message);
3014 find_commit_subject(message, &body);
3015 len = strlen(body);
3016 ret = write_message(body, len, git_path_merge_msg(the_repository), 0);
3017 unuse_commit_buffer(commit, message);
3018 if (ret) {
3019 error_errno(_("could not write '%s'"),
3020 git_path_merge_msg(the_repository));
3021 goto leave_merge;
3023 } else {
3024 struct strbuf buf = STRBUF_INIT;
3025 int len;
3027 strbuf_addf(&buf, "author %s", git_author_info(0));
3028 write_author_script(buf.buf);
3029 strbuf_reset(&buf);
3031 if (oneline_offset < arg_len) {
3032 p = arg + oneline_offset;
3033 len = arg_len - oneline_offset;
3034 } else {
3035 strbuf_addf(&buf, "Merge %s '%.*s'",
3036 to_merge->next ? "branches" : "branch",
3037 merge_arg_len, arg);
3038 p = buf.buf;
3039 len = buf.len;
3042 ret = write_message(p, len, git_path_merge_msg(the_repository), 0);
3043 strbuf_release(&buf);
3044 if (ret) {
3045 error_errno(_("could not write '%s'"),
3046 git_path_merge_msg(the_repository));
3047 goto leave_merge;
3052 * If HEAD is not identical to the first parent of the original merge
3053 * commit, we cannot fast-forward.
3055 can_fast_forward = opts->allow_ff && commit && commit->parents &&
3056 !oidcmp(&commit->parents->item->object.oid,
3057 &head_commit->object.oid);
3060 * If any merge head is different from the original one, we cannot
3061 * fast-forward.
3063 if (can_fast_forward) {
3064 struct commit_list *p = commit->parents->next;
3066 for (j = to_merge; j && p; j = j->next, p = p->next)
3067 if (oidcmp(&j->item->object.oid,
3068 &p->item->object.oid)) {
3069 can_fast_forward = 0;
3070 break;
3073 * If the number of merge heads differs from the original merge
3074 * commit, we cannot fast-forward.
3076 if (j || p)
3077 can_fast_forward = 0;
3080 if (can_fast_forward) {
3081 rollback_lock_file(&lock);
3082 ret = fast_forward_to(&commit->object.oid,
3083 &head_commit->object.oid, 0, opts);
3084 goto leave_merge;
3087 if (to_merge->next) {
3088 /* Octopus merge */
3089 struct child_process cmd = CHILD_PROCESS_INIT;
3091 if (read_env_script(&cmd.env_array)) {
3092 const char *gpg_opt = gpg_sign_opt_quoted(opts);
3094 ret = error(_(staged_changes_advice), gpg_opt, gpg_opt);
3095 goto leave_merge;
3098 cmd.git_cmd = 1;
3099 argv_array_push(&cmd.args, "merge");
3100 argv_array_push(&cmd.args, "-s");
3101 argv_array_push(&cmd.args, "octopus");
3102 argv_array_push(&cmd.args, "--no-edit");
3103 argv_array_push(&cmd.args, "--no-ff");
3104 argv_array_push(&cmd.args, "--no-log");
3105 argv_array_push(&cmd.args, "--no-stat");
3106 argv_array_push(&cmd.args, "-F");
3107 argv_array_push(&cmd.args, git_path_merge_msg(the_repository));
3108 if (opts->gpg_sign)
3109 argv_array_push(&cmd.args, opts->gpg_sign);
3111 /* Add the tips to be merged */
3112 for (j = to_merge; j; j = j->next)
3113 argv_array_push(&cmd.args,
3114 oid_to_hex(&j->item->object.oid));
3116 strbuf_release(&ref_name);
3117 unlink(git_path_cherry_pick_head(the_repository));
3118 rollback_lock_file(&lock);
3120 rollback_lock_file(&lock);
3121 ret = run_command(&cmd);
3123 /* force re-reading of the cache */
3124 if (!ret && (discard_cache() < 0 || read_cache() < 0))
3125 ret = error(_("could not read index"));
3126 goto leave_merge;
3129 merge_commit = to_merge->item;
3130 write_message(oid_to_hex(&merge_commit->object.oid), GIT_SHA1_HEXSZ,
3131 git_path_merge_head(the_repository), 0);
3132 write_message("no-ff", 5, git_path_merge_mode(the_repository), 0);
3134 bases = get_merge_bases(head_commit, merge_commit);
3135 if (bases && !oidcmp(&merge_commit->object.oid,
3136 &bases->item->object.oid)) {
3137 ret = 0;
3138 /* skip merging an ancestor of HEAD */
3139 goto leave_merge;
3142 for (j = bases; j; j = j->next)
3143 commit_list_insert(j->item, &reversed);
3144 free_commit_list(bases);
3146 read_cache();
3147 init_merge_options(&o);
3148 o.branch1 = "HEAD";
3149 o.branch2 = ref_name.buf;
3150 o.buffer_output = 2;
3152 ret = merge_recursive(&o, head_commit, merge_commit, reversed, &i);
3153 if (ret <= 0)
3154 fputs(o.obuf.buf, stdout);
3155 strbuf_release(&o.obuf);
3156 if (ret < 0) {
3157 error(_("could not even attempt to merge '%.*s'"),
3158 merge_arg_len, arg);
3159 goto leave_merge;
3162 * The return value of merge_recursive() is 1 on clean, and 0 on
3163 * unclean merge.
3165 * Let's reverse that, so that do_merge() returns 0 upon success and
3166 * 1 upon failed merge (keeping the return value -1 for the cases where
3167 * we will want to reschedule the `merge` command).
3169 ret = !ret;
3171 if (active_cache_changed &&
3172 write_locked_index(&the_index, &lock, COMMIT_LOCK)) {
3173 ret = error(_("merge: Unable to write new index file"));
3174 goto leave_merge;
3177 rollback_lock_file(&lock);
3178 if (ret)
3179 rerere(opts->allow_rerere_auto);
3180 else
3182 * In case of problems, we now want to return a positive
3183 * value (a negative one would indicate that the `merge`
3184 * command needs to be rescheduled).
3186 ret = !!run_git_commit(git_path_merge_msg(the_repository), opts,
3187 run_commit_flags);
3189 leave_merge:
3190 strbuf_release(&ref_name);
3191 rollback_lock_file(&lock);
3192 free_commit_list(to_merge);
3193 return ret;
3196 static int is_final_fixup(struct todo_list *todo_list)
3198 int i = todo_list->current;
3200 if (!is_fixup(todo_list->items[i].command))
3201 return 0;
3203 while (++i < todo_list->nr)
3204 if (is_fixup(todo_list->items[i].command))
3205 return 0;
3206 else if (!is_noop(todo_list->items[i].command))
3207 break;
3208 return 1;
3211 static enum todo_command peek_command(struct todo_list *todo_list, int offset)
3213 int i;
3215 for (i = todo_list->current + offset; i < todo_list->nr; i++)
3216 if (!is_noop(todo_list->items[i].command))
3217 return todo_list->items[i].command;
3219 return -1;
3222 static int apply_autostash(struct replay_opts *opts)
3224 struct strbuf stash_sha1 = STRBUF_INIT;
3225 struct child_process child = CHILD_PROCESS_INIT;
3226 int ret = 0;
3228 if (!read_oneliner(&stash_sha1, rebase_path_autostash(), 1)) {
3229 strbuf_release(&stash_sha1);
3230 return 0;
3232 strbuf_trim(&stash_sha1);
3234 child.git_cmd = 1;
3235 child.no_stdout = 1;
3236 child.no_stderr = 1;
3237 argv_array_push(&child.args, "stash");
3238 argv_array_push(&child.args, "apply");
3239 argv_array_push(&child.args, stash_sha1.buf);
3240 if (!run_command(&child))
3241 fprintf(stderr, _("Applied autostash.\n"));
3242 else {
3243 struct child_process store = CHILD_PROCESS_INIT;
3245 store.git_cmd = 1;
3246 argv_array_push(&store.args, "stash");
3247 argv_array_push(&store.args, "store");
3248 argv_array_push(&store.args, "-m");
3249 argv_array_push(&store.args, "autostash");
3250 argv_array_push(&store.args, "-q");
3251 argv_array_push(&store.args, stash_sha1.buf);
3252 if (run_command(&store))
3253 ret = error(_("cannot store %s"), stash_sha1.buf);
3254 else
3255 fprintf(stderr,
3256 _("Applying autostash resulted in conflicts.\n"
3257 "Your changes are safe in the stash.\n"
3258 "You can run \"git stash pop\" or"
3259 " \"git stash drop\" at any time.\n"));
3262 strbuf_release(&stash_sha1);
3263 return ret;
3266 static const char *reflog_message(struct replay_opts *opts,
3267 const char *sub_action, const char *fmt, ...)
3269 va_list ap;
3270 static struct strbuf buf = STRBUF_INIT;
3272 va_start(ap, fmt);
3273 strbuf_reset(&buf);
3274 strbuf_addstr(&buf, action_name(opts));
3275 if (sub_action)
3276 strbuf_addf(&buf, " (%s)", sub_action);
3277 if (fmt) {
3278 strbuf_addstr(&buf, ": ");
3279 strbuf_vaddf(&buf, fmt, ap);
3281 va_end(ap);
3283 return buf.buf;
3286 static const char rescheduled_advice[] =
3287 N_("Could not execute the todo command\n"
3288 "\n"
3289 " %.*s"
3290 "\n"
3291 "It has been rescheduled; To edit the command before continuing, please\n"
3292 "edit the todo list first:\n"
3293 "\n"
3294 " git rebase --edit-todo\n"
3295 " git rebase --continue\n");
3297 static int pick_commits(struct todo_list *todo_list, struct replay_opts *opts)
3299 int res = 0, reschedule = 0;
3301 setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
3302 if (opts->allow_ff)
3303 assert(!(opts->signoff || opts->no_commit ||
3304 opts->record_origin || opts->edit));
3305 if (read_and_refresh_cache(opts))
3306 return -1;
3308 while (todo_list->current < todo_list->nr) {
3309 struct todo_item *item = todo_list->items + todo_list->current;
3310 if (save_todo(todo_list, opts))
3311 return -1;
3312 if (is_rebase_i(opts)) {
3313 if (item->command != TODO_COMMENT) {
3314 FILE *f = fopen(rebase_path_msgnum(), "w");
3316 todo_list->done_nr++;
3318 if (f) {
3319 fprintf(f, "%d\n", todo_list->done_nr);
3320 fclose(f);
3322 fprintf(stderr, "Rebasing (%d/%d)%s",
3323 todo_list->done_nr,
3324 todo_list->total_nr,
3325 opts->verbose ? "\n" : "\r");
3327 unlink(rebase_path_message());
3328 unlink(rebase_path_author_script());
3329 unlink(rebase_path_stopped_sha());
3330 unlink(rebase_path_amend());
3331 delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
3333 if (item->command <= TODO_SQUASH) {
3334 if (is_rebase_i(opts))
3335 setenv("GIT_REFLOG_ACTION", reflog_message(opts,
3336 command_to_string(item->command), NULL),
3338 res = do_pick_commit(item->command, item->commit,
3339 opts, is_final_fixup(todo_list));
3340 if (is_rebase_i(opts) && res < 0) {
3341 /* Reschedule */
3342 advise(_(rescheduled_advice),
3343 get_item_line_length(todo_list,
3344 todo_list->current),
3345 get_item_line(todo_list,
3346 todo_list->current));
3347 todo_list->current--;
3348 if (save_todo(todo_list, opts))
3349 return -1;
3351 if (item->command == TODO_EDIT) {
3352 struct commit *commit = item->commit;
3353 if (!res)
3354 fprintf(stderr,
3355 _("Stopped at %s... %.*s\n"),
3356 short_commit_name(commit),
3357 item->arg_len, item->arg);
3358 return error_with_patch(commit,
3359 item->arg, item->arg_len, opts, res,
3360 !res);
3362 if (is_rebase_i(opts) && !res)
3363 record_in_rewritten(&item->commit->object.oid,
3364 peek_command(todo_list, 1));
3365 if (res && is_fixup(item->command)) {
3366 if (res == 1)
3367 intend_to_amend();
3368 return error_failed_squash(item->commit, opts,
3369 item->arg_len, item->arg);
3370 } else if (res && is_rebase_i(opts) && item->commit) {
3371 int to_amend = 0;
3372 struct object_id oid;
3375 * If we are rewording and have either
3376 * fast-forwarded already, or are about to
3377 * create a new root commit, we want to amend,
3378 * otherwise we do not.
3380 if (item->command == TODO_REWORD &&
3381 !get_oid("HEAD", &oid) &&
3382 (!oidcmp(&item->commit->object.oid, &oid) ||
3383 (opts->have_squash_onto &&
3384 !oidcmp(&opts->squash_onto, &oid))))
3385 to_amend = 1;
3387 return res | error_with_patch(item->commit,
3388 item->arg, item->arg_len, opts,
3389 res, to_amend);
3391 } else if (item->command == TODO_EXEC) {
3392 char *end_of_arg = (char *)(item->arg + item->arg_len);
3393 int saved = *end_of_arg;
3394 struct stat st;
3396 *end_of_arg = '\0';
3397 res = do_exec(item->arg);
3398 *end_of_arg = saved;
3400 /* Reread the todo file if it has changed. */
3401 if (res)
3402 ; /* fall through */
3403 else if (stat(get_todo_path(opts), &st))
3404 res = error_errno(_("could not stat '%s'"),
3405 get_todo_path(opts));
3406 else if (match_stat_data(&todo_list->stat, &st)) {
3407 todo_list_release(todo_list);
3408 if (read_populate_todo(todo_list, opts))
3409 res = -1; /* message was printed */
3410 /* `current` will be incremented below */
3411 todo_list->current = -1;
3413 } else if (item->command == TODO_LABEL) {
3414 if ((res = do_label(item->arg, item->arg_len)))
3415 reschedule = 1;
3416 } else if (item->command == TODO_RESET) {
3417 if ((res = do_reset(item->arg, item->arg_len, opts)))
3418 reschedule = 1;
3419 } else if (item->command == TODO_MERGE) {
3420 if ((res = do_merge(item->commit,
3421 item->arg, item->arg_len,
3422 item->flags, opts)) < 0)
3423 reschedule = 1;
3424 else if (item->commit)
3425 record_in_rewritten(&item->commit->object.oid,
3426 peek_command(todo_list, 1));
3427 if (res > 0)
3428 /* failed with merge conflicts */
3429 return error_with_patch(item->commit,
3430 item->arg,
3431 item->arg_len, opts,
3432 res, 0);
3433 } else if (!is_noop(item->command))
3434 return error(_("unknown command %d"), item->command);
3436 if (reschedule) {
3437 advise(_(rescheduled_advice),
3438 get_item_line_length(todo_list,
3439 todo_list->current),
3440 get_item_line(todo_list, todo_list->current));
3441 todo_list->current--;
3442 if (save_todo(todo_list, opts))
3443 return -1;
3444 if (item->commit)
3445 return error_with_patch(item->commit,
3446 item->arg,
3447 item->arg_len, opts,
3448 res, 0);
3451 todo_list->current++;
3452 if (res)
3453 return res;
3456 if (is_rebase_i(opts)) {
3457 struct strbuf head_ref = STRBUF_INIT, buf = STRBUF_INIT;
3458 struct stat st;
3460 /* Stopped in the middle, as planned? */
3461 if (todo_list->current < todo_list->nr)
3462 return 0;
3464 if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
3465 starts_with(head_ref.buf, "refs/")) {
3466 const char *msg;
3467 struct object_id head, orig;
3468 int res;
3470 if (get_oid("HEAD", &head)) {
3471 res = error(_("cannot read HEAD"));
3472 cleanup_head_ref:
3473 strbuf_release(&head_ref);
3474 strbuf_release(&buf);
3475 return res;
3477 if (!read_oneliner(&buf, rebase_path_orig_head(), 0) ||
3478 get_oid_hex(buf.buf, &orig)) {
3479 res = error(_("could not read orig-head"));
3480 goto cleanup_head_ref;
3482 strbuf_reset(&buf);
3483 if (!read_oneliner(&buf, rebase_path_onto(), 0)) {
3484 res = error(_("could not read 'onto'"));
3485 goto cleanup_head_ref;
3487 msg = reflog_message(opts, "finish", "%s onto %s",
3488 head_ref.buf, buf.buf);
3489 if (update_ref(msg, head_ref.buf, &head, &orig,
3490 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR)) {
3491 res = error(_("could not update %s"),
3492 head_ref.buf);
3493 goto cleanup_head_ref;
3495 msg = reflog_message(opts, "finish", "returning to %s",
3496 head_ref.buf);
3497 if (create_symref("HEAD", head_ref.buf, msg)) {
3498 res = error(_("could not update HEAD to %s"),
3499 head_ref.buf);
3500 goto cleanup_head_ref;
3502 strbuf_reset(&buf);
3505 if (opts->verbose) {
3506 struct rev_info log_tree_opt;
3507 struct object_id orig, head;
3509 memset(&log_tree_opt, 0, sizeof(log_tree_opt));
3510 init_revisions(&log_tree_opt, NULL);
3511 log_tree_opt.diff = 1;
3512 log_tree_opt.diffopt.output_format =
3513 DIFF_FORMAT_DIFFSTAT;
3514 log_tree_opt.disable_stdin = 1;
3516 if (read_oneliner(&buf, rebase_path_orig_head(), 0) &&
3517 !get_oid(buf.buf, &orig) &&
3518 !get_oid("HEAD", &head)) {
3519 diff_tree_oid(&orig, &head, "",
3520 &log_tree_opt.diffopt);
3521 log_tree_diff_flush(&log_tree_opt);
3524 flush_rewritten_pending();
3525 if (!stat(rebase_path_rewritten_list(), &st) &&
3526 st.st_size > 0) {
3527 struct child_process child = CHILD_PROCESS_INIT;
3528 const char *post_rewrite_hook =
3529 find_hook("post-rewrite");
3531 child.in = open(rebase_path_rewritten_list(), O_RDONLY);
3532 child.git_cmd = 1;
3533 argv_array_push(&child.args, "notes");
3534 argv_array_push(&child.args, "copy");
3535 argv_array_push(&child.args, "--for-rewrite=rebase");
3536 /* we don't care if this copying failed */
3537 run_command(&child);
3539 if (post_rewrite_hook) {
3540 struct child_process hook = CHILD_PROCESS_INIT;
3542 hook.in = open(rebase_path_rewritten_list(),
3543 O_RDONLY);
3544 hook.stdout_to_stderr = 1;
3545 argv_array_push(&hook.args, post_rewrite_hook);
3546 argv_array_push(&hook.args, "rebase");
3547 /* we don't care if this hook failed */
3548 run_command(&hook);
3551 apply_autostash(opts);
3553 fprintf(stderr, "Successfully rebased and updated %s.\n",
3554 head_ref.buf);
3556 strbuf_release(&buf);
3557 strbuf_release(&head_ref);
3561 * Sequence of picks finished successfully; cleanup by
3562 * removing the .git/sequencer directory
3564 return sequencer_remove_state(opts);
3567 static int continue_single_pick(void)
3569 const char *argv[] = { "commit", NULL };
3571 if (!file_exists(git_path_cherry_pick_head(the_repository)) &&
3572 !file_exists(git_path_revert_head(the_repository)))
3573 return error(_("no cherry-pick or revert in progress"));
3574 return run_command_v_opt(argv, RUN_GIT_CMD);
3577 static int commit_staged_changes(struct replay_opts *opts,
3578 struct todo_list *todo_list)
3580 unsigned int flags = ALLOW_EMPTY | EDIT_MSG;
3581 unsigned int final_fixup = 0, is_clean;
3583 if (has_unstaged_changes(1))
3584 return error(_("cannot rebase: You have unstaged changes."));
3586 is_clean = !has_uncommitted_changes(0);
3588 if (file_exists(rebase_path_amend())) {
3589 struct strbuf rev = STRBUF_INIT;
3590 struct object_id head, to_amend;
3592 if (get_oid("HEAD", &head))
3593 return error(_("cannot amend non-existing commit"));
3594 if (!read_oneliner(&rev, rebase_path_amend(), 0))
3595 return error(_("invalid file: '%s'"), rebase_path_amend());
3596 if (get_oid_hex(rev.buf, &to_amend))
3597 return error(_("invalid contents: '%s'"),
3598 rebase_path_amend());
3599 if (!is_clean && oidcmp(&head, &to_amend))
3600 return error(_("\nYou have uncommitted changes in your "
3601 "working tree. Please, commit them\n"
3602 "first and then run 'git rebase "
3603 "--continue' again."));
3605 * When skipping a failed fixup/squash, we need to edit the
3606 * commit message, the current fixup list and count, and if it
3607 * was the last fixup/squash in the chain, we need to clean up
3608 * the commit message and if there was a squash, let the user
3609 * edit it.
3611 if (is_clean && !oidcmp(&head, &to_amend) &&
3612 opts->current_fixup_count > 0 &&
3613 file_exists(rebase_path_stopped_sha())) {
3614 const char *p = opts->current_fixups.buf;
3615 int len = opts->current_fixups.len;
3617 opts->current_fixup_count--;
3618 if (!len)
3619 BUG("Incorrect current_fixups:\n%s", p);
3620 while (len && p[len - 1] != '\n')
3621 len--;
3622 strbuf_setlen(&opts->current_fixups, len);
3623 if (write_message(p, len, rebase_path_current_fixups(),
3624 0) < 0)
3625 return error(_("could not write file: '%s'"),
3626 rebase_path_current_fixups());
3629 * If a fixup/squash in a fixup/squash chain failed, the
3630 * commit message is already correct, no need to commit
3631 * it again.
3633 * Only if it is the final command in the fixup/squash
3634 * chain, and only if the chain is longer than a single
3635 * fixup/squash command (which was just skipped), do we
3636 * actually need to re-commit with a cleaned up commit
3637 * message.
3639 if (opts->current_fixup_count > 0 &&
3640 !is_fixup(peek_command(todo_list, 0))) {
3641 final_fixup = 1;
3643 * If there was not a single "squash" in the
3644 * chain, we only need to clean up the commit
3645 * message, no need to bother the user with
3646 * opening the commit message in the editor.
3648 if (!starts_with(p, "squash ") &&
3649 !strstr(p, "\nsquash "))
3650 flags = (flags & ~EDIT_MSG) | CLEANUP_MSG;
3651 } else if (is_fixup(peek_command(todo_list, 0))) {
3653 * We need to update the squash message to skip
3654 * the latest commit message.
3656 struct commit *commit;
3657 const char *path = rebase_path_squash_msg();
3659 if (parse_head(&commit) ||
3660 !(p = get_commit_buffer(commit, NULL)) ||
3661 write_message(p, strlen(p), path, 0)) {
3662 unuse_commit_buffer(commit, p);
3663 return error(_("could not write file: "
3664 "'%s'"), path);
3666 unuse_commit_buffer(commit, p);
3670 strbuf_release(&rev);
3671 flags |= AMEND_MSG;
3674 if (is_clean) {
3675 const char *cherry_pick_head = git_path_cherry_pick_head(the_repository);
3677 if (file_exists(cherry_pick_head) && unlink(cherry_pick_head))
3678 return error(_("could not remove CHERRY_PICK_HEAD"));
3679 if (!final_fixup)
3680 return 0;
3683 if (run_git_commit(final_fixup ? NULL : rebase_path_message(),
3684 opts, flags))
3685 return error(_("could not commit staged changes."));
3686 unlink(rebase_path_amend());
3687 if (final_fixup) {
3688 unlink(rebase_path_fixup_msg());
3689 unlink(rebase_path_squash_msg());
3691 if (opts->current_fixup_count > 0) {
3693 * Whether final fixup or not, we just cleaned up the commit
3694 * message...
3696 unlink(rebase_path_current_fixups());
3697 strbuf_reset(&opts->current_fixups);
3698 opts->current_fixup_count = 0;
3700 return 0;
3703 int sequencer_continue(struct replay_opts *opts)
3705 struct todo_list todo_list = TODO_LIST_INIT;
3706 int res;
3708 if (read_and_refresh_cache(opts))
3709 return -1;
3711 if (read_populate_opts(opts))
3712 return -1;
3713 if (is_rebase_i(opts)) {
3714 if ((res = read_populate_todo(&todo_list, opts)))
3715 goto release_todo_list;
3716 if (commit_staged_changes(opts, &todo_list))
3717 return -1;
3718 } else if (!file_exists(get_todo_path(opts)))
3719 return continue_single_pick();
3720 else if ((res = read_populate_todo(&todo_list, opts)))
3721 goto release_todo_list;
3723 if (!is_rebase_i(opts)) {
3724 /* Verify that the conflict has been resolved */
3725 if (file_exists(git_path_cherry_pick_head(the_repository)) ||
3726 file_exists(git_path_revert_head(the_repository))) {
3727 res = continue_single_pick();
3728 if (res)
3729 goto release_todo_list;
3731 if (index_differs_from("HEAD", NULL, 0)) {
3732 res = error_dirty_index(opts);
3733 goto release_todo_list;
3735 todo_list.current++;
3736 } else if (file_exists(rebase_path_stopped_sha())) {
3737 struct strbuf buf = STRBUF_INIT;
3738 struct object_id oid;
3740 if (read_oneliner(&buf, rebase_path_stopped_sha(), 1) &&
3741 !get_oid_committish(buf.buf, &oid))
3742 record_in_rewritten(&oid, peek_command(&todo_list, 0));
3743 strbuf_release(&buf);
3746 res = pick_commits(&todo_list, opts);
3747 release_todo_list:
3748 todo_list_release(&todo_list);
3749 return res;
3752 static int single_pick(struct commit *cmit, struct replay_opts *opts)
3754 setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
3755 return do_pick_commit(opts->action == REPLAY_PICK ?
3756 TODO_PICK : TODO_REVERT, cmit, opts, 0);
3759 int sequencer_pick_revisions(struct replay_opts *opts)
3761 struct todo_list todo_list = TODO_LIST_INIT;
3762 struct object_id oid;
3763 int i, res;
3765 assert(opts->revs);
3766 if (read_and_refresh_cache(opts))
3767 return -1;
3769 for (i = 0; i < opts->revs->pending.nr; i++) {
3770 struct object_id oid;
3771 const char *name = opts->revs->pending.objects[i].name;
3773 /* This happens when using --stdin. */
3774 if (!strlen(name))
3775 continue;
3777 if (!get_oid(name, &oid)) {
3778 if (!lookup_commit_reference_gently(the_repository, &oid, 1)) {
3779 enum object_type type = oid_object_info(the_repository,
3780 &oid,
3781 NULL);
3782 return error(_("%s: can't cherry-pick a %s"),
3783 name, type_name(type));
3785 } else
3786 return error(_("%s: bad revision"), name);
3790 * If we were called as "git cherry-pick <commit>", just
3791 * cherry-pick/revert it, set CHERRY_PICK_HEAD /
3792 * REVERT_HEAD, and don't touch the sequencer state.
3793 * This means it is possible to cherry-pick in the middle
3794 * of a cherry-pick sequence.
3796 if (opts->revs->cmdline.nr == 1 &&
3797 opts->revs->cmdline.rev->whence == REV_CMD_REV &&
3798 opts->revs->no_walk &&
3799 !opts->revs->cmdline.rev->flags) {
3800 struct commit *cmit;
3801 if (prepare_revision_walk(opts->revs))
3802 return error(_("revision walk setup failed"));
3803 cmit = get_revision(opts->revs);
3804 if (!cmit)
3805 return error(_("empty commit set passed"));
3806 if (get_revision(opts->revs))
3807 BUG("unexpected extra commit from walk");
3808 return single_pick(cmit, opts);
3812 * Start a new cherry-pick/ revert sequence; but
3813 * first, make sure that an existing one isn't in
3814 * progress
3817 if (walk_revs_populate_todo(&todo_list, opts) ||
3818 create_seq_dir() < 0)
3819 return -1;
3820 if (get_oid("HEAD", &oid) && (opts->action == REPLAY_REVERT))
3821 return error(_("can't revert as initial commit"));
3822 if (save_head(oid_to_hex(&oid)))
3823 return -1;
3824 if (save_opts(opts))
3825 return -1;
3826 update_abort_safety_file();
3827 res = pick_commits(&todo_list, opts);
3828 todo_list_release(&todo_list);
3829 return res;
3832 void append_signoff(struct strbuf *msgbuf, int ignore_footer, unsigned flag)
3834 unsigned no_dup_sob = flag & APPEND_SIGNOFF_DEDUP;
3835 struct strbuf sob = STRBUF_INIT;
3836 int has_footer;
3838 strbuf_addstr(&sob, sign_off_header);
3839 strbuf_addstr(&sob, fmt_name(getenv("GIT_COMMITTER_NAME"),
3840 getenv("GIT_COMMITTER_EMAIL")));
3841 strbuf_addch(&sob, '\n');
3843 if (!ignore_footer)
3844 strbuf_complete_line(msgbuf);
3847 * If the whole message buffer is equal to the sob, pretend that we
3848 * found a conforming footer with a matching sob
3850 if (msgbuf->len - ignore_footer == sob.len &&
3851 !strncmp(msgbuf->buf, sob.buf, sob.len))
3852 has_footer = 3;
3853 else
3854 has_footer = has_conforming_footer(msgbuf, &sob, ignore_footer);
3856 if (!has_footer) {
3857 const char *append_newlines = NULL;
3858 size_t len = msgbuf->len - ignore_footer;
3860 if (!len) {
3862 * The buffer is completely empty. Leave foom for
3863 * the title and body to be filled in by the user.
3865 append_newlines = "\n\n";
3866 } else if (len == 1) {
3868 * Buffer contains a single newline. Add another
3869 * so that we leave room for the title and body.
3871 append_newlines = "\n";
3872 } else if (msgbuf->buf[len - 2] != '\n') {
3874 * Buffer ends with a single newline. Add another
3875 * so that there is an empty line between the message
3876 * body and the sob.
3878 append_newlines = "\n";
3879 } /* else, the buffer already ends with two newlines. */
3881 if (append_newlines)
3882 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
3883 append_newlines, strlen(append_newlines));
3886 if (has_footer != 3 && (!no_dup_sob || has_footer != 2))
3887 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
3888 sob.buf, sob.len);
3890 strbuf_release(&sob);
3893 struct labels_entry {
3894 struct hashmap_entry entry;
3895 char label[FLEX_ARRAY];
3898 static int labels_cmp(const void *fndata, const struct labels_entry *a,
3899 const struct labels_entry *b, const void *key)
3901 return key ? strcmp(a->label, key) : strcmp(a->label, b->label);
3904 struct string_entry {
3905 struct oidmap_entry entry;
3906 char string[FLEX_ARRAY];
3909 struct label_state {
3910 struct oidmap commit2label;
3911 struct hashmap labels;
3912 struct strbuf buf;
3915 static const char *label_oid(struct object_id *oid, const char *label,
3916 struct label_state *state)
3918 struct labels_entry *labels_entry;
3919 struct string_entry *string_entry;
3920 struct object_id dummy;
3921 size_t len;
3922 int i;
3924 string_entry = oidmap_get(&state->commit2label, oid);
3925 if (string_entry)
3926 return string_entry->string;
3929 * For "uninteresting" commits, i.e. commits that are not to be
3930 * rebased, and which can therefore not be labeled, we use a unique
3931 * abbreviation of the commit name. This is slightly more complicated
3932 * than calling find_unique_abbrev() because we also need to make
3933 * sure that the abbreviation does not conflict with any other
3934 * label.
3936 * We disallow "interesting" commits to be labeled by a string that
3937 * is a valid full-length hash, to ensure that we always can find an
3938 * abbreviation for any uninteresting commit's names that does not
3939 * clash with any other label.
3941 if (!label) {
3942 char *p;
3944 strbuf_reset(&state->buf);
3945 strbuf_grow(&state->buf, GIT_SHA1_HEXSZ);
3946 label = p = state->buf.buf;
3948 find_unique_abbrev_r(p, oid, default_abbrev);
3951 * We may need to extend the abbreviated hash so that there is
3952 * no conflicting label.
3954 if (hashmap_get_from_hash(&state->labels, strihash(p), p)) {
3955 size_t i = strlen(p) + 1;
3957 oid_to_hex_r(p, oid);
3958 for (; i < GIT_SHA1_HEXSZ; i++) {
3959 char save = p[i];
3960 p[i] = '\0';
3961 if (!hashmap_get_from_hash(&state->labels,
3962 strihash(p), p))
3963 break;
3964 p[i] = save;
3967 } else if (((len = strlen(label)) == the_hash_algo->hexsz &&
3968 !get_oid_hex(label, &dummy)) ||
3969 (len == 1 && *label == '#') ||
3970 hashmap_get_from_hash(&state->labels,
3971 strihash(label), label)) {
3973 * If the label already exists, or if the label is a valid full
3974 * OID, or the label is a '#' (which we use as a separator
3975 * between merge heads and oneline), we append a dash and a
3976 * number to make it unique.
3978 struct strbuf *buf = &state->buf;
3980 strbuf_reset(buf);
3981 strbuf_add(buf, label, len);
3983 for (i = 2; ; i++) {
3984 strbuf_setlen(buf, len);
3985 strbuf_addf(buf, "-%d", i);
3986 if (!hashmap_get_from_hash(&state->labels,
3987 strihash(buf->buf),
3988 buf->buf))
3989 break;
3992 label = buf->buf;
3995 FLEX_ALLOC_STR(labels_entry, label, label);
3996 hashmap_entry_init(labels_entry, strihash(label));
3997 hashmap_add(&state->labels, labels_entry);
3999 FLEX_ALLOC_STR(string_entry, string, label);
4000 oidcpy(&string_entry->entry.oid, oid);
4001 oidmap_put(&state->commit2label, string_entry);
4003 return string_entry->string;
4006 static int make_script_with_merges(struct pretty_print_context *pp,
4007 struct rev_info *revs, FILE *out,
4008 unsigned flags)
4010 int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4011 int rebase_cousins = flags & TODO_LIST_REBASE_COUSINS;
4012 struct strbuf buf = STRBUF_INIT, oneline = STRBUF_INIT;
4013 struct strbuf label = STRBUF_INIT;
4014 struct commit_list *commits = NULL, **tail = &commits, *iter;
4015 struct commit_list *tips = NULL, **tips_tail = &tips;
4016 struct commit *commit;
4017 struct oidmap commit2todo = OIDMAP_INIT;
4018 struct string_entry *entry;
4019 struct oidset interesting = OIDSET_INIT, child_seen = OIDSET_INIT,
4020 shown = OIDSET_INIT;
4021 struct label_state state = { OIDMAP_INIT, { NULL }, STRBUF_INIT };
4023 int abbr = flags & TODO_LIST_ABBREVIATE_CMDS;
4024 const char *cmd_pick = abbr ? "p" : "pick",
4025 *cmd_label = abbr ? "l" : "label",
4026 *cmd_reset = abbr ? "t" : "reset",
4027 *cmd_merge = abbr ? "m" : "merge";
4029 oidmap_init(&commit2todo, 0);
4030 oidmap_init(&state.commit2label, 0);
4031 hashmap_init(&state.labels, (hashmap_cmp_fn) labels_cmp, NULL, 0);
4032 strbuf_init(&state.buf, 32);
4034 if (revs->cmdline.nr && (revs->cmdline.rev[0].flags & BOTTOM)) {
4035 struct object_id *oid = &revs->cmdline.rev[0].item->oid;
4036 FLEX_ALLOC_STR(entry, string, "onto");
4037 oidcpy(&entry->entry.oid, oid);
4038 oidmap_put(&state.commit2label, entry);
4042 * First phase:
4043 * - get onelines for all commits
4044 * - gather all branch tips (i.e. 2nd or later parents of merges)
4045 * - label all branch tips
4047 while ((commit = get_revision(revs))) {
4048 struct commit_list *to_merge;
4049 const char *p1, *p2;
4050 struct object_id *oid;
4051 int is_empty;
4053 tail = &commit_list_insert(commit, tail)->next;
4054 oidset_insert(&interesting, &commit->object.oid);
4056 is_empty = is_original_commit_empty(commit);
4057 if (!is_empty && (commit->object.flags & PATCHSAME))
4058 continue;
4060 strbuf_reset(&oneline);
4061 pretty_print_commit(pp, commit, &oneline);
4063 to_merge = commit->parents ? commit->parents->next : NULL;
4064 if (!to_merge) {
4065 /* non-merge commit: easy case */
4066 strbuf_reset(&buf);
4067 if (!keep_empty && is_empty)
4068 strbuf_addf(&buf, "%c ", comment_line_char);
4069 strbuf_addf(&buf, "%s %s %s", cmd_pick,
4070 oid_to_hex(&commit->object.oid),
4071 oneline.buf);
4073 FLEX_ALLOC_STR(entry, string, buf.buf);
4074 oidcpy(&entry->entry.oid, &commit->object.oid);
4075 oidmap_put(&commit2todo, entry);
4077 continue;
4080 /* Create a label */
4081 strbuf_reset(&label);
4082 if (skip_prefix(oneline.buf, "Merge ", &p1) &&
4083 (p1 = strchr(p1, '\'')) &&
4084 (p2 = strchr(++p1, '\'')))
4085 strbuf_add(&label, p1, p2 - p1);
4086 else if (skip_prefix(oneline.buf, "Merge pull request ",
4087 &p1) &&
4088 (p1 = strstr(p1, " from ")))
4089 strbuf_addstr(&label, p1 + strlen(" from "));
4090 else
4091 strbuf_addbuf(&label, &oneline);
4093 for (p1 = label.buf; *p1; p1++)
4094 if (isspace(*p1))
4095 *(char *)p1 = '-';
4097 strbuf_reset(&buf);
4098 strbuf_addf(&buf, "%s -C %s",
4099 cmd_merge, oid_to_hex(&commit->object.oid));
4101 /* label the tips of merged branches */
4102 for (; to_merge; to_merge = to_merge->next) {
4103 oid = &to_merge->item->object.oid;
4104 strbuf_addch(&buf, ' ');
4106 if (!oidset_contains(&interesting, oid)) {
4107 strbuf_addstr(&buf, label_oid(oid, NULL,
4108 &state));
4109 continue;
4112 tips_tail = &commit_list_insert(to_merge->item,
4113 tips_tail)->next;
4115 strbuf_addstr(&buf, label_oid(oid, label.buf, &state));
4117 strbuf_addf(&buf, " # %s", oneline.buf);
4119 FLEX_ALLOC_STR(entry, string, buf.buf);
4120 oidcpy(&entry->entry.oid, &commit->object.oid);
4121 oidmap_put(&commit2todo, entry);
4125 * Second phase:
4126 * - label branch points
4127 * - add HEAD to the branch tips
4129 for (iter = commits; iter; iter = iter->next) {
4130 struct commit_list *parent = iter->item->parents;
4131 for (; parent; parent = parent->next) {
4132 struct object_id *oid = &parent->item->object.oid;
4133 if (!oidset_contains(&interesting, oid))
4134 continue;
4135 if (!oidset_contains(&child_seen, oid))
4136 oidset_insert(&child_seen, oid);
4137 else
4138 label_oid(oid, "branch-point", &state);
4141 /* Add HEAD as implict "tip of branch" */
4142 if (!iter->next)
4143 tips_tail = &commit_list_insert(iter->item,
4144 tips_tail)->next;
4148 * Third phase: output the todo list. This is a bit tricky, as we
4149 * want to avoid jumping back and forth between revisions. To
4150 * accomplish that goal, we walk backwards from the branch tips,
4151 * gathering commits not yet shown, reversing the list on the fly,
4152 * then outputting that list (labeling revisions as needed).
4154 fprintf(out, "%s onto\n", cmd_label);
4155 for (iter = tips; iter; iter = iter->next) {
4156 struct commit_list *list = NULL, *iter2;
4158 commit = iter->item;
4159 if (oidset_contains(&shown, &commit->object.oid))
4160 continue;
4161 entry = oidmap_get(&state.commit2label, &commit->object.oid);
4163 if (entry)
4164 fprintf(out, "\n%c Branch %s\n", comment_line_char, entry->string);
4165 else
4166 fprintf(out, "\n");
4168 while (oidset_contains(&interesting, &commit->object.oid) &&
4169 !oidset_contains(&shown, &commit->object.oid)) {
4170 commit_list_insert(commit, &list);
4171 if (!commit->parents) {
4172 commit = NULL;
4173 break;
4175 commit = commit->parents->item;
4178 if (!commit)
4179 fprintf(out, "%s %s\n", cmd_reset,
4180 rebase_cousins ? "onto" : "[new root]");
4181 else {
4182 const char *to = NULL;
4184 entry = oidmap_get(&state.commit2label,
4185 &commit->object.oid);
4186 if (entry)
4187 to = entry->string;
4188 else if (!rebase_cousins)
4189 to = label_oid(&commit->object.oid, NULL,
4190 &state);
4192 if (!to || !strcmp(to, "onto"))
4193 fprintf(out, "%s onto\n", cmd_reset);
4194 else {
4195 strbuf_reset(&oneline);
4196 pretty_print_commit(pp, commit, &oneline);
4197 fprintf(out, "%s %s # %s\n",
4198 cmd_reset, to, oneline.buf);
4202 for (iter2 = list; iter2; iter2 = iter2->next) {
4203 struct object_id *oid = &iter2->item->object.oid;
4204 entry = oidmap_get(&commit2todo, oid);
4205 /* only show if not already upstream */
4206 if (entry)
4207 fprintf(out, "%s\n", entry->string);
4208 entry = oidmap_get(&state.commit2label, oid);
4209 if (entry)
4210 fprintf(out, "%s %s\n",
4211 cmd_label, entry->string);
4212 oidset_insert(&shown, oid);
4215 free_commit_list(list);
4218 free_commit_list(commits);
4219 free_commit_list(tips);
4221 strbuf_release(&label);
4222 strbuf_release(&oneline);
4223 strbuf_release(&buf);
4225 oidmap_free(&commit2todo, 1);
4226 oidmap_free(&state.commit2label, 1);
4227 hashmap_free(&state.labels, 1);
4228 strbuf_release(&state.buf);
4230 return 0;
4233 int sequencer_make_script(FILE *out, int argc, const char **argv,
4234 unsigned flags)
4236 char *format = NULL;
4237 struct pretty_print_context pp = {0};
4238 struct strbuf buf = STRBUF_INIT;
4239 struct rev_info revs;
4240 struct commit *commit;
4241 int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4242 const char *insn = flags & TODO_LIST_ABBREVIATE_CMDS ? "p" : "pick";
4243 int rebase_merges = flags & TODO_LIST_REBASE_MERGES;
4245 init_revisions(&revs, NULL);
4246 revs.verbose_header = 1;
4247 if (!rebase_merges)
4248 revs.max_parents = 1;
4249 revs.cherry_mark = 1;
4250 revs.limited = 1;
4251 revs.reverse = 1;
4252 revs.right_only = 1;
4253 revs.sort_order = REV_SORT_IN_GRAPH_ORDER;
4254 revs.topo_order = 1;
4256 revs.pretty_given = 1;
4257 git_config_get_string("rebase.instructionFormat", &format);
4258 if (!format || !*format) {
4259 free(format);
4260 format = xstrdup("%s");
4262 get_commit_format(format, &revs);
4263 free(format);
4264 pp.fmt = revs.commit_format;
4265 pp.output_encoding = get_log_output_encoding();
4267 if (setup_revisions(argc, argv, &revs, NULL) > 1)
4268 return error(_("make_script: unhandled options"));
4270 if (prepare_revision_walk(&revs) < 0)
4271 return error(_("make_script: error preparing revisions"));
4273 if (rebase_merges)
4274 return make_script_with_merges(&pp, &revs, out, flags);
4276 while ((commit = get_revision(&revs))) {
4277 int is_empty = is_original_commit_empty(commit);
4279 if (!is_empty && (commit->object.flags & PATCHSAME))
4280 continue;
4281 strbuf_reset(&buf);
4282 if (!keep_empty && is_empty)
4283 strbuf_addf(&buf, "%c ", comment_line_char);
4284 strbuf_addf(&buf, "%s %s ", insn,
4285 oid_to_hex(&commit->object.oid));
4286 pretty_print_commit(&pp, commit, &buf);
4287 strbuf_addch(&buf, '\n');
4288 fputs(buf.buf, out);
4290 strbuf_release(&buf);
4291 return 0;
4295 * Add commands after pick and (series of) squash/fixup commands
4296 * in the todo list.
4298 int sequencer_add_exec_commands(const char *commands)
4300 const char *todo_file = rebase_path_todo();
4301 struct todo_list todo_list = TODO_LIST_INIT;
4302 struct strbuf *buf = &todo_list.buf;
4303 size_t offset = 0, commands_len = strlen(commands);
4304 int i, insert;
4306 if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0)
4307 return error(_("could not read '%s'."), todo_file);
4309 if (parse_insn_buffer(todo_list.buf.buf, &todo_list)) {
4310 todo_list_release(&todo_list);
4311 return error(_("unusable todo list: '%s'"), todo_file);
4315 * Insert <commands> after every pick. Here, fixup/squash chains
4316 * are considered part of the pick, so we insert the commands *after*
4317 * those chains if there are any.
4319 insert = -1;
4320 for (i = 0; i < todo_list.nr; i++) {
4321 enum todo_command command = todo_list.items[i].command;
4323 if (insert >= 0) {
4324 /* skip fixup/squash chains */
4325 if (command == TODO_COMMENT)
4326 continue;
4327 else if (is_fixup(command)) {
4328 insert = i + 1;
4329 continue;
4331 strbuf_insert(buf,
4332 todo_list.items[insert].offset_in_buf +
4333 offset, commands, commands_len);
4334 offset += commands_len;
4335 insert = -1;
4338 if (command == TODO_PICK || command == TODO_MERGE)
4339 insert = i + 1;
4342 /* insert or append final <commands> */
4343 if (insert >= 0 && insert < todo_list.nr)
4344 strbuf_insert(buf, todo_list.items[insert].offset_in_buf +
4345 offset, commands, commands_len);
4346 else if (insert >= 0 || !offset)
4347 strbuf_add(buf, commands, commands_len);
4349 i = write_message(buf->buf, buf->len, todo_file, 0);
4350 todo_list_release(&todo_list);
4351 return i;
4354 int transform_todos(unsigned flags)
4356 const char *todo_file = rebase_path_todo();
4357 struct todo_list todo_list = TODO_LIST_INIT;
4358 struct strbuf buf = STRBUF_INIT;
4359 struct todo_item *item;
4360 int i;
4362 if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0)
4363 return error(_("could not read '%s'."), todo_file);
4365 if (parse_insn_buffer(todo_list.buf.buf, &todo_list)) {
4366 todo_list_release(&todo_list);
4367 return error(_("unusable todo list: '%s'"), todo_file);
4370 for (item = todo_list.items, i = 0; i < todo_list.nr; i++, item++) {
4371 /* if the item is not a command write it and continue */
4372 if (item->command >= TODO_COMMENT) {
4373 strbuf_addf(&buf, "%.*s\n", item->arg_len, item->arg);
4374 continue;
4377 /* add command to the buffer */
4378 if (flags & TODO_LIST_ABBREVIATE_CMDS)
4379 strbuf_addch(&buf, command_to_char(item->command));
4380 else
4381 strbuf_addstr(&buf, command_to_string(item->command));
4383 /* add commit id */
4384 if (item->commit) {
4385 const char *oid = flags & TODO_LIST_SHORTEN_IDS ?
4386 short_commit_name(item->commit) :
4387 oid_to_hex(&item->commit->object.oid);
4389 if (item->command == TODO_MERGE) {
4390 if (item->flags & TODO_EDIT_MERGE_MSG)
4391 strbuf_addstr(&buf, " -c");
4392 else
4393 strbuf_addstr(&buf, " -C");
4396 strbuf_addf(&buf, " %s", oid);
4399 /* add all the rest */
4400 if (!item->arg_len)
4401 strbuf_addch(&buf, '\n');
4402 else
4403 strbuf_addf(&buf, " %.*s\n", item->arg_len, item->arg);
4406 i = write_message(buf.buf, buf.len, todo_file, 0);
4407 todo_list_release(&todo_list);
4408 return i;
4411 enum check_level {
4412 CHECK_IGNORE = 0, CHECK_WARN, CHECK_ERROR
4415 static enum check_level get_missing_commit_check_level(void)
4417 const char *value;
4419 if (git_config_get_value("rebase.missingcommitscheck", &value) ||
4420 !strcasecmp("ignore", value))
4421 return CHECK_IGNORE;
4422 if (!strcasecmp("warn", value))
4423 return CHECK_WARN;
4424 if (!strcasecmp("error", value))
4425 return CHECK_ERROR;
4426 warning(_("unrecognized setting %s for option "
4427 "rebase.missingCommitsCheck. Ignoring."), value);
4428 return CHECK_IGNORE;
4431 define_commit_slab(commit_seen, unsigned char);
4433 * Check if the user dropped some commits by mistake
4434 * Behaviour determined by rebase.missingCommitsCheck.
4435 * Check if there is an unrecognized command or a
4436 * bad SHA-1 in a command.
4438 int check_todo_list(void)
4440 enum check_level check_level = get_missing_commit_check_level();
4441 struct strbuf todo_file = STRBUF_INIT;
4442 struct todo_list todo_list = TODO_LIST_INIT;
4443 struct strbuf missing = STRBUF_INIT;
4444 int advise_to_edit_todo = 0, res = 0, i;
4445 struct commit_seen commit_seen;
4447 init_commit_seen(&commit_seen);
4449 strbuf_addstr(&todo_file, rebase_path_todo());
4450 if (strbuf_read_file_or_whine(&todo_list.buf, todo_file.buf) < 0) {
4451 res = -1;
4452 goto leave_check;
4454 advise_to_edit_todo = res =
4455 parse_insn_buffer(todo_list.buf.buf, &todo_list);
4457 if (res || check_level == CHECK_IGNORE)
4458 goto leave_check;
4460 /* Mark the commits in git-rebase-todo as seen */
4461 for (i = 0; i < todo_list.nr; i++) {
4462 struct commit *commit = todo_list.items[i].commit;
4463 if (commit)
4464 *commit_seen_at(&commit_seen, commit) = 1;
4467 todo_list_release(&todo_list);
4468 strbuf_addstr(&todo_file, ".backup");
4469 if (strbuf_read_file_or_whine(&todo_list.buf, todo_file.buf) < 0) {
4470 res = -1;
4471 goto leave_check;
4473 strbuf_release(&todo_file);
4474 res = !!parse_insn_buffer(todo_list.buf.buf, &todo_list);
4476 /* Find commits in git-rebase-todo.backup yet unseen */
4477 for (i = todo_list.nr - 1; i >= 0; i--) {
4478 struct todo_item *item = todo_list.items + i;
4479 struct commit *commit = item->commit;
4480 if (commit && !*commit_seen_at(&commit_seen, commit)) {
4481 strbuf_addf(&missing, " - %s %.*s\n",
4482 short_commit_name(commit),
4483 item->arg_len, item->arg);
4484 *commit_seen_at(&commit_seen, commit) = 1;
4488 /* Warn about missing commits */
4489 if (!missing.len)
4490 goto leave_check;
4492 if (check_level == CHECK_ERROR)
4493 advise_to_edit_todo = res = 1;
4495 fprintf(stderr,
4496 _("Warning: some commits may have been dropped accidentally.\n"
4497 "Dropped commits (newer to older):\n"));
4499 /* Make the list user-friendly and display */
4500 fputs(missing.buf, stderr);
4501 strbuf_release(&missing);
4503 fprintf(stderr, _("To avoid this message, use \"drop\" to "
4504 "explicitly remove a commit.\n\n"
4505 "Use 'git config rebase.missingCommitsCheck' to change "
4506 "the level of warnings.\n"
4507 "The possible behaviours are: ignore, warn, error.\n\n"));
4509 leave_check:
4510 clear_commit_seen(&commit_seen);
4511 strbuf_release(&todo_file);
4512 todo_list_release(&todo_list);
4514 if (advise_to_edit_todo)
4515 fprintf(stderr,
4516 _("You can fix this with 'git rebase --edit-todo' "
4517 "and then run 'git rebase --continue'.\n"
4518 "Or you can abort the rebase with 'git rebase"
4519 " --abort'.\n"));
4521 return res;
4524 static int rewrite_file(const char *path, const char *buf, size_t len)
4526 int rc = 0;
4527 int fd = open(path, O_WRONLY | O_TRUNC);
4528 if (fd < 0)
4529 return error_errno(_("could not open '%s' for writing"), path);
4530 if (write_in_full(fd, buf, len) < 0)
4531 rc = error_errno(_("could not write to '%s'"), path);
4532 if (close(fd) && !rc)
4533 rc = error_errno(_("could not close '%s'"), path);
4534 return rc;
4537 /* skip picking commits whose parents are unchanged */
4538 int skip_unnecessary_picks(void)
4540 const char *todo_file = rebase_path_todo();
4541 struct strbuf buf = STRBUF_INIT;
4542 struct todo_list todo_list = TODO_LIST_INIT;
4543 struct object_id onto_oid, *oid = &onto_oid, *parent_oid;
4544 int fd, i;
4546 if (!read_oneliner(&buf, rebase_path_onto(), 0))
4547 return error(_("could not read 'onto'"));
4548 if (get_oid(buf.buf, &onto_oid)) {
4549 strbuf_release(&buf);
4550 return error(_("need a HEAD to fixup"));
4552 strbuf_release(&buf);
4554 if (strbuf_read_file_or_whine(&todo_list.buf, todo_file) < 0)
4555 return -1;
4556 if (parse_insn_buffer(todo_list.buf.buf, &todo_list) < 0) {
4557 todo_list_release(&todo_list);
4558 return -1;
4561 for (i = 0; i < todo_list.nr; i++) {
4562 struct todo_item *item = todo_list.items + i;
4564 if (item->command >= TODO_NOOP)
4565 continue;
4566 if (item->command != TODO_PICK)
4567 break;
4568 if (parse_commit(item->commit)) {
4569 todo_list_release(&todo_list);
4570 return error(_("could not parse commit '%s'"),
4571 oid_to_hex(&item->commit->object.oid));
4573 if (!item->commit->parents)
4574 break; /* root commit */
4575 if (item->commit->parents->next)
4576 break; /* merge commit */
4577 parent_oid = &item->commit->parents->item->object.oid;
4578 if (hashcmp(parent_oid->hash, oid->hash))
4579 break;
4580 oid = &item->commit->object.oid;
4582 if (i > 0) {
4583 int offset = get_item_line_offset(&todo_list, i);
4584 const char *done_path = rebase_path_done();
4586 fd = open(done_path, O_CREAT | O_WRONLY | O_APPEND, 0666);
4587 if (fd < 0) {
4588 error_errno(_("could not open '%s' for writing"),
4589 done_path);
4590 todo_list_release(&todo_list);
4591 return -1;
4593 if (write_in_full(fd, todo_list.buf.buf, offset) < 0) {
4594 error_errno(_("could not write to '%s'"), done_path);
4595 todo_list_release(&todo_list);
4596 close(fd);
4597 return -1;
4599 close(fd);
4601 if (rewrite_file(rebase_path_todo(), todo_list.buf.buf + offset,
4602 todo_list.buf.len - offset) < 0) {
4603 todo_list_release(&todo_list);
4604 return -1;
4607 todo_list.current = i;
4608 if (is_fixup(peek_command(&todo_list, 0)))
4609 record_in_rewritten(oid, peek_command(&todo_list, 0));
4612 todo_list_release(&todo_list);
4613 printf("%s\n", oid_to_hex(oid));
4615 return 0;
4618 struct subject2item_entry {
4619 struct hashmap_entry entry;
4620 int i;
4621 char subject[FLEX_ARRAY];
4624 static int subject2item_cmp(const void *fndata,
4625 const struct subject2item_entry *a,
4626 const struct subject2item_entry *b, const void *key)
4628 return key ? strcmp(a->subject, key) : strcmp(a->subject, b->subject);
4631 define_commit_slab(commit_todo_item, struct todo_item *);
4634 * Rearrange the todo list that has both "pick commit-id msg" and "pick
4635 * commit-id fixup!/squash! msg" in it so that the latter is put immediately
4636 * after the former, and change "pick" to "fixup"/"squash".
4638 * Note that if the config has specified a custom instruction format, each log
4639 * message will have to be retrieved from the commit (as the oneline in the
4640 * script cannot be trusted) in order to normalize the autosquash arrangement.
4642 int rearrange_squash(void)
4644 const char *todo_file = rebase_path_todo();
4645 struct todo_list todo_list = TODO_LIST_INIT;
4646 struct hashmap subject2item;
4647 int res = 0, rearranged = 0, *next, *tail, i;
4648 char **subjects;
4649 struct commit_todo_item commit_todo;
4651 if (strbuf_read_file_or_whine(&todo_list.buf, todo_file) < 0)
4652 return -1;
4653 if (parse_insn_buffer(todo_list.buf.buf, &todo_list) < 0) {
4654 todo_list_release(&todo_list);
4655 return -1;
4658 init_commit_todo_item(&commit_todo);
4660 * The hashmap maps onelines to the respective todo list index.
4662 * If any items need to be rearranged, the next[i] value will indicate
4663 * which item was moved directly after the i'th.
4665 * In that case, last[i] will indicate the index of the latest item to
4666 * be moved to appear after the i'th.
4668 hashmap_init(&subject2item, (hashmap_cmp_fn) subject2item_cmp,
4669 NULL, todo_list.nr);
4670 ALLOC_ARRAY(next, todo_list.nr);
4671 ALLOC_ARRAY(tail, todo_list.nr);
4672 ALLOC_ARRAY(subjects, todo_list.nr);
4673 for (i = 0; i < todo_list.nr; i++) {
4674 struct strbuf buf = STRBUF_INIT;
4675 struct todo_item *item = todo_list.items + i;
4676 const char *commit_buffer, *subject, *p;
4677 size_t subject_len;
4678 int i2 = -1;
4679 struct subject2item_entry *entry;
4681 next[i] = tail[i] = -1;
4682 if (!item->commit || item->command == TODO_DROP) {
4683 subjects[i] = NULL;
4684 continue;
4687 if (is_fixup(item->command)) {
4688 todo_list_release(&todo_list);
4689 clear_commit_todo_item(&commit_todo);
4690 return error(_("the script was already rearranged."));
4693 *commit_todo_item_at(&commit_todo, item->commit) = item;
4695 parse_commit(item->commit);
4696 commit_buffer = get_commit_buffer(item->commit, NULL);
4697 find_commit_subject(commit_buffer, &subject);
4698 format_subject(&buf, subject, " ");
4699 subject = subjects[i] = strbuf_detach(&buf, &subject_len);
4700 unuse_commit_buffer(item->commit, commit_buffer);
4701 if ((skip_prefix(subject, "fixup! ", &p) ||
4702 skip_prefix(subject, "squash! ", &p))) {
4703 struct commit *commit2;
4705 for (;;) {
4706 while (isspace(*p))
4707 p++;
4708 if (!skip_prefix(p, "fixup! ", &p) &&
4709 !skip_prefix(p, "squash! ", &p))
4710 break;
4713 if ((entry = hashmap_get_from_hash(&subject2item,
4714 strhash(p), p)))
4715 /* found by title */
4716 i2 = entry->i;
4717 else if (!strchr(p, ' ') &&
4718 (commit2 =
4719 lookup_commit_reference_by_name(p)) &&
4720 *commit_todo_item_at(&commit_todo, commit2))
4721 /* found by commit name */
4722 i2 = *commit_todo_item_at(&commit_todo, commit2)
4723 - todo_list.items;
4724 else {
4725 /* copy can be a prefix of the commit subject */
4726 for (i2 = 0; i2 < i; i2++)
4727 if (subjects[i2] &&
4728 starts_with(subjects[i2], p))
4729 break;
4730 if (i2 == i)
4731 i2 = -1;
4734 if (i2 >= 0) {
4735 rearranged = 1;
4736 todo_list.items[i].command =
4737 starts_with(subject, "fixup!") ?
4738 TODO_FIXUP : TODO_SQUASH;
4739 if (next[i2] < 0)
4740 next[i2] = i;
4741 else
4742 next[tail[i2]] = i;
4743 tail[i2] = i;
4744 } else if (!hashmap_get_from_hash(&subject2item,
4745 strhash(subject), subject)) {
4746 FLEX_ALLOC_MEM(entry, subject, subject, subject_len);
4747 entry->i = i;
4748 hashmap_entry_init(entry, strhash(entry->subject));
4749 hashmap_put(&subject2item, entry);
4753 if (rearranged) {
4754 struct strbuf buf = STRBUF_INIT;
4756 for (i = 0; i < todo_list.nr; i++) {
4757 enum todo_command command = todo_list.items[i].command;
4758 int cur = i;
4761 * Initially, all commands are 'pick's. If it is a
4762 * fixup or a squash now, we have rearranged it.
4764 if (is_fixup(command))
4765 continue;
4767 while (cur >= 0) {
4768 const char *bol =
4769 get_item_line(&todo_list, cur);
4770 const char *eol =
4771 get_item_line(&todo_list, cur + 1);
4773 /* replace 'pick', by 'fixup' or 'squash' */
4774 command = todo_list.items[cur].command;
4775 if (is_fixup(command)) {
4776 strbuf_addstr(&buf,
4777 todo_command_info[command].str);
4778 bol += strcspn(bol, " \t");
4781 strbuf_add(&buf, bol, eol - bol);
4783 cur = next[cur];
4787 res = rewrite_file(todo_file, buf.buf, buf.len);
4788 strbuf_release(&buf);
4791 free(next);
4792 free(tail);
4793 for (i = 0; i < todo_list.nr; i++)
4794 free(subjects[i]);
4795 free(subjects);
4796 hashmap_free(&subject2item, 1);
4797 todo_list_release(&todo_list);
4799 clear_commit_todo_item(&commit_todo);
4800 return res;