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