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