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