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