Merge branch 'ao/submodule-wo-gitmodules-checked-out'
[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;
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                 int i;
2914
2915                 /* Determine the length of the label */
2916                 for (i = 0; i < len; i++)
2917                         if (isspace(name[i]))
2918                                 break;
2919                 len = i;
2920
2921                 strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
2922                 if (get_oid(ref_name.buf, &oid) &&
2923                     get_oid(ref_name.buf + strlen("refs/rewritten/"), &oid)) {
2924                         error(_("could not read '%s'"), ref_name.buf);
2925                         rollback_lock_file(&lock);
2926                         strbuf_release(&ref_name);
2927                         return -1;
2928                 }
2929         }
2930
2931         memset(&unpack_tree_opts, 0, sizeof(unpack_tree_opts));
2932         setup_unpack_trees_porcelain(&unpack_tree_opts, "reset");
2933         unpack_tree_opts.head_idx = 1;
2934         unpack_tree_opts.src_index = &the_index;
2935         unpack_tree_opts.dst_index = &the_index;
2936         unpack_tree_opts.fn = oneway_merge;
2937         unpack_tree_opts.merge = 1;
2938         unpack_tree_opts.update = 1;
2939
2940         if (read_cache_unmerged()) {
2941                 rollback_lock_file(&lock);
2942                 strbuf_release(&ref_name);
2943                 return error_resolve_conflict(_(action_name(opts)));
2944         }
2945
2946         if (!fill_tree_descriptor(&desc, &oid)) {
2947                 error(_("failed to find tree of %s"), oid_to_hex(&oid));
2948                 rollback_lock_file(&lock);
2949                 free((void *)desc.buffer);
2950                 strbuf_release(&ref_name);
2951                 return -1;
2952         }
2953
2954         if (unpack_trees(1, &desc, &unpack_tree_opts)) {
2955                 rollback_lock_file(&lock);
2956                 free((void *)desc.buffer);
2957                 strbuf_release(&ref_name);
2958                 return -1;
2959         }
2960
2961         tree = parse_tree_indirect(&oid);
2962         prime_cache_tree(&the_index, tree);
2963
2964         if (write_locked_index(&the_index, &lock, COMMIT_LOCK) < 0)
2965                 ret = error(_("could not write index"));
2966         free((void *)desc.buffer);
2967
2968         if (!ret)
2969                 ret = update_ref(reflog_message(opts, "reset", "'%.*s'",
2970                                                 len, name), "HEAD", &oid,
2971                                  NULL, 0, UPDATE_REFS_MSG_ON_ERR);
2972
2973         strbuf_release(&ref_name);
2974         return ret;
2975 }
2976
2977 static struct commit *lookup_label(const char *label, int len,
2978                                    struct strbuf *buf)
2979 {
2980         struct commit *commit;
2981
2982         strbuf_reset(buf);
2983         strbuf_addf(buf, "refs/rewritten/%.*s", len, label);
2984         commit = lookup_commit_reference_by_name(buf->buf);
2985         if (!commit) {
2986                 /* fall back to non-rewritten ref or commit */
2987                 strbuf_splice(buf, 0, strlen("refs/rewritten/"), "", 0);
2988                 commit = lookup_commit_reference_by_name(buf->buf);
2989         }
2990
2991         if (!commit)
2992                 error(_("could not resolve '%s'"), buf->buf);
2993
2994         return commit;
2995 }
2996
2997 static int do_merge(struct commit *commit, const char *arg, int arg_len,
2998                     int flags, struct replay_opts *opts)
2999 {
3000         int run_commit_flags = (flags & TODO_EDIT_MERGE_MSG) ?
3001                 EDIT_MSG | VERIFY_MSG : 0;
3002         struct strbuf ref_name = STRBUF_INIT;
3003         struct commit *head_commit, *merge_commit, *i;
3004         struct commit_list *bases, *j, *reversed = NULL;
3005         struct commit_list *to_merge = NULL, **tail = &to_merge;
3006         struct merge_options o;
3007         int merge_arg_len, oneline_offset, can_fast_forward, ret, k;
3008         static struct lock_file lock;
3009         const char *p;
3010
3011         if (hold_locked_index(&lock, LOCK_REPORT_ON_ERROR) < 0) {
3012                 ret = -1;
3013                 goto leave_merge;
3014         }
3015
3016         head_commit = lookup_commit_reference_by_name("HEAD");
3017         if (!head_commit) {
3018                 ret = error(_("cannot merge without a current revision"));
3019                 goto leave_merge;
3020         }
3021
3022         /*
3023          * For octopus merges, the arg starts with the list of revisions to be
3024          * merged. The list is optionally followed by '#' and the oneline.
3025          */
3026         merge_arg_len = oneline_offset = arg_len;
3027         for (p = arg; p - arg < arg_len; p += strspn(p, " \t\n")) {
3028                 if (!*p)
3029                         break;
3030                 if (*p == '#' && (!p[1] || isspace(p[1]))) {
3031                         p += 1 + strspn(p + 1, " \t\n");
3032                         oneline_offset = p - arg;
3033                         break;
3034                 }
3035                 k = strcspn(p, " \t\n");
3036                 if (!k)
3037                         continue;
3038                 merge_commit = lookup_label(p, k, &ref_name);
3039                 if (!merge_commit) {
3040                         ret = error(_("unable to parse '%.*s'"), k, p);
3041                         goto leave_merge;
3042                 }
3043                 tail = &commit_list_insert(merge_commit, tail)->next;
3044                 p += k;
3045                 merge_arg_len = p - arg;
3046         }
3047
3048         if (!to_merge) {
3049                 ret = error(_("nothing to merge: '%.*s'"), arg_len, arg);
3050                 goto leave_merge;
3051         }
3052
3053         if (opts->have_squash_onto &&
3054             oideq(&head_commit->object.oid, &opts->squash_onto)) {
3055                 /*
3056                  * When the user tells us to "merge" something into a
3057                  * "[new root]", let's simply fast-forward to the merge head.
3058                  */
3059                 rollback_lock_file(&lock);
3060                 if (to_merge->next)
3061                         ret = error(_("octopus merge cannot be executed on "
3062                                       "top of a [new root]"));
3063                 else
3064                         ret = fast_forward_to(&to_merge->item->object.oid,
3065                                               &head_commit->object.oid, 0,
3066                                               opts);
3067                 goto leave_merge;
3068         }
3069
3070         if (commit) {
3071                 const char *message = get_commit_buffer(commit, NULL);
3072                 const char *body;
3073                 int len;
3074
3075                 if (!message) {
3076                         ret = error(_("could not get commit message of '%s'"),
3077                                     oid_to_hex(&commit->object.oid));
3078                         goto leave_merge;
3079                 }
3080                 write_author_script(message);
3081                 find_commit_subject(message, &body);
3082                 len = strlen(body);
3083                 ret = write_message(body, len, git_path_merge_msg(the_repository), 0);
3084                 unuse_commit_buffer(commit, message);
3085                 if (ret) {
3086                         error_errno(_("could not write '%s'"),
3087                                     git_path_merge_msg(the_repository));
3088                         goto leave_merge;
3089                 }
3090         } else {
3091                 struct strbuf buf = STRBUF_INIT;
3092                 int len;
3093
3094                 strbuf_addf(&buf, "author %s", git_author_info(0));
3095                 write_author_script(buf.buf);
3096                 strbuf_reset(&buf);
3097
3098                 if (oneline_offset < arg_len) {
3099                         p = arg + oneline_offset;
3100                         len = arg_len - oneline_offset;
3101                 } else {
3102                         strbuf_addf(&buf, "Merge %s '%.*s'",
3103                                     to_merge->next ? "branches" : "branch",
3104                                     merge_arg_len, arg);
3105                         p = buf.buf;
3106                         len = buf.len;
3107                 }
3108
3109                 ret = write_message(p, len, git_path_merge_msg(the_repository), 0);
3110                 strbuf_release(&buf);
3111                 if (ret) {
3112                         error_errno(_("could not write '%s'"),
3113                                     git_path_merge_msg(the_repository));
3114                         goto leave_merge;
3115                 }
3116         }
3117
3118         /*
3119          * If HEAD is not identical to the first parent of the original merge
3120          * commit, we cannot fast-forward.
3121          */
3122         can_fast_forward = opts->allow_ff && commit && commit->parents &&
3123                 oideq(&commit->parents->item->object.oid,
3124                       &head_commit->object.oid);
3125
3126         /*
3127          * If any merge head is different from the original one, we cannot
3128          * fast-forward.
3129          */
3130         if (can_fast_forward) {
3131                 struct commit_list *p = commit->parents->next;
3132
3133                 for (j = to_merge; j && p; j = j->next, p = p->next)
3134                         if (!oideq(&j->item->object.oid,
3135                                    &p->item->object.oid)) {
3136                                 can_fast_forward = 0;
3137                                 break;
3138                         }
3139                 /*
3140                  * If the number of merge heads differs from the original merge
3141                  * commit, we cannot fast-forward.
3142                  */
3143                 if (j || p)
3144                         can_fast_forward = 0;
3145         }
3146
3147         if (can_fast_forward) {
3148                 rollback_lock_file(&lock);
3149                 ret = fast_forward_to(&commit->object.oid,
3150                                       &head_commit->object.oid, 0, opts);
3151                 goto leave_merge;
3152         }
3153
3154         if (to_merge->next) {
3155                 /* Octopus merge */
3156                 struct child_process cmd = CHILD_PROCESS_INIT;
3157
3158                 if (read_env_script(&cmd.env_array)) {
3159                         const char *gpg_opt = gpg_sign_opt_quoted(opts);
3160
3161                         ret = error(_(staged_changes_advice), gpg_opt, gpg_opt);
3162                         goto leave_merge;
3163                 }
3164
3165                 cmd.git_cmd = 1;
3166                 argv_array_push(&cmd.args, "merge");
3167                 argv_array_push(&cmd.args, "-s");
3168                 argv_array_push(&cmd.args, "octopus");
3169                 argv_array_push(&cmd.args, "--no-edit");
3170                 argv_array_push(&cmd.args, "--no-ff");
3171                 argv_array_push(&cmd.args, "--no-log");
3172                 argv_array_push(&cmd.args, "--no-stat");
3173                 argv_array_push(&cmd.args, "-F");
3174                 argv_array_push(&cmd.args, git_path_merge_msg(the_repository));
3175                 if (opts->gpg_sign)
3176                         argv_array_push(&cmd.args, opts->gpg_sign);
3177
3178                 /* Add the tips to be merged */
3179                 for (j = to_merge; j; j = j->next)
3180                         argv_array_push(&cmd.args,
3181                                         oid_to_hex(&j->item->object.oid));
3182
3183                 strbuf_release(&ref_name);
3184                 unlink(git_path_cherry_pick_head(the_repository));
3185                 rollback_lock_file(&lock);
3186
3187                 rollback_lock_file(&lock);
3188                 ret = run_command(&cmd);
3189
3190                 /* force re-reading of the cache */
3191                 if (!ret && (discard_cache() < 0 || read_cache() < 0))
3192                         ret = error(_("could not read index"));
3193                 goto leave_merge;
3194         }
3195
3196         merge_commit = to_merge->item;
3197         write_message(oid_to_hex(&merge_commit->object.oid), GIT_SHA1_HEXSZ,
3198                       git_path_merge_head(the_repository), 0);
3199         write_message("no-ff", 5, git_path_merge_mode(the_repository), 0);
3200
3201         bases = get_merge_bases(head_commit, merge_commit);
3202         if (bases && oideq(&merge_commit->object.oid,
3203                            &bases->item->object.oid)) {
3204                 ret = 0;
3205                 /* skip merging an ancestor of HEAD */
3206                 goto leave_merge;
3207         }
3208
3209         for (j = bases; j; j = j->next)
3210                 commit_list_insert(j->item, &reversed);
3211         free_commit_list(bases);
3212
3213         read_cache();
3214         init_merge_options(&o);
3215         o.branch1 = "HEAD";
3216         o.branch2 = ref_name.buf;
3217         o.buffer_output = 2;
3218
3219         ret = merge_recursive(&o, head_commit, merge_commit, reversed, &i);
3220         if (ret <= 0)
3221                 fputs(o.obuf.buf, stdout);
3222         strbuf_release(&o.obuf);
3223         if (ret < 0) {
3224                 error(_("could not even attempt to merge '%.*s'"),
3225                       merge_arg_len, arg);
3226                 goto leave_merge;
3227         }
3228         /*
3229          * The return value of merge_recursive() is 1 on clean, and 0 on
3230          * unclean merge.
3231          *
3232          * Let's reverse that, so that do_merge() returns 0 upon success and
3233          * 1 upon failed merge (keeping the return value -1 for the cases where
3234          * we will want to reschedule the `merge` command).
3235          */
3236         ret = !ret;
3237
3238         if (active_cache_changed &&
3239             write_locked_index(&the_index, &lock, COMMIT_LOCK)) {
3240                 ret = error(_("merge: Unable to write new index file"));
3241                 goto leave_merge;
3242         }
3243
3244         rollback_lock_file(&lock);
3245         if (ret)
3246                 repo_rerere(the_repository, opts->allow_rerere_auto);
3247         else
3248                 /*
3249                  * In case of problems, we now want to return a positive
3250                  * value (a negative one would indicate that the `merge`
3251                  * command needs to be rescheduled).
3252                  */
3253                 ret = !!run_git_commit(git_path_merge_msg(the_repository), opts,
3254                                      run_commit_flags);
3255
3256 leave_merge:
3257         strbuf_release(&ref_name);
3258         rollback_lock_file(&lock);
3259         free_commit_list(to_merge);
3260         return ret;
3261 }
3262
3263 static int is_final_fixup(struct todo_list *todo_list)
3264 {
3265         int i = todo_list->current;
3266
3267         if (!is_fixup(todo_list->items[i].command))
3268                 return 0;
3269
3270         while (++i < todo_list->nr)
3271                 if (is_fixup(todo_list->items[i].command))
3272                         return 0;
3273                 else if (!is_noop(todo_list->items[i].command))
3274                         break;
3275         return 1;
3276 }
3277
3278 static enum todo_command peek_command(struct todo_list *todo_list, int offset)
3279 {
3280         int i;
3281
3282         for (i = todo_list->current + offset; i < todo_list->nr; i++)
3283                 if (!is_noop(todo_list->items[i].command))
3284                         return todo_list->items[i].command;
3285
3286         return -1;
3287 }
3288
3289 static int apply_autostash(struct replay_opts *opts)
3290 {
3291         struct strbuf stash_sha1 = STRBUF_INIT;
3292         struct child_process child = CHILD_PROCESS_INIT;
3293         int ret = 0;
3294
3295         if (!read_oneliner(&stash_sha1, rebase_path_autostash(), 1)) {
3296                 strbuf_release(&stash_sha1);
3297                 return 0;
3298         }
3299         strbuf_trim(&stash_sha1);
3300
3301         child.git_cmd = 1;
3302         child.no_stdout = 1;
3303         child.no_stderr = 1;
3304         argv_array_push(&child.args, "stash");
3305         argv_array_push(&child.args, "apply");
3306         argv_array_push(&child.args, stash_sha1.buf);
3307         if (!run_command(&child))
3308                 fprintf(stderr, _("Applied autostash.\n"));
3309         else {
3310                 struct child_process store = CHILD_PROCESS_INIT;
3311
3312                 store.git_cmd = 1;
3313                 argv_array_push(&store.args, "stash");
3314                 argv_array_push(&store.args, "store");
3315                 argv_array_push(&store.args, "-m");
3316                 argv_array_push(&store.args, "autostash");
3317                 argv_array_push(&store.args, "-q");
3318                 argv_array_push(&store.args, stash_sha1.buf);
3319                 if (run_command(&store))
3320                         ret = error(_("cannot store %s"), stash_sha1.buf);
3321                 else
3322                         fprintf(stderr,
3323                                 _("Applying autostash resulted in conflicts.\n"
3324                                   "Your changes are safe in the stash.\n"
3325                                   "You can run \"git stash pop\" or"
3326                                   " \"git stash drop\" at any time.\n"));
3327         }
3328
3329         strbuf_release(&stash_sha1);
3330         return ret;
3331 }
3332
3333 static const char *reflog_message(struct replay_opts *opts,
3334         const char *sub_action, const char *fmt, ...)
3335 {
3336         va_list ap;
3337         static struct strbuf buf = STRBUF_INIT;
3338
3339         va_start(ap, fmt);
3340         strbuf_reset(&buf);
3341         strbuf_addstr(&buf, action_name(opts));
3342         if (sub_action)
3343                 strbuf_addf(&buf, " (%s)", sub_action);
3344         if (fmt) {
3345                 strbuf_addstr(&buf, ": ");
3346                 strbuf_vaddf(&buf, fmt, ap);
3347         }
3348         va_end(ap);
3349
3350         return buf.buf;
3351 }
3352
3353 static int run_git_checkout(struct replay_opts *opts, const char *commit,
3354                             const char *action)
3355 {
3356         struct child_process cmd = CHILD_PROCESS_INIT;
3357
3358         cmd.git_cmd = 1;
3359
3360         argv_array_push(&cmd.args, "checkout");
3361         argv_array_push(&cmd.args, commit);
3362         argv_array_pushf(&cmd.env_array, GIT_REFLOG_ACTION "=%s", action);
3363
3364         if (opts->verbose)
3365                 return run_command(&cmd);
3366         else
3367                 return run_command_silent_on_success(&cmd);
3368 }
3369
3370 int prepare_branch_to_be_rebased(struct replay_opts *opts, const char *commit)
3371 {
3372         const char *action;
3373
3374         if (commit && *commit) {
3375                 action = reflog_message(opts, "start", "checkout %s", commit);
3376                 if (run_git_checkout(opts, commit, action))
3377                         return error(_("could not checkout %s"), commit);
3378         }
3379
3380         return 0;
3381 }
3382
3383 static int checkout_onto(struct replay_opts *opts,
3384                          const char *onto_name, const char *onto,
3385                          const char *orig_head)
3386 {
3387         struct object_id oid;
3388         const char *action = reflog_message(opts, "start", "checkout %s", onto_name);
3389
3390         if (get_oid(orig_head, &oid))
3391                 return error(_("%s: not a valid OID"), orig_head);
3392
3393         if (run_git_checkout(opts, onto, action)) {
3394                 apply_autostash(opts);
3395                 sequencer_remove_state(opts);
3396                 return error(_("could not detach HEAD"));
3397         }
3398
3399         return update_ref(NULL, "ORIG_HEAD", &oid, NULL, 0, UPDATE_REFS_MSG_ON_ERR);
3400 }
3401
3402 static int stopped_at_head(void)
3403 {
3404         struct object_id head;
3405         struct commit *commit;
3406         struct commit_message message;
3407
3408         if (get_oid("HEAD", &head) ||
3409             !(commit = lookup_commit(the_repository, &head)) ||
3410             parse_commit(commit) || get_message(commit, &message))
3411                 fprintf(stderr, _("Stopped at HEAD\n"));
3412         else {
3413                 fprintf(stderr, _("Stopped at %s\n"), message.label);
3414                 free_message(commit, &message);
3415         }
3416         return 0;
3417
3418 }
3419
3420 static const char rescheduled_advice[] =
3421 N_("Could not execute the todo command\n"
3422 "\n"
3423 "    %.*s"
3424 "\n"
3425 "It has been rescheduled; To edit the command before continuing, please\n"
3426 "edit the todo list first:\n"
3427 "\n"
3428 "    git rebase --edit-todo\n"
3429 "    git rebase --continue\n");
3430
3431 static int pick_commits(struct todo_list *todo_list, struct replay_opts *opts)
3432 {
3433         int res = 0, reschedule = 0;
3434
3435         setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
3436         if (opts->allow_ff)
3437                 assert(!(opts->signoff || opts->no_commit ||
3438                                 opts->record_origin || opts->edit));
3439         if (read_and_refresh_cache(opts))
3440                 return -1;
3441
3442         while (todo_list->current < todo_list->nr) {
3443                 struct todo_item *item = todo_list->items + todo_list->current;
3444                 if (save_todo(todo_list, opts))
3445                         return -1;
3446                 if (is_rebase_i(opts)) {
3447                         if (item->command != TODO_COMMENT) {
3448                                 FILE *f = fopen(rebase_path_msgnum(), "w");
3449
3450                                 todo_list->done_nr++;
3451
3452                                 if (f) {
3453                                         fprintf(f, "%d\n", todo_list->done_nr);
3454                                         fclose(f);
3455                                 }
3456                                 fprintf(stderr, "Rebasing (%d/%d)%s",
3457                                         todo_list->done_nr,
3458                                         todo_list->total_nr,
3459                                         opts->verbose ? "\n" : "\r");
3460                         }
3461                         unlink(rebase_path_message());
3462                         unlink(rebase_path_author_script());
3463                         unlink(rebase_path_stopped_sha());
3464                         unlink(rebase_path_amend());
3465                         delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
3466
3467                         if (item->command == TODO_BREAK)
3468                                 return stopped_at_head();
3469                 }
3470                 if (item->command <= TODO_SQUASH) {
3471                         if (is_rebase_i(opts))
3472                                 setenv("GIT_REFLOG_ACTION", reflog_message(opts,
3473                                         command_to_string(item->command), NULL),
3474                                         1);
3475                         res = do_pick_commit(item->command, item->commit,
3476                                         opts, is_final_fixup(todo_list));
3477                         if (is_rebase_i(opts) && res < 0) {
3478                                 /* Reschedule */
3479                                 advise(_(rescheduled_advice),
3480                                        get_item_line_length(todo_list,
3481                                                             todo_list->current),
3482                                        get_item_line(todo_list,
3483                                                      todo_list->current));
3484                                 todo_list->current--;
3485                                 if (save_todo(todo_list, opts))
3486                                         return -1;
3487                         }
3488                         if (item->command == TODO_EDIT) {
3489                                 struct commit *commit = item->commit;
3490                                 if (!res)
3491                                         fprintf(stderr,
3492                                                 _("Stopped at %s...  %.*s\n"),
3493                                                 short_commit_name(commit),
3494                                                 item->arg_len, item->arg);
3495                                 return error_with_patch(commit,
3496                                         item->arg, item->arg_len, opts, res,
3497                                         !res);
3498                         }
3499                         if (is_rebase_i(opts) && !res)
3500                                 record_in_rewritten(&item->commit->object.oid,
3501                                         peek_command(todo_list, 1));
3502                         if (res && is_fixup(item->command)) {
3503                                 if (res == 1)
3504                                         intend_to_amend();
3505                                 return error_failed_squash(item->commit, opts,
3506                                         item->arg_len, item->arg);
3507                         } else if (res && is_rebase_i(opts) && item->commit) {
3508                                 int to_amend = 0;
3509                                 struct object_id oid;
3510
3511                                 /*
3512                                  * If we are rewording and have either
3513                                  * fast-forwarded already, or are about to
3514                                  * create a new root commit, we want to amend,
3515                                  * otherwise we do not.
3516                                  */
3517                                 if (item->command == TODO_REWORD &&
3518                                     !get_oid("HEAD", &oid) &&
3519                                     (oideq(&item->commit->object.oid, &oid) ||
3520                                      (opts->have_squash_onto &&
3521                                       oideq(&opts->squash_onto, &oid))))
3522                                         to_amend = 1;
3523
3524                                 return res | error_with_patch(item->commit,
3525                                                 item->arg, item->arg_len, opts,
3526                                                 res, to_amend);
3527                         }
3528                 } else if (item->command == TODO_EXEC) {
3529                         char *end_of_arg = (char *)(item->arg + item->arg_len);
3530                         int saved = *end_of_arg;
3531                         struct stat st;
3532
3533                         *end_of_arg = '\0';
3534                         res = do_exec(item->arg);
3535                         *end_of_arg = saved;
3536
3537                         /* Reread the todo file if it has changed. */
3538                         if (res)
3539                                 ; /* fall through */
3540                         else if (stat(get_todo_path(opts), &st))
3541                                 res = error_errno(_("could not stat '%s'"),
3542                                                   get_todo_path(opts));
3543                         else if (match_stat_data(&todo_list->stat, &st)) {
3544                                 todo_list_release(todo_list);
3545                                 if (read_populate_todo(todo_list, opts))
3546                                         res = -1; /* message was printed */
3547                                 /* `current` will be incremented below */
3548                                 todo_list->current = -1;
3549                         }
3550                 } else if (item->command == TODO_LABEL) {
3551                         if ((res = do_label(item->arg, item->arg_len)))
3552                                 reschedule = 1;
3553                 } else if (item->command == TODO_RESET) {
3554                         if ((res = do_reset(item->arg, item->arg_len, opts)))
3555                                 reschedule = 1;
3556                 } else if (item->command == TODO_MERGE) {
3557                         if ((res = do_merge(item->commit,
3558                                             item->arg, item->arg_len,
3559                                             item->flags, opts)) < 0)
3560                                 reschedule = 1;
3561                         else if (item->commit)
3562                                 record_in_rewritten(&item->commit->object.oid,
3563                                                     peek_command(todo_list, 1));
3564                         if (res > 0)
3565                                 /* failed with merge conflicts */
3566                                 return error_with_patch(item->commit,
3567                                                         item->arg,
3568                                                         item->arg_len, opts,
3569                                                         res, 0);
3570                 } else if (!is_noop(item->command))
3571                         return error(_("unknown command %d"), item->command);
3572
3573                 if (reschedule) {
3574                         advise(_(rescheduled_advice),
3575                                get_item_line_length(todo_list,
3576                                                     todo_list->current),
3577                                get_item_line(todo_list, todo_list->current));
3578                         todo_list->current--;
3579                         if (save_todo(todo_list, opts))
3580                                 return -1;
3581                         if (item->commit)
3582                                 return error_with_patch(item->commit,
3583                                                         item->arg,
3584                                                         item->arg_len, opts,
3585                                                         res, 0);
3586                 }
3587
3588                 todo_list->current++;
3589                 if (res)
3590                         return res;
3591         }
3592
3593         if (is_rebase_i(opts)) {
3594                 struct strbuf head_ref = STRBUF_INIT, buf = STRBUF_INIT;
3595                 struct stat st;
3596
3597                 /* Stopped in the middle, as planned? */
3598                 if (todo_list->current < todo_list->nr)
3599                         return 0;
3600
3601                 if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
3602                                 starts_with(head_ref.buf, "refs/")) {
3603                         const char *msg;
3604                         struct object_id head, orig;
3605                         int res;
3606
3607                         if (get_oid("HEAD", &head)) {
3608                                 res = error(_("cannot read HEAD"));
3609 cleanup_head_ref:
3610                                 strbuf_release(&head_ref);
3611                                 strbuf_release(&buf);
3612                                 return res;
3613                         }
3614                         if (!read_oneliner(&buf, rebase_path_orig_head(), 0) ||
3615                                         get_oid_hex(buf.buf, &orig)) {
3616                                 res = error(_("could not read orig-head"));
3617                                 goto cleanup_head_ref;
3618                         }
3619                         strbuf_reset(&buf);
3620                         if (!read_oneliner(&buf, rebase_path_onto(), 0)) {
3621                                 res = error(_("could not read 'onto'"));
3622                                 goto cleanup_head_ref;
3623                         }
3624                         msg = reflog_message(opts, "finish", "%s onto %s",
3625                                 head_ref.buf, buf.buf);
3626                         if (update_ref(msg, head_ref.buf, &head, &orig,
3627                                        REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR)) {
3628                                 res = error(_("could not update %s"),
3629                                         head_ref.buf);
3630                                 goto cleanup_head_ref;
3631                         }
3632                         msg = reflog_message(opts, "finish", "returning to %s",
3633                                 head_ref.buf);
3634                         if (create_symref("HEAD", head_ref.buf, msg)) {
3635                                 res = error(_("could not update HEAD to %s"),
3636                                         head_ref.buf);
3637                                 goto cleanup_head_ref;
3638                         }
3639                         strbuf_reset(&buf);
3640                 }
3641
3642                 if (opts->verbose) {
3643                         struct rev_info log_tree_opt;
3644                         struct object_id orig, head;
3645
3646                         memset(&log_tree_opt, 0, sizeof(log_tree_opt));
3647                         repo_init_revisions(the_repository, &log_tree_opt, NULL);
3648                         log_tree_opt.diff = 1;
3649                         log_tree_opt.diffopt.output_format =
3650                                 DIFF_FORMAT_DIFFSTAT;
3651                         log_tree_opt.disable_stdin = 1;
3652
3653                         if (read_oneliner(&buf, rebase_path_orig_head(), 0) &&
3654                             !get_oid(buf.buf, &orig) &&
3655                             !get_oid("HEAD", &head)) {
3656                                 diff_tree_oid(&orig, &head, "",
3657                                               &log_tree_opt.diffopt);
3658                                 log_tree_diff_flush(&log_tree_opt);
3659                         }
3660                 }
3661                 flush_rewritten_pending();
3662                 if (!stat(rebase_path_rewritten_list(), &st) &&
3663                                 st.st_size > 0) {
3664                         struct child_process child = CHILD_PROCESS_INIT;
3665                         const char *post_rewrite_hook =
3666                                 find_hook("post-rewrite");
3667
3668                         child.in = open(rebase_path_rewritten_list(), O_RDONLY);
3669                         child.git_cmd = 1;
3670                         argv_array_push(&child.args, "notes");
3671                         argv_array_push(&child.args, "copy");
3672                         argv_array_push(&child.args, "--for-rewrite=rebase");
3673                         /* we don't care if this copying failed */
3674                         run_command(&child);
3675
3676                         if (post_rewrite_hook) {
3677                                 struct child_process hook = CHILD_PROCESS_INIT;
3678
3679                                 hook.in = open(rebase_path_rewritten_list(),
3680                                         O_RDONLY);
3681                                 hook.stdout_to_stderr = 1;
3682                                 argv_array_push(&hook.args, post_rewrite_hook);
3683                                 argv_array_push(&hook.args, "rebase");
3684                                 /* we don't care if this hook failed */
3685                                 run_command(&hook);
3686                         }
3687                 }
3688                 apply_autostash(opts);
3689
3690                 fprintf(stderr, "Successfully rebased and updated %s.\n",
3691                         head_ref.buf);
3692
3693                 strbuf_release(&buf);
3694                 strbuf_release(&head_ref);
3695         }
3696
3697         /*
3698          * Sequence of picks finished successfully; cleanup by
3699          * removing the .git/sequencer directory
3700          */
3701         return sequencer_remove_state(opts);
3702 }
3703
3704 static int continue_single_pick(void)
3705 {
3706         const char *argv[] = { "commit", NULL };
3707
3708         if (!file_exists(git_path_cherry_pick_head(the_repository)) &&
3709             !file_exists(git_path_revert_head(the_repository)))
3710                 return error(_("no cherry-pick or revert in progress"));
3711         return run_command_v_opt(argv, RUN_GIT_CMD);
3712 }
3713
3714 static int commit_staged_changes(struct replay_opts *opts,
3715                                  struct todo_list *todo_list)
3716 {
3717         unsigned int flags = ALLOW_EMPTY | EDIT_MSG;
3718         unsigned int final_fixup = 0, is_clean;
3719
3720         if (has_unstaged_changes(1))
3721                 return error(_("cannot rebase: You have unstaged changes."));
3722
3723         is_clean = !has_uncommitted_changes(0);
3724
3725         if (file_exists(rebase_path_amend())) {
3726                 struct strbuf rev = STRBUF_INIT;
3727                 struct object_id head, to_amend;
3728
3729                 if (get_oid("HEAD", &head))
3730                         return error(_("cannot amend non-existing commit"));
3731                 if (!read_oneliner(&rev, rebase_path_amend(), 0))
3732                         return error(_("invalid file: '%s'"), rebase_path_amend());
3733                 if (get_oid_hex(rev.buf, &to_amend))
3734                         return error(_("invalid contents: '%s'"),
3735                                 rebase_path_amend());
3736                 if (!is_clean && !oideq(&head, &to_amend))
3737                         return error(_("\nYou have uncommitted changes in your "
3738                                        "working tree. Please, commit them\n"
3739                                        "first and then run 'git rebase "
3740                                        "--continue' again."));
3741                 /*
3742                  * When skipping a failed fixup/squash, we need to edit the
3743                  * commit message, the current fixup list and count, and if it
3744                  * was the last fixup/squash in the chain, we need to clean up
3745                  * the commit message and if there was a squash, let the user
3746                  * edit it.
3747                  */
3748                 if (!is_clean || !opts->current_fixup_count)
3749                         ; /* this is not the final fixup */
3750                 else if (!oideq(&head, &to_amend) ||
3751                          !file_exists(rebase_path_stopped_sha())) {
3752                         /* was a final fixup or squash done manually? */
3753                         if (!is_fixup(peek_command(todo_list, 0))) {
3754                                 unlink(rebase_path_fixup_msg());
3755                                 unlink(rebase_path_squash_msg());
3756                                 unlink(rebase_path_current_fixups());
3757                                 strbuf_reset(&opts->current_fixups);
3758                                 opts->current_fixup_count = 0;
3759                         }
3760                 } else {
3761                         /* we are in a fixup/squash chain */
3762                         const char *p = opts->current_fixups.buf;
3763                         int len = opts->current_fixups.len;
3764
3765                         opts->current_fixup_count--;
3766                         if (!len)
3767                                 BUG("Incorrect current_fixups:\n%s", p);
3768                         while (len && p[len - 1] != '\n')
3769                                 len--;
3770                         strbuf_setlen(&opts->current_fixups, len);
3771                         if (write_message(p, len, rebase_path_current_fixups(),
3772                                           0) < 0)
3773                                 return error(_("could not write file: '%s'"),
3774                                              rebase_path_current_fixups());
3775
3776                         /*
3777                          * If a fixup/squash in a fixup/squash chain failed, the
3778                          * commit message is already correct, no need to commit
3779                          * it again.
3780                          *
3781                          * Only if it is the final command in the fixup/squash
3782                          * chain, and only if the chain is longer than a single
3783                          * fixup/squash command (which was just skipped), do we
3784                          * actually need to re-commit with a cleaned up commit
3785                          * message.
3786                          */
3787                         if (opts->current_fixup_count > 0 &&
3788                             !is_fixup(peek_command(todo_list, 0))) {
3789                                 final_fixup = 1;
3790                                 /*
3791                                  * If there was not a single "squash" in the
3792                                  * chain, we only need to clean up the commit
3793                                  * message, no need to bother the user with
3794                                  * opening the commit message in the editor.
3795                                  */
3796                                 if (!starts_with(p, "squash ") &&
3797                                     !strstr(p, "\nsquash "))
3798                                         flags = (flags & ~EDIT_MSG) | CLEANUP_MSG;
3799                         } else if (is_fixup(peek_command(todo_list, 0))) {
3800                                 /*
3801                                  * We need to update the squash message to skip
3802                                  * the latest commit message.
3803                                  */
3804                                 struct commit *commit;
3805                                 const char *path = rebase_path_squash_msg();
3806
3807                                 if (parse_head(&commit) ||
3808                                     !(p = get_commit_buffer(commit, NULL)) ||
3809                                     write_message(p, strlen(p), path, 0)) {
3810                                         unuse_commit_buffer(commit, p);
3811                                         return error(_("could not write file: "
3812                                                        "'%s'"), path);
3813                                 }
3814                                 unuse_commit_buffer(commit, p);
3815                         }
3816                 }
3817
3818                 strbuf_release(&rev);
3819                 flags |= AMEND_MSG;
3820         }
3821
3822         if (is_clean) {
3823                 const char *cherry_pick_head = git_path_cherry_pick_head(the_repository);
3824
3825                 if (file_exists(cherry_pick_head) && unlink(cherry_pick_head))
3826                         return error(_("could not remove CHERRY_PICK_HEAD"));
3827                 if (!final_fixup)
3828                         return 0;
3829         }
3830
3831         if (run_git_commit(final_fixup ? NULL : rebase_path_message(),
3832                            opts, flags))
3833                 return error(_("could not commit staged changes."));
3834         unlink(rebase_path_amend());
3835         if (final_fixup) {
3836                 unlink(rebase_path_fixup_msg());
3837                 unlink(rebase_path_squash_msg());
3838         }
3839         if (opts->current_fixup_count > 0) {
3840                 /*
3841                  * Whether final fixup or not, we just cleaned up the commit
3842                  * message...
3843                  */
3844                 unlink(rebase_path_current_fixups());
3845                 strbuf_reset(&opts->current_fixups);
3846                 opts->current_fixup_count = 0;
3847         }
3848         return 0;
3849 }
3850
3851 int sequencer_continue(struct replay_opts *opts)
3852 {
3853         struct todo_list todo_list = TODO_LIST_INIT;
3854         int res;
3855
3856         if (read_and_refresh_cache(opts))
3857                 return -1;
3858
3859         if (read_populate_opts(opts))
3860                 return -1;
3861         if (is_rebase_i(opts)) {
3862                 if ((res = read_populate_todo(&todo_list, opts)))
3863                         goto release_todo_list;
3864                 if (commit_staged_changes(opts, &todo_list))
3865                         return -1;
3866         } else if (!file_exists(get_todo_path(opts)))
3867                 return continue_single_pick();
3868         else if ((res = read_populate_todo(&todo_list, opts)))
3869                 goto release_todo_list;
3870
3871         if (!is_rebase_i(opts)) {
3872                 /* Verify that the conflict has been resolved */
3873                 if (file_exists(git_path_cherry_pick_head(the_repository)) ||
3874                     file_exists(git_path_revert_head(the_repository))) {
3875                         res = continue_single_pick();
3876                         if (res)
3877                                 goto release_todo_list;
3878                 }
3879                 if (index_differs_from("HEAD", NULL, 0)) {
3880                         res = error_dirty_index(opts);
3881                         goto release_todo_list;
3882                 }
3883                 todo_list.current++;
3884         } else if (file_exists(rebase_path_stopped_sha())) {
3885                 struct strbuf buf = STRBUF_INIT;
3886                 struct object_id oid;
3887
3888                 if (read_oneliner(&buf, rebase_path_stopped_sha(), 1) &&
3889                     !get_oid_committish(buf.buf, &oid))
3890                         record_in_rewritten(&oid, peek_command(&todo_list, 0));
3891                 strbuf_release(&buf);
3892         }
3893
3894         res = pick_commits(&todo_list, opts);
3895 release_todo_list:
3896         todo_list_release(&todo_list);
3897         return res;
3898 }
3899
3900 static int single_pick(struct commit *cmit, struct replay_opts *opts)
3901 {
3902         setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
3903         return do_pick_commit(opts->action == REPLAY_PICK ?
3904                 TODO_PICK : TODO_REVERT, cmit, opts, 0);
3905 }
3906
3907 int sequencer_pick_revisions(struct replay_opts *opts)
3908 {
3909         struct todo_list todo_list = TODO_LIST_INIT;
3910         struct object_id oid;
3911         int i, res;
3912
3913         assert(opts->revs);
3914         if (read_and_refresh_cache(opts))
3915                 return -1;
3916
3917         for (i = 0; i < opts->revs->pending.nr; i++) {
3918                 struct object_id oid;
3919                 const char *name = opts->revs->pending.objects[i].name;
3920
3921                 /* This happens when using --stdin. */
3922                 if (!strlen(name))
3923                         continue;
3924
3925                 if (!get_oid(name, &oid)) {
3926                         if (!lookup_commit_reference_gently(the_repository, &oid, 1)) {
3927                                 enum object_type type = oid_object_info(the_repository,
3928                                                                         &oid,
3929                                                                         NULL);
3930                                 return error(_("%s: can't cherry-pick a %s"),
3931                                         name, type_name(type));
3932                         }
3933                 } else
3934                         return error(_("%s: bad revision"), name);
3935         }
3936
3937         /*
3938          * If we were called as "git cherry-pick <commit>", just
3939          * cherry-pick/revert it, set CHERRY_PICK_HEAD /
3940          * REVERT_HEAD, and don't touch the sequencer state.
3941          * This means it is possible to cherry-pick in the middle
3942          * of a cherry-pick sequence.
3943          */
3944         if (opts->revs->cmdline.nr == 1 &&
3945             opts->revs->cmdline.rev->whence == REV_CMD_REV &&
3946             opts->revs->no_walk &&
3947             !opts->revs->cmdline.rev->flags) {
3948                 struct commit *cmit;
3949                 if (prepare_revision_walk(opts->revs))
3950                         return error(_("revision walk setup failed"));
3951                 cmit = get_revision(opts->revs);
3952                 if (!cmit)
3953                         return error(_("empty commit set passed"));
3954                 if (get_revision(opts->revs))
3955                         BUG("unexpected extra commit from walk");
3956                 return single_pick(cmit, opts);
3957         }
3958
3959         /*
3960          * Start a new cherry-pick/ revert sequence; but
3961          * first, make sure that an existing one isn't in
3962          * progress
3963          */
3964
3965         if (walk_revs_populate_todo(&todo_list, opts) ||
3966                         create_seq_dir() < 0)
3967                 return -1;
3968         if (get_oid("HEAD", &oid) && (opts->action == REPLAY_REVERT))
3969                 return error(_("can't revert as initial commit"));
3970         if (save_head(oid_to_hex(&oid)))
3971                 return -1;
3972         if (save_opts(opts))
3973                 return -1;
3974         update_abort_safety_file();
3975         res = pick_commits(&todo_list, opts);
3976         todo_list_release(&todo_list);
3977         return res;
3978 }
3979
3980 void append_signoff(struct strbuf *msgbuf, size_t ignore_footer, unsigned flag)
3981 {
3982         unsigned no_dup_sob = flag & APPEND_SIGNOFF_DEDUP;
3983         struct strbuf sob = STRBUF_INIT;
3984         int has_footer;
3985
3986         strbuf_addstr(&sob, sign_off_header);
3987         strbuf_addstr(&sob, fmt_name(getenv("GIT_COMMITTER_NAME"),
3988                                 getenv("GIT_COMMITTER_EMAIL")));
3989         strbuf_addch(&sob, '\n');
3990
3991         if (!ignore_footer)
3992                 strbuf_complete_line(msgbuf);
3993
3994         /*
3995          * If the whole message buffer is equal to the sob, pretend that we
3996          * found a conforming footer with a matching sob
3997          */
3998         if (msgbuf->len - ignore_footer == sob.len &&
3999             !strncmp(msgbuf->buf, sob.buf, sob.len))
4000                 has_footer = 3;
4001         else
4002                 has_footer = has_conforming_footer(msgbuf, &sob, ignore_footer);
4003
4004         if (!has_footer) {
4005                 const char *append_newlines = NULL;
4006                 size_t len = msgbuf->len - ignore_footer;
4007
4008                 if (!len) {
4009                         /*
4010                          * The buffer is completely empty.  Leave foom for
4011                          * the title and body to be filled in by the user.
4012                          */
4013                         append_newlines = "\n\n";
4014                 } else if (len == 1) {
4015                         /*
4016                          * Buffer contains a single newline.  Add another
4017                          * so that we leave room for the title and body.
4018                          */
4019                         append_newlines = "\n";
4020                 } else if (msgbuf->buf[len - 2] != '\n') {
4021                         /*
4022                          * Buffer ends with a single newline.  Add another
4023                          * so that there is an empty line between the message
4024                          * body and the sob.
4025                          */
4026                         append_newlines = "\n";
4027                 } /* else, the buffer already ends with two newlines. */
4028
4029                 if (append_newlines)
4030                         strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4031                                 append_newlines, strlen(append_newlines));
4032         }
4033
4034         if (has_footer != 3 && (!no_dup_sob || has_footer != 2))
4035                 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
4036                                 sob.buf, sob.len);
4037
4038         strbuf_release(&sob);
4039 }
4040
4041 struct labels_entry {
4042         struct hashmap_entry entry;
4043         char label[FLEX_ARRAY];
4044 };
4045
4046 static int labels_cmp(const void *fndata, const struct labels_entry *a,
4047                       const struct labels_entry *b, const void *key)
4048 {
4049         return key ? strcmp(a->label, key) : strcmp(a->label, b->label);
4050 }
4051
4052 struct string_entry {
4053         struct oidmap_entry entry;
4054         char string[FLEX_ARRAY];
4055 };
4056
4057 struct label_state {
4058         struct oidmap commit2label;
4059         struct hashmap labels;
4060         struct strbuf buf;
4061 };
4062
4063 static const char *label_oid(struct object_id *oid, const char *label,
4064                              struct label_state *state)
4065 {
4066         struct labels_entry *labels_entry;
4067         struct string_entry *string_entry;
4068         struct object_id dummy;
4069         size_t len;
4070         int i;
4071
4072         string_entry = oidmap_get(&state->commit2label, oid);
4073         if (string_entry)
4074                 return string_entry->string;
4075
4076         /*
4077          * For "uninteresting" commits, i.e. commits that are not to be
4078          * rebased, and which can therefore not be labeled, we use a unique
4079          * abbreviation of the commit name. This is slightly more complicated
4080          * than calling find_unique_abbrev() because we also need to make
4081          * sure that the abbreviation does not conflict with any other
4082          * label.
4083          *
4084          * We disallow "interesting" commits to be labeled by a string that
4085          * is a valid full-length hash, to ensure that we always can find an
4086          * abbreviation for any uninteresting commit's names that does not
4087          * clash with any other label.
4088          */
4089         if (!label) {
4090                 char *p;
4091
4092                 strbuf_reset(&state->buf);
4093                 strbuf_grow(&state->buf, GIT_SHA1_HEXSZ);
4094                 label = p = state->buf.buf;
4095
4096                 find_unique_abbrev_r(p, oid, default_abbrev);
4097
4098                 /*
4099                  * We may need to extend the abbreviated hash so that there is
4100                  * no conflicting label.
4101                  */
4102                 if (hashmap_get_from_hash(&state->labels, strihash(p), p)) {
4103                         size_t i = strlen(p) + 1;
4104
4105                         oid_to_hex_r(p, oid);
4106                         for (; i < GIT_SHA1_HEXSZ; i++) {
4107                                 char save = p[i];
4108                                 p[i] = '\0';
4109                                 if (!hashmap_get_from_hash(&state->labels,
4110                                                            strihash(p), p))
4111                                         break;
4112                                 p[i] = save;
4113                         }
4114                 }
4115         } else if (((len = strlen(label)) == the_hash_algo->hexsz &&
4116                     !get_oid_hex(label, &dummy)) ||
4117                    (len == 1 && *label == '#') ||
4118                    hashmap_get_from_hash(&state->labels,
4119                                          strihash(label), label)) {
4120                 /*
4121                  * If the label already exists, or if the label is a valid full
4122                  * OID, or the label is a '#' (which we use as a separator
4123                  * between merge heads and oneline), we append a dash and a
4124                  * number to make it unique.
4125                  */
4126                 struct strbuf *buf = &state->buf;
4127
4128                 strbuf_reset(buf);
4129                 strbuf_add(buf, label, len);
4130
4131                 for (i = 2; ; i++) {
4132                         strbuf_setlen(buf, len);
4133                         strbuf_addf(buf, "-%d", i);
4134                         if (!hashmap_get_from_hash(&state->labels,
4135                                                    strihash(buf->buf),
4136                                                    buf->buf))
4137                                 break;
4138                 }
4139
4140                 label = buf->buf;
4141         }
4142
4143         FLEX_ALLOC_STR(labels_entry, label, label);
4144         hashmap_entry_init(labels_entry, strihash(label));
4145         hashmap_add(&state->labels, labels_entry);
4146
4147         FLEX_ALLOC_STR(string_entry, string, label);
4148         oidcpy(&string_entry->entry.oid, oid);
4149         oidmap_put(&state->commit2label, string_entry);
4150
4151         return string_entry->string;
4152 }
4153
4154 static int make_script_with_merges(struct pretty_print_context *pp,
4155                                    struct rev_info *revs, FILE *out,
4156                                    unsigned flags)
4157 {
4158         int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4159         int rebase_cousins = flags & TODO_LIST_REBASE_COUSINS;
4160         struct strbuf buf = STRBUF_INIT, oneline = STRBUF_INIT;
4161         struct strbuf label = STRBUF_INIT;
4162         struct commit_list *commits = NULL, **tail = &commits, *iter;
4163         struct commit_list *tips = NULL, **tips_tail = &tips;
4164         struct commit *commit;
4165         struct oidmap commit2todo = OIDMAP_INIT;
4166         struct string_entry *entry;
4167         struct oidset interesting = OIDSET_INIT, child_seen = OIDSET_INIT,
4168                 shown = OIDSET_INIT;
4169         struct label_state state = { OIDMAP_INIT, { NULL }, STRBUF_INIT };
4170
4171         int abbr = flags & TODO_LIST_ABBREVIATE_CMDS;
4172         const char *cmd_pick = abbr ? "p" : "pick",
4173                 *cmd_label = abbr ? "l" : "label",
4174                 *cmd_reset = abbr ? "t" : "reset",
4175                 *cmd_merge = abbr ? "m" : "merge";
4176
4177         oidmap_init(&commit2todo, 0);
4178         oidmap_init(&state.commit2label, 0);
4179         hashmap_init(&state.labels, (hashmap_cmp_fn) labels_cmp, NULL, 0);
4180         strbuf_init(&state.buf, 32);
4181
4182         if (revs->cmdline.nr && (revs->cmdline.rev[0].flags & BOTTOM)) {
4183                 struct object_id *oid = &revs->cmdline.rev[0].item->oid;
4184                 FLEX_ALLOC_STR(entry, string, "onto");
4185                 oidcpy(&entry->entry.oid, oid);
4186                 oidmap_put(&state.commit2label, entry);
4187         }
4188
4189         /*
4190          * First phase:
4191          * - get onelines for all commits
4192          * - gather all branch tips (i.e. 2nd or later parents of merges)
4193          * - label all branch tips
4194          */
4195         while ((commit = get_revision(revs))) {
4196                 struct commit_list *to_merge;
4197                 const char *p1, *p2;
4198                 struct object_id *oid;
4199                 int is_empty;
4200
4201                 tail = &commit_list_insert(commit, tail)->next;
4202                 oidset_insert(&interesting, &commit->object.oid);
4203
4204                 is_empty = is_original_commit_empty(commit);
4205                 if (!is_empty && (commit->object.flags & PATCHSAME))
4206                         continue;
4207
4208                 strbuf_reset(&oneline);
4209                 pretty_print_commit(pp, commit, &oneline);
4210
4211                 to_merge = commit->parents ? commit->parents->next : NULL;
4212                 if (!to_merge) {
4213                         /* non-merge commit: easy case */
4214                         strbuf_reset(&buf);
4215                         if (!keep_empty && is_empty)
4216                                 strbuf_addf(&buf, "%c ", comment_line_char);
4217                         strbuf_addf(&buf, "%s %s %s", cmd_pick,
4218                                     oid_to_hex(&commit->object.oid),
4219                                     oneline.buf);
4220
4221                         FLEX_ALLOC_STR(entry, string, buf.buf);
4222                         oidcpy(&entry->entry.oid, &commit->object.oid);
4223                         oidmap_put(&commit2todo, entry);
4224
4225                         continue;
4226                 }
4227
4228                 /* Create a label */
4229                 strbuf_reset(&label);
4230                 if (skip_prefix(oneline.buf, "Merge ", &p1) &&
4231                     (p1 = strchr(p1, '\'')) &&
4232                     (p2 = strchr(++p1, '\'')))
4233                         strbuf_add(&label, p1, p2 - p1);
4234                 else if (skip_prefix(oneline.buf, "Merge pull request ",
4235                                      &p1) &&
4236                          (p1 = strstr(p1, " from ")))
4237                         strbuf_addstr(&label, p1 + strlen(" from "));
4238                 else
4239                         strbuf_addbuf(&label, &oneline);
4240
4241                 for (p1 = label.buf; *p1; p1++)
4242                         if (isspace(*p1))
4243                                 *(char *)p1 = '-';
4244
4245                 strbuf_reset(&buf);
4246                 strbuf_addf(&buf, "%s -C %s",
4247                             cmd_merge, oid_to_hex(&commit->object.oid));
4248
4249                 /* label the tips of merged branches */
4250                 for (; to_merge; to_merge = to_merge->next) {
4251                         oid = &to_merge->item->object.oid;
4252                         strbuf_addch(&buf, ' ');
4253
4254                         if (!oidset_contains(&interesting, oid)) {
4255                                 strbuf_addstr(&buf, label_oid(oid, NULL,
4256                                                               &state));
4257                                 continue;
4258                         }
4259
4260                         tips_tail = &commit_list_insert(to_merge->item,
4261                                                         tips_tail)->next;
4262
4263                         strbuf_addstr(&buf, label_oid(oid, label.buf, &state));
4264                 }
4265                 strbuf_addf(&buf, " # %s", oneline.buf);
4266
4267                 FLEX_ALLOC_STR(entry, string, buf.buf);
4268                 oidcpy(&entry->entry.oid, &commit->object.oid);
4269                 oidmap_put(&commit2todo, entry);
4270         }
4271
4272         /*
4273          * Second phase:
4274          * - label branch points
4275          * - add HEAD to the branch tips
4276          */
4277         for (iter = commits; iter; iter = iter->next) {
4278                 struct commit_list *parent = iter->item->parents;
4279                 for (; parent; parent = parent->next) {
4280                         struct object_id *oid = &parent->item->object.oid;
4281                         if (!oidset_contains(&interesting, oid))
4282                                 continue;
4283                         if (oidset_insert(&child_seen, oid))
4284                                 label_oid(oid, "branch-point", &state);
4285                 }
4286
4287                 /* Add HEAD as implict "tip of branch" */
4288                 if (!iter->next)
4289                         tips_tail = &commit_list_insert(iter->item,
4290                                                         tips_tail)->next;
4291         }
4292
4293         /*
4294          * Third phase: output the todo list. This is a bit tricky, as we
4295          * want to avoid jumping back and forth between revisions. To
4296          * accomplish that goal, we walk backwards from the branch tips,
4297          * gathering commits not yet shown, reversing the list on the fly,
4298          * then outputting that list (labeling revisions as needed).
4299          */
4300         fprintf(out, "%s onto\n", cmd_label);
4301         for (iter = tips; iter; iter = iter->next) {
4302                 struct commit_list *list = NULL, *iter2;
4303
4304                 commit = iter->item;
4305                 if (oidset_contains(&shown, &commit->object.oid))
4306                         continue;
4307                 entry = oidmap_get(&state.commit2label, &commit->object.oid);
4308
4309                 if (entry)
4310                         fprintf(out, "\n%c Branch %s\n", comment_line_char, entry->string);
4311                 else
4312                         fprintf(out, "\n");
4313
4314                 while (oidset_contains(&interesting, &commit->object.oid) &&
4315                        !oidset_contains(&shown, &commit->object.oid)) {
4316                         commit_list_insert(commit, &list);
4317                         if (!commit->parents) {
4318                                 commit = NULL;
4319                                 break;
4320                         }
4321                         commit = commit->parents->item;
4322                 }
4323
4324                 if (!commit)
4325                         fprintf(out, "%s %s\n", cmd_reset,
4326                                 rebase_cousins ? "onto" : "[new root]");
4327                 else {
4328                         const char *to = NULL;
4329
4330                         entry = oidmap_get(&state.commit2label,
4331                                            &commit->object.oid);
4332                         if (entry)
4333                                 to = entry->string;
4334                         else if (!rebase_cousins)
4335                                 to = label_oid(&commit->object.oid, NULL,
4336                                                &state);
4337
4338                         if (!to || !strcmp(to, "onto"))
4339                                 fprintf(out, "%s onto\n", cmd_reset);
4340                         else {
4341                                 strbuf_reset(&oneline);
4342                                 pretty_print_commit(pp, commit, &oneline);
4343                                 fprintf(out, "%s %s # %s\n",
4344                                         cmd_reset, to, oneline.buf);
4345                         }
4346                 }
4347
4348                 for (iter2 = list; iter2; iter2 = iter2->next) {
4349                         struct object_id *oid = &iter2->item->object.oid;
4350                         entry = oidmap_get(&commit2todo, oid);
4351                         /* only show if not already upstream */
4352                         if (entry)
4353                                 fprintf(out, "%s\n", entry->string);
4354                         entry = oidmap_get(&state.commit2label, oid);
4355                         if (entry)
4356                                 fprintf(out, "%s %s\n",
4357                                         cmd_label, entry->string);
4358                         oidset_insert(&shown, oid);
4359                 }
4360
4361                 free_commit_list(list);
4362         }
4363
4364         free_commit_list(commits);
4365         free_commit_list(tips);
4366
4367         strbuf_release(&label);
4368         strbuf_release(&oneline);
4369         strbuf_release(&buf);
4370
4371         oidmap_free(&commit2todo, 1);
4372         oidmap_free(&state.commit2label, 1);
4373         hashmap_free(&state.labels, 1);
4374         strbuf_release(&state.buf);
4375
4376         return 0;
4377 }
4378
4379 int sequencer_make_script(FILE *out, int argc, const char **argv,
4380                           unsigned flags)
4381 {
4382         char *format = NULL;
4383         struct pretty_print_context pp = {0};
4384         struct strbuf buf = STRBUF_INIT;
4385         struct rev_info revs;
4386         struct commit *commit;
4387         int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
4388         const char *insn = flags & TODO_LIST_ABBREVIATE_CMDS ? "p" : "pick";
4389         int rebase_merges = flags & TODO_LIST_REBASE_MERGES;
4390
4391         repo_init_revisions(the_repository, &revs, NULL);
4392         revs.verbose_header = 1;
4393         if (!rebase_merges)
4394                 revs.max_parents = 1;
4395         revs.cherry_mark = 1;
4396         revs.limited = 1;
4397         revs.reverse = 1;
4398         revs.right_only = 1;
4399         revs.sort_order = REV_SORT_IN_GRAPH_ORDER;
4400         revs.topo_order = 1;
4401
4402         revs.pretty_given = 1;
4403         git_config_get_string("rebase.instructionFormat", &format);
4404         if (!format || !*format) {
4405                 free(format);
4406                 format = xstrdup("%s");
4407         }
4408         get_commit_format(format, &revs);
4409         free(format);
4410         pp.fmt = revs.commit_format;
4411         pp.output_encoding = get_log_output_encoding();
4412
4413         if (setup_revisions(argc, argv, &revs, NULL) > 1)
4414                 return error(_("make_script: unhandled options"));
4415
4416         if (prepare_revision_walk(&revs) < 0)
4417                 return error(_("make_script: error preparing revisions"));
4418
4419         if (rebase_merges)
4420                 return make_script_with_merges(&pp, &revs, out, flags);
4421
4422         while ((commit = get_revision(&revs))) {
4423                 int is_empty  = is_original_commit_empty(commit);
4424
4425                 if (!is_empty && (commit->object.flags & PATCHSAME))
4426                         continue;
4427                 strbuf_reset(&buf);
4428                 if (!keep_empty && is_empty)
4429                         strbuf_addf(&buf, "%c ", comment_line_char);
4430                 strbuf_addf(&buf, "%s %s ", insn,
4431                             oid_to_hex(&commit->object.oid));
4432                 pretty_print_commit(&pp, commit, &buf);
4433                 strbuf_addch(&buf, '\n');
4434                 fputs(buf.buf, out);
4435         }
4436         strbuf_release(&buf);
4437         return 0;
4438 }
4439
4440 /*
4441  * Add commands after pick and (series of) squash/fixup commands
4442  * in the todo list.
4443  */
4444 int sequencer_add_exec_commands(const char *commands)
4445 {
4446         const char *todo_file = rebase_path_todo();
4447         struct todo_list todo_list = TODO_LIST_INIT;
4448         struct strbuf *buf = &todo_list.buf;
4449         size_t offset = 0, commands_len = strlen(commands);
4450         int i, insert;
4451
4452         if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0)
4453                 return error(_("could not read '%s'."), todo_file);
4454
4455         if (parse_insn_buffer(todo_list.buf.buf, &todo_list)) {
4456                 todo_list_release(&todo_list);
4457                 return error(_("unusable todo list: '%s'"), todo_file);
4458         }
4459
4460         /*
4461          * Insert <commands> after every pick. Here, fixup/squash chains
4462          * are considered part of the pick, so we insert the commands *after*
4463          * those chains if there are any.
4464          */
4465         insert = -1;
4466         for (i = 0; i < todo_list.nr; i++) {
4467                 enum todo_command command = todo_list.items[i].command;
4468
4469                 if (insert >= 0) {
4470                         /* skip fixup/squash chains */
4471                         if (command == TODO_COMMENT)
4472                                 continue;
4473                         else if (is_fixup(command)) {
4474                                 insert = i + 1;
4475                                 continue;
4476                         }
4477                         strbuf_insert(buf,
4478                                       todo_list.items[insert].offset_in_buf +
4479                                       offset, commands, commands_len);
4480                         offset += commands_len;
4481                         insert = -1;
4482                 }
4483
4484                 if (command == TODO_PICK || command == TODO_MERGE)
4485                         insert = i + 1;
4486         }
4487
4488         /* insert or append final <commands> */
4489         if (insert >= 0 && insert < todo_list.nr)
4490                 strbuf_insert(buf, todo_list.items[insert].offset_in_buf +
4491                               offset, commands, commands_len);
4492         else if (insert >= 0 || !offset)
4493                 strbuf_add(buf, commands, commands_len);
4494
4495         i = write_message(buf->buf, buf->len, todo_file, 0);
4496         todo_list_release(&todo_list);
4497         return i;
4498 }
4499
4500 int transform_todos(unsigned flags)
4501 {
4502         const char *todo_file = rebase_path_todo();
4503         struct todo_list todo_list = TODO_LIST_INIT;
4504         struct strbuf buf = STRBUF_INIT;
4505         struct todo_item *item;
4506         int i;
4507
4508         if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0)
4509                 return error(_("could not read '%s'."), todo_file);
4510
4511         if (parse_insn_buffer(todo_list.buf.buf, &todo_list)) {
4512                 todo_list_release(&todo_list);
4513                 return error(_("unusable todo list: '%s'"), todo_file);
4514         }
4515
4516         for (item = todo_list.items, i = 0; i < todo_list.nr; i++, item++) {
4517                 /* if the item is not a command write it and continue */
4518                 if (item->command >= TODO_COMMENT) {
4519                         strbuf_addf(&buf, "%.*s\n", item->arg_len, item->arg);
4520                         continue;
4521                 }
4522
4523                 /* add command to the buffer */
4524                 if (flags & TODO_LIST_ABBREVIATE_CMDS)
4525                         strbuf_addch(&buf, command_to_char(item->command));
4526                 else
4527                         strbuf_addstr(&buf, command_to_string(item->command));
4528
4529                 /* add commit id */
4530                 if (item->commit) {
4531                         const char *oid = flags & TODO_LIST_SHORTEN_IDS ?
4532                                           short_commit_name(item->commit) :
4533                                           oid_to_hex(&item->commit->object.oid);
4534
4535                         if (item->command == TODO_MERGE) {
4536                                 if (item->flags & TODO_EDIT_MERGE_MSG)
4537                                         strbuf_addstr(&buf, " -c");
4538                                 else
4539                                         strbuf_addstr(&buf, " -C");
4540                         }
4541
4542                         strbuf_addf(&buf, " %s", oid);
4543                 }
4544
4545                 /* add all the rest */
4546                 if (!item->arg_len)
4547                         strbuf_addch(&buf, '\n');
4548                 else
4549                         strbuf_addf(&buf, " %.*s\n", item->arg_len, item->arg);
4550         }
4551
4552         i = write_message(buf.buf, buf.len, todo_file, 0);
4553         todo_list_release(&todo_list);
4554         return i;
4555 }
4556
4557 enum missing_commit_check_level get_missing_commit_check_level(void)
4558 {
4559         const char *value;
4560
4561         if (git_config_get_value("rebase.missingcommitscheck", &value) ||
4562                         !strcasecmp("ignore", value))
4563                 return MISSING_COMMIT_CHECK_IGNORE;
4564         if (!strcasecmp("warn", value))
4565                 return MISSING_COMMIT_CHECK_WARN;
4566         if (!strcasecmp("error", value))
4567                 return MISSING_COMMIT_CHECK_ERROR;
4568         warning(_("unrecognized setting %s for option "
4569                   "rebase.missingCommitsCheck. Ignoring."), value);
4570         return MISSING_COMMIT_CHECK_IGNORE;
4571 }
4572
4573 define_commit_slab(commit_seen, unsigned char);
4574 /*
4575  * Check if the user dropped some commits by mistake
4576  * Behaviour determined by rebase.missingCommitsCheck.
4577  * Check if there is an unrecognized command or a
4578  * bad SHA-1 in a command.
4579  */
4580 int check_todo_list(void)
4581 {
4582         enum missing_commit_check_level check_level = get_missing_commit_check_level();
4583         struct strbuf todo_file = STRBUF_INIT;
4584         struct todo_list todo_list = TODO_LIST_INIT;
4585         struct strbuf missing = STRBUF_INIT;
4586         int advise_to_edit_todo = 0, res = 0, i;
4587         struct commit_seen commit_seen;
4588
4589         init_commit_seen(&commit_seen);
4590
4591         strbuf_addstr(&todo_file, rebase_path_todo());
4592         if (strbuf_read_file_or_whine(&todo_list.buf, todo_file.buf) < 0) {
4593                 res = -1;
4594                 goto leave_check;
4595         }
4596         advise_to_edit_todo = res =
4597                 parse_insn_buffer(todo_list.buf.buf, &todo_list);
4598
4599         if (res || check_level == MISSING_COMMIT_CHECK_IGNORE)
4600                 goto leave_check;
4601
4602         /* Mark the commits in git-rebase-todo as seen */
4603         for (i = 0; i < todo_list.nr; i++) {
4604                 struct commit *commit = todo_list.items[i].commit;
4605                 if (commit)
4606                         *commit_seen_at(&commit_seen, commit) = 1;
4607         }
4608
4609         todo_list_release(&todo_list);
4610         strbuf_addstr(&todo_file, ".backup");
4611         if (strbuf_read_file_or_whine(&todo_list.buf, todo_file.buf) < 0) {
4612                 res = -1;
4613                 goto leave_check;
4614         }
4615         strbuf_release(&todo_file);
4616         res = !!parse_insn_buffer(todo_list.buf.buf, &todo_list);
4617
4618         /* Find commits in git-rebase-todo.backup yet unseen */
4619         for (i = todo_list.nr - 1; i >= 0; i--) {
4620                 struct todo_item *item = todo_list.items + i;
4621                 struct commit *commit = item->commit;
4622                 if (commit && !*commit_seen_at(&commit_seen, commit)) {
4623                         strbuf_addf(&missing, " - %s %.*s\n",
4624                                     short_commit_name(commit),
4625                                     item->arg_len, item->arg);
4626                         *commit_seen_at(&commit_seen, commit) = 1;
4627                 }
4628         }
4629
4630         /* Warn about missing commits */
4631         if (!missing.len)
4632                 goto leave_check;
4633
4634         if (check_level == MISSING_COMMIT_CHECK_ERROR)
4635                 advise_to_edit_todo = res = 1;
4636
4637         fprintf(stderr,
4638                 _("Warning: some commits may have been dropped accidentally.\n"
4639                 "Dropped commits (newer to older):\n"));
4640
4641         /* Make the list user-friendly and display */
4642         fputs(missing.buf, stderr);
4643         strbuf_release(&missing);
4644
4645         fprintf(stderr, _("To avoid this message, use \"drop\" to "
4646                 "explicitly remove a commit.\n\n"
4647                 "Use 'git config rebase.missingCommitsCheck' to change "
4648                 "the level of warnings.\n"
4649                 "The possible behaviours are: ignore, warn, error.\n\n"));
4650
4651 leave_check:
4652         clear_commit_seen(&commit_seen);
4653         strbuf_release(&todo_file);
4654         todo_list_release(&todo_list);
4655
4656         if (advise_to_edit_todo)
4657                 fprintf(stderr,
4658                         _("You can fix this with 'git rebase --edit-todo' "
4659                           "and then run 'git rebase --continue'.\n"
4660                           "Or you can abort the rebase with 'git rebase"
4661                           " --abort'.\n"));
4662
4663         return res;
4664 }
4665
4666 static int rewrite_file(const char *path, const char *buf, size_t len)
4667 {
4668         int rc = 0;
4669         int fd = open(path, O_WRONLY | O_TRUNC);
4670         if (fd < 0)
4671                 return error_errno(_("could not open '%s' for writing"), path);
4672         if (write_in_full(fd, buf, len) < 0)
4673                 rc = error_errno(_("could not write to '%s'"), path);
4674         if (close(fd) && !rc)
4675                 rc = error_errno(_("could not close '%s'"), path);
4676         return rc;
4677 }
4678
4679 /* skip picking commits whose parents are unchanged */
4680 static int skip_unnecessary_picks(struct object_id *output_oid)
4681 {
4682         const char *todo_file = rebase_path_todo();
4683         struct strbuf buf = STRBUF_INIT;
4684         struct todo_list todo_list = TODO_LIST_INIT;
4685         struct object_id *parent_oid;
4686         int fd, i;
4687
4688         if (!read_oneliner(&buf, rebase_path_onto(), 0))
4689                 return error(_("could not read 'onto'"));
4690         if (get_oid(buf.buf, output_oid)) {
4691                 strbuf_release(&buf);
4692                 return error(_("need a HEAD to fixup"));
4693         }
4694         strbuf_release(&buf);
4695
4696         if (strbuf_read_file_or_whine(&todo_list.buf, todo_file) < 0)
4697                 return -1;
4698         if (parse_insn_buffer(todo_list.buf.buf, &todo_list) < 0) {
4699                 todo_list_release(&todo_list);
4700                 return -1;
4701         }
4702
4703         for (i = 0; i < todo_list.nr; i++) {
4704                 struct todo_item *item = todo_list.items + i;
4705
4706                 if (item->command >= TODO_NOOP)
4707                         continue;
4708                 if (item->command != TODO_PICK)
4709                         break;
4710                 if (parse_commit(item->commit)) {
4711                         todo_list_release(&todo_list);
4712                         return error(_("could not parse commit '%s'"),
4713                                 oid_to_hex(&item->commit->object.oid));
4714                 }
4715                 if (!item->commit->parents)
4716                         break; /* root commit */
4717                 if (item->commit->parents->next)
4718                         break; /* merge commit */
4719                 parent_oid = &item->commit->parents->item->object.oid;
4720                 if (!oideq(parent_oid, output_oid))
4721                         break;
4722                 oidcpy(output_oid, &item->commit->object.oid);
4723         }
4724         if (i > 0) {
4725                 int offset = get_item_line_offset(&todo_list, i);
4726                 const char *done_path = rebase_path_done();
4727
4728                 fd = open(done_path, O_CREAT | O_WRONLY | O_APPEND, 0666);
4729                 if (fd < 0) {
4730                         error_errno(_("could not open '%s' for writing"),
4731                                     done_path);
4732                         todo_list_release(&todo_list);
4733                         return -1;
4734                 }
4735                 if (write_in_full(fd, todo_list.buf.buf, offset) < 0) {
4736                         error_errno(_("could not write to '%s'"), done_path);
4737                         todo_list_release(&todo_list);
4738                         close(fd);
4739                         return -1;
4740                 }
4741                 close(fd);
4742
4743                 if (rewrite_file(rebase_path_todo(), todo_list.buf.buf + offset,
4744                                  todo_list.buf.len - offset) < 0) {
4745                         todo_list_release(&todo_list);
4746                         return -1;
4747                 }
4748
4749                 todo_list.current = i;
4750                 if (is_fixup(peek_command(&todo_list, 0)))
4751                         record_in_rewritten(output_oid, peek_command(&todo_list, 0));
4752         }
4753
4754         todo_list_release(&todo_list);
4755
4756         return 0;
4757 }
4758
4759 int complete_action(struct replay_opts *opts, unsigned flags,
4760                     const char *shortrevisions, const char *onto_name,
4761                     const char *onto, const char *orig_head, const char *cmd,
4762                     unsigned autosquash)
4763 {
4764         const char *shortonto, *todo_file = rebase_path_todo();
4765         struct todo_list todo_list = TODO_LIST_INIT;
4766         struct strbuf *buf = &(todo_list.buf);
4767         struct object_id oid;
4768         struct stat st;
4769
4770         get_oid(onto, &oid);
4771         shortonto = find_unique_abbrev(&oid, DEFAULT_ABBREV);
4772
4773         if (!lstat(todo_file, &st) && st.st_size == 0 &&
4774             write_message("noop\n", 5, todo_file, 0))
4775                 return -1;
4776
4777         if (autosquash && rearrange_squash())
4778                 return -1;
4779
4780         if (cmd && *cmd)
4781                 sequencer_add_exec_commands(cmd);
4782
4783         if (strbuf_read_file(buf, todo_file, 0) < 0)
4784                 return error_errno(_("could not read '%s'."), todo_file);
4785
4786         if (parse_insn_buffer(buf->buf, &todo_list)) {
4787                 todo_list_release(&todo_list);
4788                 return error(_("unusable todo list: '%s'"), todo_file);
4789         }
4790
4791         if (count_commands(&todo_list) == 0) {
4792                 apply_autostash(opts);
4793                 sequencer_remove_state(opts);
4794                 todo_list_release(&todo_list);
4795
4796                 return error(_("nothing to do"));
4797         }
4798
4799         strbuf_addch(buf, '\n');
4800         strbuf_commented_addf(buf, Q_("Rebase %s onto %s (%d command)",
4801                                       "Rebase %s onto %s (%d commands)",
4802                                       count_commands(&todo_list)),
4803                               shortrevisions, shortonto, count_commands(&todo_list));
4804         append_todo_help(0, flags & TODO_LIST_KEEP_EMPTY, buf);
4805
4806         if (write_message(buf->buf, buf->len, todo_file, 0)) {
4807                 todo_list_release(&todo_list);
4808                 return -1;
4809         }
4810
4811         if (copy_file(rebase_path_todo_backup(), todo_file, 0666))
4812                 return error(_("could not copy '%s' to '%s'."), todo_file,
4813                              rebase_path_todo_backup());
4814
4815         if (transform_todos(flags | TODO_LIST_SHORTEN_IDS))
4816                 return error(_("could not transform the todo list"));
4817
4818         strbuf_reset(buf);
4819
4820         if (launch_sequence_editor(todo_file, buf, NULL)) {
4821                 apply_autostash(opts);
4822                 sequencer_remove_state(opts);
4823                 todo_list_release(&todo_list);
4824
4825                 return -1;
4826         }
4827
4828         strbuf_stripspace(buf, 1);
4829         if (buf->len == 0) {
4830                 apply_autostash(opts);
4831                 sequencer_remove_state(opts);
4832                 todo_list_release(&todo_list);
4833
4834                 return error(_("nothing to do"));
4835         }
4836
4837         todo_list_release(&todo_list);
4838
4839         if (check_todo_list()) {
4840                 checkout_onto(opts, onto_name, onto, orig_head);
4841                 return -1;
4842         }
4843
4844         if (transform_todos(flags & ~(TODO_LIST_SHORTEN_IDS)))
4845                 return error(_("could not transform the todo list"));
4846
4847         if (opts->allow_ff && skip_unnecessary_picks(&oid))
4848                 return error(_("could not skip unnecessary pick commands"));
4849
4850         if (checkout_onto(opts, onto_name, oid_to_hex(&oid), orig_head))
4851                 return -1;
4852 ;
4853         if (require_clean_work_tree("rebase", "", 1, 1))
4854                 return -1;
4855
4856         return sequencer_continue(opts);
4857 }
4858
4859 struct subject2item_entry {
4860         struct hashmap_entry entry;
4861         int i;
4862         char subject[FLEX_ARRAY];
4863 };
4864
4865 static int subject2item_cmp(const void *fndata,
4866                             const struct subject2item_entry *a,
4867                             const struct subject2item_entry *b, const void *key)
4868 {
4869         return key ? strcmp(a->subject, key) : strcmp(a->subject, b->subject);
4870 }
4871
4872 define_commit_slab(commit_todo_item, struct todo_item *);
4873
4874 /*
4875  * Rearrange the todo list that has both "pick commit-id msg" and "pick
4876  * commit-id fixup!/squash! msg" in it so that the latter is put immediately
4877  * after the former, and change "pick" to "fixup"/"squash".
4878  *
4879  * Note that if the config has specified a custom instruction format, each log
4880  * message will have to be retrieved from the commit (as the oneline in the
4881  * script cannot be trusted) in order to normalize the autosquash arrangement.
4882  */
4883 int rearrange_squash(void)
4884 {
4885         const char *todo_file = rebase_path_todo();
4886         struct todo_list todo_list = TODO_LIST_INIT;
4887         struct hashmap subject2item;
4888         int res = 0, rearranged = 0, *next, *tail, i;
4889         char **subjects;
4890         struct commit_todo_item commit_todo;
4891
4892         if (strbuf_read_file_or_whine(&todo_list.buf, todo_file) < 0)
4893                 return -1;
4894         if (parse_insn_buffer(todo_list.buf.buf, &todo_list) < 0) {
4895                 todo_list_release(&todo_list);
4896                 return -1;
4897         }
4898
4899         init_commit_todo_item(&commit_todo);
4900         /*
4901          * The hashmap maps onelines to the respective todo list index.
4902          *
4903          * If any items need to be rearranged, the next[i] value will indicate
4904          * which item was moved directly after the i'th.
4905          *
4906          * In that case, last[i] will indicate the index of the latest item to
4907          * be moved to appear after the i'th.
4908          */
4909         hashmap_init(&subject2item, (hashmap_cmp_fn) subject2item_cmp,
4910                      NULL, todo_list.nr);
4911         ALLOC_ARRAY(next, todo_list.nr);
4912         ALLOC_ARRAY(tail, todo_list.nr);
4913         ALLOC_ARRAY(subjects, todo_list.nr);
4914         for (i = 0; i < todo_list.nr; i++) {
4915                 struct strbuf buf = STRBUF_INIT;
4916                 struct todo_item *item = todo_list.items + i;
4917                 const char *commit_buffer, *subject, *p;
4918                 size_t subject_len;
4919                 int i2 = -1;
4920                 struct subject2item_entry *entry;
4921
4922                 next[i] = tail[i] = -1;
4923                 if (!item->commit || item->command == TODO_DROP) {
4924                         subjects[i] = NULL;
4925                         continue;
4926                 }
4927
4928                 if (is_fixup(item->command)) {
4929                         todo_list_release(&todo_list);
4930                         clear_commit_todo_item(&commit_todo);
4931                         return error(_("the script was already rearranged."));
4932                 }
4933
4934                 *commit_todo_item_at(&commit_todo, item->commit) = item;
4935
4936                 parse_commit(item->commit);
4937                 commit_buffer = get_commit_buffer(item->commit, NULL);
4938                 find_commit_subject(commit_buffer, &subject);
4939                 format_subject(&buf, subject, " ");
4940                 subject = subjects[i] = strbuf_detach(&buf, &subject_len);
4941                 unuse_commit_buffer(item->commit, commit_buffer);
4942                 if ((skip_prefix(subject, "fixup! ", &p) ||
4943                      skip_prefix(subject, "squash! ", &p))) {
4944                         struct commit *commit2;
4945
4946                         for (;;) {
4947                                 while (isspace(*p))
4948                                         p++;
4949                                 if (!skip_prefix(p, "fixup! ", &p) &&
4950                                     !skip_prefix(p, "squash! ", &p))
4951                                         break;
4952                         }
4953
4954                         if ((entry = hashmap_get_from_hash(&subject2item,
4955                                                            strhash(p), p)))
4956                                 /* found by title */
4957                                 i2 = entry->i;
4958                         else if (!strchr(p, ' ') &&
4959                                  (commit2 =
4960                                   lookup_commit_reference_by_name(p)) &&
4961                                  *commit_todo_item_at(&commit_todo, commit2))
4962                                 /* found by commit name */
4963                                 i2 = *commit_todo_item_at(&commit_todo, commit2)
4964                                         - todo_list.items;
4965                         else {
4966                                 /* copy can be a prefix of the commit subject */
4967                                 for (i2 = 0; i2 < i; i2++)
4968                                         if (subjects[i2] &&
4969                                             starts_with(subjects[i2], p))
4970                                                 break;
4971                                 if (i2 == i)
4972                                         i2 = -1;
4973                         }
4974                 }
4975                 if (i2 >= 0) {
4976                         rearranged = 1;
4977                         todo_list.items[i].command =
4978                                 starts_with(subject, "fixup!") ?
4979                                 TODO_FIXUP : TODO_SQUASH;
4980                         if (next[i2] < 0)
4981                                 next[i2] = i;
4982                         else
4983                                 next[tail[i2]] = i;
4984                         tail[i2] = i;
4985                 } else if (!hashmap_get_from_hash(&subject2item,
4986                                                 strhash(subject), subject)) {
4987                         FLEX_ALLOC_MEM(entry, subject, subject, subject_len);
4988                         entry->i = i;
4989                         hashmap_entry_init(entry, strhash(entry->subject));
4990                         hashmap_put(&subject2item, entry);
4991                 }
4992         }
4993
4994         if (rearranged) {
4995                 struct strbuf buf = STRBUF_INIT;
4996
4997                 for (i = 0; i < todo_list.nr; i++) {
4998                         enum todo_command command = todo_list.items[i].command;
4999                         int cur = i;
5000
5001                         /*
5002                          * Initially, all commands are 'pick's. If it is a
5003                          * fixup or a squash now, we have rearranged it.
5004                          */
5005                         if (is_fixup(command))
5006                                 continue;
5007
5008                         while (cur >= 0) {
5009                                 const char *bol =
5010                                         get_item_line(&todo_list, cur);
5011                                 const char *eol =
5012                                         get_item_line(&todo_list, cur + 1);
5013
5014                                 /* replace 'pick', by 'fixup' or 'squash' */
5015                                 command = todo_list.items[cur].command;
5016                                 if (is_fixup(command)) {
5017                                         strbuf_addstr(&buf,
5018                                                 todo_command_info[command].str);
5019                                         bol += strcspn(bol, " \t");
5020                                 }
5021
5022                                 strbuf_add(&buf, bol, eol - bol);
5023
5024                                 cur = next[cur];
5025                         }
5026                 }
5027
5028                 res = rewrite_file(todo_file, buf.buf, buf.len);
5029                 strbuf_release(&buf);
5030         }
5031
5032         free(next);
5033         free(tail);
5034         for (i = 0; i < todo_list.nr; i++)
5035                 free(subjects[i]);
5036         free(subjects);
5037         hashmap_free(&subject2item, 1);
5038         todo_list_release(&todo_list);
5039
5040         clear_commit_todo_item(&commit_todo);
5041         return res;
5042 }