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