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