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