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