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"
34#include "rebase-interactive.h"
35
36#define GIT_REFLOG_ACTION "GIT_REFLOG_ACTION"
37
38const char sign_off_header[] = "Signed-off-by: ";
39static const char cherry_picked_prefix[] = "(cherry picked from commit ";
40
41GIT_PATH_FUNC(git_path_commit_editmsg, "COMMIT_EDITMSG")
42
43GIT_PATH_FUNC(git_path_seq_dir, "sequencer")
44
45static GIT_PATH_FUNC(git_path_todo_file, "sequencer/todo")
46static GIT_PATH_FUNC(git_path_opts_file, "sequencer/opts")
47static GIT_PATH_FUNC(git_path_head_file, "sequencer/head")
48static GIT_PATH_FUNC(git_path_abort_safety_file, "sequencer/abort-safety")
49
50static GIT_PATH_FUNC(rebase_path, "rebase-merge")
51/*
52 * The file containing rebase commands, comments, and empty lines.
53 * This file is created by "git rebase -i" then edited by the user. As
54 * the lines are processed, they are removed from the front of this
55 * file and written to the tail of 'done'.
56 */
57GIT_PATH_FUNC(rebase_path_todo, "rebase-merge/git-rebase-todo")
58static GIT_PATH_FUNC(rebase_path_todo_backup,
59 "rebase-merge/git-rebase-todo.backup")
60
61/*
62 * The rebase command lines that have already been processed. A line
63 * is moved here when it is first handled, before any associated user
64 * actions.
65 */
66static GIT_PATH_FUNC(rebase_path_done, "rebase-merge/done")
67/*
68 * The file to keep track of how many commands were already processed (e.g.
69 * for the prompt).
70 */
71static GIT_PATH_FUNC(rebase_path_msgnum, "rebase-merge/msgnum")
72/*
73 * The file to keep track of how many commands are to be processed in total
74 * (e.g. for the prompt).
75 */
76static GIT_PATH_FUNC(rebase_path_msgtotal, "rebase-merge/end")
77/*
78 * The commit message that is planned to be used for any changes that
79 * need to be committed following a user interaction.
80 */
81static GIT_PATH_FUNC(rebase_path_message, "rebase-merge/message")
82/*
83 * The file into which is accumulated the suggested commit message for
84 * squash/fixup commands. When the first of a series of squash/fixups
85 * is seen, the file is created and the commit message from the
86 * previous commit and from the first squash/fixup commit are written
87 * to it. The commit message for each subsequent squash/fixup commit
88 * is appended to the file as it is processed.
89 */
90static GIT_PATH_FUNC(rebase_path_squash_msg, "rebase-merge/message-squash")
91/*
92 * If the current series of squash/fixups has not yet included a squash
93 * command, then this file exists and holds the commit message of the
94 * original "pick" commit. (If the series ends without a "squash"
95 * command, then this can be used as the commit message of the combined
96 * commit without opening the editor.)
97 */
98static GIT_PATH_FUNC(rebase_path_fixup_msg, "rebase-merge/message-fixup")
99/*
100 * This file contains the list fixup/squash commands that have been
101 * accumulated into message-fixup or message-squash so far.
102 */
103static GIT_PATH_FUNC(rebase_path_current_fixups, "rebase-merge/current-fixups")
104/*
105 * A script to set the GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, and
106 * GIT_AUTHOR_DATE that will be used for the commit that is currently
107 * being rebased.
108 */
109static GIT_PATH_FUNC(rebase_path_author_script, "rebase-merge/author-script")
110/*
111 * When an "edit" rebase command is being processed, the SHA1 of the
112 * commit to be edited is recorded in this file. When "git rebase
113 * --continue" is executed, if there are any staged changes then they
114 * will be amended to the HEAD commit, but only provided the HEAD
115 * commit is still the commit to be edited. When any other rebase
116 * command is processed, this file is deleted.
117 */
118static GIT_PATH_FUNC(rebase_path_amend, "rebase-merge/amend")
119/*
120 * When we stop at a given patch via the "edit" command, this file contains
121 * the abbreviated commit name of the corresponding patch.
122 */
123static GIT_PATH_FUNC(rebase_path_stopped_sha, "rebase-merge/stopped-sha")
124/*
125 * For the post-rewrite hook, we make a list of rewritten commits and
126 * their new sha1s. The rewritten-pending list keeps the sha1s of
127 * commits that have been processed, but not committed yet,
128 * e.g. because they are waiting for a 'squash' command.
129 */
130static GIT_PATH_FUNC(rebase_path_rewritten_list, "rebase-merge/rewritten-list")
131static GIT_PATH_FUNC(rebase_path_rewritten_pending,
132 "rebase-merge/rewritten-pending")
133
134/*
135 * The path of the file containig the OID of the "squash onto" commit, i.e.
136 * the dummy commit used for `reset [new root]`.
137 */
138static GIT_PATH_FUNC(rebase_path_squash_onto, "rebase-merge/squash-onto")
139
140/*
141 * The path of the file listing refs that need to be deleted after the rebase
142 * finishes. This is used by the `label` command to record the need for cleanup.
143 */
144static GIT_PATH_FUNC(rebase_path_refs_to_delete, "rebase-merge/refs-to-delete")
145
146/*
147 * The following files are written by git-rebase just after parsing the
148 * command-line.
149 */
150static GIT_PATH_FUNC(rebase_path_gpg_sign_opt, "rebase-merge/gpg_sign_opt")
151static GIT_PATH_FUNC(rebase_path_orig_head, "rebase-merge/orig-head")
152static GIT_PATH_FUNC(rebase_path_verbose, "rebase-merge/verbose")
153static GIT_PATH_FUNC(rebase_path_signoff, "rebase-merge/signoff")
154static GIT_PATH_FUNC(rebase_path_head_name, "rebase-merge/head-name")
155static GIT_PATH_FUNC(rebase_path_onto, "rebase-merge/onto")
156static GIT_PATH_FUNC(rebase_path_autostash, "rebase-merge/autostash")
157static GIT_PATH_FUNC(rebase_path_strategy, "rebase-merge/strategy")
158static GIT_PATH_FUNC(rebase_path_strategy_opts, "rebase-merge/strategy_opts")
159static GIT_PATH_FUNC(rebase_path_allow_rerere_autoupdate, "rebase-merge/allow_rerere_autoupdate")
160static GIT_PATH_FUNC(rebase_path_quiet, "rebase-merge/quiet")
161static GIT_PATH_FUNC(rebase_path_reschedule_failed_exec, "rebase-merge/reschedule-failed-exec")
162
163static int git_sequencer_config(const char *k, const char *v, void *cb)
164{
165 struct replay_opts *opts = cb;
166 int status;
167
168 if (!strcmp(k, "commit.cleanup")) {
169 const char *s;
170
171 status = git_config_string(&s, k, v);
172 if (status)
173 return status;
174
175 if (!strcmp(s, "verbatim"))
176 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_NONE;
177 else if (!strcmp(s, "whitespace"))
178 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_SPACE;
179 else if (!strcmp(s, "strip"))
180 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_ALL;
181 else if (!strcmp(s, "scissors"))
182 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_SPACE;
183 else
184 warning(_("invalid commit message cleanup mode '%s'"),
185 s);
186
187 free((char *)s);
188 return status;
189 }
190
191 if (!strcmp(k, "commit.gpgsign")) {
192 opts->gpg_sign = git_config_bool(k, v) ? xstrdup("") : NULL;
193 return 0;
194 }
195
196 status = git_gpg_config(k, v, NULL);
197 if (status)
198 return status;
199
200 return git_diff_basic_config(k, v, NULL);
201}
202
203void sequencer_init_config(struct replay_opts *opts)
204{
205 opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_NONE;
206 git_config(git_sequencer_config, opts);
207}
208
209static inline int is_rebase_i(const struct replay_opts *opts)
210{
211 return opts->action == REPLAY_INTERACTIVE_REBASE;
212}
213
214static const char *get_dir(const struct replay_opts *opts)
215{
216 if (is_rebase_i(opts))
217 return rebase_path();
218 return git_path_seq_dir();
219}
220
221static const char *get_todo_path(const struct replay_opts *opts)
222{
223 if (is_rebase_i(opts))
224 return rebase_path_todo();
225 return git_path_todo_file();
226}
227
228/*
229 * Returns 0 for non-conforming footer
230 * Returns 1 for conforming footer
231 * Returns 2 when sob exists within conforming footer
232 * Returns 3 when sob exists within conforming footer as last entry
233 */
234static int has_conforming_footer(struct strbuf *sb, struct strbuf *sob,
235 size_t ignore_footer)
236{
237 struct process_trailer_options opts = PROCESS_TRAILER_OPTIONS_INIT;
238 struct trailer_info info;
239 size_t i;
240 int found_sob = 0, found_sob_last = 0;
241
242 opts.no_divider = 1;
243
244 trailer_info_get(&info, sb->buf, &opts);
245
246 if (info.trailer_start == info.trailer_end)
247 return 0;
248
249 for (i = 0; i < info.trailer_nr; i++)
250 if (sob && !strncmp(info.trailers[i], sob->buf, sob->len)) {
251 found_sob = 1;
252 if (i == info.trailer_nr - 1)
253 found_sob_last = 1;
254 }
255
256 trailer_info_release(&info);
257
258 if (found_sob_last)
259 return 3;
260 if (found_sob)
261 return 2;
262 return 1;
263}
264
265static const char *gpg_sign_opt_quoted(struct replay_opts *opts)
266{
267 static struct strbuf buf = STRBUF_INIT;
268
269 strbuf_reset(&buf);
270 if (opts->gpg_sign)
271 sq_quotef(&buf, "-S%s", opts->gpg_sign);
272 return buf.buf;
273}
274
275int sequencer_remove_state(struct replay_opts *opts)
276{
277 struct strbuf buf = STRBUF_INIT;
278 int i;
279
280 if (is_rebase_i(opts) &&
281 strbuf_read_file(&buf, rebase_path_refs_to_delete(), 0) > 0) {
282 char *p = buf.buf;
283 while (*p) {
284 char *eol = strchr(p, '\n');
285 if (eol)
286 *eol = '\0';
287 if (delete_ref("(rebase -i) cleanup", p, NULL, 0) < 0)
288 warning(_("could not delete '%s'"), p);
289 if (!eol)
290 break;
291 p = eol + 1;
292 }
293 }
294
295 free(opts->gpg_sign);
296 free(opts->strategy);
297 for (i = 0; i < opts->xopts_nr; i++)
298 free(opts->xopts[i]);
299 free(opts->xopts);
300 strbuf_release(&opts->current_fixups);
301
302 strbuf_reset(&buf);
303 strbuf_addstr(&buf, get_dir(opts));
304 remove_dir_recursively(&buf, 0);
305 strbuf_release(&buf);
306
307 return 0;
308}
309
310static const char *action_name(const struct replay_opts *opts)
311{
312 switch (opts->action) {
313 case REPLAY_REVERT:
314 return N_("revert");
315 case REPLAY_PICK:
316 return N_("cherry-pick");
317 case REPLAY_INTERACTIVE_REBASE:
318 return N_("rebase -i");
319 }
320 die(_("unknown action: %d"), opts->action);
321}
322
323struct commit_message {
324 char *parent_label;
325 char *label;
326 char *subject;
327 const char *message;
328};
329
330static const char *short_commit_name(struct commit *commit)
331{
332 return find_unique_abbrev(&commit->object.oid, DEFAULT_ABBREV);
333}
334
335static int get_message(struct commit *commit, struct commit_message *out)
336{
337 const char *abbrev, *subject;
338 int subject_len;
339
340 out->message = logmsg_reencode(commit, NULL, get_commit_output_encoding());
341 abbrev = short_commit_name(commit);
342
343 subject_len = find_commit_subject(out->message, &subject);
344
345 out->subject = xmemdupz(subject, subject_len);
346 out->label = xstrfmt("%s... %s", abbrev, out->subject);
347 out->parent_label = xstrfmt("parent of %s", out->label);
348
349 return 0;
350}
351
352static void free_message(struct commit *commit, struct commit_message *msg)
353{
354 free(msg->parent_label);
355 free(msg->label);
356 free(msg->subject);
357 unuse_commit_buffer(commit, msg->message);
358}
359
360static void print_advice(int show_hint, struct replay_opts *opts)
361{
362 char *msg = getenv("GIT_CHERRY_PICK_HELP");
363
364 if (msg) {
365 fprintf(stderr, "%s\n", msg);
366 /*
367 * A conflict has occurred but the porcelain
368 * (typically rebase --interactive) wants to take care
369 * of the commit itself so remove CHERRY_PICK_HEAD
370 */
371 unlink(git_path_cherry_pick_head(the_repository));
372 return;
373 }
374
375 if (show_hint) {
376 if (opts->no_commit)
377 advise(_("after resolving the conflicts, mark the corrected paths\n"
378 "with 'git add <paths>' or 'git rm <paths>'"));
379 else
380 advise(_("after resolving the conflicts, mark the corrected paths\n"
381 "with 'git add <paths>' or 'git rm <paths>'\n"
382 "and commit the result with 'git commit'"));
383 }
384}
385
386int write_message(const void *buf, size_t len, const char *filename,
387 int append_eol)
388{
389 struct lock_file msg_file = LOCK_INIT;
390
391 int msg_fd = hold_lock_file_for_update(&msg_file, filename, 0);
392 if (msg_fd < 0)
393 return error_errno(_("could not lock '%s'"), filename);
394 if (write_in_full(msg_fd, buf, len) < 0) {
395 error_errno(_("could not write to '%s'"), filename);
396 rollback_lock_file(&msg_file);
397 return -1;
398 }
399 if (append_eol && write(msg_fd, "\n", 1) < 0) {
400 error_errno(_("could not write eol to '%s'"), filename);
401 rollback_lock_file(&msg_file);
402 return -1;
403 }
404 if (commit_lock_file(&msg_file) < 0)
405 return error(_("failed to finalize '%s'"), filename);
406
407 return 0;
408}
409
410/*
411 * Reads a file that was presumably written by a shell script, i.e. with an
412 * end-of-line marker that needs to be stripped.
413 *
414 * Note that only the last end-of-line marker is stripped, consistent with the
415 * behavior of "$(cat path)" in a shell script.
416 *
417 * Returns 1 if the file was read, 0 if it could not be read or does not exist.
418 */
419static int read_oneliner(struct strbuf *buf,
420 const char *path, int skip_if_empty)
421{
422 int orig_len = buf->len;
423
424 if (!file_exists(path))
425 return 0;
426
427 if (strbuf_read_file(buf, path, 0) < 0) {
428 warning_errno(_("could not read '%s'"), path);
429 return 0;
430 }
431
432 if (buf->len > orig_len && buf->buf[buf->len - 1] == '\n') {
433 if (--buf->len > orig_len && buf->buf[buf->len - 1] == '\r')
434 --buf->len;
435 buf->buf[buf->len] = '\0';
436 }
437
438 if (skip_if_empty && buf->len == orig_len)
439 return 0;
440
441 return 1;
442}
443
444static struct tree *empty_tree(void)
445{
446 return lookup_tree(the_repository, the_repository->hash_algo->empty_tree);
447}
448
449static int error_dirty_index(struct replay_opts *opts)
450{
451 if (read_cache_unmerged())
452 return error_resolve_conflict(_(action_name(opts)));
453
454 error(_("your local changes would be overwritten by %s."),
455 _(action_name(opts)));
456
457 if (advice_commit_before_merge)
458 advise(_("commit your changes or stash them to proceed."));
459 return -1;
460}
461
462static void update_abort_safety_file(void)
463{
464 struct object_id head;
465
466 /* Do nothing on a single-pick */
467 if (!file_exists(git_path_seq_dir()))
468 return;
469
470 if (!get_oid("HEAD", &head))
471 write_file(git_path_abort_safety_file(), "%s", oid_to_hex(&head));
472 else
473 write_file(git_path_abort_safety_file(), "%s", "");
474}
475
476static int fast_forward_to(const struct object_id *to, const struct object_id *from,
477 int unborn, struct replay_opts *opts)
478{
479 struct ref_transaction *transaction;
480 struct strbuf sb = STRBUF_INIT;
481 struct strbuf err = STRBUF_INIT;
482
483 read_index(&the_index);
484 if (checkout_fast_forward(the_repository, from, to, 1))
485 return -1; /* the callee should have complained already */
486
487 strbuf_addf(&sb, _("%s: fast-forward"), _(action_name(opts)));
488
489 transaction = ref_transaction_begin(&err);
490 if (!transaction ||
491 ref_transaction_update(transaction, "HEAD",
492 to, unborn && !is_rebase_i(opts) ?
493 &null_oid : from,
494 0, sb.buf, &err) ||
495 ref_transaction_commit(transaction, &err)) {
496 ref_transaction_free(transaction);
497 error("%s", err.buf);
498 strbuf_release(&sb);
499 strbuf_release(&err);
500 return -1;
501 }
502
503 strbuf_release(&sb);
504 strbuf_release(&err);
505 ref_transaction_free(transaction);
506 update_abort_safety_file();
507 return 0;
508}
509
510void append_conflicts_hint(struct strbuf *msgbuf)
511{
512 int i;
513
514 strbuf_addch(msgbuf, '\n');
515 strbuf_commented_addf(msgbuf, "Conflicts:\n");
516 for (i = 0; i < active_nr;) {
517 const struct cache_entry *ce = active_cache[i++];
518 if (ce_stage(ce)) {
519 strbuf_commented_addf(msgbuf, "\t%s\n", ce->name);
520 while (i < active_nr && !strcmp(ce->name,
521 active_cache[i]->name))
522 i++;
523 }
524 }
525}
526
527static int do_recursive_merge(struct commit *base, struct commit *next,
528 const char *base_label, const char *next_label,
529 struct object_id *head, struct strbuf *msgbuf,
530 struct replay_opts *opts)
531{
532 struct merge_options o;
533 struct tree *result, *next_tree, *base_tree, *head_tree;
534 int clean;
535 char **xopt;
536 struct lock_file index_lock = LOCK_INIT;
537
538 if (hold_locked_index(&index_lock, LOCK_REPORT_ON_ERROR) < 0)
539 return -1;
540
541 read_cache();
542
543 init_merge_options(&o);
544 o.ancestor = base ? base_label : "(empty tree)";
545 o.branch1 = "HEAD";
546 o.branch2 = next ? next_label : "(empty tree)";
547 if (is_rebase_i(opts))
548 o.buffer_output = 2;
549 o.show_rename_progress = 1;
550
551 head_tree = parse_tree_indirect(head);
552 next_tree = next ? get_commit_tree(next) : empty_tree();
553 base_tree = base ? get_commit_tree(base) : empty_tree();
554
555 for (xopt = opts->xopts; xopt != opts->xopts + opts->xopts_nr; xopt++)
556 parse_merge_opt(&o, *xopt);
557
558 clean = merge_trees(&o,
559 head_tree,
560 next_tree, base_tree, &result);
561 if (is_rebase_i(opts) && clean <= 0)
562 fputs(o.obuf.buf, stdout);
563 strbuf_release(&o.obuf);
564 diff_warn_rename_limit("merge.renamelimit", o.needed_rename_limit, 0);
565 if (clean < 0) {
566 rollback_lock_file(&index_lock);
567 return clean;
568 }
569
570 if (write_locked_index(&the_index, &index_lock,
571 COMMIT_LOCK | SKIP_IF_UNCHANGED))
572 /*
573 * TRANSLATORS: %s will be "revert", "cherry-pick" or
574 * "rebase -i".
575 */
576 return error(_("%s: Unable to write new index file"),
577 _(action_name(opts)));
578
579 if (!clean)
580 append_conflicts_hint(msgbuf);
581
582 return !clean;
583}
584
585static struct object_id *get_cache_tree_oid(void)
586{
587 if (!active_cache_tree)
588 active_cache_tree = cache_tree();
589
590 if (!cache_tree_fully_valid(active_cache_tree))
591 if (cache_tree_update(&the_index, 0)) {
592 error(_("unable to update cache tree"));
593 return NULL;
594 }
595
596 return &active_cache_tree->oid;
597}
598
599static int is_index_unchanged(void)
600{
601 struct object_id head_oid, *cache_tree_oid;
602 struct commit *head_commit;
603
604 if (!resolve_ref_unsafe("HEAD", RESOLVE_REF_READING, &head_oid, NULL))
605 return error(_("could not resolve HEAD commit"));
606
607 head_commit = lookup_commit(the_repository, &head_oid);
608
609 /*
610 * If head_commit is NULL, check_commit, called from
611 * lookup_commit, would have indicated that head_commit is not
612 * a commit object already. parse_commit() will return failure
613 * without further complaints in such a case. Otherwise, if
614 * the commit is invalid, parse_commit() will complain. So
615 * there is nothing for us to say here. Just return failure.
616 */
617 if (parse_commit(head_commit))
618 return -1;
619
620 if (!(cache_tree_oid = get_cache_tree_oid()))
621 return -1;
622
623 return oideq(cache_tree_oid, get_commit_tree_oid(head_commit));
624}
625
626static int write_author_script(const char *message)
627{
628 struct strbuf buf = STRBUF_INIT;
629 const char *eol;
630 int res;
631
632 for (;;)
633 if (!*message || starts_with(message, "\n")) {
634missing_author:
635 /* Missing 'author' line? */
636 unlink(rebase_path_author_script());
637 return 0;
638 } else if (skip_prefix(message, "author ", &message))
639 break;
640 else if ((eol = strchr(message, '\n')))
641 message = eol + 1;
642 else
643 goto missing_author;
644
645 strbuf_addstr(&buf, "GIT_AUTHOR_NAME='");
646 while (*message && *message != '\n' && *message != '\r')
647 if (skip_prefix(message, " <", &message))
648 break;
649 else if (*message != '\'')
650 strbuf_addch(&buf, *(message++));
651 else
652 strbuf_addf(&buf, "'\\%c'", *(message++));
653 strbuf_addstr(&buf, "'\nGIT_AUTHOR_EMAIL='");
654 while (*message && *message != '\n' && *message != '\r')
655 if (skip_prefix(message, "> ", &message))
656 break;
657 else if (*message != '\'')
658 strbuf_addch(&buf, *(message++));
659 else
660 strbuf_addf(&buf, "'\\%c'", *(message++));
661 strbuf_addstr(&buf, "'\nGIT_AUTHOR_DATE='@");
662 while (*message && *message != '\n' && *message != '\r')
663 if (*message != '\'')
664 strbuf_addch(&buf, *(message++));
665 else
666 strbuf_addf(&buf, "'\\%c'", *(message++));
667 strbuf_addch(&buf, '\'');
668 res = write_message(buf.buf, buf.len, rebase_path_author_script(), 1);
669 strbuf_release(&buf);
670 return res;
671}
672
673/**
674 * Take a series of KEY='VALUE' lines where VALUE part is
675 * sq-quoted, and append <KEY, VALUE> at the end of the string list
676 */
677static int parse_key_value_squoted(char *buf, struct string_list *list)
678{
679 while (*buf) {
680 struct string_list_item *item;
681 char *np;
682 char *cp = strchr(buf, '=');
683 if (!cp) {
684 np = strchrnul(buf, '\n');
685 return error(_("no key present in '%.*s'"),
686 (int) (np - buf), buf);
687 }
688 np = strchrnul(cp, '\n');
689 *cp++ = '\0';
690 item = string_list_append(list, buf);
691
692 buf = np + (*np == '\n');
693 *np = '\0';
694 cp = sq_dequote(cp);
695 if (!cp)
696 return error(_("unable to dequote value of '%s'"),
697 item->string);
698 item->util = xstrdup(cp);
699 }
700 return 0;
701}
702
703/**
704 * Reads and parses the state directory's "author-script" file, and sets name,
705 * email and date accordingly.
706 * Returns 0 on success, -1 if the file could not be parsed.
707 *
708 * The author script is of the format:
709 *
710 * GIT_AUTHOR_NAME='$author_name'
711 * GIT_AUTHOR_EMAIL='$author_email'
712 * GIT_AUTHOR_DATE='$author_date'
713 *
714 * where $author_name, $author_email and $author_date are quoted. We are strict
715 * with our parsing, as the file was meant to be eval'd in the old
716 * git-am.sh/git-rebase--interactive.sh scripts, and thus if the file differs
717 * from what this function expects, it is better to bail out than to do
718 * something that the user does not expect.
719 */
720int read_author_script(const char *path, char **name, char **email, char **date,
721 int allow_missing)
722{
723 struct strbuf buf = STRBUF_INIT;
724 struct string_list kv = STRING_LIST_INIT_DUP;
725 int retval = -1; /* assume failure */
726 int i, name_i = -2, email_i = -2, date_i = -2, err = 0;
727
728 if (strbuf_read_file(&buf, path, 256) <= 0) {
729 strbuf_release(&buf);
730 if (errno == ENOENT && allow_missing)
731 return 0;
732 else
733 return error_errno(_("could not open '%s' for reading"),
734 path);
735 }
736
737 if (parse_key_value_squoted(buf.buf, &kv))
738 goto finish;
739
740 for (i = 0; i < kv.nr; i++) {
741 if (!strcmp(kv.items[i].string, "GIT_AUTHOR_NAME")) {
742 if (name_i != -2)
743 name_i = error(_("'GIT_AUTHOR_NAME' already given"));
744 else
745 name_i = i;
746 } else if (!strcmp(kv.items[i].string, "GIT_AUTHOR_EMAIL")) {
747 if (email_i != -2)
748 email_i = error(_("'GIT_AUTHOR_EMAIL' already given"));
749 else
750 email_i = i;
751 } else if (!strcmp(kv.items[i].string, "GIT_AUTHOR_DATE")) {
752 if (date_i != -2)
753 date_i = error(_("'GIT_AUTHOR_DATE' already given"));
754 else
755 date_i = i;
756 } else {
757 err = error(_("unknown variable '%s'"),
758 kv.items[i].string);
759 }
760 }
761 if (name_i == -2)
762 error(_("missing 'GIT_AUTHOR_NAME'"));
763 if (email_i == -2)
764 error(_("missing 'GIT_AUTHOR_EMAIL'"));
765 if (date_i == -2)
766 error(_("missing 'GIT_AUTHOR_DATE'"));
767 if (date_i < 0 || email_i < 0 || date_i < 0 || err)
768 goto finish;
769 *name = kv.items[name_i].util;
770 *email = kv.items[email_i].util;
771 *date = kv.items[date_i].util;
772 retval = 0;
773finish:
774 string_list_clear(&kv, !!retval);
775 strbuf_release(&buf);
776 return retval;
777}
778
779/*
780 * Read a GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL AND GIT_AUTHOR_DATE from a
781 * file with shell quoting into struct argv_array. Returns -1 on
782 * error, 0 otherwise.
783 */
784static int read_env_script(struct argv_array *env)
785{
786 char *name, *email, *date;
787
788 if (read_author_script(rebase_path_author_script(),
789 &name, &email, &date, 0))
790 return -1;
791
792 argv_array_pushf(env, "GIT_AUTHOR_NAME=%s", name);
793 argv_array_pushf(env, "GIT_AUTHOR_EMAIL=%s", email);
794 argv_array_pushf(env, "GIT_AUTHOR_DATE=%s", date);
795 free(name);
796 free(email);
797 free(date);
798
799 return 0;
800}
801
802static char *get_author(const char *message)
803{
804 size_t len;
805 const char *a;
806
807 a = find_commit_header(message, "author", &len);
808 if (a)
809 return xmemdupz(a, len);
810
811 return NULL;
812}
813
814/* Read author-script and return an ident line (author <email> timestamp) */
815static const char *read_author_ident(struct strbuf *buf)
816{
817 struct strbuf out = STRBUF_INIT;
818 char *name, *email, *date;
819
820 if (read_author_script(rebase_path_author_script(),
821 &name, &email, &date, 0))
822 return NULL;
823
824 /* validate date since fmt_ident() will die() on bad value */
825 if (parse_date(date, &out)){
826 warning(_("invalid date format '%s' in '%s'"),
827 date, rebase_path_author_script());
828 strbuf_release(&out);
829 return NULL;
830 }
831
832 strbuf_reset(&out);
833 strbuf_addstr(&out, fmt_ident(name, email, date, 0));
834 strbuf_swap(buf, &out);
835 strbuf_release(&out);
836 free(name);
837 free(email);
838 free(date);
839 return buf->buf;
840}
841
842static const char staged_changes_advice[] =
843N_("you have staged changes in your working tree\n"
844"If these changes are meant to be squashed into the previous commit, run:\n"
845"\n"
846" git commit --amend %s\n"
847"\n"
848"If they are meant to go into a new commit, run:\n"
849"\n"
850" git commit %s\n"
851"\n"
852"In both cases, once you're done, continue with:\n"
853"\n"
854" git rebase --continue\n");
855
856#define ALLOW_EMPTY (1<<0)
857#define EDIT_MSG (1<<1)
858#define AMEND_MSG (1<<2)
859#define CLEANUP_MSG (1<<3)
860#define VERIFY_MSG (1<<4)
861#define CREATE_ROOT_COMMIT (1<<5)
862
863static int run_command_silent_on_success(struct child_process *cmd)
864{
865 struct strbuf buf = STRBUF_INIT;
866 int rc;
867
868 cmd->stdout_to_stderr = 1;
869 rc = pipe_command(cmd,
870 NULL, 0,
871 NULL, 0,
872 &buf, 0);
873
874 if (rc)
875 fputs(buf.buf, stderr);
876 strbuf_release(&buf);
877 return rc;
878}
879
880/*
881 * If we are cherry-pick, and if the merge did not result in
882 * hand-editing, we will hit this commit and inherit the original
883 * author date and name.
884 *
885 * If we are revert, or if our cherry-pick results in a hand merge,
886 * we had better say that the current user is responsible for that.
887 *
888 * An exception is when run_git_commit() is called during an
889 * interactive rebase: in that case, we will want to retain the
890 * author metadata.
891 */
892static int run_git_commit(const char *defmsg, struct replay_opts *opts,
893 unsigned int flags)
894{
895 struct child_process cmd = CHILD_PROCESS_INIT;
896 const char *value;
897
898 if ((flags & CREATE_ROOT_COMMIT) && !(flags & AMEND_MSG)) {
899 struct strbuf msg = STRBUF_INIT, script = STRBUF_INIT;
900 const char *author = NULL;
901 struct object_id root_commit, *cache_tree_oid;
902 int res = 0;
903
904 if (is_rebase_i(opts)) {
905 author = read_author_ident(&script);
906 if (!author) {
907 strbuf_release(&script);
908 return -1;
909 }
910 }
911
912 if (!defmsg)
913 BUG("root commit without message");
914
915 if (!(cache_tree_oid = get_cache_tree_oid()))
916 res = -1;
917
918 if (!res)
919 res = strbuf_read_file(&msg, defmsg, 0);
920
921 if (res <= 0)
922 res = error_errno(_("could not read '%s'"), defmsg);
923 else
924 res = commit_tree(msg.buf, msg.len, cache_tree_oid,
925 NULL, &root_commit, author,
926 opts->gpg_sign);
927
928 strbuf_release(&msg);
929 strbuf_release(&script);
930 if (!res) {
931 update_ref(NULL, "CHERRY_PICK_HEAD", &root_commit, NULL,
932 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR);
933 res = update_ref(NULL, "HEAD", &root_commit, NULL, 0,
934 UPDATE_REFS_MSG_ON_ERR);
935 }
936 return res < 0 ? error(_("writing root commit")) : 0;
937 }
938
939 cmd.git_cmd = 1;
940
941 if (is_rebase_i(opts) && read_env_script(&cmd.env_array)) {
942 const char *gpg_opt = gpg_sign_opt_quoted(opts);
943
944 return error(_(staged_changes_advice),
945 gpg_opt, gpg_opt);
946 }
947
948 argv_array_push(&cmd.args, "commit");
949
950 if (!(flags & VERIFY_MSG))
951 argv_array_push(&cmd.args, "-n");
952 if ((flags & AMEND_MSG))
953 argv_array_push(&cmd.args, "--amend");
954 if (opts->gpg_sign)
955 argv_array_pushf(&cmd.args, "-S%s", opts->gpg_sign);
956 if (defmsg)
957 argv_array_pushl(&cmd.args, "-F", defmsg, NULL);
958 else if (!(flags & EDIT_MSG))
959 argv_array_pushl(&cmd.args, "-C", "HEAD", NULL);
960 if ((flags & CLEANUP_MSG))
961 argv_array_push(&cmd.args, "--cleanup=strip");
962 if ((flags & EDIT_MSG))
963 argv_array_push(&cmd.args, "-e");
964 else if (!(flags & CLEANUP_MSG) &&
965 !opts->signoff && !opts->record_origin &&
966 git_config_get_value("commit.cleanup", &value))
967 argv_array_push(&cmd.args, "--cleanup=verbatim");
968
969 if ((flags & ALLOW_EMPTY))
970 argv_array_push(&cmd.args, "--allow-empty");
971
972 if (!(flags & EDIT_MSG))
973 argv_array_push(&cmd.args, "--allow-empty-message");
974
975 if (is_rebase_i(opts) && !(flags & EDIT_MSG))
976 return run_command_silent_on_success(&cmd);
977 else
978 return run_command(&cmd);
979}
980
981static int rest_is_empty(const struct strbuf *sb, int start)
982{
983 int i, eol;
984 const char *nl;
985
986 /* Check if the rest is just whitespace and Signed-off-by's. */
987 for (i = start; i < sb->len; i++) {
988 nl = memchr(sb->buf + i, '\n', sb->len - i);
989 if (nl)
990 eol = nl - sb->buf;
991 else
992 eol = sb->len;
993
994 if (strlen(sign_off_header) <= eol - i &&
995 starts_with(sb->buf + i, sign_off_header)) {
996 i = eol;
997 continue;
998 }
999 while (i < eol)
1000 if (!isspace(sb->buf[i++]))
1001 return 0;
1002 }
1003
1004 return 1;
1005}
1006
1007/*
1008 * Find out if the message in the strbuf contains only whitespace and
1009 * Signed-off-by lines.
1010 */
1011int message_is_empty(const struct strbuf *sb,
1012 enum commit_msg_cleanup_mode cleanup_mode)
1013{
1014 if (cleanup_mode == COMMIT_MSG_CLEANUP_NONE && sb->len)
1015 return 0;
1016 return rest_is_empty(sb, 0);
1017}
1018
1019/*
1020 * See if the user edited the message in the editor or left what
1021 * was in the template intact
1022 */
1023int template_untouched(const struct strbuf *sb, const char *template_file,
1024 enum commit_msg_cleanup_mode cleanup_mode)
1025{
1026 struct strbuf tmpl = STRBUF_INIT;
1027 const char *start;
1028
1029 if (cleanup_mode == COMMIT_MSG_CLEANUP_NONE && sb->len)
1030 return 0;
1031
1032 if (!template_file || strbuf_read_file(&tmpl, template_file, 0) <= 0)
1033 return 0;
1034
1035 strbuf_stripspace(&tmpl, cleanup_mode == COMMIT_MSG_CLEANUP_ALL);
1036 if (!skip_prefix(sb->buf, tmpl.buf, &start))
1037 start = sb->buf;
1038 strbuf_release(&tmpl);
1039 return rest_is_empty(sb, start - sb->buf);
1040}
1041
1042int update_head_with_reflog(const struct commit *old_head,
1043 const struct object_id *new_head,
1044 const char *action, const struct strbuf *msg,
1045 struct strbuf *err)
1046{
1047 struct ref_transaction *transaction;
1048 struct strbuf sb = STRBUF_INIT;
1049 const char *nl;
1050 int ret = 0;
1051
1052 if (action) {
1053 strbuf_addstr(&sb, action);
1054 strbuf_addstr(&sb, ": ");
1055 }
1056
1057 nl = strchr(msg->buf, '\n');
1058 if (nl) {
1059 strbuf_add(&sb, msg->buf, nl + 1 - msg->buf);
1060 } else {
1061 strbuf_addbuf(&sb, msg);
1062 strbuf_addch(&sb, '\n');
1063 }
1064
1065 transaction = ref_transaction_begin(err);
1066 if (!transaction ||
1067 ref_transaction_update(transaction, "HEAD", new_head,
1068 old_head ? &old_head->object.oid : &null_oid,
1069 0, sb.buf, err) ||
1070 ref_transaction_commit(transaction, err)) {
1071 ret = -1;
1072 }
1073 ref_transaction_free(transaction);
1074 strbuf_release(&sb);
1075
1076 return ret;
1077}
1078
1079static int run_rewrite_hook(const struct object_id *oldoid,
1080 const struct object_id *newoid)
1081{
1082 struct child_process proc = CHILD_PROCESS_INIT;
1083 const char *argv[3];
1084 int code;
1085 struct strbuf sb = STRBUF_INIT;
1086
1087 argv[0] = find_hook("post-rewrite");
1088 if (!argv[0])
1089 return 0;
1090
1091 argv[1] = "amend";
1092 argv[2] = NULL;
1093
1094 proc.argv = argv;
1095 proc.in = -1;
1096 proc.stdout_to_stderr = 1;
1097
1098 code = start_command(&proc);
1099 if (code)
1100 return code;
1101 strbuf_addf(&sb, "%s %s\n", oid_to_hex(oldoid), oid_to_hex(newoid));
1102 sigchain_push(SIGPIPE, SIG_IGN);
1103 write_in_full(proc.in, sb.buf, sb.len);
1104 close(proc.in);
1105 strbuf_release(&sb);
1106 sigchain_pop(SIGPIPE);
1107 return finish_command(&proc);
1108}
1109
1110void commit_post_rewrite(const struct commit *old_head,
1111 const struct object_id *new_head)
1112{
1113 struct notes_rewrite_cfg *cfg;
1114
1115 cfg = init_copy_notes_for_rewrite("amend");
1116 if (cfg) {
1117 /* we are amending, so old_head is not NULL */
1118 copy_note_for_rewrite(cfg, &old_head->object.oid, new_head);
1119 finish_copy_notes_for_rewrite(cfg, "Notes added by 'git commit --amend'");
1120 }
1121 run_rewrite_hook(&old_head->object.oid, new_head);
1122}
1123
1124static int run_prepare_commit_msg_hook(struct strbuf *msg, const char *commit)
1125{
1126 struct argv_array hook_env = ARGV_ARRAY_INIT;
1127 int ret;
1128 const char *name;
1129
1130 name = git_path_commit_editmsg();
1131 if (write_message(msg->buf, msg->len, name, 0))
1132 return -1;
1133
1134 argv_array_pushf(&hook_env, "GIT_INDEX_FILE=%s", get_index_file());
1135 argv_array_push(&hook_env, "GIT_EDITOR=:");
1136 if (commit)
1137 ret = run_hook_le(hook_env.argv, "prepare-commit-msg", name,
1138 "commit", commit, NULL);
1139 else
1140 ret = run_hook_le(hook_env.argv, "prepare-commit-msg", name,
1141 "message", NULL);
1142 if (ret)
1143 ret = error(_("'prepare-commit-msg' hook failed"));
1144 argv_array_clear(&hook_env);
1145
1146 return ret;
1147}
1148
1149static const char implicit_ident_advice_noconfig[] =
1150N_("Your name and email address were configured automatically based\n"
1151"on your username and hostname. Please check that they are accurate.\n"
1152"You can suppress this message by setting them explicitly. Run the\n"
1153"following command and follow the instructions in your editor to edit\n"
1154"your configuration file:\n"
1155"\n"
1156" git config --global --edit\n"
1157"\n"
1158"After doing this, you may fix the identity used for this commit with:\n"
1159"\n"
1160" git commit --amend --reset-author\n");
1161
1162static const char implicit_ident_advice_config[] =
1163N_("Your name and email address were configured automatically based\n"
1164"on your username and hostname. Please check that they are accurate.\n"
1165"You can suppress this message by setting them explicitly:\n"
1166"\n"
1167" git config --global user.name \"Your Name\"\n"
1168" git config --global user.email you@example.com\n"
1169"\n"
1170"After doing this, you may fix the identity used for this commit with:\n"
1171"\n"
1172" git commit --amend --reset-author\n");
1173
1174static const char *implicit_ident_advice(void)
1175{
1176 char *user_config = expand_user_path("~/.gitconfig", 0);
1177 char *xdg_config = xdg_config_home("config");
1178 int config_exists = file_exists(user_config) || file_exists(xdg_config);
1179
1180 free(user_config);
1181 free(xdg_config);
1182
1183 if (config_exists)
1184 return _(implicit_ident_advice_config);
1185 else
1186 return _(implicit_ident_advice_noconfig);
1187
1188}
1189
1190void print_commit_summary(const char *prefix, const struct object_id *oid,
1191 unsigned int flags)
1192{
1193 struct rev_info rev;
1194 struct commit *commit;
1195 struct strbuf format = STRBUF_INIT;
1196 const char *head;
1197 struct pretty_print_context pctx = {0};
1198 struct strbuf author_ident = STRBUF_INIT;
1199 struct strbuf committer_ident = STRBUF_INIT;
1200
1201 commit = lookup_commit(the_repository, oid);
1202 if (!commit)
1203 die(_("couldn't look up newly created commit"));
1204 if (parse_commit(commit))
1205 die(_("could not parse newly created commit"));
1206
1207 strbuf_addstr(&format, "format:%h] %s");
1208
1209 format_commit_message(commit, "%an <%ae>", &author_ident, &pctx);
1210 format_commit_message(commit, "%cn <%ce>", &committer_ident, &pctx);
1211 if (strbuf_cmp(&author_ident, &committer_ident)) {
1212 strbuf_addstr(&format, "\n Author: ");
1213 strbuf_addbuf_percentquote(&format, &author_ident);
1214 }
1215 if (flags & SUMMARY_SHOW_AUTHOR_DATE) {
1216 struct strbuf date = STRBUF_INIT;
1217
1218 format_commit_message(commit, "%ad", &date, &pctx);
1219 strbuf_addstr(&format, "\n Date: ");
1220 strbuf_addbuf_percentquote(&format, &date);
1221 strbuf_release(&date);
1222 }
1223 if (!committer_ident_sufficiently_given()) {
1224 strbuf_addstr(&format, "\n Committer: ");
1225 strbuf_addbuf_percentquote(&format, &committer_ident);
1226 if (advice_implicit_identity) {
1227 strbuf_addch(&format, '\n');
1228 strbuf_addstr(&format, implicit_ident_advice());
1229 }
1230 }
1231 strbuf_release(&author_ident);
1232 strbuf_release(&committer_ident);
1233
1234 repo_init_revisions(the_repository, &rev, prefix);
1235 setup_revisions(0, NULL, &rev, NULL);
1236
1237 rev.diff = 1;
1238 rev.diffopt.output_format =
1239 DIFF_FORMAT_SHORTSTAT | DIFF_FORMAT_SUMMARY;
1240
1241 rev.verbose_header = 1;
1242 rev.show_root_diff = 1;
1243 get_commit_format(format.buf, &rev);
1244 rev.always_show_header = 0;
1245 rev.diffopt.detect_rename = DIFF_DETECT_RENAME;
1246 rev.diffopt.break_opt = 0;
1247 diff_setup_done(&rev.diffopt);
1248
1249 head = resolve_ref_unsafe("HEAD", 0, NULL, NULL);
1250 if (!head)
1251 die_errno(_("unable to resolve HEAD after creating commit"));
1252 if (!strcmp(head, "HEAD"))
1253 head = _("detached HEAD");
1254 else
1255 skip_prefix(head, "refs/heads/", &head);
1256 printf("[%s%s ", head, (flags & SUMMARY_INITIAL_COMMIT) ?
1257 _(" (root-commit)") : "");
1258
1259 if (!log_tree_commit(&rev, commit)) {
1260 rev.always_show_header = 1;
1261 rev.use_terminator = 1;
1262 log_tree_commit(&rev, commit);
1263 }
1264
1265 strbuf_release(&format);
1266}
1267
1268static int parse_head(struct commit **head)
1269{
1270 struct commit *current_head;
1271 struct object_id oid;
1272
1273 if (get_oid("HEAD", &oid)) {
1274 current_head = NULL;
1275 } else {
1276 current_head = lookup_commit_reference(the_repository, &oid);
1277 if (!current_head)
1278 return error(_("could not parse HEAD"));
1279 if (!oideq(&oid, ¤t_head->object.oid)) {
1280 warning(_("HEAD %s is not a commit!"),
1281 oid_to_hex(&oid));
1282 }
1283 if (parse_commit(current_head))
1284 return error(_("could not parse HEAD commit"));
1285 }
1286 *head = current_head;
1287
1288 return 0;
1289}
1290
1291/*
1292 * Try to commit without forking 'git commit'. In some cases we need
1293 * to run 'git commit' to display an error message
1294 *
1295 * Returns:
1296 * -1 - error unable to commit
1297 * 0 - success
1298 * 1 - run 'git commit'
1299 */
1300static int try_to_commit(struct strbuf *msg, const char *author,
1301 struct replay_opts *opts, unsigned int flags,
1302 struct object_id *oid)
1303{
1304 struct object_id tree;
1305 struct commit *current_head;
1306 struct commit_list *parents = NULL;
1307 struct commit_extra_header *extra = NULL;
1308 struct strbuf err = STRBUF_INIT;
1309 struct strbuf commit_msg = STRBUF_INIT;
1310 char *amend_author = NULL;
1311 const char *hook_commit = NULL;
1312 enum commit_msg_cleanup_mode cleanup;
1313 int res = 0;
1314
1315 if (parse_head(¤t_head))
1316 return -1;
1317
1318 if (flags & AMEND_MSG) {
1319 const char *exclude_gpgsig[] = { "gpgsig", NULL };
1320 const char *out_enc = get_commit_output_encoding();
1321 const char *message = logmsg_reencode(current_head, NULL,
1322 out_enc);
1323
1324 if (!msg) {
1325 const char *orig_message = NULL;
1326
1327 find_commit_subject(message, &orig_message);
1328 msg = &commit_msg;
1329 strbuf_addstr(msg, orig_message);
1330 hook_commit = "HEAD";
1331 }
1332 author = amend_author = get_author(message);
1333 unuse_commit_buffer(current_head, message);
1334 if (!author) {
1335 res = error(_("unable to parse commit author"));
1336 goto out;
1337 }
1338 parents = copy_commit_list(current_head->parents);
1339 extra = read_commit_extra_headers(current_head, exclude_gpgsig);
1340 } else if (current_head) {
1341 commit_list_insert(current_head, &parents);
1342 }
1343
1344 if (write_index_as_tree(&tree, &the_index, get_index_file(), 0, NULL)) {
1345 res = error(_("git write-tree failed to write a tree"));
1346 goto out;
1347 }
1348
1349 if (!(flags & ALLOW_EMPTY) && oideq(current_head ?
1350 get_commit_tree_oid(current_head) :
1351 the_hash_algo->empty_tree, &tree)) {
1352 res = 1; /* run 'git commit' to display error message */
1353 goto out;
1354 }
1355
1356 if (find_hook("prepare-commit-msg")) {
1357 res = run_prepare_commit_msg_hook(msg, hook_commit);
1358 if (res)
1359 goto out;
1360 if (strbuf_read_file(&commit_msg, git_path_commit_editmsg(),
1361 2048) < 0) {
1362 res = error_errno(_("unable to read commit message "
1363 "from '%s'"),
1364 git_path_commit_editmsg());
1365 goto out;
1366 }
1367 msg = &commit_msg;
1368 }
1369
1370 cleanup = (flags & CLEANUP_MSG) ? COMMIT_MSG_CLEANUP_ALL :
1371 opts->default_msg_cleanup;
1372
1373 if (cleanup != COMMIT_MSG_CLEANUP_NONE)
1374 strbuf_stripspace(msg, cleanup == COMMIT_MSG_CLEANUP_ALL);
1375 if ((flags & EDIT_MSG) && message_is_empty(msg, cleanup)) {
1376 res = 1; /* run 'git commit' to display error message */
1377 goto out;
1378 }
1379
1380 reset_ident_date();
1381
1382 if (commit_tree_extended(msg->buf, msg->len, &tree, parents,
1383 oid, author, opts->gpg_sign, extra)) {
1384 res = error(_("failed to write commit object"));
1385 goto out;
1386 }
1387
1388 if (update_head_with_reflog(current_head, oid,
1389 getenv("GIT_REFLOG_ACTION"), msg, &err)) {
1390 res = error("%s", err.buf);
1391 goto out;
1392 }
1393
1394 if (flags & AMEND_MSG)
1395 commit_post_rewrite(current_head, oid);
1396
1397out:
1398 free_commit_extra_headers(extra);
1399 strbuf_release(&err);
1400 strbuf_release(&commit_msg);
1401 free(amend_author);
1402
1403 return res;
1404}
1405
1406static int do_commit(const char *msg_file, const char *author,
1407 struct replay_opts *opts, unsigned int flags)
1408{
1409 int res = 1;
1410
1411 if (!(flags & EDIT_MSG) && !(flags & VERIFY_MSG) &&
1412 !(flags & CREATE_ROOT_COMMIT)) {
1413 struct object_id oid;
1414 struct strbuf sb = STRBUF_INIT;
1415
1416 if (msg_file && strbuf_read_file(&sb, msg_file, 2048) < 0)
1417 return error_errno(_("unable to read commit message "
1418 "from '%s'"),
1419 msg_file);
1420
1421 res = try_to_commit(msg_file ? &sb : NULL, author, opts, flags,
1422 &oid);
1423 strbuf_release(&sb);
1424 if (!res) {
1425 unlink(git_path_cherry_pick_head(the_repository));
1426 unlink(git_path_merge_msg(the_repository));
1427 if (!is_rebase_i(opts))
1428 print_commit_summary(NULL, &oid,
1429 SUMMARY_SHOW_AUTHOR_DATE);
1430 return res;
1431 }
1432 }
1433 if (res == 1)
1434 return run_git_commit(msg_file, opts, flags);
1435
1436 return res;
1437}
1438
1439static int is_original_commit_empty(struct commit *commit)
1440{
1441 const struct object_id *ptree_oid;
1442
1443 if (parse_commit(commit))
1444 return error(_("could not parse commit %s"),
1445 oid_to_hex(&commit->object.oid));
1446 if (commit->parents) {
1447 struct commit *parent = commit->parents->item;
1448 if (parse_commit(parent))
1449 return error(_("could not parse parent commit %s"),
1450 oid_to_hex(&parent->object.oid));
1451 ptree_oid = get_commit_tree_oid(parent);
1452 } else {
1453 ptree_oid = the_hash_algo->empty_tree; /* commit is root */
1454 }
1455
1456 return oideq(ptree_oid, get_commit_tree_oid(commit));
1457}
1458
1459/*
1460 * Do we run "git commit" with "--allow-empty"?
1461 */
1462static int allow_empty(struct replay_opts *opts, struct commit *commit)
1463{
1464 int index_unchanged, empty_commit;
1465
1466 /*
1467 * Three cases:
1468 *
1469 * (1) we do not allow empty at all and error out.
1470 *
1471 * (2) we allow ones that were initially empty, but
1472 * forbid the ones that become empty;
1473 *
1474 * (3) we allow both.
1475 */
1476 if (!opts->allow_empty)
1477 return 0; /* let "git commit" barf as necessary */
1478
1479 index_unchanged = is_index_unchanged();
1480 if (index_unchanged < 0)
1481 return index_unchanged;
1482 if (!index_unchanged)
1483 return 0; /* we do not have to say --allow-empty */
1484
1485 if (opts->keep_redundant_commits)
1486 return 1;
1487
1488 empty_commit = is_original_commit_empty(commit);
1489 if (empty_commit < 0)
1490 return empty_commit;
1491 if (!empty_commit)
1492 return 0;
1493 else
1494 return 1;
1495}
1496
1497/*
1498 * Note that ordering matters in this enum. Not only must it match the mapping
1499 * below, it is also divided into several sections that matter. When adding
1500 * new commands, make sure you add it in the right section.
1501 */
1502enum todo_command {
1503 /* commands that handle commits */
1504 TODO_PICK = 0,
1505 TODO_REVERT,
1506 TODO_EDIT,
1507 TODO_REWORD,
1508 TODO_FIXUP,
1509 TODO_SQUASH,
1510 /* commands that do something else than handling a single commit */
1511 TODO_EXEC,
1512 TODO_BREAK,
1513 TODO_LABEL,
1514 TODO_RESET,
1515 TODO_MERGE,
1516 /* commands that do nothing but are counted for reporting progress */
1517 TODO_NOOP,
1518 TODO_DROP,
1519 /* comments (not counted for reporting progress) */
1520 TODO_COMMENT
1521};
1522
1523static struct {
1524 char c;
1525 const char *str;
1526} todo_command_info[] = {
1527 { 'p', "pick" },
1528 { 0, "revert" },
1529 { 'e', "edit" },
1530 { 'r', "reword" },
1531 { 'f', "fixup" },
1532 { 's', "squash" },
1533 { 'x', "exec" },
1534 { 'b', "break" },
1535 { 'l', "label" },
1536 { 't', "reset" },
1537 { 'm', "merge" },
1538 { 0, "noop" },
1539 { 'd', "drop" },
1540 { 0, NULL }
1541};
1542
1543static const char *command_to_string(const enum todo_command command)
1544{
1545 if (command < TODO_COMMENT)
1546 return todo_command_info[command].str;
1547 die(_("unknown command: %d"), command);
1548}
1549
1550static char command_to_char(const enum todo_command command)
1551{
1552 if (command < TODO_COMMENT && todo_command_info[command].c)
1553 return todo_command_info[command].c;
1554 return comment_line_char;
1555}
1556
1557static int is_noop(const enum todo_command command)
1558{
1559 return TODO_NOOP <= command;
1560}
1561
1562static int is_fixup(enum todo_command command)
1563{
1564 return command == TODO_FIXUP || command == TODO_SQUASH;
1565}
1566
1567/* Does this command create a (non-merge) commit? */
1568static int is_pick_or_similar(enum todo_command command)
1569{
1570 switch (command) {
1571 case TODO_PICK:
1572 case TODO_REVERT:
1573 case TODO_EDIT:
1574 case TODO_REWORD:
1575 case TODO_FIXUP:
1576 case TODO_SQUASH:
1577 return 1;
1578 default:
1579 return 0;
1580 }
1581}
1582
1583static int update_squash_messages(enum todo_command command,
1584 struct commit *commit, struct replay_opts *opts)
1585{
1586 struct strbuf buf = STRBUF_INIT;
1587 int res;
1588 const char *message, *body;
1589
1590 if (opts->current_fixup_count > 0) {
1591 struct strbuf header = STRBUF_INIT;
1592 char *eol;
1593
1594 if (strbuf_read_file(&buf, rebase_path_squash_msg(), 9) <= 0)
1595 return error(_("could not read '%s'"),
1596 rebase_path_squash_msg());
1597
1598 eol = buf.buf[0] != comment_line_char ?
1599 buf.buf : strchrnul(buf.buf, '\n');
1600
1601 strbuf_addf(&header, "%c ", comment_line_char);
1602 strbuf_addf(&header, _("This is a combination of %d commits."),
1603 opts->current_fixup_count + 2);
1604 strbuf_splice(&buf, 0, eol - buf.buf, header.buf, header.len);
1605 strbuf_release(&header);
1606 } else {
1607 struct object_id head;
1608 struct commit *head_commit;
1609 const char *head_message, *body;
1610
1611 if (get_oid("HEAD", &head))
1612 return error(_("need a HEAD to fixup"));
1613 if (!(head_commit = lookup_commit_reference(the_repository, &head)))
1614 return error(_("could not read HEAD"));
1615 if (!(head_message = get_commit_buffer(head_commit, NULL)))
1616 return error(_("could not read HEAD's commit message"));
1617
1618 find_commit_subject(head_message, &body);
1619 if (write_message(body, strlen(body),
1620 rebase_path_fixup_msg(), 0)) {
1621 unuse_commit_buffer(head_commit, head_message);
1622 return error(_("cannot write '%s'"),
1623 rebase_path_fixup_msg());
1624 }
1625
1626 strbuf_addf(&buf, "%c ", comment_line_char);
1627 strbuf_addf(&buf, _("This is a combination of %d commits."), 2);
1628 strbuf_addf(&buf, "\n%c ", comment_line_char);
1629 strbuf_addstr(&buf, _("This is the 1st commit message:"));
1630 strbuf_addstr(&buf, "\n\n");
1631 strbuf_addstr(&buf, body);
1632
1633 unuse_commit_buffer(head_commit, head_message);
1634 }
1635
1636 if (!(message = get_commit_buffer(commit, NULL)))
1637 return error(_("could not read commit message of %s"),
1638 oid_to_hex(&commit->object.oid));
1639 find_commit_subject(message, &body);
1640
1641 if (command == TODO_SQUASH) {
1642 unlink(rebase_path_fixup_msg());
1643 strbuf_addf(&buf, "\n%c ", comment_line_char);
1644 strbuf_addf(&buf, _("This is the commit message #%d:"),
1645 ++opts->current_fixup_count + 1);
1646 strbuf_addstr(&buf, "\n\n");
1647 strbuf_addstr(&buf, body);
1648 } else if (command == TODO_FIXUP) {
1649 strbuf_addf(&buf, "\n%c ", comment_line_char);
1650 strbuf_addf(&buf, _("The commit message #%d will be skipped:"),
1651 ++opts->current_fixup_count + 1);
1652 strbuf_addstr(&buf, "\n\n");
1653 strbuf_add_commented_lines(&buf, body, strlen(body));
1654 } else
1655 return error(_("unknown command: %d"), command);
1656 unuse_commit_buffer(commit, message);
1657
1658 res = write_message(buf.buf, buf.len, rebase_path_squash_msg(), 0);
1659 strbuf_release(&buf);
1660
1661 if (!res) {
1662 strbuf_addf(&opts->current_fixups, "%s%s %s",
1663 opts->current_fixups.len ? "\n" : "",
1664 command_to_string(command),
1665 oid_to_hex(&commit->object.oid));
1666 res = write_message(opts->current_fixups.buf,
1667 opts->current_fixups.len,
1668 rebase_path_current_fixups(), 0);
1669 }
1670
1671 return res;
1672}
1673
1674static void flush_rewritten_pending(void) {
1675 struct strbuf buf = STRBUF_INIT;
1676 struct object_id newoid;
1677 FILE *out;
1678
1679 if (strbuf_read_file(&buf, rebase_path_rewritten_pending(), (GIT_MAX_HEXSZ + 1) * 2) > 0 &&
1680 !get_oid("HEAD", &newoid) &&
1681 (out = fopen_or_warn(rebase_path_rewritten_list(), "a"))) {
1682 char *bol = buf.buf, *eol;
1683
1684 while (*bol) {
1685 eol = strchrnul(bol, '\n');
1686 fprintf(out, "%.*s %s\n", (int)(eol - bol),
1687 bol, oid_to_hex(&newoid));
1688 if (!*eol)
1689 break;
1690 bol = eol + 1;
1691 }
1692 fclose(out);
1693 unlink(rebase_path_rewritten_pending());
1694 }
1695 strbuf_release(&buf);
1696}
1697
1698static void record_in_rewritten(struct object_id *oid,
1699 enum todo_command next_command) {
1700 FILE *out = fopen_or_warn(rebase_path_rewritten_pending(), "a");
1701
1702 if (!out)
1703 return;
1704
1705 fprintf(out, "%s\n", oid_to_hex(oid));
1706 fclose(out);
1707
1708 if (!is_fixup(next_command))
1709 flush_rewritten_pending();
1710}
1711
1712static int do_pick_commit(enum todo_command command, struct commit *commit,
1713 struct replay_opts *opts, int final_fixup)
1714{
1715 unsigned int flags = opts->edit ? EDIT_MSG : 0;
1716 const char *msg_file = opts->edit ? NULL : git_path_merge_msg(the_repository);
1717 struct object_id head;
1718 struct commit *base, *next, *parent;
1719 const char *base_label, *next_label;
1720 char *author = NULL;
1721 struct commit_message msg = { NULL, NULL, NULL, NULL };
1722 struct strbuf msgbuf = STRBUF_INIT;
1723 int res, unborn = 0, allow;
1724
1725 if (opts->no_commit) {
1726 /*
1727 * We do not intend to commit immediately. We just want to
1728 * merge the differences in, so let's compute the tree
1729 * that represents the "current" state for merge-recursive
1730 * to work on.
1731 */
1732 if (write_index_as_tree(&head, &the_index, get_index_file(), 0, NULL))
1733 return error(_("your index file is unmerged."));
1734 } else {
1735 unborn = get_oid("HEAD", &head);
1736 /* Do we want to generate a root commit? */
1737 if (is_pick_or_similar(command) && opts->have_squash_onto &&
1738 oideq(&head, &opts->squash_onto)) {
1739 if (is_fixup(command))
1740 return error(_("cannot fixup root commit"));
1741 flags |= CREATE_ROOT_COMMIT;
1742 unborn = 1;
1743 } else if (unborn)
1744 oidcpy(&head, the_hash_algo->empty_tree);
1745 if (index_differs_from(unborn ? empty_tree_oid_hex() : "HEAD",
1746 NULL, 0))
1747 return error_dirty_index(opts);
1748 }
1749 discard_cache();
1750
1751 if (!commit->parents)
1752 parent = NULL;
1753 else if (commit->parents->next) {
1754 /* Reverting or cherry-picking a merge commit */
1755 int cnt;
1756 struct commit_list *p;
1757
1758 if (!opts->mainline)
1759 return error(_("commit %s is a merge but no -m option was given."),
1760 oid_to_hex(&commit->object.oid));
1761
1762 for (cnt = 1, p = commit->parents;
1763 cnt != opts->mainline && p;
1764 cnt++)
1765 p = p->next;
1766 if (cnt != opts->mainline || !p)
1767 return error(_("commit %s does not have parent %d"),
1768 oid_to_hex(&commit->object.oid), opts->mainline);
1769 parent = p->item;
1770 } else if (0 < opts->mainline)
1771 return error(_("mainline was specified but commit %s is not a merge."),
1772 oid_to_hex(&commit->object.oid));
1773 else
1774 parent = commit->parents->item;
1775
1776 if (get_message(commit, &msg) != 0)
1777 return error(_("cannot get commit message for %s"),
1778 oid_to_hex(&commit->object.oid));
1779
1780 if (opts->allow_ff && !is_fixup(command) &&
1781 ((parent && oideq(&parent->object.oid, &head)) ||
1782 (!parent && unborn))) {
1783 if (is_rebase_i(opts))
1784 write_author_script(msg.message);
1785 res = fast_forward_to(&commit->object.oid, &head, unborn,
1786 opts);
1787 if (res || command != TODO_REWORD)
1788 goto leave;
1789 flags |= EDIT_MSG | AMEND_MSG | VERIFY_MSG;
1790 msg_file = NULL;
1791 goto fast_forward_edit;
1792 }
1793 if (parent && parse_commit(parent) < 0)
1794 /* TRANSLATORS: The first %s will be a "todo" command like
1795 "revert" or "pick", the second %s a SHA1. */
1796 return error(_("%s: cannot parse parent commit %s"),
1797 command_to_string(command),
1798 oid_to_hex(&parent->object.oid));
1799
1800 /*
1801 * "commit" is an existing commit. We would want to apply
1802 * the difference it introduces since its first parent "prev"
1803 * on top of the current HEAD if we are cherry-pick. Or the
1804 * reverse of it if we are revert.
1805 */
1806
1807 if (command == TODO_REVERT) {
1808 base = commit;
1809 base_label = msg.label;
1810 next = parent;
1811 next_label = msg.parent_label;
1812 strbuf_addstr(&msgbuf, "Revert \"");
1813 strbuf_addstr(&msgbuf, msg.subject);
1814 strbuf_addstr(&msgbuf, "\"\n\nThis reverts commit ");
1815 strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1816
1817 if (commit->parents && commit->parents->next) {
1818 strbuf_addstr(&msgbuf, ", reversing\nchanges made to ");
1819 strbuf_addstr(&msgbuf, oid_to_hex(&parent->object.oid));
1820 }
1821 strbuf_addstr(&msgbuf, ".\n");
1822 } else {
1823 const char *p;
1824
1825 base = parent;
1826 base_label = msg.parent_label;
1827 next = commit;
1828 next_label = msg.label;
1829
1830 /* Append the commit log message to msgbuf. */
1831 if (find_commit_subject(msg.message, &p))
1832 strbuf_addstr(&msgbuf, p);
1833
1834 if (opts->record_origin) {
1835 strbuf_complete_line(&msgbuf);
1836 if (!has_conforming_footer(&msgbuf, NULL, 0))
1837 strbuf_addch(&msgbuf, '\n');
1838 strbuf_addstr(&msgbuf, cherry_picked_prefix);
1839 strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
1840 strbuf_addstr(&msgbuf, ")\n");
1841 }
1842 if (!is_fixup(command))
1843 author = get_author(msg.message);
1844 }
1845
1846 if (command == TODO_REWORD)
1847 flags |= EDIT_MSG | VERIFY_MSG;
1848 else if (is_fixup(command)) {
1849 if (update_squash_messages(command, commit, opts))
1850 return -1;
1851 flags |= AMEND_MSG;
1852 if (!final_fixup)
1853 msg_file = rebase_path_squash_msg();
1854 else if (file_exists(rebase_path_fixup_msg())) {
1855 flags |= CLEANUP_MSG;
1856 msg_file = rebase_path_fixup_msg();
1857 } else {
1858 const char *dest = git_path_squash_msg(the_repository);
1859 unlink(dest);
1860 if (copy_file(dest, rebase_path_squash_msg(), 0666))
1861 return error(_("could not rename '%s' to '%s'"),
1862 rebase_path_squash_msg(), dest);
1863 unlink(git_path_merge_msg(the_repository));
1864 msg_file = dest;
1865 flags |= EDIT_MSG;
1866 }
1867 }
1868
1869 if (opts->signoff && !is_fixup(command))
1870 append_signoff(&msgbuf, 0, 0);
1871
1872 if (is_rebase_i(opts) && write_author_script(msg.message) < 0)
1873 res = -1;
1874 else if (!opts->strategy || !strcmp(opts->strategy, "recursive") || command == TODO_REVERT) {
1875 res = do_recursive_merge(base, next, base_label, next_label,
1876 &head, &msgbuf, opts);
1877 if (res < 0)
1878 goto leave;
1879
1880 res |= write_message(msgbuf.buf, msgbuf.len,
1881 git_path_merge_msg(the_repository), 0);
1882 } else {
1883 struct commit_list *common = NULL;
1884 struct commit_list *remotes = NULL;
1885
1886 res = write_message(msgbuf.buf, msgbuf.len,
1887 git_path_merge_msg(the_repository), 0);
1888
1889 commit_list_insert(base, &common);
1890 commit_list_insert(next, &remotes);
1891 res |= try_merge_command(the_repository, opts->strategy,
1892 opts->xopts_nr, (const char **)opts->xopts,
1893 common, oid_to_hex(&head), remotes);
1894 free_commit_list(common);
1895 free_commit_list(remotes);
1896 }
1897 strbuf_release(&msgbuf);
1898
1899 /*
1900 * If the merge was clean or if it failed due to conflict, we write
1901 * CHERRY_PICK_HEAD for the subsequent invocation of commit to use.
1902 * However, if the merge did not even start, then we don't want to
1903 * write it at all.
1904 */
1905 if (command == TODO_PICK && !opts->no_commit && (res == 0 || res == 1) &&
1906 update_ref(NULL, "CHERRY_PICK_HEAD", &commit->object.oid, NULL,
1907 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1908 res = -1;
1909 if (command == TODO_REVERT && ((opts->no_commit && res == 0) || res == 1) &&
1910 update_ref(NULL, "REVERT_HEAD", &commit->object.oid, NULL,
1911 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
1912 res = -1;
1913
1914 if (res) {
1915 error(command == TODO_REVERT
1916 ? _("could not revert %s... %s")
1917 : _("could not apply %s... %s"),
1918 short_commit_name(commit), msg.subject);
1919 print_advice(res == 1, opts);
1920 repo_rerere(the_repository, opts->allow_rerere_auto);
1921 goto leave;
1922 }
1923
1924 allow = allow_empty(opts, commit);
1925 if (allow < 0) {
1926 res = allow;
1927 goto leave;
1928 } else if (allow)
1929 flags |= ALLOW_EMPTY;
1930 if (!opts->no_commit) {
1931fast_forward_edit:
1932 if (author || command == TODO_REVERT || (flags & AMEND_MSG))
1933 res = do_commit(msg_file, author, opts, flags);
1934 else
1935 res = error(_("unable to parse commit author"));
1936 }
1937
1938 if (!res && final_fixup) {
1939 unlink(rebase_path_fixup_msg());
1940 unlink(rebase_path_squash_msg());
1941 unlink(rebase_path_current_fixups());
1942 strbuf_reset(&opts->current_fixups);
1943 opts->current_fixup_count = 0;
1944 }
1945
1946leave:
1947 free_message(commit, &msg);
1948 free(author);
1949 update_abort_safety_file();
1950
1951 return res;
1952}
1953
1954static int prepare_revs(struct replay_opts *opts)
1955{
1956 /*
1957 * picking (but not reverting) ranges (but not individual revisions)
1958 * should be done in reverse
1959 */
1960 if (opts->action == REPLAY_PICK && !opts->revs->no_walk)
1961 opts->revs->reverse ^= 1;
1962
1963 if (prepare_revision_walk(opts->revs))
1964 return error(_("revision walk setup failed"));
1965
1966 return 0;
1967}
1968
1969static int read_and_refresh_cache(struct replay_opts *opts)
1970{
1971 struct lock_file index_lock = LOCK_INIT;
1972 int index_fd = hold_locked_index(&index_lock, 0);
1973 if (read_index(&the_index) < 0) {
1974 rollback_lock_file(&index_lock);
1975 return error(_("git %s: failed to read the index"),
1976 _(action_name(opts)));
1977 }
1978 refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED, NULL, NULL, NULL);
1979 if (index_fd >= 0) {
1980 if (write_locked_index(&the_index, &index_lock,
1981 COMMIT_LOCK | SKIP_IF_UNCHANGED)) {
1982 return error(_("git %s: failed to refresh the index"),
1983 _(action_name(opts)));
1984 }
1985 }
1986 return 0;
1987}
1988
1989enum todo_item_flags {
1990 TODO_EDIT_MERGE_MSG = 1
1991};
1992
1993struct todo_item {
1994 enum todo_command command;
1995 struct commit *commit;
1996 unsigned int flags;
1997 const char *arg;
1998 int arg_len;
1999 size_t offset_in_buf;
2000};
2001
2002struct todo_list {
2003 struct strbuf buf;
2004 struct todo_item *items;
2005 int nr, alloc, current;
2006 int done_nr, total_nr;
2007 struct stat_data stat;
2008};
2009
2010#define TODO_LIST_INIT { STRBUF_INIT }
2011
2012static void todo_list_release(struct todo_list *todo_list)
2013{
2014 strbuf_release(&todo_list->buf);
2015 FREE_AND_NULL(todo_list->items);
2016 todo_list->nr = todo_list->alloc = 0;
2017}
2018
2019static struct todo_item *append_new_todo(struct todo_list *todo_list)
2020{
2021 ALLOC_GROW(todo_list->items, todo_list->nr + 1, todo_list->alloc);
2022 return todo_list->items + todo_list->nr++;
2023}
2024
2025static int parse_insn_line(struct todo_item *item, const char *bol, char *eol)
2026{
2027 struct object_id commit_oid;
2028 char *end_of_object_name;
2029 int i, saved, status, padding;
2030
2031 item->flags = 0;
2032
2033 /* left-trim */
2034 bol += strspn(bol, " \t");
2035
2036 if (bol == eol || *bol == '\r' || *bol == comment_line_char) {
2037 item->command = TODO_COMMENT;
2038 item->commit = NULL;
2039 item->arg = bol;
2040 item->arg_len = eol - bol;
2041 return 0;
2042 }
2043
2044 for (i = 0; i < TODO_COMMENT; i++)
2045 if (skip_prefix(bol, todo_command_info[i].str, &bol)) {
2046 item->command = i;
2047 break;
2048 } else if ((bol + 1 == eol || bol[1] == ' ') &&
2049 *bol == todo_command_info[i].c) {
2050 bol++;
2051 item->command = i;
2052 break;
2053 }
2054 if (i >= TODO_COMMENT)
2055 return -1;
2056
2057 /* Eat up extra spaces/ tabs before object name */
2058 padding = strspn(bol, " \t");
2059 bol += padding;
2060
2061 if (item->command == TODO_NOOP || item->command == TODO_BREAK) {
2062 if (bol != eol)
2063 return error(_("%s does not accept arguments: '%s'"),
2064 command_to_string(item->command), bol);
2065 item->commit = NULL;
2066 item->arg = bol;
2067 item->arg_len = eol - bol;
2068 return 0;
2069 }
2070
2071 if (!padding)
2072 return error(_("missing arguments for %s"),
2073 command_to_string(item->command));
2074
2075 if (item->command == TODO_EXEC || item->command == TODO_LABEL ||
2076 item->command == TODO_RESET) {
2077 item->commit = NULL;
2078 item->arg = bol;
2079 item->arg_len = (int)(eol - bol);
2080 return 0;
2081 }
2082
2083 if (item->command == TODO_MERGE) {
2084 if (skip_prefix(bol, "-C", &bol))
2085 bol += strspn(bol, " \t");
2086 else if (skip_prefix(bol, "-c", &bol)) {
2087 bol += strspn(bol, " \t");
2088 item->flags |= TODO_EDIT_MERGE_MSG;
2089 } else {
2090 item->flags |= TODO_EDIT_MERGE_MSG;
2091 item->commit = NULL;
2092 item->arg = bol;
2093 item->arg_len = (int)(eol - bol);
2094 return 0;
2095 }
2096 }
2097
2098 end_of_object_name = (char *) bol + strcspn(bol, " \t\n");
2099 saved = *end_of_object_name;
2100 *end_of_object_name = '\0';
2101 status = get_oid(bol, &commit_oid);
2102 *end_of_object_name = saved;
2103
2104 item->arg = end_of_object_name + strspn(end_of_object_name, " \t");
2105 item->arg_len = (int)(eol - item->arg);
2106
2107 if (status < 0)
2108 return -1;
2109
2110 item->commit = lookup_commit_reference(the_repository, &commit_oid);
2111 return !item->commit;
2112}
2113
2114static int parse_insn_buffer(char *buf, struct todo_list *todo_list)
2115{
2116 struct todo_item *item;
2117 char *p = buf, *next_p;
2118 int i, res = 0, fixup_okay = file_exists(rebase_path_done());
2119
2120 for (i = 1; *p; i++, p = next_p) {
2121 char *eol = strchrnul(p, '\n');
2122
2123 next_p = *eol ? eol + 1 /* skip LF */ : eol;
2124
2125 if (p != eol && eol[-1] == '\r')
2126 eol--; /* strip Carriage Return */
2127
2128 item = append_new_todo(todo_list);
2129 item->offset_in_buf = p - todo_list->buf.buf;
2130 if (parse_insn_line(item, p, eol)) {
2131 res = error(_("invalid line %d: %.*s"),
2132 i, (int)(eol - p), p);
2133 item->command = TODO_NOOP;
2134 }
2135
2136 if (fixup_okay)
2137 ; /* do nothing */
2138 else if (is_fixup(item->command))
2139 return error(_("cannot '%s' without a previous commit"),
2140 command_to_string(item->command));
2141 else if (!is_noop(item->command))
2142 fixup_okay = 1;
2143 }
2144
2145 return res;
2146}
2147
2148static int count_commands(struct todo_list *todo_list)
2149{
2150 int count = 0, i;
2151
2152 for (i = 0; i < todo_list->nr; i++)
2153 if (todo_list->items[i].command != TODO_COMMENT)
2154 count++;
2155
2156 return count;
2157}
2158
2159static int get_item_line_offset(struct todo_list *todo_list, int index)
2160{
2161 return index < todo_list->nr ?
2162 todo_list->items[index].offset_in_buf : todo_list->buf.len;
2163}
2164
2165static const char *get_item_line(struct todo_list *todo_list, int index)
2166{
2167 return todo_list->buf.buf + get_item_line_offset(todo_list, index);
2168}
2169
2170static int get_item_line_length(struct todo_list *todo_list, int index)
2171{
2172 return get_item_line_offset(todo_list, index + 1)
2173 - get_item_line_offset(todo_list, index);
2174}
2175
2176static ssize_t strbuf_read_file_or_whine(struct strbuf *sb, const char *path)
2177{
2178 int fd;
2179 ssize_t len;
2180
2181 fd = open(path, O_RDONLY);
2182 if (fd < 0)
2183 return error_errno(_("could not open '%s'"), path);
2184 len = strbuf_read(sb, fd, 0);
2185 close(fd);
2186 if (len < 0)
2187 return error(_("could not read '%s'."), path);
2188 return len;
2189}
2190
2191static int read_populate_todo(struct todo_list *todo_list,
2192 struct replay_opts *opts)
2193{
2194 struct stat st;
2195 const char *todo_file = get_todo_path(opts);
2196 int res;
2197
2198 strbuf_reset(&todo_list->buf);
2199 if (strbuf_read_file_or_whine(&todo_list->buf, todo_file) < 0)
2200 return -1;
2201
2202 res = stat(todo_file, &st);
2203 if (res)
2204 return error(_("could not stat '%s'"), todo_file);
2205 fill_stat_data(&todo_list->stat, &st);
2206
2207 res = parse_insn_buffer(todo_list->buf.buf, todo_list);
2208 if (res) {
2209 if (is_rebase_i(opts))
2210 return error(_("please fix this using "
2211 "'git rebase --edit-todo'."));
2212 return error(_("unusable instruction sheet: '%s'"), todo_file);
2213 }
2214
2215 if (!todo_list->nr &&
2216 (!is_rebase_i(opts) || !file_exists(rebase_path_done())))
2217 return error(_("no commits parsed."));
2218
2219 if (!is_rebase_i(opts)) {
2220 enum todo_command valid =
2221 opts->action == REPLAY_PICK ? TODO_PICK : TODO_REVERT;
2222 int i;
2223
2224 for (i = 0; i < todo_list->nr; i++)
2225 if (valid == todo_list->items[i].command)
2226 continue;
2227 else if (valid == TODO_PICK)
2228 return error(_("cannot cherry-pick during a revert."));
2229 else
2230 return error(_("cannot revert during a cherry-pick."));
2231 }
2232
2233 if (is_rebase_i(opts)) {
2234 struct todo_list done = TODO_LIST_INIT;
2235 FILE *f = fopen_or_warn(rebase_path_msgtotal(), "w");
2236
2237 if (strbuf_read_file(&done.buf, rebase_path_done(), 0) > 0 &&
2238 !parse_insn_buffer(done.buf.buf, &done))
2239 todo_list->done_nr = count_commands(&done);
2240 else
2241 todo_list->done_nr = 0;
2242
2243 todo_list->total_nr = todo_list->done_nr
2244 + count_commands(todo_list);
2245 todo_list_release(&done);
2246
2247 if (f) {
2248 fprintf(f, "%d\n", todo_list->total_nr);
2249 fclose(f);
2250 }
2251 }
2252
2253 return 0;
2254}
2255
2256static int git_config_string_dup(char **dest,
2257 const char *var, const char *value)
2258{
2259 if (!value)
2260 return config_error_nonbool(var);
2261 free(*dest);
2262 *dest = xstrdup(value);
2263 return 0;
2264}
2265
2266static int populate_opts_cb(const char *key, const char *value, void *data)
2267{
2268 struct replay_opts *opts = data;
2269 int error_flag = 1;
2270
2271 if (!value)
2272 error_flag = 0;
2273 else if (!strcmp(key, "options.no-commit"))
2274 opts->no_commit = git_config_bool_or_int(key, value, &error_flag);
2275 else if (!strcmp(key, "options.edit"))
2276 opts->edit = git_config_bool_or_int(key, value, &error_flag);
2277 else if (!strcmp(key, "options.signoff"))
2278 opts->signoff = git_config_bool_or_int(key, value, &error_flag);
2279 else if (!strcmp(key, "options.record-origin"))
2280 opts->record_origin = git_config_bool_or_int(key, value, &error_flag);
2281 else if (!strcmp(key, "options.allow-ff"))
2282 opts->allow_ff = git_config_bool_or_int(key, value, &error_flag);
2283 else if (!strcmp(key, "options.mainline"))
2284 opts->mainline = git_config_int(key, value);
2285 else if (!strcmp(key, "options.strategy"))
2286 git_config_string_dup(&opts->strategy, key, value);
2287 else if (!strcmp(key, "options.gpg-sign"))
2288 git_config_string_dup(&opts->gpg_sign, key, value);
2289 else if (!strcmp(key, "options.strategy-option")) {
2290 ALLOC_GROW(opts->xopts, opts->xopts_nr + 1, opts->xopts_alloc);
2291 opts->xopts[opts->xopts_nr++] = xstrdup(value);
2292 } else if (!strcmp(key, "options.allow-rerere-auto"))
2293 opts->allow_rerere_auto =
2294 git_config_bool_or_int(key, value, &error_flag) ?
2295 RERERE_AUTOUPDATE : RERERE_NOAUTOUPDATE;
2296 else
2297 return error(_("invalid key: %s"), key);
2298
2299 if (!error_flag)
2300 return error(_("invalid value for %s: %s"), key, value);
2301
2302 return 0;
2303}
2304
2305void parse_strategy_opts(struct replay_opts *opts, char *raw_opts)
2306{
2307 int i;
2308 char *strategy_opts_string = raw_opts;
2309
2310 if (*strategy_opts_string == ' ')
2311 strategy_opts_string++;
2312
2313 opts->xopts_nr = split_cmdline(strategy_opts_string,
2314 (const char ***)&opts->xopts);
2315 for (i = 0; i < opts->xopts_nr; i++) {
2316 const char *arg = opts->xopts[i];
2317
2318 skip_prefix(arg, "--", &arg);
2319 opts->xopts[i] = xstrdup(arg);
2320 }
2321}
2322
2323static void read_strategy_opts(struct replay_opts *opts, struct strbuf *buf)
2324{
2325 strbuf_reset(buf);
2326 if (!read_oneliner(buf, rebase_path_strategy(), 0))
2327 return;
2328 opts->strategy = strbuf_detach(buf, NULL);
2329 if (!read_oneliner(buf, rebase_path_strategy_opts(), 0))
2330 return;
2331
2332 parse_strategy_opts(opts, buf->buf);
2333}
2334
2335static int read_populate_opts(struct replay_opts *opts)
2336{
2337 if (is_rebase_i(opts)) {
2338 struct strbuf buf = STRBUF_INIT;
2339
2340 if (read_oneliner(&buf, rebase_path_gpg_sign_opt(), 1)) {
2341 if (!starts_with(buf.buf, "-S"))
2342 strbuf_reset(&buf);
2343 else {
2344 free(opts->gpg_sign);
2345 opts->gpg_sign = xstrdup(buf.buf + 2);
2346 }
2347 strbuf_reset(&buf);
2348 }
2349
2350 if (read_oneliner(&buf, rebase_path_allow_rerere_autoupdate(), 1)) {
2351 if (!strcmp(buf.buf, "--rerere-autoupdate"))
2352 opts->allow_rerere_auto = RERERE_AUTOUPDATE;
2353 else if (!strcmp(buf.buf, "--no-rerere-autoupdate"))
2354 opts->allow_rerere_auto = RERERE_NOAUTOUPDATE;
2355 strbuf_reset(&buf);
2356 }
2357
2358 if (file_exists(rebase_path_verbose()))
2359 opts->verbose = 1;
2360
2361 if (file_exists(rebase_path_signoff())) {
2362 opts->allow_ff = 0;
2363 opts->signoff = 1;
2364 }
2365
2366 if (file_exists(rebase_path_reschedule_failed_exec()))
2367 opts->reschedule_failed_exec = 1;
2368
2369 read_strategy_opts(opts, &buf);
2370 strbuf_release(&buf);
2371
2372 if (read_oneliner(&opts->current_fixups,
2373 rebase_path_current_fixups(), 1)) {
2374 const char *p = opts->current_fixups.buf;
2375 opts->current_fixup_count = 1;
2376 while ((p = strchr(p, '\n'))) {
2377 opts->current_fixup_count++;
2378 p++;
2379 }
2380 }
2381
2382 if (read_oneliner(&buf, rebase_path_squash_onto(), 0)) {
2383 if (get_oid_hex(buf.buf, &opts->squash_onto) < 0)
2384 return error(_("unusable squash-onto"));
2385 opts->have_squash_onto = 1;
2386 }
2387
2388 return 0;
2389 }
2390
2391 if (!file_exists(git_path_opts_file()))
2392 return 0;
2393 /*
2394 * The function git_parse_source(), called from git_config_from_file(),
2395 * may die() in case of a syntactically incorrect file. We do not care
2396 * about this case, though, because we wrote that file ourselves, so we
2397 * are pretty certain that it is syntactically correct.
2398 */
2399 if (git_config_from_file(populate_opts_cb, git_path_opts_file(), opts) < 0)
2400 return error(_("malformed options sheet: '%s'"),
2401 git_path_opts_file());
2402 return 0;
2403}
2404
2405static void write_strategy_opts(struct replay_opts *opts)
2406{
2407 int i;
2408 struct strbuf buf = STRBUF_INIT;
2409
2410 for (i = 0; i < opts->xopts_nr; ++i)
2411 strbuf_addf(&buf, " --%s", opts->xopts[i]);
2412
2413 write_file(rebase_path_strategy_opts(), "%s\n", buf.buf);
2414 strbuf_release(&buf);
2415}
2416
2417int write_basic_state(struct replay_opts *opts, const char *head_name,
2418 const char *onto, const char *orig_head)
2419{
2420 const char *quiet = getenv("GIT_QUIET");
2421
2422 if (head_name)
2423 write_file(rebase_path_head_name(), "%s\n", head_name);
2424 if (onto)
2425 write_file(rebase_path_onto(), "%s\n", onto);
2426 if (orig_head)
2427 write_file(rebase_path_orig_head(), "%s\n", orig_head);
2428
2429 if (quiet)
2430 write_file(rebase_path_quiet(), "%s\n", quiet);
2431 else
2432 write_file(rebase_path_quiet(), "\n");
2433
2434 if (opts->verbose)
2435 write_file(rebase_path_verbose(), "%s", "");
2436 if (opts->strategy)
2437 write_file(rebase_path_strategy(), "%s\n", opts->strategy);
2438 if (opts->xopts_nr > 0)
2439 write_strategy_opts(opts);
2440
2441 if (opts->allow_rerere_auto == RERERE_AUTOUPDATE)
2442 write_file(rebase_path_allow_rerere_autoupdate(), "--rerere-autoupdate\n");
2443 else if (opts->allow_rerere_auto == RERERE_NOAUTOUPDATE)
2444 write_file(rebase_path_allow_rerere_autoupdate(), "--no-rerere-autoupdate\n");
2445
2446 if (opts->gpg_sign)
2447 write_file(rebase_path_gpg_sign_opt(), "-S%s\n", opts->gpg_sign);
2448 if (opts->signoff)
2449 write_file(rebase_path_signoff(), "--signoff\n");
2450 if (opts->reschedule_failed_exec)
2451 write_file(rebase_path_reschedule_failed_exec(), "%s", "");
2452
2453 return 0;
2454}
2455
2456static int walk_revs_populate_todo(struct todo_list *todo_list,
2457 struct replay_opts *opts)
2458{
2459 enum todo_command command = opts->action == REPLAY_PICK ?
2460 TODO_PICK : TODO_REVERT;
2461 const char *command_string = todo_command_info[command].str;
2462 struct commit *commit;
2463
2464 if (prepare_revs(opts))
2465 return -1;
2466
2467 while ((commit = get_revision(opts->revs))) {
2468 struct todo_item *item = append_new_todo(todo_list);
2469 const char *commit_buffer = get_commit_buffer(commit, NULL);
2470 const char *subject;
2471 int subject_len;
2472
2473 item->command = command;
2474 item->commit = commit;
2475 item->arg = NULL;
2476 item->arg_len = 0;
2477 item->offset_in_buf = todo_list->buf.len;
2478 subject_len = find_commit_subject(commit_buffer, &subject);
2479 strbuf_addf(&todo_list->buf, "%s %s %.*s\n", command_string,
2480 short_commit_name(commit), subject_len, subject);
2481 unuse_commit_buffer(commit, commit_buffer);
2482 }
2483
2484 if (!todo_list->nr)
2485 return error(_("empty commit set passed"));
2486
2487 return 0;
2488}
2489
2490static int create_seq_dir(void)
2491{
2492 if (file_exists(git_path_seq_dir())) {
2493 error(_("a cherry-pick or revert is already in progress"));
2494 advise(_("try \"git cherry-pick (--continue | --quit | --abort)\""));
2495 return -1;
2496 } else if (mkdir(git_path_seq_dir(), 0777) < 0)
2497 return error_errno(_("could not create sequencer directory '%s'"),
2498 git_path_seq_dir());
2499 return 0;
2500}
2501
2502static int save_head(const char *head)
2503{
2504 struct lock_file head_lock = LOCK_INIT;
2505 struct strbuf buf = STRBUF_INIT;
2506 int fd;
2507 ssize_t written;
2508
2509 fd = hold_lock_file_for_update(&head_lock, git_path_head_file(), 0);
2510 if (fd < 0)
2511 return error_errno(_("could not lock HEAD"));
2512 strbuf_addf(&buf, "%s\n", head);
2513 written = write_in_full(fd, buf.buf, buf.len);
2514 strbuf_release(&buf);
2515 if (written < 0) {
2516 error_errno(_("could not write to '%s'"), git_path_head_file());
2517 rollback_lock_file(&head_lock);
2518 return -1;
2519 }
2520 if (commit_lock_file(&head_lock) < 0)
2521 return error(_("failed to finalize '%s'"), git_path_head_file());
2522 return 0;
2523}
2524
2525static int rollback_is_safe(void)
2526{
2527 struct strbuf sb = STRBUF_INIT;
2528 struct object_id expected_head, actual_head;
2529
2530 if (strbuf_read_file(&sb, git_path_abort_safety_file(), 0) >= 0) {
2531 strbuf_trim(&sb);
2532 if (get_oid_hex(sb.buf, &expected_head)) {
2533 strbuf_release(&sb);
2534 die(_("could not parse %s"), git_path_abort_safety_file());
2535 }
2536 strbuf_release(&sb);
2537 }
2538 else if (errno == ENOENT)
2539 oidclr(&expected_head);
2540 else
2541 die_errno(_("could not read '%s'"), git_path_abort_safety_file());
2542
2543 if (get_oid("HEAD", &actual_head))
2544 oidclr(&actual_head);
2545
2546 return oideq(&actual_head, &expected_head);
2547}
2548
2549static int reset_for_rollback(const struct object_id *oid)
2550{
2551 const char *argv[4]; /* reset --merge <arg> + NULL */
2552
2553 argv[0] = "reset";
2554 argv[1] = "--merge";
2555 argv[2] = oid_to_hex(oid);
2556 argv[3] = NULL;
2557 return run_command_v_opt(argv, RUN_GIT_CMD);
2558}
2559
2560static int rollback_single_pick(void)
2561{
2562 struct object_id head_oid;
2563
2564 if (!file_exists(git_path_cherry_pick_head(the_repository)) &&
2565 !file_exists(git_path_revert_head(the_repository)))
2566 return error(_("no cherry-pick or revert in progress"));
2567 if (read_ref_full("HEAD", 0, &head_oid, NULL))
2568 return error(_("cannot resolve HEAD"));
2569 if (is_null_oid(&head_oid))
2570 return error(_("cannot abort from a branch yet to be born"));
2571 return reset_for_rollback(&head_oid);
2572}
2573
2574int sequencer_rollback(struct replay_opts *opts)
2575{
2576 FILE *f;
2577 struct object_id oid;
2578 struct strbuf buf = STRBUF_INIT;
2579 const char *p;
2580
2581 f = fopen(git_path_head_file(), "r");
2582 if (!f && errno == ENOENT) {
2583 /*
2584 * There is no multiple-cherry-pick in progress.
2585 * If CHERRY_PICK_HEAD or REVERT_HEAD indicates
2586 * a single-cherry-pick in progress, abort that.
2587 */
2588 return rollback_single_pick();
2589 }
2590 if (!f)
2591 return error_errno(_("cannot open '%s'"), git_path_head_file());
2592 if (strbuf_getline_lf(&buf, f)) {
2593 error(_("cannot read '%s': %s"), git_path_head_file(),
2594 ferror(f) ? strerror(errno) : _("unexpected end of file"));
2595 fclose(f);
2596 goto fail;
2597 }
2598 fclose(f);
2599 if (parse_oid_hex(buf.buf, &oid, &p) || *p != '\0') {
2600 error(_("stored pre-cherry-pick HEAD file '%s' is corrupt"),
2601 git_path_head_file());
2602 goto fail;
2603 }
2604 if (is_null_oid(&oid)) {
2605 error(_("cannot abort from a branch yet to be born"));
2606 goto fail;
2607 }
2608
2609 if (!rollback_is_safe()) {
2610 /* Do not error, just do not rollback */
2611 warning(_("You seem to have moved HEAD. "
2612 "Not rewinding, check your HEAD!"));
2613 } else
2614 if (reset_for_rollback(&oid))
2615 goto fail;
2616 strbuf_release(&buf);
2617 return sequencer_remove_state(opts);
2618fail:
2619 strbuf_release(&buf);
2620 return -1;
2621}
2622
2623static int save_todo(struct todo_list *todo_list, struct replay_opts *opts)
2624{
2625 struct lock_file todo_lock = LOCK_INIT;
2626 const char *todo_path = get_todo_path(opts);
2627 int next = todo_list->current, offset, fd;
2628
2629 /*
2630 * rebase -i writes "git-rebase-todo" without the currently executing
2631 * command, appending it to "done" instead.
2632 */
2633 if (is_rebase_i(opts))
2634 next++;
2635
2636 fd = hold_lock_file_for_update(&todo_lock, todo_path, 0);
2637 if (fd < 0)
2638 return error_errno(_("could not lock '%s'"), todo_path);
2639 offset = get_item_line_offset(todo_list, next);
2640 if (write_in_full(fd, todo_list->buf.buf + offset,
2641 todo_list->buf.len - offset) < 0)
2642 return error_errno(_("could not write to '%s'"), todo_path);
2643 if (commit_lock_file(&todo_lock) < 0)
2644 return error(_("failed to finalize '%s'"), todo_path);
2645
2646 if (is_rebase_i(opts) && next > 0) {
2647 const char *done = rebase_path_done();
2648 int fd = open(done, O_CREAT | O_WRONLY | O_APPEND, 0666);
2649 int ret = 0;
2650
2651 if (fd < 0)
2652 return 0;
2653 if (write_in_full(fd, get_item_line(todo_list, next - 1),
2654 get_item_line_length(todo_list, next - 1))
2655 < 0)
2656 ret = error_errno(_("could not write to '%s'"), done);
2657 if (close(fd) < 0)
2658 ret = error_errno(_("failed to finalize '%s'"), done);
2659 return ret;
2660 }
2661 return 0;
2662}
2663
2664static int save_opts(struct replay_opts *opts)
2665{
2666 const char *opts_file = git_path_opts_file();
2667 int res = 0;
2668
2669 if (opts->no_commit)
2670 res |= git_config_set_in_file_gently(opts_file, "options.no-commit", "true");
2671 if (opts->edit)
2672 res |= git_config_set_in_file_gently(opts_file, "options.edit", "true");
2673 if (opts->signoff)
2674 res |= git_config_set_in_file_gently(opts_file, "options.signoff", "true");
2675 if (opts->record_origin)
2676 res |= git_config_set_in_file_gently(opts_file, "options.record-origin", "true");
2677 if (opts->allow_ff)
2678 res |= git_config_set_in_file_gently(opts_file, "options.allow-ff", "true");
2679 if (opts->mainline) {
2680 struct strbuf buf = STRBUF_INIT;
2681 strbuf_addf(&buf, "%d", opts->mainline);
2682 res |= git_config_set_in_file_gently(opts_file, "options.mainline", buf.buf);
2683 strbuf_release(&buf);
2684 }
2685 if (opts->strategy)
2686 res |= git_config_set_in_file_gently(opts_file, "options.strategy", opts->strategy);
2687 if (opts->gpg_sign)
2688 res |= git_config_set_in_file_gently(opts_file, "options.gpg-sign", opts->gpg_sign);
2689 if (opts->xopts) {
2690 int i;
2691 for (i = 0; i < opts->xopts_nr; i++)
2692 res |= git_config_set_multivar_in_file_gently(opts_file,
2693 "options.strategy-option",
2694 opts->xopts[i], "^$", 0);
2695 }
2696 if (opts->allow_rerere_auto)
2697 res |= git_config_set_in_file_gently(opts_file, "options.allow-rerere-auto",
2698 opts->allow_rerere_auto == RERERE_AUTOUPDATE ?
2699 "true" : "false");
2700 return res;
2701}
2702
2703static int make_patch(struct commit *commit, struct replay_opts *opts)
2704{
2705 struct strbuf buf = STRBUF_INIT;
2706 struct rev_info log_tree_opt;
2707 const char *subject, *p;
2708 int res = 0;
2709
2710 p = short_commit_name(commit);
2711 if (write_message(p, strlen(p), rebase_path_stopped_sha(), 1) < 0)
2712 return -1;
2713 if (update_ref("rebase", "REBASE_HEAD", &commit->object.oid,
2714 NULL, REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR))
2715 res |= error(_("could not update %s"), "REBASE_HEAD");
2716
2717 strbuf_addf(&buf, "%s/patch", get_dir(opts));
2718 memset(&log_tree_opt, 0, sizeof(log_tree_opt));
2719 repo_init_revisions(the_repository, &log_tree_opt, NULL);
2720 log_tree_opt.abbrev = 0;
2721 log_tree_opt.diff = 1;
2722 log_tree_opt.diffopt.output_format = DIFF_FORMAT_PATCH;
2723 log_tree_opt.disable_stdin = 1;
2724 log_tree_opt.no_commit_id = 1;
2725 log_tree_opt.diffopt.file = fopen(buf.buf, "w");
2726 log_tree_opt.diffopt.use_color = GIT_COLOR_NEVER;
2727 if (!log_tree_opt.diffopt.file)
2728 res |= error_errno(_("could not open '%s'"), buf.buf);
2729 else {
2730 res |= log_tree_commit(&log_tree_opt, commit);
2731 fclose(log_tree_opt.diffopt.file);
2732 }
2733 strbuf_reset(&buf);
2734
2735 strbuf_addf(&buf, "%s/message", get_dir(opts));
2736 if (!file_exists(buf.buf)) {
2737 const char *commit_buffer = get_commit_buffer(commit, NULL);
2738 find_commit_subject(commit_buffer, &subject);
2739 res |= write_message(subject, strlen(subject), buf.buf, 1);
2740 unuse_commit_buffer(commit, commit_buffer);
2741 }
2742 strbuf_release(&buf);
2743
2744 return res;
2745}
2746
2747static int intend_to_amend(void)
2748{
2749 struct object_id head;
2750 char *p;
2751
2752 if (get_oid("HEAD", &head))
2753 return error(_("cannot read HEAD"));
2754
2755 p = oid_to_hex(&head);
2756 return write_message(p, strlen(p), rebase_path_amend(), 1);
2757}
2758
2759static int error_with_patch(struct commit *commit,
2760 const char *subject, int subject_len,
2761 struct replay_opts *opts, int exit_code, int to_amend)
2762{
2763 if (commit) {
2764 if (make_patch(commit, opts))
2765 return -1;
2766 } else if (copy_file(rebase_path_message(),
2767 git_path_merge_msg(the_repository), 0666))
2768 return error(_("unable to copy '%s' to '%s'"),
2769 git_path_merge_msg(the_repository), rebase_path_message());
2770
2771 if (to_amend) {
2772 if (intend_to_amend())
2773 return -1;
2774
2775 fprintf(stderr,
2776 _("You can amend the commit now, with\n"
2777 "\n"
2778 " git commit --amend %s\n"
2779 "\n"
2780 "Once you are satisfied with your changes, run\n"
2781 "\n"
2782 " git rebase --continue\n"),
2783 gpg_sign_opt_quoted(opts));
2784 } else if (exit_code) {
2785 if (commit)
2786 fprintf_ln(stderr, _("Could not apply %s... %.*s"),
2787 short_commit_name(commit), subject_len, subject);
2788 else
2789 /*
2790 * We don't have the hash of the parent so
2791 * just print the line from the todo file.
2792 */
2793 fprintf_ln(stderr, _("Could not merge %.*s"),
2794 subject_len, subject);
2795 }
2796
2797 return exit_code;
2798}
2799
2800static int error_failed_squash(struct commit *commit,
2801 struct replay_opts *opts, int subject_len, const char *subject)
2802{
2803 if (copy_file(rebase_path_message(), rebase_path_squash_msg(), 0666))
2804 return error(_("could not copy '%s' to '%s'"),
2805 rebase_path_squash_msg(), rebase_path_message());
2806 unlink(git_path_merge_msg(the_repository));
2807 if (copy_file(git_path_merge_msg(the_repository), rebase_path_message(), 0666))
2808 return error(_("could not copy '%s' to '%s'"),
2809 rebase_path_message(),
2810 git_path_merge_msg(the_repository));
2811 return error_with_patch(commit, subject, subject_len, opts, 1, 0);
2812}
2813
2814static int do_exec(const char *command_line)
2815{
2816 struct argv_array child_env = ARGV_ARRAY_INIT;
2817 const char *child_argv[] = { NULL, NULL };
2818 int dirty, status;
2819
2820 fprintf(stderr, "Executing: %s\n", command_line);
2821 child_argv[0] = command_line;
2822 argv_array_pushf(&child_env, "GIT_DIR=%s", absolute_path(get_git_dir()));
2823 argv_array_pushf(&child_env, "GIT_WORK_TREE=%s",
2824 absolute_path(get_git_work_tree()));
2825 status = run_command_v_opt_cd_env(child_argv, RUN_USING_SHELL, NULL,
2826 child_env.argv);
2827
2828 /* force re-reading of the cache */
2829 if (discard_cache() < 0 || read_cache() < 0)
2830 return error(_("could not read index"));
2831
2832 dirty = require_clean_work_tree("rebase", NULL, 1, 1);
2833
2834 if (status) {
2835 warning(_("execution failed: %s\n%s"
2836 "You can fix the problem, and then run\n"
2837 "\n"
2838 " git rebase --continue\n"
2839 "\n"),
2840 command_line,
2841 dirty ? N_("and made changes to the index and/or the "
2842 "working tree\n") : "");
2843 if (status == 127)
2844 /* command not found */
2845 status = 1;
2846 } else if (dirty) {
2847 warning(_("execution succeeded: %s\nbut "
2848 "left changes to the index and/or the working tree\n"
2849 "Commit or stash your changes, and then run\n"
2850 "\n"
2851 " git rebase --continue\n"
2852 "\n"), command_line);
2853 status = 1;
2854 }
2855
2856 argv_array_clear(&child_env);
2857
2858 return status;
2859}
2860
2861static int safe_append(const char *filename, const char *fmt, ...)
2862{
2863 va_list ap;
2864 struct lock_file lock = LOCK_INIT;
2865 int fd = hold_lock_file_for_update(&lock, filename,
2866 LOCK_REPORT_ON_ERROR);
2867 struct strbuf buf = STRBUF_INIT;
2868
2869 if (fd < 0)
2870 return -1;
2871
2872 if (strbuf_read_file(&buf, filename, 0) < 0 && errno != ENOENT) {
2873 error_errno(_("could not read '%s'"), filename);
2874 rollback_lock_file(&lock);
2875 return -1;
2876 }
2877 strbuf_complete(&buf, '\n');
2878 va_start(ap, fmt);
2879 strbuf_vaddf(&buf, fmt, ap);
2880 va_end(ap);
2881
2882 if (write_in_full(fd, buf.buf, buf.len) < 0) {
2883 error_errno(_("could not write to '%s'"), filename);
2884 strbuf_release(&buf);
2885 rollback_lock_file(&lock);
2886 return -1;
2887 }
2888 if (commit_lock_file(&lock) < 0) {
2889 strbuf_release(&buf);
2890 rollback_lock_file(&lock);
2891 return error(_("failed to finalize '%s'"), filename);
2892 }
2893
2894 strbuf_release(&buf);
2895 return 0;
2896}
2897
2898static int do_label(const char *name, int len)
2899{
2900 struct ref_store *refs = get_main_ref_store(the_repository);
2901 struct ref_transaction *transaction;
2902 struct strbuf ref_name = STRBUF_INIT, err = STRBUF_INIT;
2903 struct strbuf msg = STRBUF_INIT;
2904 int ret = 0;
2905 struct object_id head_oid;
2906
2907 if (len == 1 && *name == '#')
2908 return error(_("illegal label name: '%.*s'"), len, name);
2909
2910 strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
2911 strbuf_addf(&msg, "rebase -i (label) '%.*s'", len, name);
2912
2913 transaction = ref_store_transaction_begin(refs, &err);
2914 if (!transaction) {
2915 error("%s", err.buf);
2916 ret = -1;
2917 } else if (get_oid("HEAD", &head_oid)) {
2918 error(_("could not read HEAD"));
2919 ret = -1;
2920 } else if (ref_transaction_update(transaction, ref_name.buf, &head_oid,
2921 NULL, 0, msg.buf, &err) < 0 ||
2922 ref_transaction_commit(transaction, &err)) {
2923 error("%s", err.buf);
2924 ret = -1;
2925 }
2926 ref_transaction_free(transaction);
2927 strbuf_release(&err);
2928 strbuf_release(&msg);
2929
2930 if (!ret)
2931 ret = safe_append(rebase_path_refs_to_delete(),
2932 "%s\n", ref_name.buf);
2933 strbuf_release(&ref_name);
2934
2935 return ret;
2936}
2937
2938static const char *reflog_message(struct replay_opts *opts,
2939 const char *sub_action, const char *fmt, ...);
2940
2941static int do_reset(const char *name, int len, struct replay_opts *opts)
2942{
2943 struct strbuf ref_name = STRBUF_INIT;
2944 struct object_id oid;
2945 struct lock_file lock = LOCK_INIT;
2946 struct tree_desc desc;
2947 struct tree *tree;
2948 struct unpack_trees_options unpack_tree_opts;
2949 int ret = 0;
2950
2951 if (hold_locked_index(&lock, LOCK_REPORT_ON_ERROR) < 0)
2952 return -1;
2953
2954 if (len == 10 && !strncmp("[new root]", name, len)) {
2955 if (!opts->have_squash_onto) {
2956 const char *hex;
2957 if (commit_tree("", 0, the_hash_algo->empty_tree,
2958 NULL, &opts->squash_onto,
2959 NULL, NULL))
2960 return error(_("writing fake root commit"));
2961 opts->have_squash_onto = 1;
2962 hex = oid_to_hex(&opts->squash_onto);
2963 if (write_message(hex, strlen(hex),
2964 rebase_path_squash_onto(), 0))
2965 return error(_("writing squash-onto"));
2966 }
2967 oidcpy(&oid, &opts->squash_onto);
2968 } else {
2969 int i;
2970
2971 /* Determine the length of the label */
2972 for (i = 0; i < len; i++)
2973 if (isspace(name[i]))
2974 break;
2975 len = i;
2976
2977 strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
2978 if (get_oid(ref_name.buf, &oid) &&
2979 get_oid(ref_name.buf + strlen("refs/rewritten/"), &oid)) {
2980 error(_("could not read '%s'"), ref_name.buf);
2981 rollback_lock_file(&lock);
2982 strbuf_release(&ref_name);
2983 return -1;
2984 }
2985 }
2986
2987 memset(&unpack_tree_opts, 0, sizeof(unpack_tree_opts));
2988 setup_unpack_trees_porcelain(&unpack_tree_opts, "reset");
2989 unpack_tree_opts.head_idx = 1;
2990 unpack_tree_opts.src_index = &the_index;
2991 unpack_tree_opts.dst_index = &the_index;
2992 unpack_tree_opts.fn = oneway_merge;
2993 unpack_tree_opts.merge = 1;
2994 unpack_tree_opts.update = 1;
2995
2996 if (read_cache_unmerged()) {
2997 rollback_lock_file(&lock);
2998 strbuf_release(&ref_name);
2999 return error_resolve_conflict(_(action_name(opts)));
3000 }
3001
3002 if (!fill_tree_descriptor(&desc, &oid)) {
3003 error(_("failed to find tree of %s"), oid_to_hex(&oid));
3004 rollback_lock_file(&lock);
3005 free((void *)desc.buffer);
3006 strbuf_release(&ref_name);
3007 return -1;
3008 }
3009
3010 if (unpack_trees(1, &desc, &unpack_tree_opts)) {
3011 rollback_lock_file(&lock);
3012 free((void *)desc.buffer);
3013 strbuf_release(&ref_name);
3014 return -1;
3015 }
3016
3017 tree = parse_tree_indirect(&oid);
3018 prime_cache_tree(&the_index, tree);
3019
3020 if (write_locked_index(&the_index, &lock, COMMIT_LOCK) < 0)
3021 ret = error(_("could not write index"));
3022 free((void *)desc.buffer);
3023
3024 if (!ret)
3025 ret = update_ref(reflog_message(opts, "reset", "'%.*s'",
3026 len, name), "HEAD", &oid,
3027 NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3028
3029 strbuf_release(&ref_name);
3030 return ret;
3031}
3032
3033static struct commit *lookup_label(const char *label, int len,
3034 struct strbuf *buf)
3035{
3036 struct commit *commit;
3037
3038 strbuf_reset(buf);
3039 strbuf_addf(buf, "refs/rewritten/%.*s", len, label);
3040 commit = lookup_commit_reference_by_name(buf->buf);
3041 if (!commit) {
3042 /* fall back to non-rewritten ref or commit */
3043 strbuf_splice(buf, 0, strlen("refs/rewritten/"), "", 0);
3044 commit = lookup_commit_reference_by_name(buf->buf);
3045 }
3046
3047 if (!commit)
3048 error(_("could not resolve '%s'"), buf->buf);
3049
3050 return commit;
3051}
3052
3053static int do_merge(struct commit *commit, const char *arg, int arg_len,
3054 int flags, struct replay_opts *opts)
3055{
3056 int run_commit_flags = (flags & TODO_EDIT_MERGE_MSG) ?
3057 EDIT_MSG | VERIFY_MSG : 0;
3058 struct strbuf ref_name = STRBUF_INIT;
3059 struct commit *head_commit, *merge_commit, *i;
3060 struct commit_list *bases, *j, *reversed = NULL;
3061 struct commit_list *to_merge = NULL, **tail = &to_merge;
3062 struct merge_options o;
3063 int merge_arg_len, oneline_offset, can_fast_forward, ret, k;
3064 static struct lock_file lock;
3065 const char *p;
3066
3067 if (hold_locked_index(&lock, LOCK_REPORT_ON_ERROR) < 0) {
3068 ret = -1;
3069 goto leave_merge;
3070 }
3071
3072 head_commit = lookup_commit_reference_by_name("HEAD");
3073 if (!head_commit) {
3074 ret = error(_("cannot merge without a current revision"));
3075 goto leave_merge;
3076 }
3077
3078 /*
3079 * For octopus merges, the arg starts with the list of revisions to be
3080 * merged. The list is optionally followed by '#' and the oneline.
3081 */
3082 merge_arg_len = oneline_offset = arg_len;
3083 for (p = arg; p - arg < arg_len; p += strspn(p, " \t\n")) {
3084 if (!*p)
3085 break;
3086 if (*p == '#' && (!p[1] || isspace(p[1]))) {
3087 p += 1 + strspn(p + 1, " \t\n");
3088 oneline_offset = p - arg;
3089 break;
3090 }
3091 k = strcspn(p, " \t\n");
3092 if (!k)
3093 continue;
3094 merge_commit = lookup_label(p, k, &ref_name);
3095 if (!merge_commit) {
3096 ret = error(_("unable to parse '%.*s'"), k, p);
3097 goto leave_merge;
3098 }
3099 tail = &commit_list_insert(merge_commit, tail)->next;
3100 p += k;
3101 merge_arg_len = p - arg;
3102 }
3103
3104 if (!to_merge) {
3105 ret = error(_("nothing to merge: '%.*s'"), arg_len, arg);
3106 goto leave_merge;
3107 }
3108
3109 if (opts->have_squash_onto &&
3110 oideq(&head_commit->object.oid, &opts->squash_onto)) {
3111 /*
3112 * When the user tells us to "merge" something into a
3113 * "[new root]", let's simply fast-forward to the merge head.
3114 */
3115 rollback_lock_file(&lock);
3116 if (to_merge->next)
3117 ret = error(_("octopus merge cannot be executed on "
3118 "top of a [new root]"));
3119 else
3120 ret = fast_forward_to(&to_merge->item->object.oid,
3121 &head_commit->object.oid, 0,
3122 opts);
3123 goto leave_merge;
3124 }
3125
3126 if (commit) {
3127 const char *message = get_commit_buffer(commit, NULL);
3128 const char *body;
3129 int len;
3130
3131 if (!message) {
3132 ret = error(_("could not get commit message of '%s'"),
3133 oid_to_hex(&commit->object.oid));
3134 goto leave_merge;
3135 }
3136 write_author_script(message);
3137 find_commit_subject(message, &body);
3138 len = strlen(body);
3139 ret = write_message(body, len, git_path_merge_msg(the_repository), 0);
3140 unuse_commit_buffer(commit, message);
3141 if (ret) {
3142 error_errno(_("could not write '%s'"),
3143 git_path_merge_msg(the_repository));
3144 goto leave_merge;
3145 }
3146 } else {
3147 struct strbuf buf = STRBUF_INIT;
3148 int len;
3149
3150 strbuf_addf(&buf, "author %s", git_author_info(0));
3151 write_author_script(buf.buf);
3152 strbuf_reset(&buf);
3153
3154 if (oneline_offset < arg_len) {
3155 p = arg + oneline_offset;
3156 len = arg_len - oneline_offset;
3157 } else {
3158 strbuf_addf(&buf, "Merge %s '%.*s'",
3159 to_merge->next ? "branches" : "branch",
3160 merge_arg_len, arg);
3161 p = buf.buf;
3162 len = buf.len;
3163 }
3164
3165 ret = write_message(p, len, git_path_merge_msg(the_repository), 0);
3166 strbuf_release(&buf);
3167 if (ret) {
3168 error_errno(_("could not write '%s'"),
3169 git_path_merge_msg(the_repository));
3170 goto leave_merge;
3171 }
3172 }
3173
3174 /*
3175 * If HEAD is not identical to the first parent of the original merge
3176 * commit, we cannot fast-forward.
3177 */
3178 can_fast_forward = opts->allow_ff && commit && commit->parents &&
3179 oideq(&commit->parents->item->object.oid,
3180 &head_commit->object.oid);
3181
3182 /*
3183 * If any merge head is different from the original one, we cannot
3184 * fast-forward.
3185 */
3186 if (can_fast_forward) {
3187 struct commit_list *p = commit->parents->next;
3188
3189 for (j = to_merge; j && p; j = j->next, p = p->next)
3190 if (!oideq(&j->item->object.oid,
3191 &p->item->object.oid)) {
3192 can_fast_forward = 0;
3193 break;
3194 }
3195 /*
3196 * If the number of merge heads differs from the original merge
3197 * commit, we cannot fast-forward.
3198 */
3199 if (j || p)
3200 can_fast_forward = 0;
3201 }
3202
3203 if (can_fast_forward) {
3204 rollback_lock_file(&lock);
3205 ret = fast_forward_to(&commit->object.oid,
3206 &head_commit->object.oid, 0, opts);
3207 goto leave_merge;
3208 }
3209
3210 if (to_merge->next) {
3211 /* Octopus merge */
3212 struct child_process cmd = CHILD_PROCESS_INIT;
3213
3214 if (read_env_script(&cmd.env_array)) {
3215 const char *gpg_opt = gpg_sign_opt_quoted(opts);
3216
3217 ret = error(_(staged_changes_advice), gpg_opt, gpg_opt);
3218 goto leave_merge;
3219 }
3220
3221 cmd.git_cmd = 1;
3222 argv_array_push(&cmd.args, "merge");
3223 argv_array_push(&cmd.args, "-s");
3224 argv_array_push(&cmd.args, "octopus");
3225 argv_array_push(&cmd.args, "--no-edit");
3226 argv_array_push(&cmd.args, "--no-ff");
3227 argv_array_push(&cmd.args, "--no-log");
3228 argv_array_push(&cmd.args, "--no-stat");
3229 argv_array_push(&cmd.args, "-F");
3230 argv_array_push(&cmd.args, git_path_merge_msg(the_repository));
3231 if (opts->gpg_sign)
3232 argv_array_push(&cmd.args, opts->gpg_sign);
3233
3234 /* Add the tips to be merged */
3235 for (j = to_merge; j; j = j->next)
3236 argv_array_push(&cmd.args,
3237 oid_to_hex(&j->item->object.oid));
3238
3239 strbuf_release(&ref_name);
3240 unlink(git_path_cherry_pick_head(the_repository));
3241 rollback_lock_file(&lock);
3242
3243 rollback_lock_file(&lock);
3244 ret = run_command(&cmd);
3245
3246 /* force re-reading of the cache */
3247 if (!ret && (discard_cache() < 0 || read_cache() < 0))
3248 ret = error(_("could not read index"));
3249 goto leave_merge;
3250 }
3251
3252 merge_commit = to_merge->item;
3253 bases = get_merge_bases(head_commit, merge_commit);
3254 if (bases && oideq(&merge_commit->object.oid,
3255 &bases->item->object.oid)) {
3256 ret = 0;
3257 /* skip merging an ancestor of HEAD */
3258 goto leave_merge;
3259 }
3260
3261 write_message(oid_to_hex(&merge_commit->object.oid), GIT_SHA1_HEXSZ,
3262 git_path_merge_head(the_repository), 0);
3263 write_message("no-ff", 5, git_path_merge_mode(the_repository), 0);
3264
3265 for (j = bases; j; j = j->next)
3266 commit_list_insert(j->item, &reversed);
3267 free_commit_list(bases);
3268
3269 read_cache();
3270 init_merge_options(&o);
3271 o.branch1 = "HEAD";
3272 o.branch2 = ref_name.buf;
3273 o.buffer_output = 2;
3274
3275 ret = merge_recursive(&o, head_commit, merge_commit, reversed, &i);
3276 if (ret <= 0)
3277 fputs(o.obuf.buf, stdout);
3278 strbuf_release(&o.obuf);
3279 if (ret < 0) {
3280 error(_("could not even attempt to merge '%.*s'"),
3281 merge_arg_len, arg);
3282 goto leave_merge;
3283 }
3284 /*
3285 * The return value of merge_recursive() is 1 on clean, and 0 on
3286 * unclean merge.
3287 *
3288 * Let's reverse that, so that do_merge() returns 0 upon success and
3289 * 1 upon failed merge (keeping the return value -1 for the cases where
3290 * we will want to reschedule the `merge` command).
3291 */
3292 ret = !ret;
3293
3294 if (active_cache_changed &&
3295 write_locked_index(&the_index, &lock, COMMIT_LOCK)) {
3296 ret = error(_("merge: Unable to write new index file"));
3297 goto leave_merge;
3298 }
3299
3300 rollback_lock_file(&lock);
3301 if (ret)
3302 repo_rerere(the_repository, opts->allow_rerere_auto);
3303 else
3304 /*
3305 * In case of problems, we now want to return a positive
3306 * value (a negative one would indicate that the `merge`
3307 * command needs to be rescheduled).
3308 */
3309 ret = !!run_git_commit(git_path_merge_msg(the_repository), opts,
3310 run_commit_flags);
3311
3312leave_merge:
3313 strbuf_release(&ref_name);
3314 rollback_lock_file(&lock);
3315 free_commit_list(to_merge);
3316 return ret;
3317}
3318
3319static int is_final_fixup(struct todo_list *todo_list)
3320{
3321 int i = todo_list->current;
3322
3323 if (!is_fixup(todo_list->items[i].command))
3324 return 0;
3325
3326 while (++i < todo_list->nr)
3327 if (is_fixup(todo_list->items[i].command))
3328 return 0;
3329 else if (!is_noop(todo_list->items[i].command))
3330 break;
3331 return 1;
3332}
3333
3334static enum todo_command peek_command(struct todo_list *todo_list, int offset)
3335{
3336 int i;
3337
3338 for (i = todo_list->current + offset; i < todo_list->nr; i++)
3339 if (!is_noop(todo_list->items[i].command))
3340 return todo_list->items[i].command;
3341
3342 return -1;
3343}
3344
3345static int apply_autostash(struct replay_opts *opts)
3346{
3347 struct strbuf stash_sha1 = STRBUF_INIT;
3348 struct child_process child = CHILD_PROCESS_INIT;
3349 int ret = 0;
3350
3351 if (!read_oneliner(&stash_sha1, rebase_path_autostash(), 1)) {
3352 strbuf_release(&stash_sha1);
3353 return 0;
3354 }
3355 strbuf_trim(&stash_sha1);
3356
3357 child.git_cmd = 1;
3358 child.no_stdout = 1;
3359 child.no_stderr = 1;
3360 argv_array_push(&child.args, "stash");
3361 argv_array_push(&child.args, "apply");
3362 argv_array_push(&child.args, stash_sha1.buf);
3363 if (!run_command(&child))
3364 fprintf(stderr, _("Applied autostash.\n"));
3365 else {
3366 struct child_process store = CHILD_PROCESS_INIT;
3367
3368 store.git_cmd = 1;
3369 argv_array_push(&store.args, "stash");
3370 argv_array_push(&store.args, "store");
3371 argv_array_push(&store.args, "-m");
3372 argv_array_push(&store.args, "autostash");
3373 argv_array_push(&store.args, "-q");
3374 argv_array_push(&store.args, stash_sha1.buf);
3375 if (run_command(&store))
3376 ret = error(_("cannot store %s"), stash_sha1.buf);
3377 else
3378 fprintf(stderr,
3379 _("Applying autostash resulted in conflicts.\n"
3380 "Your changes are safe in the stash.\n"
3381 "You can run \"git stash pop\" or"
3382 " \"git stash drop\" at any time.\n"));
3383 }
3384
3385 strbuf_release(&stash_sha1);
3386 return ret;
3387}
3388
3389static const char *reflog_message(struct replay_opts *opts,
3390 const char *sub_action, const char *fmt, ...)
3391{
3392 va_list ap;
3393 static struct strbuf buf = STRBUF_INIT;
3394
3395 va_start(ap, fmt);
3396 strbuf_reset(&buf);
3397 strbuf_addstr(&buf, action_name(opts));
3398 if (sub_action)
3399 strbuf_addf(&buf, " (%s)", sub_action);
3400 if (fmt) {
3401 strbuf_addstr(&buf, ": ");
3402 strbuf_vaddf(&buf, fmt, ap);
3403 }
3404 va_end(ap);
3405
3406 return buf.buf;
3407}
3408
3409static int run_git_checkout(struct replay_opts *opts, const char *commit,
3410 const char *action)
3411{
3412 struct child_process cmd = CHILD_PROCESS_INIT;
3413
3414 cmd.git_cmd = 1;
3415
3416 argv_array_push(&cmd.args, "checkout");
3417 argv_array_push(&cmd.args, commit);
3418 argv_array_pushf(&cmd.env_array, GIT_REFLOG_ACTION "=%s", action);
3419
3420 if (opts->verbose)
3421 return run_command(&cmd);
3422 else
3423 return run_command_silent_on_success(&cmd);
3424}
3425
3426int prepare_branch_to_be_rebased(struct replay_opts *opts, const char *commit)
3427{
3428 const char *action;
3429
3430 if (commit && *commit) {
3431 action = reflog_message(opts, "start", "checkout %s", commit);
3432 if (run_git_checkout(opts, commit, action))
3433 return error(_("could not checkout %s"), commit);
3434 }
3435
3436 return 0;
3437}
3438
3439static int checkout_onto(struct replay_opts *opts,
3440 const char *onto_name, const char *onto,
3441 const char *orig_head)
3442{
3443 struct object_id oid;
3444 const char *action = reflog_message(opts, "start", "checkout %s", onto_name);
3445
3446 if (get_oid(orig_head, &oid))
3447 return error(_("%s: not a valid OID"), orig_head);
3448
3449 if (run_git_checkout(opts, onto, action)) {
3450 apply_autostash(opts);
3451 sequencer_remove_state(opts);
3452 return error(_("could not detach HEAD"));
3453 }
3454
3455 return update_ref(NULL, "ORIG_HEAD", &oid, NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3456}
3457
3458static int stopped_at_head(void)
3459{
3460 struct object_id head;
3461 struct commit *commit;
3462 struct commit_message message;
3463
3464 if (get_oid("HEAD", &head) ||
3465 !(commit = lookup_commit(the_repository, &head)) ||
3466 parse_commit(commit) || get_message(commit, &message))
3467 fprintf(stderr, _("Stopped at HEAD\n"));
3468 else {
3469 fprintf(stderr, _("Stopped at %s\n"), message.label);
3470 free_message(commit, &message);
3471 }
3472 return 0;
3473
3474}
3475
3476static const char rescheduled_advice[] =
3477N_("Could not execute the todo command\n"
3478"\n"
3479" %.*s"
3480"\n"
3481"It has been rescheduled; To edit the command before continuing, please\n"
3482"edit the todo list first:\n"
3483"\n"
3484" git rebase --edit-todo\n"
3485" git rebase --continue\n");
3486
3487static int pick_commits(struct todo_list *todo_list, struct replay_opts *opts)
3488{
3489 int res = 0, reschedule = 0;
3490
3491 setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
3492 if (opts->allow_ff)
3493 assert(!(opts->signoff || opts->no_commit ||
3494 opts->record_origin || opts->edit));
3495 if (read_and_refresh_cache(opts))
3496 return -1;
3497
3498 while (todo_list->current < todo_list->nr) {
3499 struct todo_item *item = todo_list->items + todo_list->current;
3500 if (save_todo(todo_list, opts))
3501 return -1;
3502 if (is_rebase_i(opts)) {
3503 if (item->command != TODO_COMMENT) {
3504 FILE *f = fopen(rebase_path_msgnum(), "w");
3505
3506 todo_list->done_nr++;
3507
3508 if (f) {
3509 fprintf(f, "%d\n", todo_list->done_nr);
3510 fclose(f);
3511 }
3512 fprintf(stderr, "Rebasing (%d/%d)%s",
3513 todo_list->done_nr,
3514 todo_list->total_nr,
3515 opts->verbose ? "\n" : "\r");
3516 }
3517 unlink(rebase_path_message());
3518 unlink(rebase_path_author_script());
3519 unlink(rebase_path_stopped_sha());
3520 unlink(rebase_path_amend());
3521 unlink(git_path_merge_head(the_repository));
3522 delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
3523
3524 if (item->command == TODO_BREAK)
3525 return stopped_at_head();
3526 }
3527 if (item->command <= TODO_SQUASH) {
3528 if (is_rebase_i(opts))
3529 setenv("GIT_REFLOG_ACTION", reflog_message(opts,
3530 command_to_string(item->command), NULL),
3531 1);
3532 res = do_pick_commit(item->command, item->commit,
3533 opts, is_final_fixup(todo_list));
3534 if (is_rebase_i(opts) && res < 0) {
3535 /* Reschedule */
3536 advise(_(rescheduled_advice),
3537 get_item_line_length(todo_list,
3538 todo_list->current),
3539 get_item_line(todo_list,
3540 todo_list->current));
3541 todo_list->current--;
3542 if (save_todo(todo_list, opts))
3543 return -1;
3544 }
3545 if (item->command == TODO_EDIT) {
3546 struct commit *commit = item->commit;
3547 if (!res)
3548 fprintf(stderr,
3549 _("Stopped at %s... %.*s\n"),
3550 short_commit_name(commit),
3551 item->arg_len, item->arg);
3552 return error_with_patch(commit,
3553 item->arg, item->arg_len, opts, res,
3554 !res);
3555 }
3556 if (is_rebase_i(opts) && !res)
3557 record_in_rewritten(&item->commit->object.oid,
3558 peek_command(todo_list, 1));
3559 if (res && is_fixup(item->command)) {
3560 if (res == 1)
3561 intend_to_amend();
3562 return error_failed_squash(item->commit, opts,
3563 item->arg_len, item->arg);
3564 } else if (res && is_rebase_i(opts) && item->commit) {
3565 int to_amend = 0;
3566 struct object_id oid;
3567
3568 /*
3569 * If we are rewording and have either
3570 * fast-forwarded already, or are about to
3571 * create a new root commit, we want to amend,
3572 * otherwise we do not.
3573 */
3574 if (item->command == TODO_REWORD &&
3575 !get_oid("HEAD", &oid) &&
3576 (oideq(&item->commit->object.oid, &oid) ||
3577 (opts->have_squash_onto &&
3578 oideq(&opts->squash_onto, &oid))))
3579 to_amend = 1;
3580
3581 return res | error_with_patch(item->commit,
3582 item->arg, item->arg_len, opts,
3583 res, to_amend);
3584 }
3585 } else if (item->command == TODO_EXEC) {
3586 char *end_of_arg = (char *)(item->arg + item->arg_len);
3587 int saved = *end_of_arg;
3588 struct stat st;
3589
3590 *end_of_arg = '\0';
3591 res = do_exec(item->arg);
3592 *end_of_arg = saved;
3593
3594 /* Reread the todo file if it has changed. */
3595 if (res) {
3596 if (opts->reschedule_failed_exec)
3597 reschedule = 1;
3598 } else if (stat(get_todo_path(opts), &st))
3599 res = error_errno(_("could not stat '%s'"),
3600 get_todo_path(opts));
3601 else if (match_stat_data(&todo_list->stat, &st)) {
3602 todo_list_release(todo_list);
3603 if (read_populate_todo(todo_list, opts))
3604 res = -1; /* message was printed */
3605 /* `current` will be incremented below */
3606 todo_list->current = -1;
3607 }
3608 } else if (item->command == TODO_LABEL) {
3609 if ((res = do_label(item->arg, item->arg_len)))
3610 reschedule = 1;
3611 } else if (item->command == TODO_RESET) {
3612 if ((res = do_reset(item->arg, item->arg_len, opts)))
3613 reschedule = 1;
3614 } else if (item->command == TODO_MERGE) {
3615 if ((res = do_merge(item->commit,
3616 item->arg, item->arg_len,
3617 item->flags, opts)) < 0)
3618 reschedule = 1;
3619 else if (item->commit)
3620 record_in_rewritten(&item->commit->object.oid,
3621 peek_command(todo_list, 1));
3622 if (res > 0)
3623 /* failed with merge conflicts */
3624 return error_with_patch(item->commit,
3625 item->arg,
3626 item->arg_len, opts,
3627 res, 0);
3628 } else if (!is_noop(item->command))
3629 return error(_("unknown command %d"), item->command);
3630
3631 if (reschedule) {
3632 advise(_(rescheduled_advice),
3633 get_item_line_length(todo_list,
3634 todo_list->current),
3635 get_item_line(todo_list, todo_list->current));
3636 todo_list->current--;
3637 if (save_todo(todo_list, opts))
3638 return -1;
3639 if (item->commit)
3640 return error_with_patch(item->commit,
3641 item->arg,
3642 item->arg_len, opts,
3643 res, 0);
3644 }
3645
3646 todo_list->current++;
3647 if (res)
3648 return res;
3649 }
3650
3651 if (is_rebase_i(opts)) {
3652 struct strbuf head_ref = STRBUF_INIT, buf = STRBUF_INIT;
3653 struct stat st;
3654
3655 /* Stopped in the middle, as planned? */
3656 if (todo_list->current < todo_list->nr)
3657 return 0;
3658
3659 if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
3660 starts_with(head_ref.buf, "refs/")) {
3661 const char *msg;
3662 struct object_id head, orig;
3663 int res;
3664
3665 if (get_oid("HEAD", &head)) {
3666 res = error(_("cannot read HEAD"));
3667cleanup_head_ref:
3668 strbuf_release(&head_ref);
3669 strbuf_release(&buf);
3670 return res;
3671 }
3672 if (!read_oneliner(&buf, rebase_path_orig_head(), 0) ||
3673 get_oid_hex(buf.buf, &orig)) {
3674 res = error(_("could not read orig-head"));
3675 goto cleanup_head_ref;
3676 }
3677 strbuf_reset(&buf);
3678 if (!read_oneliner(&buf, rebase_path_onto(), 0)) {
3679 res = error(_("could not read 'onto'"));
3680 goto cleanup_head_ref;
3681 }
3682 msg = reflog_message(opts, "finish", "%s onto %s",
3683 head_ref.buf, buf.buf);
3684 if (update_ref(msg, head_ref.buf, &head, &orig,
3685 REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR)) {
3686 res = error(_("could not update %s"),
3687 head_ref.buf);
3688 goto cleanup_head_ref;
3689 }
3690 msg = reflog_message(opts, "finish", "returning to %s",
3691 head_ref.buf);
3692 if (create_symref("HEAD", head_ref.buf, msg)) {
3693 res = error(_("could not update HEAD to %s"),
3694 head_ref.buf);
3695 goto cleanup_head_ref;
3696 }
3697 strbuf_reset(&buf);
3698 }
3699
3700 if (opts->verbose) {
3701 struct rev_info log_tree_opt;
3702 struct object_id orig, head;
3703
3704 memset(&log_tree_opt, 0, sizeof(log_tree_opt));
3705 repo_init_revisions(the_repository, &log_tree_opt, NULL);
3706 log_tree_opt.diff = 1;
3707 log_tree_opt.diffopt.output_format =
3708 DIFF_FORMAT_DIFFSTAT;
3709 log_tree_opt.disable_stdin = 1;
3710
3711 if (read_oneliner(&buf, rebase_path_orig_head(), 0) &&
3712 !get_oid(buf.buf, &orig) &&
3713 !get_oid("HEAD", &head)) {
3714 diff_tree_oid(&orig, &head, "",
3715 &log_tree_opt.diffopt);
3716 log_tree_diff_flush(&log_tree_opt);
3717 }
3718 }
3719 flush_rewritten_pending();
3720 if (!stat(rebase_path_rewritten_list(), &st) &&
3721 st.st_size > 0) {
3722 struct child_process child = CHILD_PROCESS_INIT;
3723 const char *post_rewrite_hook =
3724 find_hook("post-rewrite");
3725
3726 child.in = open(rebase_path_rewritten_list(), O_RDONLY);
3727 child.git_cmd = 1;
3728 argv_array_push(&child.args, "notes");
3729 argv_array_push(&child.args, "copy");
3730 argv_array_push(&child.args, "--for-rewrite=rebase");
3731 /* we don't care if this copying failed */
3732 run_command(&child);
3733
3734 if (post_rewrite_hook) {
3735 struct child_process hook = CHILD_PROCESS_INIT;
3736
3737 hook.in = open(rebase_path_rewritten_list(),
3738 O_RDONLY);
3739 hook.stdout_to_stderr = 1;
3740 argv_array_push(&hook.args, post_rewrite_hook);
3741 argv_array_push(&hook.args, "rebase");
3742 /* we don't care if this hook failed */
3743 run_command(&hook);
3744 }
3745 }
3746 apply_autostash(opts);
3747
3748 fprintf(stderr, "Successfully rebased and updated %s.\n",
3749 head_ref.buf);
3750
3751 strbuf_release(&buf);
3752 strbuf_release(&head_ref);
3753 }
3754
3755 /*
3756 * Sequence of picks finished successfully; cleanup by
3757 * removing the .git/sequencer directory
3758 */
3759 return sequencer_remove_state(opts);
3760}
3761
3762static int continue_single_pick(void)
3763{
3764 const char *argv[] = { "commit", NULL };
3765
3766 if (!file_exists(git_path_cherry_pick_head(the_repository)) &&
3767 !file_exists(git_path_revert_head(the_repository)))
3768 return error(_("no cherry-pick or revert in progress"));
3769 return run_command_v_opt(argv, RUN_GIT_CMD);
3770}
3771
3772static int commit_staged_changes(struct replay_opts *opts,
3773 struct todo_list *todo_list)
3774{
3775 unsigned int flags = ALLOW_EMPTY | EDIT_MSG;
3776 unsigned int final_fixup = 0, is_clean;
3777
3778 if (has_unstaged_changes(1))
3779 return error(_("cannot rebase: You have unstaged changes."));
3780
3781 is_clean = !has_uncommitted_changes(0);
3782
3783 if (file_exists(rebase_path_amend())) {
3784 struct strbuf rev = STRBUF_INIT;
3785 struct object_id head, to_amend;
3786
3787 if (get_oid("HEAD", &head))
3788 return error(_("cannot amend non-existing commit"));
3789 if (!read_oneliner(&rev, rebase_path_amend(), 0))
3790 return error(_("invalid file: '%s'"), rebase_path_amend());
3791 if (get_oid_hex(rev.buf, &to_amend))
3792 return error(_("invalid contents: '%s'"),
3793 rebase_path_amend());
3794 if (!is_clean && !oideq(&head, &to_amend))
3795 return error(_("\nYou have uncommitted changes in your "
3796 "working tree. Please, commit them\n"
3797 "first and then run 'git rebase "
3798 "--continue' again."));
3799 /*
3800 * When skipping a failed fixup/squash, we need to edit the
3801 * commit message, the current fixup list and count, and if it
3802 * was the last fixup/squash in the chain, we need to clean up
3803 * the commit message and if there was a squash, let the user
3804 * edit it.
3805 */
3806 if (!is_clean || !opts->current_fixup_count)
3807 ; /* this is not the final fixup */
3808 else if (!oideq(&head, &to_amend) ||
3809 !file_exists(rebase_path_stopped_sha())) {
3810 /* was a final fixup or squash done manually? */
3811 if (!is_fixup(peek_command(todo_list, 0))) {
3812 unlink(rebase_path_fixup_msg());
3813 unlink(rebase_path_squash_msg());
3814 unlink(rebase_path_current_fixups());
3815 strbuf_reset(&opts->current_fixups);
3816 opts->current_fixup_count = 0;
3817 }
3818 } else {
3819 /* we are in a fixup/squash chain */
3820 const char *p = opts->current_fixups.buf;
3821 int len = opts->current_fixups.len;
3822
3823 opts->current_fixup_count--;
3824 if (!len)
3825 BUG("Incorrect current_fixups:\n%s", p);
3826 while (len && p[len - 1] != '\n')
3827 len--;
3828 strbuf_setlen(&opts->current_fixups, len);
3829 if (write_message(p, len, rebase_path_current_fixups(),
3830 0) < 0)
3831 return error(_("could not write file: '%s'"),
3832 rebase_path_current_fixups());
3833
3834 /*
3835 * If a fixup/squash in a fixup/squash chain failed, the
3836 * commit message is already correct, no need to commit
3837 * it again.
3838 *
3839 * Only if it is the final command in the fixup/squash
3840 * chain, and only if the chain is longer than a single
3841 * fixup/squash command (which was just skipped), do we
3842 * actually need to re-commit with a cleaned up commit
3843 * message.
3844 */
3845 if (opts->current_fixup_count > 0 &&
3846 !is_fixup(peek_command(todo_list, 0))) {
3847 final_fixup = 1;
3848 /*
3849 * If there was not a single "squash" in the
3850 * chain, we only need to clean up the commit
3851 * message, no need to bother the user with
3852 * opening the commit message in the editor.
3853 */
3854 if (!starts_with(p, "squash ") &&
3855 !strstr(p, "\nsquash "))
3856 flags = (flags & ~EDIT_MSG) | CLEANUP_MSG;
3857 } else if (is_fixup(peek_command(todo_list, 0))) {
3858 /*
3859 * We need to update the squash message to skip
3860 * the latest commit message.
3861 */
3862 struct commit *commit;
3863 const char *path = rebase_path_squash_msg();
3864
3865 if (parse_head(&commit) ||
3866 !(p = get_commit_buffer(commit, NULL)) ||
3867 write_message(p, strlen(p), path, 0)) {
3868 unuse_commit_buffer(commit, p);
3869 return error(_("could not write file: "
3870 "'%s'"), path);
3871 }
3872 unuse_commit_buffer(commit, p);
3873 }
3874 }
3875
3876 strbuf_release(&rev);
3877 flags |= AMEND_MSG;
3878 }
3879
3880 if (is_clean) {
3881 const char *cherry_pick_head = git_path_cherry_pick_head(the_repository);
3882
3883 if (file_exists(cherry_pick_head) && unlink(cherry_pick_head))
3884 return error(_("could not remove CHERRY_PICK_HEAD"));
3885 if (!final_fixup)
3886 return 0;
3887 }
3888
3889 if (run_git_commit(final_fixup ? NULL : rebase_path_message(),
3890 opts, flags))
3891 return error(_("could not commit staged changes."));
3892 unlink(rebase_path_amend());
3893 unlink(git_path_merge_head(the_repository));
3894 if (final_fixup) {
3895 unlink(rebase_path_fixup_msg());
3896 unlink(rebase_path_squash_msg());
3897 }
3898 if (opts->current_fixup_count > 0) {
3899 /*
3900 * Whether final fixup or not, we just cleaned up the commit
3901 * message...
3902 */
3903 unlink(rebase_path_current_fixups());
3904 strbuf_reset(&opts->current_fixups);
3905 opts->current_fixup_count = 0;
3906 }
3907 return 0;
3908}
3909
3910int sequencer_continue(struct replay_opts *opts)
3911{
3912 struct todo_list todo_list = TODO_LIST_INIT;
3913 int res;
3914
3915 if (read_and_refresh_cache(opts))
3916 return -1;
3917
3918 if (read_populate_opts(opts))
3919 return -1;
3920 if (is_rebase_i(opts)) {
3921 if ((res = read_populate_todo(&todo_list, opts)))
3922 goto release_todo_list;
3923 if (commit_staged_changes(opts, &todo_list))
3924 return -1;
3925 } else if (!file_exists(get_todo_path(opts)))
3926 return continue_single_pick();
3927 else if ((res = read_populate_todo(&todo_list, opts)))
3928 goto release_todo_list;
3929
3930 if (!is_rebase_i(opts)) {
3931 /* Verify that the conflict has been resolved */
3932 if (file_exists(git_path_cherry_pick_head(the_repository)) ||
3933 file_exists(git_path_revert_head(the_repository))) {
3934 res = continue_single_pick();
3935 if (res)
3936 goto release_todo_list;
3937 }
3938 if (index_differs_from("HEAD", NULL, 0)) {
3939 res = error_dirty_index(opts);
3940 goto release_todo_list;
3941 }
3942 todo_list.current++;
3943 } else if (file_exists(rebase_path_stopped_sha())) {
3944 struct strbuf buf = STRBUF_INIT;
3945 struct object_id oid;
3946
3947 if (read_oneliner(&buf, rebase_path_stopped_sha(), 1) &&
3948 !get_oid_committish(buf.buf, &oid))
3949 record_in_rewritten(&oid, peek_command(&todo_list, 0));
3950 strbuf_release(&buf);
3951 }
3952
3953 res = pick_commits(&todo_list, opts);
3954release_todo_list:
3955 todo_list_release(&todo_list);
3956 return res;
3957}
3958
3959static int single_pick(struct commit *cmit, struct replay_opts *opts)
3960{
3961 setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
3962 return do_pick_commit(opts->action == REPLAY_PICK ?
3963 TODO_PICK : TODO_REVERT, cmit, opts, 0);
3964}
3965
3966int sequencer_pick_revisions(struct replay_opts *opts)
3967{
3968 struct todo_list todo_list = TODO_LIST_INIT;
3969 struct object_id oid;
3970 int i, res;
3971
3972 assert(opts->revs);
3973 if (read_and_refresh_cache(opts))
3974 return -1;
3975
3976 for (i = 0; i < opts->revs->pending.nr; i++) {
3977 struct object_id oid;
3978 const char *name = opts->revs->pending.objects[i].name;
3979
3980 /* This happens when using --stdin. */
3981 if (!strlen(name))
3982 continue;
3983
3984 if (!get_oid(name, &oid)) {
3985 if (!lookup_commit_reference_gently(the_repository, &oid, 1)) {
3986 enum object_type type = oid_object_info(the_repository,
3987 &oid,
3988 NULL);
3989 return error(_("%s: can't cherry-pick a %s"),
3990 name, type_name(type));
3991 }
3992 } else
3993 return error(_("%s: bad revision"), name);
3994 }
3995
3996 /*
3997 * If we were called as "git cherry-pick <commit>", just
3998 * cherry-pick/revert it, set CHERRY_PICK_HEAD /
3999 * REVERT_HEAD, and don't touch the sequencer state.
4000 * This means it is possible to cherry-pick in the middle
4001 * of a cherry-pick sequence.
4002 */
4003 if (opts->revs->cmdline.nr == 1 &&
4004 opts->revs->cmdline.rev->whence == REV_CMD_REV &&
4005 opts->revs->no_walk &&
4006 !opts->revs->cmdline.rev->flags) {
4007 struct commit *cmit;
4008 if (prepare_revision_walk(opts->revs))
4009 return error(_("revision walk setup failed"));
4010 cmit = get_revision(opts->revs);
4011 if (!cmit)
4012 return error(_("empty commit set passed"));
4013 if (get_revision(opts->revs))
4014 BUG("unexpected extra commit from walk");
4015 return single_pick(cmit, opts);
4016 }
4017
4018 /*
4019 * Start a new cherry-pick/ revert sequence; but
4020 * first, make sure that an existing one isn't in
4021 * progress
4022 */
4023
4024 if (walk_revs_populate_todo(&todo_list, opts) ||
4025 create_seq_dir() < 0)
4026 return -1;
4027 if (get_oid("HEAD", &oid) && (opts->action == REPLAY_REVERT))
4028 return error(_("can't revert as initial commit"));
4029 if (save_head(oid_to_hex(&oid)))
4030 return -1;
4031 if (save_opts(opts))
4032 return -1;
4033 update_abort_safety_file();
4034 res = pick_commits(&todo_list, opts);
4035 todo_list_release(&todo_list);
4036 return res;
4037}
4038
4039void append_signoff(struct strbuf *msgbuf, size_t ignore_footer, unsigned flag)
4040{
4041 unsigned no_dup_sob = flag & APPEND_SIGNOFF_DEDUP;
4042 struct strbuf sob = STRBUF_INIT;
4043 int has_footer;
4044
4045 strbuf_addstr(&sob, sign_off_header);
4046 strbuf_addstr(&sob, fmt_name(getenv("GIT_COMMITTER_NAME"),
4047 getenv("GIT_COMMITTER_EMAIL")));
4048 strbuf_addch(&sob, '\n');
4049
4050 if (!ignore_footer)
4051 strbuf_complete_line(msgbuf);
4052
4053 /*
4054 * If the whole message buffer is equal to the sob, pretend that we
4055 * found a conforming footer with a matching sob
4056 */
4057 if (msgbuf->len - ignore_footer == sob.len &&
4058 !strncmp(msgbuf->buf, sob.buf, sob.len))
4059 has_footer = 3;
4060 else
4061 has_footer = has_conforming_footer(msgbuf, &sob, ignore_footer);
4062
4063 if (!has_footer) {
4064 const char *append_newlines = NULL;
4065 size_t len = msgbuf->len - ignore_footer;
4066
4067 if (!len) {
4068 /*
4069 * The buffer is completely empty. Leave foom for
4070 * the title and body to be filled in by the user.
4071 */
4072 append_newlines = "\n\n";
4073 } else if (len == 1) {
4074 /*
4075 * Buffer contains a single newline. Add another
4076 * so that we leave room for the title and body.
4077 */
4078 append_newlines = "\n";
4079 } else if (msgbuf->buf[len - 2] != '\n') {
4080 /*
4081 * Buffer ends with a single newline. Add another
4082 * so that there is an empty line between the message
4083 * body and the sob.
4084 */
4085 append_newlines = "\n";
4086 } /* else, the buffer already ends with two newlines. */
4087
4088 if (append_newlines)
4089 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4090 append_newlines, strlen(append_newlines));
4091 }
4092
4093 if (has_footer != 3 && (!no_dup_sob || has_footer != 2))
4094 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4095 sob.buf, sob.len);
4096
4097 strbuf_release(&sob);
4098}
4099
4100struct labels_entry {
4101 struct hashmap_entry entry;
4102 char label[FLEX_ARRAY];
4103};
4104
4105static int labels_cmp(const void *fndata, const struct labels_entry *a,
4106 const struct labels_entry *b, const void *key)
4107{
4108 return key ? strcmp(a->label, key) : strcmp(a->label, b->label);
4109}
4110
4111struct string_entry {
4112 struct oidmap_entry entry;
4113 char string[FLEX_ARRAY];
4114};
4115
4116struct label_state {
4117 struct oidmap commit2label;
4118 struct hashmap labels;
4119 struct strbuf buf;
4120};
4121
4122static const char *label_oid(struct object_id *oid, const char *label,
4123 struct label_state *state)
4124{
4125 struct labels_entry *labels_entry;
4126 struct string_entry *string_entry;
4127 struct object_id dummy;
4128 size_t len;
4129 int i;
4130
4131 string_entry = oidmap_get(&state->commit2label, oid);
4132 if (string_entry)
4133 return string_entry->string;
4134
4135 /*
4136 * For "uninteresting" commits, i.e. commits that are not to be
4137 * rebased, and which can therefore not be labeled, we use a unique
4138 * abbreviation of the commit name. This is slightly more complicated
4139 * than calling find_unique_abbrev() because we also need to make
4140 * sure that the abbreviation does not conflict with any other
4141 * label.
4142 *
4143 * We disallow "interesting" commits to be labeled by a string that
4144 * is a valid full-length hash, to ensure that we always can find an
4145 * abbreviation for any uninteresting commit's names that does not
4146 * clash with any other label.
4147 */
4148 if (!label) {
4149 char *p;
4150
4151 strbuf_reset(&state->buf);
4152 strbuf_grow(&state->buf, GIT_SHA1_HEXSZ);
4153 label = p = state->buf.buf;
4154
4155 find_unique_abbrev_r(p, oid, default_abbrev);
4156
4157 /*
4158 * We may need to extend the abbreviated hash so that there is
4159 * no conflicting label.
4160 */
4161 if (hashmap_get_from_hash(&state->labels, strihash(p), p)) {
4162 size_t i = strlen(p) + 1;
4163
4164 oid_to_hex_r(p, oid);
4165 for (; i < GIT_SHA1_HEXSZ; i++) {
4166 char save = p[i];
4167 p[i] = '\0';
4168 if (!hashmap_get_from_hash(&state->labels,
4169 strihash(p), p))
4170 break;
4171 p[i] = save;
4172 }
4173 }
4174 } else if (((len = strlen(label)) == the_hash_algo->hexsz &&
4175 !get_oid_hex(label, &dummy)) ||
4176 (len == 1 && *label == '#') ||
4177 hashmap_get_from_hash(&state->labels,
4178 strihash(label), label)) {
4179 /*
4180 * If the label already exists, or if the label is a valid full
4181 * OID, or the label is a '#' (which we use as a separator
4182 * between merge heads and oneline), we append a dash and a
4183 * number to make it unique.
4184 */
4185 struct strbuf *buf = &state->buf;
4186
4187 strbuf_reset(buf);
4188 strbuf_add(buf, label, len);
4189
4190 for (i = 2; ; i++) {
4191 strbuf_setlen(buf, len);
4192 strbuf_addf(buf, "-%d", i);
4193 if (!hashmap_get_from_hash(&state->labels,
4194 strihash(buf->buf),
4195 buf->buf))
4196 break;
4197 }
4198
4199 label = buf->buf;
4200 }
4201
4202 FLEX_ALLOC_STR(labels_entry, label, label);
4203 hashmap_entry_init(labels_entry, strihash(label));
4204 hashmap_add(&state->labels, labels_entry);
4205
4206 FLEX_ALLOC_STR(string_entry, string, label);
4207 oidcpy(&string_entry->entry.oid, oid);
4208 oidmap_put(&state->commit2label, string_entry);
4209
4210 return string_entry->string;
4211}
4212
4213static int make_script_with_merges(struct pretty_print_context *pp,
4214 struct rev_info *revs, FILE *out,
4215 unsigned flags)
4216{
4217 int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4218 int rebase_cousins = flags & TODO_LIST_REBASE_COUSINS;
4219 struct strbuf buf = STRBUF_INIT, oneline = STRBUF_INIT;
4220 struct strbuf label = STRBUF_INIT;
4221 struct commit_list *commits = NULL, **tail = &commits, *iter;
4222 struct commit_list *tips = NULL, **tips_tail = &tips;
4223 struct commit *commit;
4224 struct oidmap commit2todo = OIDMAP_INIT;
4225 struct string_entry *entry;
4226 struct oidset interesting = OIDSET_INIT, child_seen = OIDSET_INIT,
4227 shown = OIDSET_INIT;
4228 struct label_state state = { OIDMAP_INIT, { NULL }, STRBUF_INIT };
4229
4230 int abbr = flags & TODO_LIST_ABBREVIATE_CMDS;
4231 const char *cmd_pick = abbr ? "p" : "pick",
4232 *cmd_label = abbr ? "l" : "label",
4233 *cmd_reset = abbr ? "t" : "reset",
4234 *cmd_merge = abbr ? "m" : "merge";
4235
4236 oidmap_init(&commit2todo, 0);
4237 oidmap_init(&state.commit2label, 0);
4238 hashmap_init(&state.labels, (hashmap_cmp_fn) labels_cmp, NULL, 0);
4239 strbuf_init(&state.buf, 32);
4240
4241 if (revs->cmdline.nr && (revs->cmdline.rev[0].flags & BOTTOM)) {
4242 struct object_id *oid = &revs->cmdline.rev[0].item->oid;
4243 FLEX_ALLOC_STR(entry, string, "onto");
4244 oidcpy(&entry->entry.oid, oid);
4245 oidmap_put(&state.commit2label, entry);
4246 }
4247
4248 /*
4249 * First phase:
4250 * - get onelines for all commits
4251 * - gather all branch tips (i.e. 2nd or later parents of merges)
4252 * - label all branch tips
4253 */
4254 while ((commit = get_revision(revs))) {
4255 struct commit_list *to_merge;
4256 const char *p1, *p2;
4257 struct object_id *oid;
4258 int is_empty;
4259
4260 tail = &commit_list_insert(commit, tail)->next;
4261 oidset_insert(&interesting, &commit->object.oid);
4262
4263 is_empty = is_original_commit_empty(commit);
4264 if (!is_empty && (commit->object.flags & PATCHSAME))
4265 continue;
4266
4267 strbuf_reset(&oneline);
4268 pretty_print_commit(pp, commit, &oneline);
4269
4270 to_merge = commit->parents ? commit->parents->next : NULL;
4271 if (!to_merge) {
4272 /* non-merge commit: easy case */
4273 strbuf_reset(&buf);
4274 if (!keep_empty && is_empty)
4275 strbuf_addf(&buf, "%c ", comment_line_char);
4276 strbuf_addf(&buf, "%s %s %s", cmd_pick,
4277 oid_to_hex(&commit->object.oid),
4278 oneline.buf);
4279
4280 FLEX_ALLOC_STR(entry, string, buf.buf);
4281 oidcpy(&entry->entry.oid, &commit->object.oid);
4282 oidmap_put(&commit2todo, entry);
4283
4284 continue;
4285 }
4286
4287 /* Create a label */
4288 strbuf_reset(&label);
4289 if (skip_prefix(oneline.buf, "Merge ", &p1) &&
4290 (p1 = strchr(p1, '\'')) &&
4291 (p2 = strchr(++p1, '\'')))
4292 strbuf_add(&label, p1, p2 - p1);
4293 else if (skip_prefix(oneline.buf, "Merge pull request ",
4294 &p1) &&
4295 (p1 = strstr(p1, " from ")))
4296 strbuf_addstr(&label, p1 + strlen(" from "));
4297 else
4298 strbuf_addbuf(&label, &oneline);
4299
4300 for (p1 = label.buf; *p1; p1++)
4301 if (isspace(*p1))
4302 *(char *)p1 = '-';
4303
4304 strbuf_reset(&buf);
4305 strbuf_addf(&buf, "%s -C %s",
4306 cmd_merge, oid_to_hex(&commit->object.oid));
4307
4308 /* label the tips of merged branches */
4309 for (; to_merge; to_merge = to_merge->next) {
4310 oid = &to_merge->item->object.oid;
4311 strbuf_addch(&buf, ' ');
4312
4313 if (!oidset_contains(&interesting, oid)) {
4314 strbuf_addstr(&buf, label_oid(oid, NULL,
4315 &state));
4316 continue;
4317 }
4318
4319 tips_tail = &commit_list_insert(to_merge->item,
4320 tips_tail)->next;
4321
4322 strbuf_addstr(&buf, label_oid(oid, label.buf, &state));
4323 }
4324 strbuf_addf(&buf, " # %s", oneline.buf);
4325
4326 FLEX_ALLOC_STR(entry, string, buf.buf);
4327 oidcpy(&entry->entry.oid, &commit->object.oid);
4328 oidmap_put(&commit2todo, entry);
4329 }
4330
4331 /*
4332 * Second phase:
4333 * - label branch points
4334 * - add HEAD to the branch tips
4335 */
4336 for (iter = commits; iter; iter = iter->next) {
4337 struct commit_list *parent = iter->item->parents;
4338 for (; parent; parent = parent->next) {
4339 struct object_id *oid = &parent->item->object.oid;
4340 if (!oidset_contains(&interesting, oid))
4341 continue;
4342 if (oidset_insert(&child_seen, oid))
4343 label_oid(oid, "branch-point", &state);
4344 }
4345
4346 /* Add HEAD as implict "tip of branch" */
4347 if (!iter->next)
4348 tips_tail = &commit_list_insert(iter->item,
4349 tips_tail)->next;
4350 }
4351
4352 /*
4353 * Third phase: output the todo list. This is a bit tricky, as we
4354 * want to avoid jumping back and forth between revisions. To
4355 * accomplish that goal, we walk backwards from the branch tips,
4356 * gathering commits not yet shown, reversing the list on the fly,
4357 * then outputting that list (labeling revisions as needed).
4358 */
4359 fprintf(out, "%s onto\n", cmd_label);
4360 for (iter = tips; iter; iter = iter->next) {
4361 struct commit_list *list = NULL, *iter2;
4362
4363 commit = iter->item;
4364 if (oidset_contains(&shown, &commit->object.oid))
4365 continue;
4366 entry = oidmap_get(&state.commit2label, &commit->object.oid);
4367
4368 if (entry)
4369 fprintf(out, "\n%c Branch %s\n", comment_line_char, entry->string);
4370 else
4371 fprintf(out, "\n");
4372
4373 while (oidset_contains(&interesting, &commit->object.oid) &&
4374 !oidset_contains(&shown, &commit->object.oid)) {
4375 commit_list_insert(commit, &list);
4376 if (!commit->parents) {
4377 commit = NULL;
4378 break;
4379 }
4380 commit = commit->parents->item;
4381 }
4382
4383 if (!commit)
4384 fprintf(out, "%s %s\n", cmd_reset,
4385 rebase_cousins ? "onto" : "[new root]");
4386 else {
4387 const char *to = NULL;
4388
4389 entry = oidmap_get(&state.commit2label,
4390 &commit->object.oid);
4391 if (entry)
4392 to = entry->string;
4393 else if (!rebase_cousins)
4394 to = label_oid(&commit->object.oid, NULL,
4395 &state);
4396
4397 if (!to || !strcmp(to, "onto"))
4398 fprintf(out, "%s onto\n", cmd_reset);
4399 else {
4400 strbuf_reset(&oneline);
4401 pretty_print_commit(pp, commit, &oneline);
4402 fprintf(out, "%s %s # %s\n",
4403 cmd_reset, to, oneline.buf);
4404 }
4405 }
4406
4407 for (iter2 = list; iter2; iter2 = iter2->next) {
4408 struct object_id *oid = &iter2->item->object.oid;
4409 entry = oidmap_get(&commit2todo, oid);
4410 /* only show if not already upstream */
4411 if (entry)
4412 fprintf(out, "%s\n", entry->string);
4413 entry = oidmap_get(&state.commit2label, oid);
4414 if (entry)
4415 fprintf(out, "%s %s\n",
4416 cmd_label, entry->string);
4417 oidset_insert(&shown, oid);
4418 }
4419
4420 free_commit_list(list);
4421 }
4422
4423 free_commit_list(commits);
4424 free_commit_list(tips);
4425
4426 strbuf_release(&label);
4427 strbuf_release(&oneline);
4428 strbuf_release(&buf);
4429
4430 oidmap_free(&commit2todo, 1);
4431 oidmap_free(&state.commit2label, 1);
4432 hashmap_free(&state.labels, 1);
4433 strbuf_release(&state.buf);
4434
4435 return 0;
4436}
4437
4438int sequencer_make_script(FILE *out, int argc, const char **argv,
4439 unsigned flags)
4440{
4441 char *format = NULL;
4442 struct pretty_print_context pp = {0};
4443 struct strbuf buf = STRBUF_INIT;
4444 struct rev_info revs;
4445 struct commit *commit;
4446 int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4447 const char *insn = flags & TODO_LIST_ABBREVIATE_CMDS ? "p" : "pick";
4448 int rebase_merges = flags & TODO_LIST_REBASE_MERGES;
4449
4450 repo_init_revisions(the_repository, &revs, NULL);
4451 revs.verbose_header = 1;
4452 if (!rebase_merges)
4453 revs.max_parents = 1;
4454 revs.cherry_mark = 1;
4455 revs.limited = 1;
4456 revs.reverse = 1;
4457 revs.right_only = 1;
4458 revs.sort_order = REV_SORT_IN_GRAPH_ORDER;
4459 revs.topo_order = 1;
4460
4461 revs.pretty_given = 1;
4462 git_config_get_string("rebase.instructionFormat", &format);
4463 if (!format || !*format) {
4464 free(format);
4465 format = xstrdup("%s");
4466 }
4467 get_commit_format(format, &revs);
4468 free(format);
4469 pp.fmt = revs.commit_format;
4470 pp.output_encoding = get_log_output_encoding();
4471
4472 if (setup_revisions(argc, argv, &revs, NULL) > 1)
4473 return error(_("make_script: unhandled options"));
4474
4475 if (prepare_revision_walk(&revs) < 0)
4476 return error(_("make_script: error preparing revisions"));
4477
4478 if (rebase_merges)
4479 return make_script_with_merges(&pp, &revs, out, flags);
4480
4481 while ((commit = get_revision(&revs))) {
4482 int is_empty = is_original_commit_empty(commit);
4483
4484 if (!is_empty && (commit->object.flags & PATCHSAME))
4485 continue;
4486 strbuf_reset(&buf);
4487 if (!keep_empty && is_empty)
4488 strbuf_addf(&buf, "%c ", comment_line_char);
4489 strbuf_addf(&buf, "%s %s ", insn,
4490 oid_to_hex(&commit->object.oid));
4491 pretty_print_commit(&pp, commit, &buf);
4492 strbuf_addch(&buf, '\n');
4493 fputs(buf.buf, out);
4494 }
4495 strbuf_release(&buf);
4496 return 0;
4497}
4498
4499/*
4500 * Add commands after pick and (series of) squash/fixup commands
4501 * in the todo list.
4502 */
4503int sequencer_add_exec_commands(const char *commands)
4504{
4505 const char *todo_file = rebase_path_todo();
4506 struct todo_list todo_list = TODO_LIST_INIT;
4507 struct strbuf *buf = &todo_list.buf;
4508 size_t offset = 0, commands_len = strlen(commands);
4509 int i, insert;
4510
4511 if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0)
4512 return error(_("could not read '%s'."), todo_file);
4513
4514 if (parse_insn_buffer(todo_list.buf.buf, &todo_list)) {
4515 todo_list_release(&todo_list);
4516 return error(_("unusable todo list: '%s'"), todo_file);
4517 }
4518
4519 /*
4520 * Insert <commands> after every pick. Here, fixup/squash chains
4521 * are considered part of the pick, so we insert the commands *after*
4522 * those chains if there are any.
4523 */
4524 insert = -1;
4525 for (i = 0; i < todo_list.nr; i++) {
4526 enum todo_command command = todo_list.items[i].command;
4527
4528 if (insert >= 0) {
4529 /* skip fixup/squash chains */
4530 if (command == TODO_COMMENT)
4531 continue;
4532 else if (is_fixup(command)) {
4533 insert = i + 1;
4534 continue;
4535 }
4536 strbuf_insert(buf,
4537 todo_list.items[insert].offset_in_buf +
4538 offset, commands, commands_len);
4539 offset += commands_len;
4540 insert = -1;
4541 }
4542
4543 if (command == TODO_PICK || command == TODO_MERGE)
4544 insert = i + 1;
4545 }
4546
4547 /* insert or append final <commands> */
4548 if (insert >= 0 && insert < todo_list.nr)
4549 strbuf_insert(buf, todo_list.items[insert].offset_in_buf +
4550 offset, commands, commands_len);
4551 else if (insert >= 0 || !offset)
4552 strbuf_add(buf, commands, commands_len);
4553
4554 i = write_message(buf->buf, buf->len, todo_file, 0);
4555 todo_list_release(&todo_list);
4556 return i;
4557}
4558
4559int transform_todos(unsigned flags)
4560{
4561 const char *todo_file = rebase_path_todo();
4562 struct todo_list todo_list = TODO_LIST_INIT;
4563 struct strbuf buf = STRBUF_INIT;
4564 struct todo_item *item;
4565 int i;
4566
4567 if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0)
4568 return error(_("could not read '%s'."), todo_file);
4569
4570 if (parse_insn_buffer(todo_list.buf.buf, &todo_list)) {
4571 todo_list_release(&todo_list);
4572 return error(_("unusable todo list: '%s'"), todo_file);
4573 }
4574
4575 for (item = todo_list.items, i = 0; i < todo_list.nr; i++, item++) {
4576 /* if the item is not a command write it and continue */
4577 if (item->command >= TODO_COMMENT) {
4578 strbuf_addf(&buf, "%.*s\n", item->arg_len, item->arg);
4579 continue;
4580 }
4581
4582 /* add command to the buffer */
4583 if (flags & TODO_LIST_ABBREVIATE_CMDS)
4584 strbuf_addch(&buf, command_to_char(item->command));
4585 else
4586 strbuf_addstr(&buf, command_to_string(item->command));
4587
4588 /* add commit id */
4589 if (item->commit) {
4590 const char *oid = flags & TODO_LIST_SHORTEN_IDS ?
4591 short_commit_name(item->commit) :
4592 oid_to_hex(&item->commit->object.oid);
4593
4594 if (item->command == TODO_MERGE) {
4595 if (item->flags & TODO_EDIT_MERGE_MSG)
4596 strbuf_addstr(&buf, " -c");
4597 else
4598 strbuf_addstr(&buf, " -C");
4599 }
4600
4601 strbuf_addf(&buf, " %s", oid);
4602 }
4603
4604 /* add all the rest */
4605 if (!item->arg_len)
4606 strbuf_addch(&buf, '\n');
4607 else
4608 strbuf_addf(&buf, " %.*s\n", item->arg_len, item->arg);
4609 }
4610
4611 i = write_message(buf.buf, buf.len, todo_file, 0);
4612 todo_list_release(&todo_list);
4613 return i;
4614}
4615
4616enum missing_commit_check_level get_missing_commit_check_level(void)
4617{
4618 const char *value;
4619
4620 if (git_config_get_value("rebase.missingcommitscheck", &value) ||
4621 !strcasecmp("ignore", value))
4622 return MISSING_COMMIT_CHECK_IGNORE;
4623 if (!strcasecmp("warn", value))
4624 return MISSING_COMMIT_CHECK_WARN;
4625 if (!strcasecmp("error", value))
4626 return MISSING_COMMIT_CHECK_ERROR;
4627 warning(_("unrecognized setting %s for option "
4628 "rebase.missingCommitsCheck. Ignoring."), value);
4629 return MISSING_COMMIT_CHECK_IGNORE;
4630}
4631
4632define_commit_slab(commit_seen, unsigned char);
4633/*
4634 * Check if the user dropped some commits by mistake
4635 * Behaviour determined by rebase.missingCommitsCheck.
4636 * Check if there is an unrecognized command or a
4637 * bad SHA-1 in a command.
4638 */
4639int check_todo_list(void)
4640{
4641 enum missing_commit_check_level check_level = get_missing_commit_check_level();
4642 struct strbuf todo_file = STRBUF_INIT;
4643 struct todo_list todo_list = TODO_LIST_INIT;
4644 struct strbuf missing = STRBUF_INIT;
4645 int advise_to_edit_todo = 0, res = 0, i;
4646 struct commit_seen commit_seen;
4647
4648 init_commit_seen(&commit_seen);
4649
4650 strbuf_addstr(&todo_file, rebase_path_todo());
4651 if (strbuf_read_file_or_whine(&todo_list.buf, todo_file.buf) < 0) {
4652 res = -1;
4653 goto leave_check;
4654 }
4655 advise_to_edit_todo = res =
4656 parse_insn_buffer(todo_list.buf.buf, &todo_list);
4657
4658 if (res || check_level == MISSING_COMMIT_CHECK_IGNORE)
4659 goto leave_check;
4660
4661 /* Mark the commits in git-rebase-todo as seen */
4662 for (i = 0; i < todo_list.nr; i++) {
4663 struct commit *commit = todo_list.items[i].commit;
4664 if (commit)
4665 *commit_seen_at(&commit_seen, commit) = 1;
4666 }
4667
4668 todo_list_release(&todo_list);
4669 strbuf_addstr(&todo_file, ".backup");
4670 if (strbuf_read_file_or_whine(&todo_list.buf, todo_file.buf) < 0) {
4671 res = -1;
4672 goto leave_check;
4673 }
4674 strbuf_release(&todo_file);
4675 res = !!parse_insn_buffer(todo_list.buf.buf, &todo_list);
4676
4677 /* Find commits in git-rebase-todo.backup yet unseen */
4678 for (i = todo_list.nr - 1; i >= 0; i--) {
4679 struct todo_item *item = todo_list.items + i;
4680 struct commit *commit = item->commit;
4681 if (commit && !*commit_seen_at(&commit_seen, commit)) {
4682 strbuf_addf(&missing, " - %s %.*s\n",
4683 short_commit_name(commit),
4684 item->arg_len, item->arg);
4685 *commit_seen_at(&commit_seen, commit) = 1;
4686 }
4687 }
4688
4689 /* Warn about missing commits */
4690 if (!missing.len)
4691 goto leave_check;
4692
4693 if (check_level == MISSING_COMMIT_CHECK_ERROR)
4694 advise_to_edit_todo = res = 1;
4695
4696 fprintf(stderr,
4697 _("Warning: some commits may have been dropped accidentally.\n"
4698 "Dropped commits (newer to older):\n"));
4699
4700 /* Make the list user-friendly and display */
4701 fputs(missing.buf, stderr);
4702 strbuf_release(&missing);
4703
4704 fprintf(stderr, _("To avoid this message, use \"drop\" to "
4705 "explicitly remove a commit.\n\n"
4706 "Use 'git config rebase.missingCommitsCheck' to change "
4707 "the level of warnings.\n"
4708 "The possible behaviours are: ignore, warn, error.\n\n"));
4709
4710leave_check:
4711 clear_commit_seen(&commit_seen);
4712 strbuf_release(&todo_file);
4713 todo_list_release(&todo_list);
4714
4715 if (advise_to_edit_todo)
4716 fprintf(stderr,
4717 _("You can fix this with 'git rebase --edit-todo' "
4718 "and then run 'git rebase --continue'.\n"
4719 "Or you can abort the rebase with 'git rebase"
4720 " --abort'.\n"));
4721
4722 return res;
4723}
4724
4725static int rewrite_file(const char *path, const char *buf, size_t len)
4726{
4727 int rc = 0;
4728 int fd = open(path, O_WRONLY | O_TRUNC);
4729 if (fd < 0)
4730 return error_errno(_("could not open '%s' for writing"), path);
4731 if (write_in_full(fd, buf, len) < 0)
4732 rc = error_errno(_("could not write to '%s'"), path);
4733 if (close(fd) && !rc)
4734 rc = error_errno(_("could not close '%s'"), path);
4735 return rc;
4736}
4737
4738/* skip picking commits whose parents are unchanged */
4739static int skip_unnecessary_picks(struct object_id *output_oid)
4740{
4741 const char *todo_file = rebase_path_todo();
4742 struct strbuf buf = STRBUF_INIT;
4743 struct todo_list todo_list = TODO_LIST_INIT;
4744 struct object_id *parent_oid;
4745 int fd, i;
4746
4747 if (!read_oneliner(&buf, rebase_path_onto(), 0))
4748 return error(_("could not read 'onto'"));
4749 if (get_oid(buf.buf, output_oid)) {
4750 strbuf_release(&buf);
4751 return error(_("need a HEAD to fixup"));
4752 }
4753 strbuf_release(&buf);
4754
4755 if (strbuf_read_file_or_whine(&todo_list.buf, todo_file) < 0)
4756 return -1;
4757 if (parse_insn_buffer(todo_list.buf.buf, &todo_list) < 0) {
4758 todo_list_release(&todo_list);
4759 return -1;
4760 }
4761
4762 for (i = 0; i < todo_list.nr; i++) {
4763 struct todo_item *item = todo_list.items + i;
4764
4765 if (item->command >= TODO_NOOP)
4766 continue;
4767 if (item->command != TODO_PICK)
4768 break;
4769 if (parse_commit(item->commit)) {
4770 todo_list_release(&todo_list);
4771 return error(_("could not parse commit '%s'"),
4772 oid_to_hex(&item->commit->object.oid));
4773 }
4774 if (!item->commit->parents)
4775 break; /* root commit */
4776 if (item->commit->parents->next)
4777 break; /* merge commit */
4778 parent_oid = &item->commit->parents->item->object.oid;
4779 if (!oideq(parent_oid, output_oid))
4780 break;
4781 oidcpy(output_oid, &item->commit->object.oid);
4782 }
4783 if (i > 0) {
4784 int offset = get_item_line_offset(&todo_list, i);
4785 const char *done_path = rebase_path_done();
4786
4787 fd = open(done_path, O_CREAT | O_WRONLY | O_APPEND, 0666);
4788 if (fd < 0) {
4789 error_errno(_("could not open '%s' for writing"),
4790 done_path);
4791 todo_list_release(&todo_list);
4792 return -1;
4793 }
4794 if (write_in_full(fd, todo_list.buf.buf, offset) < 0) {
4795 error_errno(_("could not write to '%s'"), done_path);
4796 todo_list_release(&todo_list);
4797 close(fd);
4798 return -1;
4799 }
4800 close(fd);
4801
4802 if (rewrite_file(rebase_path_todo(), todo_list.buf.buf + offset,
4803 todo_list.buf.len - offset) < 0) {
4804 todo_list_release(&todo_list);
4805 return -1;
4806 }
4807
4808 todo_list.current = i;
4809 if (is_fixup(peek_command(&todo_list, 0)))
4810 record_in_rewritten(output_oid, peek_command(&todo_list, 0));
4811 }
4812
4813 todo_list_release(&todo_list);
4814
4815 return 0;
4816}
4817
4818int complete_action(struct replay_opts *opts, unsigned flags,
4819 const char *shortrevisions, const char *onto_name,
4820 const char *onto, const char *orig_head, const char *cmd,
4821 unsigned autosquash)
4822{
4823 const char *shortonto, *todo_file = rebase_path_todo();
4824 struct todo_list todo_list = TODO_LIST_INIT;
4825 struct strbuf *buf = &(todo_list.buf);
4826 struct object_id oid;
4827 struct stat st;
4828
4829 get_oid(onto, &oid);
4830 shortonto = find_unique_abbrev(&oid, DEFAULT_ABBREV);
4831
4832 if (!lstat(todo_file, &st) && st.st_size == 0 &&
4833 write_message("noop\n", 5, todo_file, 0))
4834 return -1;
4835
4836 if (autosquash && rearrange_squash())
4837 return -1;
4838
4839 if (cmd && *cmd)
4840 sequencer_add_exec_commands(cmd);
4841
4842 if (strbuf_read_file(buf, todo_file, 0) < 0)
4843 return error_errno(_("could not read '%s'."), todo_file);
4844
4845 if (parse_insn_buffer(buf->buf, &todo_list)) {
4846 todo_list_release(&todo_list);
4847 return error(_("unusable todo list: '%s'"), todo_file);
4848 }
4849
4850 if (count_commands(&todo_list) == 0) {
4851 apply_autostash(opts);
4852 sequencer_remove_state(opts);
4853 todo_list_release(&todo_list);
4854
4855 return error(_("nothing to do"));
4856 }
4857
4858 strbuf_addch(buf, '\n');
4859 strbuf_commented_addf(buf, Q_("Rebase %s onto %s (%d command)",
4860 "Rebase %s onto %s (%d commands)",
4861 count_commands(&todo_list)),
4862 shortrevisions, shortonto, count_commands(&todo_list));
4863 append_todo_help(0, flags & TODO_LIST_KEEP_EMPTY, buf);
4864
4865 if (write_message(buf->buf, buf->len, todo_file, 0)) {
4866 todo_list_release(&todo_list);
4867 return -1;
4868 }
4869
4870 if (copy_file(rebase_path_todo_backup(), todo_file, 0666))
4871 return error(_("could not copy '%s' to '%s'."), todo_file,
4872 rebase_path_todo_backup());
4873
4874 if (transform_todos(flags | TODO_LIST_SHORTEN_IDS))
4875 return error(_("could not transform the todo list"));
4876
4877 strbuf_reset(buf);
4878
4879 if (launch_sequence_editor(todo_file, buf, NULL)) {
4880 apply_autostash(opts);
4881 sequencer_remove_state(opts);
4882 todo_list_release(&todo_list);
4883
4884 return -1;
4885 }
4886
4887 strbuf_stripspace(buf, 1);
4888 if (buf->len == 0) {
4889 apply_autostash(opts);
4890 sequencer_remove_state(opts);
4891 todo_list_release(&todo_list);
4892
4893 return error(_("nothing to do"));
4894 }
4895
4896 todo_list_release(&todo_list);
4897
4898 if (check_todo_list()) {
4899 checkout_onto(opts, onto_name, onto, orig_head);
4900 return -1;
4901 }
4902
4903 if (transform_todos(flags & ~(TODO_LIST_SHORTEN_IDS)))
4904 return error(_("could not transform the todo list"));
4905
4906 if (opts->allow_ff && skip_unnecessary_picks(&oid))
4907 return error(_("could not skip unnecessary pick commands"));
4908
4909 if (checkout_onto(opts, onto_name, oid_to_hex(&oid), orig_head))
4910 return -1;
4911
4912 if (require_clean_work_tree("rebase", "", 1, 1))
4913 return -1;
4914
4915 return sequencer_continue(opts);
4916}
4917
4918struct subject2item_entry {
4919 struct hashmap_entry entry;
4920 int i;
4921 char subject[FLEX_ARRAY];
4922};
4923
4924static int subject2item_cmp(const void *fndata,
4925 const struct subject2item_entry *a,
4926 const struct subject2item_entry *b, const void *key)
4927{
4928 return key ? strcmp(a->subject, key) : strcmp(a->subject, b->subject);
4929}
4930
4931define_commit_slab(commit_todo_item, struct todo_item *);
4932
4933/*
4934 * Rearrange the todo list that has both "pick commit-id msg" and "pick
4935 * commit-id fixup!/squash! msg" in it so that the latter is put immediately
4936 * after the former, and change "pick" to "fixup"/"squash".
4937 *
4938 * Note that if the config has specified a custom instruction format, each log
4939 * message will have to be retrieved from the commit (as the oneline in the
4940 * script cannot be trusted) in order to normalize the autosquash arrangement.
4941 */
4942int rearrange_squash(void)
4943{
4944 const char *todo_file = rebase_path_todo();
4945 struct todo_list todo_list = TODO_LIST_INIT;
4946 struct hashmap subject2item;
4947 int res = 0, rearranged = 0, *next, *tail, i;
4948 char **subjects;
4949 struct commit_todo_item commit_todo;
4950
4951 if (strbuf_read_file_or_whine(&todo_list.buf, todo_file) < 0)
4952 return -1;
4953 if (parse_insn_buffer(todo_list.buf.buf, &todo_list) < 0) {
4954 todo_list_release(&todo_list);
4955 return -1;
4956 }
4957
4958 init_commit_todo_item(&commit_todo);
4959 /*
4960 * The hashmap maps onelines to the respective todo list index.
4961 *
4962 * If any items need to be rearranged, the next[i] value will indicate
4963 * which item was moved directly after the i'th.
4964 *
4965 * In that case, last[i] will indicate the index of the latest item to
4966 * be moved to appear after the i'th.
4967 */
4968 hashmap_init(&subject2item, (hashmap_cmp_fn) subject2item_cmp,
4969 NULL, todo_list.nr);
4970 ALLOC_ARRAY(next, todo_list.nr);
4971 ALLOC_ARRAY(tail, todo_list.nr);
4972 ALLOC_ARRAY(subjects, todo_list.nr);
4973 for (i = 0; i < todo_list.nr; i++) {
4974 struct strbuf buf = STRBUF_INIT;
4975 struct todo_item *item = todo_list.items + i;
4976 const char *commit_buffer, *subject, *p;
4977 size_t subject_len;
4978 int i2 = -1;
4979 struct subject2item_entry *entry;
4980
4981 next[i] = tail[i] = -1;
4982 if (!item->commit || item->command == TODO_DROP) {
4983 subjects[i] = NULL;
4984 continue;
4985 }
4986
4987 if (is_fixup(item->command)) {
4988 todo_list_release(&todo_list);
4989 clear_commit_todo_item(&commit_todo);
4990 return error(_("the script was already rearranged."));
4991 }
4992
4993 *commit_todo_item_at(&commit_todo, item->commit) = item;
4994
4995 parse_commit(item->commit);
4996 commit_buffer = get_commit_buffer(item->commit, NULL);
4997 find_commit_subject(commit_buffer, &subject);
4998 format_subject(&buf, subject, " ");
4999 subject = subjects[i] = strbuf_detach(&buf, &subject_len);
5000 unuse_commit_buffer(item->commit, commit_buffer);
5001 if ((skip_prefix(subject, "fixup! ", &p) ||
5002 skip_prefix(subject, "squash! ", &p))) {
5003 struct commit *commit2;
5004
5005 for (;;) {
5006 while (isspace(*p))
5007 p++;
5008 if (!skip_prefix(p, "fixup! ", &p) &&
5009 !skip_prefix(p, "squash! ", &p))
5010 break;
5011 }
5012
5013 if ((entry = hashmap_get_from_hash(&subject2item,
5014 strhash(p), p)))
5015 /* found by title */
5016 i2 = entry->i;
5017 else if (!strchr(p, ' ') &&
5018 (commit2 =
5019 lookup_commit_reference_by_name(p)) &&
5020 *commit_todo_item_at(&commit_todo, commit2))
5021 /* found by commit name */
5022 i2 = *commit_todo_item_at(&commit_todo, commit2)
5023 - todo_list.items;
5024 else {
5025 /* copy can be a prefix of the commit subject */
5026 for (i2 = 0; i2 < i; i2++)
5027 if (subjects[i2] &&
5028 starts_with(subjects[i2], p))
5029 break;
5030 if (i2 == i)
5031 i2 = -1;
5032 }
5033 }
5034 if (i2 >= 0) {
5035 rearranged = 1;
5036 todo_list.items[i].command =
5037 starts_with(subject, "fixup!") ?
5038 TODO_FIXUP : TODO_SQUASH;
5039 if (next[i2] < 0)
5040 next[i2] = i;
5041 else
5042 next[tail[i2]] = i;
5043 tail[i2] = i;
5044 } else if (!hashmap_get_from_hash(&subject2item,
5045 strhash(subject), subject)) {
5046 FLEX_ALLOC_MEM(entry, subject, subject, subject_len);
5047 entry->i = i;
5048 hashmap_entry_init(entry, strhash(entry->subject));
5049 hashmap_put(&subject2item, entry);
5050 }
5051 }
5052
5053 if (rearranged) {
5054 struct strbuf buf = STRBUF_INIT;
5055
5056 for (i = 0; i < todo_list.nr; i++) {
5057 enum todo_command command = todo_list.items[i].command;
5058 int cur = i;
5059
5060 /*
5061 * Initially, all commands are 'pick's. If it is a
5062 * fixup or a squash now, we have rearranged it.
5063 */
5064 if (is_fixup(command))
5065 continue;
5066
5067 while (cur >= 0) {
5068 const char *bol =
5069 get_item_line(&todo_list, cur);
5070 const char *eol =
5071 get_item_line(&todo_list, cur + 1);
5072
5073 /* replace 'pick', by 'fixup' or 'squash' */
5074 command = todo_list.items[cur].command;
5075 if (is_fixup(command)) {
5076 strbuf_addstr(&buf,
5077 todo_command_info[command].str);
5078 bol += strcspn(bol, " \t");
5079 }
5080
5081 strbuf_add(&buf, bol, eol - bol);
5082
5083 cur = next[cur];
5084 }
5085 }
5086
5087 res = rewrite_file(todo_file, buf.buf, buf.len);
5088 strbuf_release(&buf);
5089 }
5090
5091 free(next);
5092 free(tail);
5093 for (i = 0; i < todo_list.nr; i++)
5094 free(subjects[i]);
5095 free(subjects);
5096 hashmap_free(&subject2item, 1);
5097 todo_list_release(&todo_list);
5098
5099 clear_commit_todo_item(&commit_todo);
5100 return res;
5101}