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