rebase --rebase-merges: root commits can be cousins, too
[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 (opts->have_squash_onto &&
2874             !oidcmp(&head_commit->object.oid, &opts->squash_onto)) {
2875                 /*
2876                  * When the user tells us to "merge" something into a
2877                  * "[new root]", let's simply fast-forward to the merge head.
2878                  */
2879                 rollback_lock_file(&lock);
2880                 ret = fast_forward_to(&merge_commit->object.oid,
2881                                        &head_commit->object.oid, 0, opts);
2882                 goto leave_merge;
2883         }
2884
2885         if (commit) {
2886                 const char *message = get_commit_buffer(commit, NULL);
2887                 const char *body;
2888                 int len;
2889
2890                 if (!message) {
2891                         ret = error(_("could not get commit message of '%s'"),
2892                                     oid_to_hex(&commit->object.oid));
2893                         goto leave_merge;
2894                 }
2895                 write_author_script(message);
2896                 find_commit_subject(message, &body);
2897                 len = strlen(body);
2898                 ret = write_message(body, len, git_path_merge_msg(), 0);
2899                 unuse_commit_buffer(commit, message);
2900                 if (ret) {
2901                         error_errno(_("could not write '%s'"),
2902                                     git_path_merge_msg());
2903                         goto leave_merge;
2904                 }
2905         } else {
2906                 struct strbuf buf = STRBUF_INIT;
2907                 int len;
2908
2909                 strbuf_addf(&buf, "author %s", git_author_info(0));
2910                 write_author_script(buf.buf);
2911                 strbuf_reset(&buf);
2912
2913                 if (oneline_offset < arg_len) {
2914                         p = arg + oneline_offset;
2915                         len = arg_len - oneline_offset;
2916                 } else {
2917                         strbuf_addf(&buf, "Merge branch '%.*s'",
2918                                     merge_arg_len, arg);
2919                         p = buf.buf;
2920                         len = buf.len;
2921                 }
2922
2923                 ret = write_message(p, len, git_path_merge_msg(), 0);
2924                 strbuf_release(&buf);
2925                 if (ret) {
2926                         error_errno(_("could not write '%s'"),
2927                                     git_path_merge_msg());
2928                         goto leave_merge;
2929                 }
2930         }
2931
2932         /*
2933          * If HEAD is not identical to the first parent of the original merge
2934          * commit, we cannot fast-forward.
2935          */
2936         can_fast_forward = opts->allow_ff && commit && commit->parents &&
2937                 !oidcmp(&commit->parents->item->object.oid,
2938                         &head_commit->object.oid);
2939
2940         /*
2941          * If the merge head is different from the original one, we cannot
2942          * fast-forward.
2943          */
2944         if (can_fast_forward) {
2945                 struct commit_list *second_parent = commit->parents->next;
2946
2947                 if (second_parent && !second_parent->next &&
2948                     oidcmp(&merge_commit->object.oid,
2949                            &second_parent->item->object.oid))
2950                         can_fast_forward = 0;
2951         }
2952
2953         if (can_fast_forward && commit->parents->next &&
2954             !commit->parents->next->next &&
2955             !oidcmp(&commit->parents->next->item->object.oid,
2956                     &merge_commit->object.oid)) {
2957                 rollback_lock_file(&lock);
2958                 ret = fast_forward_to(&commit->object.oid,
2959                                       &head_commit->object.oid, 0, opts);
2960                 goto leave_merge;
2961         }
2962
2963         write_message(oid_to_hex(&merge_commit->object.oid), GIT_SHA1_HEXSZ,
2964                       git_path_merge_head(), 0);
2965         write_message("no-ff", 5, git_path_merge_mode(), 0);
2966
2967         bases = get_merge_bases(head_commit, merge_commit);
2968         if (bases && !oidcmp(&merge_commit->object.oid,
2969                              &bases->item->object.oid)) {
2970                 ret = 0;
2971                 /* skip merging an ancestor of HEAD */
2972                 goto leave_merge;
2973         }
2974
2975         for (j = bases; j; j = j->next)
2976                 commit_list_insert(j->item, &reversed);
2977         free_commit_list(bases);
2978
2979         read_cache();
2980         init_merge_options(&o);
2981         o.branch1 = "HEAD";
2982         o.branch2 = ref_name.buf;
2983         o.buffer_output = 2;
2984
2985         ret = merge_recursive(&o, head_commit, merge_commit, reversed, &i);
2986         if (ret <= 0)
2987                 fputs(o.obuf.buf, stdout);
2988         strbuf_release(&o.obuf);
2989         if (ret < 0) {
2990                 error(_("could not even attempt to merge '%.*s'"),
2991                       merge_arg_len, arg);
2992                 goto leave_merge;
2993         }
2994         /*
2995          * The return value of merge_recursive() is 1 on clean, and 0 on
2996          * unclean merge.
2997          *
2998          * Let's reverse that, so that do_merge() returns 0 upon success and
2999          * 1 upon failed merge (keeping the return value -1 for the cases where
3000          * we will want to reschedule the `merge` command).
3001          */
3002         ret = !ret;
3003
3004         if (active_cache_changed &&
3005             write_locked_index(&the_index, &lock, COMMIT_LOCK)) {
3006                 ret = error(_("merge: Unable to write new index file"));
3007                 goto leave_merge;
3008         }
3009
3010         rollback_lock_file(&lock);
3011         if (ret)
3012                 rerere(opts->allow_rerere_auto);
3013         else
3014                 /*
3015                  * In case of problems, we now want to return a positive
3016                  * value (a negative one would indicate that the `merge`
3017                  * command needs to be rescheduled).
3018                  */
3019                 ret = !!run_git_commit(git_path_merge_msg(), opts,
3020                                      run_commit_flags);
3021
3022 leave_merge:
3023         strbuf_release(&ref_name);
3024         rollback_lock_file(&lock);
3025         return ret;
3026 }
3027
3028 static int is_final_fixup(struct todo_list *todo_list)
3029 {
3030         int i = todo_list->current;
3031
3032         if (!is_fixup(todo_list->items[i].command))
3033                 return 0;
3034
3035         while (++i < todo_list->nr)
3036                 if (is_fixup(todo_list->items[i].command))
3037                         return 0;
3038                 else if (!is_noop(todo_list->items[i].command))
3039                         break;
3040         return 1;
3041 }
3042
3043 static enum todo_command peek_command(struct todo_list *todo_list, int offset)
3044 {
3045         int i;
3046
3047         for (i = todo_list->current + offset; i < todo_list->nr; i++)
3048                 if (!is_noop(todo_list->items[i].command))
3049                         return todo_list->items[i].command;
3050
3051         return -1;
3052 }
3053
3054 static int apply_autostash(struct replay_opts *opts)
3055 {
3056         struct strbuf stash_sha1 = STRBUF_INIT;
3057         struct child_process child = CHILD_PROCESS_INIT;
3058         int ret = 0;
3059
3060         if (!read_oneliner(&stash_sha1, rebase_path_autostash(), 1)) {
3061                 strbuf_release(&stash_sha1);
3062                 return 0;
3063         }
3064         strbuf_trim(&stash_sha1);
3065
3066         child.git_cmd = 1;
3067         child.no_stdout = 1;
3068         child.no_stderr = 1;
3069         argv_array_push(&child.args, "stash");
3070         argv_array_push(&child.args, "apply");
3071         argv_array_push(&child.args, stash_sha1.buf);
3072         if (!run_command(&child))
3073                 fprintf(stderr, _("Applied autostash.\n"));
3074         else {
3075                 struct child_process store = CHILD_PROCESS_INIT;
3076
3077                 store.git_cmd = 1;
3078                 argv_array_push(&store.args, "stash");
3079                 argv_array_push(&store.args, "store");
3080                 argv_array_push(&store.args, "-m");
3081                 argv_array_push(&store.args, "autostash");
3082                 argv_array_push(&store.args, "-q");
3083                 argv_array_push(&store.args, stash_sha1.buf);
3084                 if (run_command(&store))
3085                         ret = error(_("cannot store %s"), stash_sha1.buf);
3086                 else
3087                         fprintf(stderr,
3088                                 _("Applying autostash resulted in conflicts.\n"
3089                                   "Your changes are safe in the stash.\n"
3090                                   "You can run \"git stash pop\" or"
3091                                   " \"git stash drop\" at any time.\n"));
3092         }
3093
3094         strbuf_release(&stash_sha1);
3095         return ret;
3096 }
3097
3098 static const char *reflog_message(struct replay_opts *opts,
3099         const char *sub_action, const char *fmt, ...)
3100 {
3101         va_list ap;
3102         static struct strbuf buf = STRBUF_INIT;
3103
3104         va_start(ap, fmt);
3105         strbuf_reset(&buf);
3106         strbuf_addstr(&buf, action_name(opts));
3107         if (sub_action)
3108                 strbuf_addf(&buf, " (%s)", sub_action);
3109         if (fmt) {
3110                 strbuf_addstr(&buf, ": ");
3111                 strbuf_vaddf(&buf, fmt, ap);
3112         }
3113         va_end(ap);
3114
3115         return buf.buf;
3116 }
3117
3118 static const char rescheduled_advice[] =
3119 N_("Could not execute the todo command\n"
3120 "\n"
3121 "    %.*s"
3122 "\n"
3123 "It has been rescheduled; To edit the command before continuing, please\n"
3124 "edit the todo list first:\n"
3125 "\n"
3126 "    git rebase --edit-todo\n"
3127 "    git rebase --continue\n");
3128
3129 static int pick_commits(struct todo_list *todo_list, struct replay_opts *opts)
3130 {
3131         int res = 0, reschedule = 0;
3132
3133         setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
3134         if (opts->allow_ff)
3135                 assert(!(opts->signoff || opts->no_commit ||
3136                                 opts->record_origin || opts->edit));
3137         if (read_and_refresh_cache(opts))
3138                 return -1;
3139
3140         while (todo_list->current < todo_list->nr) {
3141                 struct todo_item *item = todo_list->items + todo_list->current;
3142                 if (save_todo(todo_list, opts))
3143                         return -1;
3144                 if (is_rebase_i(opts)) {
3145                         if (item->command != TODO_COMMENT) {
3146                                 FILE *f = fopen(rebase_path_msgnum(), "w");
3147
3148                                 todo_list->done_nr++;
3149
3150                                 if (f) {
3151                                         fprintf(f, "%d\n", todo_list->done_nr);
3152                                         fclose(f);
3153                                 }
3154                                 fprintf(stderr, "Rebasing (%d/%d)%s",
3155                                         todo_list->done_nr,
3156                                         todo_list->total_nr,
3157                                         opts->verbose ? "\n" : "\r");
3158                         }
3159                         unlink(rebase_path_message());
3160                         unlink(rebase_path_author_script());
3161                         unlink(rebase_path_stopped_sha());
3162                         unlink(rebase_path_amend());
3163                         delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
3164                 }
3165                 if (item->command <= TODO_SQUASH) {
3166                         if (is_rebase_i(opts))
3167                                 setenv("GIT_REFLOG_ACTION", reflog_message(opts,
3168                                         command_to_string(item->command), NULL),
3169                                         1);
3170                         res = do_pick_commit(item->command, item->commit,
3171                                         opts, is_final_fixup(todo_list));
3172                         if (is_rebase_i(opts) && res < 0) {
3173                                 /* Reschedule */
3174                                 advise(_(rescheduled_advice),
3175                                        get_item_line_length(todo_list,
3176                                                             todo_list->current),
3177                                        get_item_line(todo_list,
3178                                                      todo_list->current));
3179                                 todo_list->current--;
3180                                 if (save_todo(todo_list, opts))
3181                                         return -1;
3182                         }
3183                         if (item->command == TODO_EDIT) {
3184                                 struct commit *commit = item->commit;
3185                                 if (!res)
3186                                         fprintf(stderr,
3187                                                 _("Stopped at %s...  %.*s\n"),
3188                                                 short_commit_name(commit),
3189                                                 item->arg_len, item->arg);
3190                                 return error_with_patch(commit,
3191                                         item->arg, item->arg_len, opts, res,
3192                                         !res);
3193                         }
3194                         if (is_rebase_i(opts) && !res)
3195                                 record_in_rewritten(&item->commit->object.oid,
3196                                         peek_command(todo_list, 1));
3197                         if (res && is_fixup(item->command)) {
3198                                 if (res == 1)
3199                                         intend_to_amend();
3200                                 return error_failed_squash(item->commit, opts,
3201                                         item->arg_len, item->arg);
3202                         } else if (res && is_rebase_i(opts) && item->commit)
3203                                 return res | error_with_patch(item->commit,
3204                                         item->arg, item->arg_len, opts, res,
3205                                         item->command == TODO_REWORD);
3206                 } else if (item->command == TODO_EXEC) {
3207                         char *end_of_arg = (char *)(item->arg + item->arg_len);
3208                         int saved = *end_of_arg;
3209                         struct stat st;
3210
3211                         *end_of_arg = '\0';
3212                         res = do_exec(item->arg);
3213                         *end_of_arg = saved;
3214
3215                         /* Reread the todo file if it has changed. */
3216                         if (res)
3217                                 ; /* fall through */
3218                         else if (stat(get_todo_path(opts), &st))
3219                                 res = error_errno(_("could not stat '%s'"),
3220                                                   get_todo_path(opts));
3221                         else if (match_stat_data(&todo_list->stat, &st)) {
3222                                 todo_list_release(todo_list);
3223                                 if (read_populate_todo(todo_list, opts))
3224                                         res = -1; /* message was printed */
3225                                 /* `current` will be incremented below */
3226                                 todo_list->current = -1;
3227                         }
3228                 } else if (item->command == TODO_LABEL) {
3229                         if ((res = do_label(item->arg, item->arg_len)))
3230                                 reschedule = 1;
3231                 } else if (item->command == TODO_RESET) {
3232                         if ((res = do_reset(item->arg, item->arg_len, opts)))
3233                                 reschedule = 1;
3234                 } else if (item->command == TODO_MERGE) {
3235                         if ((res = do_merge(item->commit,
3236                                             item->arg, item->arg_len,
3237                                             item->flags, opts)) < 0)
3238                                 reschedule = 1;
3239                         else if (item->commit)
3240                                 record_in_rewritten(&item->commit->object.oid,
3241                                                     peek_command(todo_list, 1));
3242                         if (res > 0)
3243                                 /* failed with merge conflicts */
3244                                 return error_with_patch(item->commit,
3245                                                         item->arg,
3246                                                         item->arg_len, opts,
3247                                                         res, 0);
3248                 } else if (!is_noop(item->command))
3249                         return error(_("unknown command %d"), item->command);
3250
3251                 if (reschedule) {
3252                         advise(_(rescheduled_advice),
3253                                get_item_line_length(todo_list,
3254                                                     todo_list->current),
3255                                get_item_line(todo_list, todo_list->current));
3256                         todo_list->current--;
3257                         if (save_todo(todo_list, opts))
3258                                 return -1;
3259                         if (item->commit)
3260                                 return error_with_patch(item->commit,
3261                                                         item->arg,
3262                                                         item->arg_len, opts,
3263                                                         res, 0);
3264                 }
3265
3266                 todo_list->current++;
3267                 if (res)
3268                         return res;
3269         }
3270
3271         if (is_rebase_i(opts)) {
3272                 struct strbuf head_ref = STRBUF_INIT, buf = STRBUF_INIT;
3273                 struct stat st;
3274
3275                 /* Stopped in the middle, as planned? */
3276                 if (todo_list->current < todo_list->nr)
3277                         return 0;
3278
3279                 if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
3280                                 starts_with(head_ref.buf, "refs/")) {
3281                         const char *msg;
3282                         struct object_id head, orig;
3283                         int res;
3284
3285                         if (get_oid("HEAD", &head)) {
3286                                 res = error(_("cannot read HEAD"));
3287 cleanup_head_ref:
3288                                 strbuf_release(&head_ref);
3289                                 strbuf_release(&buf);
3290                                 return res;
3291                         }
3292                         if (!read_oneliner(&buf, rebase_path_orig_head(), 0) ||
3293                                         get_oid_hex(buf.buf, &orig)) {
3294                                 res = error(_("could not read orig-head"));
3295                                 goto cleanup_head_ref;
3296                         }
3297                         strbuf_reset(&buf);
3298                         if (!read_oneliner(&buf, rebase_path_onto(), 0)) {
3299                                 res = error(_("could not read 'onto'"));
3300                                 goto cleanup_head_ref;
3301                         }
3302                         msg = reflog_message(opts, "finish", "%s onto %s",
3303                                 head_ref.buf, buf.buf);
3304                         if (update_ref(msg, head_ref.buf, &head, &orig,
3305                                        REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR)) {
3306                                 res = error(_("could not update %s"),
3307                                         head_ref.buf);
3308                                 goto cleanup_head_ref;
3309                         }
3310                         msg = reflog_message(opts, "finish", "returning to %s",
3311                                 head_ref.buf);
3312                         if (create_symref("HEAD", head_ref.buf, msg)) {
3313                                 res = error(_("could not update HEAD to %s"),
3314                                         head_ref.buf);
3315                                 goto cleanup_head_ref;
3316                         }
3317                         strbuf_reset(&buf);
3318                 }
3319
3320                 if (opts->verbose) {
3321                         struct rev_info log_tree_opt;
3322                         struct object_id orig, head;
3323
3324                         memset(&log_tree_opt, 0, sizeof(log_tree_opt));
3325                         init_revisions(&log_tree_opt, NULL);
3326                         log_tree_opt.diff = 1;
3327                         log_tree_opt.diffopt.output_format =
3328                                 DIFF_FORMAT_DIFFSTAT;
3329                         log_tree_opt.disable_stdin = 1;
3330
3331                         if (read_oneliner(&buf, rebase_path_orig_head(), 0) &&
3332                             !get_oid(buf.buf, &orig) &&
3333                             !get_oid("HEAD", &head)) {
3334                                 diff_tree_oid(&orig, &head, "",
3335                                               &log_tree_opt.diffopt);
3336                                 log_tree_diff_flush(&log_tree_opt);
3337                         }
3338                 }
3339                 flush_rewritten_pending();
3340                 if (!stat(rebase_path_rewritten_list(), &st) &&
3341                                 st.st_size > 0) {
3342                         struct child_process child = CHILD_PROCESS_INIT;
3343                         const char *post_rewrite_hook =
3344                                 find_hook("post-rewrite");
3345
3346                         child.in = open(rebase_path_rewritten_list(), O_RDONLY);
3347                         child.git_cmd = 1;
3348                         argv_array_push(&child.args, "notes");
3349                         argv_array_push(&child.args, "copy");
3350                         argv_array_push(&child.args, "--for-rewrite=rebase");
3351                         /* we don't care if this copying failed */
3352                         run_command(&child);
3353
3354                         if (post_rewrite_hook) {
3355                                 struct child_process hook = CHILD_PROCESS_INIT;
3356
3357                                 hook.in = open(rebase_path_rewritten_list(),
3358                                         O_RDONLY);
3359                                 hook.stdout_to_stderr = 1;
3360                                 argv_array_push(&hook.args, post_rewrite_hook);
3361                                 argv_array_push(&hook.args, "rebase");
3362                                 /* we don't care if this hook failed */
3363                                 run_command(&hook);
3364                         }
3365                 }
3366                 apply_autostash(opts);
3367
3368                 fprintf(stderr, "Successfully rebased and updated %s.\n",
3369                         head_ref.buf);
3370
3371                 strbuf_release(&buf);
3372                 strbuf_release(&head_ref);
3373         }
3374
3375         /*
3376          * Sequence of picks finished successfully; cleanup by
3377          * removing the .git/sequencer directory
3378          */
3379         return sequencer_remove_state(opts);
3380 }
3381
3382 static int continue_single_pick(void)
3383 {
3384         const char *argv[] = { "commit", NULL };
3385
3386         if (!file_exists(git_path_cherry_pick_head()) &&
3387             !file_exists(git_path_revert_head()))
3388                 return error(_("no cherry-pick or revert in progress"));
3389         return run_command_v_opt(argv, RUN_GIT_CMD);
3390 }
3391
3392 static int commit_staged_changes(struct replay_opts *opts)
3393 {
3394         unsigned int flags = ALLOW_EMPTY | EDIT_MSG;
3395
3396         if (has_unstaged_changes(1))
3397                 return error(_("cannot rebase: You have unstaged changes."));
3398         if (!has_uncommitted_changes(0)) {
3399                 const char *cherry_pick_head = git_path_cherry_pick_head();
3400
3401                 if (file_exists(cherry_pick_head) && unlink(cherry_pick_head))
3402                         return error(_("could not remove CHERRY_PICK_HEAD"));
3403                 return 0;
3404         }
3405
3406         if (file_exists(rebase_path_amend())) {
3407                 struct strbuf rev = STRBUF_INIT;
3408                 struct object_id head, to_amend;
3409
3410                 if (get_oid("HEAD", &head))
3411                         return error(_("cannot amend non-existing commit"));
3412                 if (!read_oneliner(&rev, rebase_path_amend(), 0))
3413                         return error(_("invalid file: '%s'"), rebase_path_amend());
3414                 if (get_oid_hex(rev.buf, &to_amend))
3415                         return error(_("invalid contents: '%s'"),
3416                                 rebase_path_amend());
3417                 if (oidcmp(&head, &to_amend))
3418                         return error(_("\nYou have uncommitted changes in your "
3419                                        "working tree. Please, commit them\n"
3420                                        "first and then run 'git rebase "
3421                                        "--continue' again."));
3422
3423                 strbuf_release(&rev);
3424                 flags |= AMEND_MSG;
3425         }
3426
3427         if (run_git_commit(rebase_path_message(), opts, flags))
3428                 return error(_("could not commit staged changes."));
3429         unlink(rebase_path_amend());
3430         return 0;
3431 }
3432
3433 int sequencer_continue(struct replay_opts *opts)
3434 {
3435         struct todo_list todo_list = TODO_LIST_INIT;
3436         int res;
3437
3438         if (read_and_refresh_cache(opts))
3439                 return -1;
3440
3441         if (is_rebase_i(opts)) {
3442                 if (commit_staged_changes(opts))
3443                         return -1;
3444         } else if (!file_exists(get_todo_path(opts)))
3445                 return continue_single_pick();
3446         if (read_populate_opts(opts))
3447                 return -1;
3448         if ((res = read_populate_todo(&todo_list, opts)))
3449                 goto release_todo_list;
3450
3451         if (!is_rebase_i(opts)) {
3452                 /* Verify that the conflict has been resolved */
3453                 if (file_exists(git_path_cherry_pick_head()) ||
3454                     file_exists(git_path_revert_head())) {
3455                         res = continue_single_pick();
3456                         if (res)
3457                                 goto release_todo_list;
3458                 }
3459                 if (index_differs_from("HEAD", NULL, 0)) {
3460                         res = error_dirty_index(opts);
3461                         goto release_todo_list;
3462                 }
3463                 todo_list.current++;
3464         } else if (file_exists(rebase_path_stopped_sha())) {
3465                 struct strbuf buf = STRBUF_INIT;
3466                 struct object_id oid;
3467
3468                 if (read_oneliner(&buf, rebase_path_stopped_sha(), 1) &&
3469                     !get_oid_committish(buf.buf, &oid))
3470                         record_in_rewritten(&oid, peek_command(&todo_list, 0));
3471                 strbuf_release(&buf);
3472         }
3473
3474         res = pick_commits(&todo_list, opts);
3475 release_todo_list:
3476         todo_list_release(&todo_list);
3477         return res;
3478 }
3479
3480 static int single_pick(struct commit *cmit, struct replay_opts *opts)
3481 {
3482         setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
3483         return do_pick_commit(opts->action == REPLAY_PICK ?
3484                 TODO_PICK : TODO_REVERT, cmit, opts, 0);
3485 }
3486
3487 int sequencer_pick_revisions(struct replay_opts *opts)
3488 {
3489         struct todo_list todo_list = TODO_LIST_INIT;
3490         struct object_id oid;
3491         int i, res;
3492
3493         assert(opts->revs);
3494         if (read_and_refresh_cache(opts))
3495                 return -1;
3496
3497         for (i = 0; i < opts->revs->pending.nr; i++) {
3498                 struct object_id oid;
3499                 const char *name = opts->revs->pending.objects[i].name;
3500
3501                 /* This happens when using --stdin. */
3502                 if (!strlen(name))
3503                         continue;
3504
3505                 if (!get_oid(name, &oid)) {
3506                         if (!lookup_commit_reference_gently(&oid, 1)) {
3507                                 enum object_type type = oid_object_info(&oid,
3508                                                                         NULL);
3509                                 return error(_("%s: can't cherry-pick a %s"),
3510                                         name, type_name(type));
3511                         }
3512                 } else
3513                         return error(_("%s: bad revision"), name);
3514         }
3515
3516         /*
3517          * If we were called as "git cherry-pick <commit>", just
3518          * cherry-pick/revert it, set CHERRY_PICK_HEAD /
3519          * REVERT_HEAD, and don't touch the sequencer state.
3520          * This means it is possible to cherry-pick in the middle
3521          * of a cherry-pick sequence.
3522          */
3523         if (opts->revs->cmdline.nr == 1 &&
3524             opts->revs->cmdline.rev->whence == REV_CMD_REV &&
3525             opts->revs->no_walk &&
3526             !opts->revs->cmdline.rev->flags) {
3527                 struct commit *cmit;
3528                 if (prepare_revision_walk(opts->revs))
3529                         return error(_("revision walk setup failed"));
3530                 cmit = get_revision(opts->revs);
3531                 if (!cmit || get_revision(opts->revs))
3532                         return error("BUG: expected exactly one commit from walk");
3533                 return single_pick(cmit, opts);
3534         }
3535
3536         /*
3537          * Start a new cherry-pick/ revert sequence; but
3538          * first, make sure that an existing one isn't in
3539          * progress
3540          */
3541
3542         if (walk_revs_populate_todo(&todo_list, opts) ||
3543                         create_seq_dir() < 0)
3544                 return -1;
3545         if (get_oid("HEAD", &oid) && (opts->action == REPLAY_REVERT))
3546                 return error(_("can't revert as initial commit"));
3547         if (save_head(oid_to_hex(&oid)))
3548                 return -1;
3549         if (save_opts(opts))
3550                 return -1;
3551         update_abort_safety_file();
3552         res = pick_commits(&todo_list, opts);
3553         todo_list_release(&todo_list);
3554         return res;
3555 }
3556
3557 void append_signoff(struct strbuf *msgbuf, int ignore_footer, unsigned flag)
3558 {
3559         unsigned no_dup_sob = flag & APPEND_SIGNOFF_DEDUP;
3560         struct strbuf sob = STRBUF_INIT;
3561         int has_footer;
3562
3563         strbuf_addstr(&sob, sign_off_header);
3564         strbuf_addstr(&sob, fmt_name(getenv("GIT_COMMITTER_NAME"),
3565                                 getenv("GIT_COMMITTER_EMAIL")));
3566         strbuf_addch(&sob, '\n');
3567
3568         if (!ignore_footer)
3569                 strbuf_complete_line(msgbuf);
3570
3571         /*
3572          * If the whole message buffer is equal to the sob, pretend that we
3573          * found a conforming footer with a matching sob
3574          */
3575         if (msgbuf->len - ignore_footer == sob.len &&
3576             !strncmp(msgbuf->buf, sob.buf, sob.len))
3577                 has_footer = 3;
3578         else
3579                 has_footer = has_conforming_footer(msgbuf, &sob, ignore_footer);
3580
3581         if (!has_footer) {
3582                 const char *append_newlines = NULL;
3583                 size_t len = msgbuf->len - ignore_footer;
3584
3585                 if (!len) {
3586                         /*
3587                          * The buffer is completely empty.  Leave foom for
3588                          * the title and body to be filled in by the user.
3589                          */
3590                         append_newlines = "\n\n";
3591                 } else if (len == 1) {
3592                         /*
3593                          * Buffer contains a single newline.  Add another
3594                          * so that we leave room for the title and body.
3595                          */
3596                         append_newlines = "\n";
3597                 } else if (msgbuf->buf[len - 2] != '\n') {
3598                         /*
3599                          * Buffer ends with a single newline.  Add another
3600                          * so that there is an empty line between the message
3601                          * body and the sob.
3602                          */
3603                         append_newlines = "\n";
3604                 } /* else, the buffer already ends with two newlines. */
3605
3606                 if (append_newlines)
3607                         strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
3608                                 append_newlines, strlen(append_newlines));
3609         }
3610
3611         if (has_footer != 3 && (!no_dup_sob || has_footer != 2))
3612                 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
3613                                 sob.buf, sob.len);
3614
3615         strbuf_release(&sob);
3616 }
3617
3618 struct labels_entry {
3619         struct hashmap_entry entry;
3620         char label[FLEX_ARRAY];
3621 };
3622
3623 static int labels_cmp(const void *fndata, const struct labels_entry *a,
3624                       const struct labels_entry *b, const void *key)
3625 {
3626         return key ? strcmp(a->label, key) : strcmp(a->label, b->label);
3627 }
3628
3629 struct string_entry {
3630         struct oidmap_entry entry;
3631         char string[FLEX_ARRAY];
3632 };
3633
3634 struct label_state {
3635         struct oidmap commit2label;
3636         struct hashmap labels;
3637         struct strbuf buf;
3638 };
3639
3640 static const char *label_oid(struct object_id *oid, const char *label,
3641                              struct label_state *state)
3642 {
3643         struct labels_entry *labels_entry;
3644         struct string_entry *string_entry;
3645         struct object_id dummy;
3646         size_t len;
3647         int i;
3648
3649         string_entry = oidmap_get(&state->commit2label, oid);
3650         if (string_entry)
3651                 return string_entry->string;
3652
3653         /*
3654          * For "uninteresting" commits, i.e. commits that are not to be
3655          * rebased, and which can therefore not be labeled, we use a unique
3656          * abbreviation of the commit name. This is slightly more complicated
3657          * than calling find_unique_abbrev() because we also need to make
3658          * sure that the abbreviation does not conflict with any other
3659          * label.
3660          *
3661          * We disallow "interesting" commits to be labeled by a string that
3662          * is a valid full-length hash, to ensure that we always can find an
3663          * abbreviation for any uninteresting commit's names that does not
3664          * clash with any other label.
3665          */
3666         if (!label) {
3667                 char *p;
3668
3669                 strbuf_reset(&state->buf);
3670                 strbuf_grow(&state->buf, GIT_SHA1_HEXSZ);
3671                 label = p = state->buf.buf;
3672
3673                 find_unique_abbrev_r(p, oid, default_abbrev);
3674
3675                 /*
3676                  * We may need to extend the abbreviated hash so that there is
3677                  * no conflicting label.
3678                  */
3679                 if (hashmap_get_from_hash(&state->labels, strihash(p), p)) {
3680                         size_t i = strlen(p) + 1;
3681
3682                         oid_to_hex_r(p, oid);
3683                         for (; i < GIT_SHA1_HEXSZ; i++) {
3684                                 char save = p[i];
3685                                 p[i] = '\0';
3686                                 if (!hashmap_get_from_hash(&state->labels,
3687                                                            strihash(p), p))
3688                                         break;
3689                                 p[i] = save;
3690                         }
3691                 }
3692         } else if (((len = strlen(label)) == GIT_SHA1_RAWSZ &&
3693                     !get_oid_hex(label, &dummy)) ||
3694                    (len == 1 && *label == '#') ||
3695                    hashmap_get_from_hash(&state->labels,
3696                                          strihash(label), label)) {
3697                 /*
3698                  * If the label already exists, or if the label is a valid full
3699                  * OID, or the label is a '#' (which we use as a separator
3700                  * between merge heads and oneline), we append a dash and a
3701                  * number to make it unique.
3702                  */
3703                 struct strbuf *buf = &state->buf;
3704
3705                 strbuf_reset(buf);
3706                 strbuf_add(buf, label, len);
3707
3708                 for (i = 2; ; i++) {
3709                         strbuf_setlen(buf, len);
3710                         strbuf_addf(buf, "-%d", i);
3711                         if (!hashmap_get_from_hash(&state->labels,
3712                                                    strihash(buf->buf),
3713                                                    buf->buf))
3714                                 break;
3715                 }
3716
3717                 label = buf->buf;
3718         }
3719
3720         FLEX_ALLOC_STR(labels_entry, label, label);
3721         hashmap_entry_init(labels_entry, strihash(label));
3722         hashmap_add(&state->labels, labels_entry);
3723
3724         FLEX_ALLOC_STR(string_entry, string, label);
3725         oidcpy(&string_entry->entry.oid, oid);
3726         oidmap_put(&state->commit2label, string_entry);
3727
3728         return string_entry->string;
3729 }
3730
3731 static int make_script_with_merges(struct pretty_print_context *pp,
3732                                    struct rev_info *revs, FILE *out,
3733                                    unsigned flags)
3734 {
3735         int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
3736         int rebase_cousins = flags & TODO_LIST_REBASE_COUSINS;
3737         struct strbuf buf = STRBUF_INIT, oneline = STRBUF_INIT;
3738         struct strbuf label = STRBUF_INIT;
3739         struct commit_list *commits = NULL, **tail = &commits, *iter;
3740         struct commit_list *tips = NULL, **tips_tail = &tips;
3741         struct commit *commit;
3742         struct oidmap commit2todo = OIDMAP_INIT;
3743         struct string_entry *entry;
3744         struct oidset interesting = OIDSET_INIT, child_seen = OIDSET_INIT,
3745                 shown = OIDSET_INIT;
3746         struct label_state state = { OIDMAP_INIT, { NULL }, STRBUF_INIT };
3747
3748         int abbr = flags & TODO_LIST_ABBREVIATE_CMDS;
3749         const char *cmd_pick = abbr ? "p" : "pick",
3750                 *cmd_label = abbr ? "l" : "label",
3751                 *cmd_reset = abbr ? "t" : "reset",
3752                 *cmd_merge = abbr ? "m" : "merge";
3753
3754         oidmap_init(&commit2todo, 0);
3755         oidmap_init(&state.commit2label, 0);
3756         hashmap_init(&state.labels, (hashmap_cmp_fn) labels_cmp, NULL, 0);
3757         strbuf_init(&state.buf, 32);
3758
3759         if (revs->cmdline.nr && (revs->cmdline.rev[0].flags & BOTTOM)) {
3760                 struct object_id *oid = &revs->cmdline.rev[0].item->oid;
3761                 FLEX_ALLOC_STR(entry, string, "onto");
3762                 oidcpy(&entry->entry.oid, oid);
3763                 oidmap_put(&state.commit2label, entry);
3764         }
3765
3766         /*
3767          * First phase:
3768          * - get onelines for all commits
3769          * - gather all branch tips (i.e. 2nd or later parents of merges)
3770          * - label all branch tips
3771          */
3772         while ((commit = get_revision(revs))) {
3773                 struct commit_list *to_merge;
3774                 int is_octopus;
3775                 const char *p1, *p2;
3776                 struct object_id *oid;
3777                 int is_empty;
3778
3779                 tail = &commit_list_insert(commit, tail)->next;
3780                 oidset_insert(&interesting, &commit->object.oid);
3781
3782                 is_empty = is_original_commit_empty(commit);
3783                 if (!is_empty && (commit->object.flags & PATCHSAME))
3784                         continue;
3785
3786                 strbuf_reset(&oneline);
3787                 pretty_print_commit(pp, commit, &oneline);
3788
3789                 to_merge = commit->parents ? commit->parents->next : NULL;
3790                 if (!to_merge) {
3791                         /* non-merge commit: easy case */
3792                         strbuf_reset(&buf);
3793                         if (!keep_empty && is_empty)
3794                                 strbuf_addf(&buf, "%c ", comment_line_char);
3795                         strbuf_addf(&buf, "%s %s %s", cmd_pick,
3796                                     oid_to_hex(&commit->object.oid),
3797                                     oneline.buf);
3798
3799                         FLEX_ALLOC_STR(entry, string, buf.buf);
3800                         oidcpy(&entry->entry.oid, &commit->object.oid);
3801                         oidmap_put(&commit2todo, entry);
3802
3803                         continue;
3804                 }
3805
3806                 is_octopus = to_merge && to_merge->next;
3807
3808                 if (is_octopus)
3809                         BUG("Octopus merges not yet supported");
3810
3811                 /* Create a label */
3812                 strbuf_reset(&label);
3813                 if (skip_prefix(oneline.buf, "Merge ", &p1) &&
3814                     (p1 = strchr(p1, '\'')) &&
3815                     (p2 = strchr(++p1, '\'')))
3816                         strbuf_add(&label, p1, p2 - p1);
3817                 else if (skip_prefix(oneline.buf, "Merge pull request ",
3818                                      &p1) &&
3819                          (p1 = strstr(p1, " from ")))
3820                         strbuf_addstr(&label, p1 + strlen(" from "));
3821                 else
3822                         strbuf_addbuf(&label, &oneline);
3823
3824                 for (p1 = label.buf; *p1; p1++)
3825                         if (isspace(*p1))
3826                                 *(char *)p1 = '-';
3827
3828                 strbuf_reset(&buf);
3829                 strbuf_addf(&buf, "%s -C %s",
3830                             cmd_merge, oid_to_hex(&commit->object.oid));
3831
3832                 /* label the tip of merged branch */
3833                 oid = &to_merge->item->object.oid;
3834                 strbuf_addch(&buf, ' ');
3835
3836                 if (!oidset_contains(&interesting, oid))
3837                         strbuf_addstr(&buf, label_oid(oid, NULL, &state));
3838                 else {
3839                         tips_tail = &commit_list_insert(to_merge->item,
3840                                                         tips_tail)->next;
3841
3842                         strbuf_addstr(&buf, label_oid(oid, label.buf, &state));
3843                 }
3844                 strbuf_addf(&buf, " # %s", oneline.buf);
3845
3846                 FLEX_ALLOC_STR(entry, string, buf.buf);
3847                 oidcpy(&entry->entry.oid, &commit->object.oid);
3848                 oidmap_put(&commit2todo, entry);
3849         }
3850
3851         /*
3852          * Second phase:
3853          * - label branch points
3854          * - add HEAD to the branch tips
3855          */
3856         for (iter = commits; iter; iter = iter->next) {
3857                 struct commit_list *parent = iter->item->parents;
3858                 for (; parent; parent = parent->next) {
3859                         struct object_id *oid = &parent->item->object.oid;
3860                         if (!oidset_contains(&interesting, oid))
3861                                 continue;
3862                         if (!oidset_contains(&child_seen, oid))
3863                                 oidset_insert(&child_seen, oid);
3864                         else
3865                                 label_oid(oid, "branch-point", &state);
3866                 }
3867
3868                 /* Add HEAD as implict "tip of branch" */
3869                 if (!iter->next)
3870                         tips_tail = &commit_list_insert(iter->item,
3871                                                         tips_tail)->next;
3872         }
3873
3874         /*
3875          * Third phase: output the todo list. This is a bit tricky, as we
3876          * want to avoid jumping back and forth between revisions. To
3877          * accomplish that goal, we walk backwards from the branch tips,
3878          * gathering commits not yet shown, reversing the list on the fly,
3879          * then outputting that list (labeling revisions as needed).
3880          */
3881         fprintf(out, "%s onto\n", cmd_label);
3882         for (iter = tips; iter; iter = iter->next) {
3883                 struct commit_list *list = NULL, *iter2;
3884
3885                 commit = iter->item;
3886                 if (oidset_contains(&shown, &commit->object.oid))
3887                         continue;
3888                 entry = oidmap_get(&state.commit2label, &commit->object.oid);
3889
3890                 if (entry)
3891                         fprintf(out, "\n# Branch %s\n", entry->string);
3892                 else
3893                         fprintf(out, "\n");
3894
3895                 while (oidset_contains(&interesting, &commit->object.oid) &&
3896                        !oidset_contains(&shown, &commit->object.oid)) {
3897                         commit_list_insert(commit, &list);
3898                         if (!commit->parents) {
3899                                 commit = NULL;
3900                                 break;
3901                         }
3902                         commit = commit->parents->item;
3903                 }
3904
3905                 if (!commit)
3906                         fprintf(out, "%s %s\n", cmd_reset,
3907                                 rebase_cousins ? "onto" : "[new root]");
3908                 else {
3909                         const char *to = NULL;
3910
3911                         entry = oidmap_get(&state.commit2label,
3912                                            &commit->object.oid);
3913                         if (entry)
3914                                 to = entry->string;
3915                         else if (!rebase_cousins)
3916                                 to = label_oid(&commit->object.oid, NULL,
3917                                                &state);
3918
3919                         if (!to || !strcmp(to, "onto"))
3920                                 fprintf(out, "%s onto\n", cmd_reset);
3921                         else {
3922                                 strbuf_reset(&oneline);
3923                                 pretty_print_commit(pp, commit, &oneline);
3924                                 fprintf(out, "%s %s # %s\n",
3925                                         cmd_reset, to, oneline.buf);
3926                         }
3927                 }
3928
3929                 for (iter2 = list; iter2; iter2 = iter2->next) {
3930                         struct object_id *oid = &iter2->item->object.oid;
3931                         entry = oidmap_get(&commit2todo, oid);
3932                         /* only show if not already upstream */
3933                         if (entry)
3934                                 fprintf(out, "%s\n", entry->string);
3935                         entry = oidmap_get(&state.commit2label, oid);
3936                         if (entry)
3937                                 fprintf(out, "%s %s\n",
3938                                         cmd_label, entry->string);
3939                         oidset_insert(&shown, oid);
3940                 }
3941
3942                 free_commit_list(list);
3943         }
3944
3945         free_commit_list(commits);
3946         free_commit_list(tips);
3947
3948         strbuf_release(&label);
3949         strbuf_release(&oneline);
3950         strbuf_release(&buf);
3951
3952         oidmap_free(&commit2todo, 1);
3953         oidmap_free(&state.commit2label, 1);
3954         hashmap_free(&state.labels, 1);
3955         strbuf_release(&state.buf);
3956
3957         return 0;
3958 }
3959
3960 int sequencer_make_script(FILE *out, int argc, const char **argv,
3961                           unsigned flags)
3962 {
3963         char *format = NULL;
3964         struct pretty_print_context pp = {0};
3965         struct strbuf buf = STRBUF_INIT;
3966         struct rev_info revs;
3967         struct commit *commit;
3968         int keep_empty = flags & TODO_LIST_KEEP_EMPTY;
3969         const char *insn = flags & TODO_LIST_ABBREVIATE_CMDS ? "p" : "pick";
3970         int rebase_merges = flags & TODO_LIST_REBASE_MERGES;
3971
3972         init_revisions(&revs, NULL);
3973         revs.verbose_header = 1;
3974         if (!rebase_merges)
3975                 revs.max_parents = 1;
3976         revs.cherry_mark = 1;
3977         revs.limited = 1;
3978         revs.reverse = 1;
3979         revs.right_only = 1;
3980         revs.sort_order = REV_SORT_IN_GRAPH_ORDER;
3981         revs.topo_order = 1;
3982
3983         revs.pretty_given = 1;
3984         git_config_get_string("rebase.instructionFormat", &format);
3985         if (!format || !*format) {
3986                 free(format);
3987                 format = xstrdup("%s");
3988         }
3989         get_commit_format(format, &revs);
3990         free(format);
3991         pp.fmt = revs.commit_format;
3992         pp.output_encoding = get_log_output_encoding();
3993
3994         if (setup_revisions(argc, argv, &revs, NULL) > 1)
3995                 return error(_("make_script: unhandled options"));
3996
3997         if (prepare_revision_walk(&revs) < 0)
3998                 return error(_("make_script: error preparing revisions"));
3999
4000         if (rebase_merges)
4001                 return make_script_with_merges(&pp, &revs, out, flags);
4002
4003         while ((commit = get_revision(&revs))) {
4004                 int is_empty  = is_original_commit_empty(commit);
4005
4006                 if (!is_empty && (commit->object.flags & PATCHSAME))
4007                         continue;
4008                 strbuf_reset(&buf);
4009                 if (!keep_empty && is_empty)
4010                         strbuf_addf(&buf, "%c ", comment_line_char);
4011                 strbuf_addf(&buf, "%s %s ", insn,
4012                             oid_to_hex(&commit->object.oid));
4013                 pretty_print_commit(&pp, commit, &buf);
4014                 strbuf_addch(&buf, '\n');
4015                 fputs(buf.buf, out);
4016         }
4017         strbuf_release(&buf);
4018         return 0;
4019 }
4020
4021 /*
4022  * Add commands after pick and (series of) squash/fixup commands
4023  * in the todo list.
4024  */
4025 int sequencer_add_exec_commands(const char *commands)
4026 {
4027         const char *todo_file = rebase_path_todo();
4028         struct todo_list todo_list = TODO_LIST_INIT;
4029         struct todo_item *item;
4030         struct strbuf *buf = &todo_list.buf;
4031         size_t offset = 0, commands_len = strlen(commands);
4032         int i, first;
4033
4034         if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0)
4035                 return error(_("could not read '%s'."), todo_file);
4036
4037         if (parse_insn_buffer(todo_list.buf.buf, &todo_list)) {
4038                 todo_list_release(&todo_list);
4039                 return error(_("unusable todo list: '%s'"), todo_file);
4040         }
4041
4042         first = 1;
4043         /* insert <commands> before every pick except the first one */
4044         for (item = todo_list.items, i = 0; i < todo_list.nr; i++, item++) {
4045                 if (item->command == TODO_PICK && !first) {
4046                         strbuf_insert(buf, item->offset_in_buf + offset,
4047                                       commands, commands_len);
4048                         offset += commands_len;
4049                 }
4050                 first = 0;
4051         }
4052
4053         /* append final <commands> */
4054         strbuf_add(buf, commands, commands_len);
4055
4056         i = write_message(buf->buf, buf->len, todo_file, 0);
4057         todo_list_release(&todo_list);
4058         return i;
4059 }
4060
4061 int transform_todos(unsigned flags)
4062 {
4063         const char *todo_file = rebase_path_todo();
4064         struct todo_list todo_list = TODO_LIST_INIT;
4065         struct strbuf buf = STRBUF_INIT;
4066         struct todo_item *item;
4067         int i;
4068
4069         if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0)
4070                 return error(_("could not read '%s'."), todo_file);
4071
4072         if (parse_insn_buffer(todo_list.buf.buf, &todo_list)) {
4073                 todo_list_release(&todo_list);
4074                 return error(_("unusable todo list: '%s'"), todo_file);
4075         }
4076
4077         for (item = todo_list.items, i = 0; i < todo_list.nr; i++, item++) {
4078                 /* if the item is not a command write it and continue */
4079                 if (item->command >= TODO_COMMENT) {
4080                         strbuf_addf(&buf, "%.*s\n", item->arg_len, item->arg);
4081                         continue;
4082                 }
4083
4084                 /* add command to the buffer */
4085                 if (flags & TODO_LIST_ABBREVIATE_CMDS)
4086                         strbuf_addch(&buf, command_to_char(item->command));
4087                 else
4088                         strbuf_addstr(&buf, command_to_string(item->command));
4089
4090                 /* add commit id */
4091                 if (item->commit) {
4092                         const char *oid = flags & TODO_LIST_SHORTEN_IDS ?
4093                                           short_commit_name(item->commit) :
4094                                           oid_to_hex(&item->commit->object.oid);
4095
4096                         if (item->command == TODO_MERGE) {
4097                                 if (item->flags & TODO_EDIT_MERGE_MSG)
4098                                         strbuf_addstr(&buf, " -c");
4099                                 else
4100                                         strbuf_addstr(&buf, " -C");
4101                         }
4102
4103                         strbuf_addf(&buf, " %s", oid);
4104                 }
4105
4106                 /* add all the rest */
4107                 if (!item->arg_len)
4108                         strbuf_addch(&buf, '\n');
4109                 else
4110                         strbuf_addf(&buf, " %.*s\n", item->arg_len, item->arg);
4111         }
4112
4113         i = write_message(buf.buf, buf.len, todo_file, 0);
4114         todo_list_release(&todo_list);
4115         return i;
4116 }
4117
4118 enum check_level {
4119         CHECK_IGNORE = 0, CHECK_WARN, CHECK_ERROR
4120 };
4121
4122 static enum check_level get_missing_commit_check_level(void)
4123 {
4124         const char *value;
4125
4126         if (git_config_get_value("rebase.missingcommitscheck", &value) ||
4127                         !strcasecmp("ignore", value))
4128                 return CHECK_IGNORE;
4129         if (!strcasecmp("warn", value))
4130                 return CHECK_WARN;
4131         if (!strcasecmp("error", value))
4132                 return CHECK_ERROR;
4133         warning(_("unrecognized setting %s for option "
4134                   "rebase.missingCommitsCheck. Ignoring."), value);
4135         return CHECK_IGNORE;
4136 }
4137
4138 /*
4139  * Check if the user dropped some commits by mistake
4140  * Behaviour determined by rebase.missingCommitsCheck.
4141  * Check if there is an unrecognized command or a
4142  * bad SHA-1 in a command.
4143  */
4144 int check_todo_list(void)
4145 {
4146         enum check_level check_level = get_missing_commit_check_level();
4147         struct strbuf todo_file = STRBUF_INIT;
4148         struct todo_list todo_list = TODO_LIST_INIT;
4149         struct strbuf missing = STRBUF_INIT;
4150         int advise_to_edit_todo = 0, res = 0, i;
4151
4152         strbuf_addstr(&todo_file, rebase_path_todo());
4153         if (strbuf_read_file_or_whine(&todo_list.buf, todo_file.buf) < 0) {
4154                 res = -1;
4155                 goto leave_check;
4156         }
4157         advise_to_edit_todo = res =
4158                 parse_insn_buffer(todo_list.buf.buf, &todo_list);
4159
4160         if (res || check_level == CHECK_IGNORE)
4161                 goto leave_check;
4162
4163         /* Mark the commits in git-rebase-todo as seen */
4164         for (i = 0; i < todo_list.nr; i++) {
4165                 struct commit *commit = todo_list.items[i].commit;
4166                 if (commit)
4167                         commit->util = (void *)1;
4168         }
4169
4170         todo_list_release(&todo_list);
4171         strbuf_addstr(&todo_file, ".backup");
4172         if (strbuf_read_file_or_whine(&todo_list.buf, todo_file.buf) < 0) {
4173                 res = -1;
4174                 goto leave_check;
4175         }
4176         strbuf_release(&todo_file);
4177         res = !!parse_insn_buffer(todo_list.buf.buf, &todo_list);
4178
4179         /* Find commits in git-rebase-todo.backup yet unseen */
4180         for (i = todo_list.nr - 1; i >= 0; i--) {
4181                 struct todo_item *item = todo_list.items + i;
4182                 struct commit *commit = item->commit;
4183                 if (commit && !commit->util) {
4184                         strbuf_addf(&missing, " - %s %.*s\n",
4185                                     short_commit_name(commit),
4186                                     item->arg_len, item->arg);
4187                         commit->util = (void *)1;
4188                 }
4189         }
4190
4191         /* Warn about missing commits */
4192         if (!missing.len)
4193                 goto leave_check;
4194
4195         if (check_level == CHECK_ERROR)
4196                 advise_to_edit_todo = res = 1;
4197
4198         fprintf(stderr,
4199                 _("Warning: some commits may have been dropped accidentally.\n"
4200                 "Dropped commits (newer to older):\n"));
4201
4202         /* Make the list user-friendly and display */
4203         fputs(missing.buf, stderr);
4204         strbuf_release(&missing);
4205
4206         fprintf(stderr, _("To avoid this message, use \"drop\" to "
4207                 "explicitly remove a commit.\n\n"
4208                 "Use 'git config rebase.missingCommitsCheck' to change "
4209                 "the level of warnings.\n"
4210                 "The possible behaviours are: ignore, warn, error.\n\n"));
4211
4212 leave_check:
4213         strbuf_release(&todo_file);
4214         todo_list_release(&todo_list);
4215
4216         if (advise_to_edit_todo)
4217                 fprintf(stderr,
4218                         _("You can fix this with 'git rebase --edit-todo' "
4219                           "and then run 'git rebase --continue'.\n"
4220                           "Or you can abort the rebase with 'git rebase"
4221                           " --abort'.\n"));
4222
4223         return res;
4224 }
4225
4226 static int rewrite_file(const char *path, const char *buf, size_t len)
4227 {
4228         int rc = 0;
4229         int fd = open(path, O_WRONLY | O_TRUNC);
4230         if (fd < 0)
4231                 return error_errno(_("could not open '%s' for writing"), path);
4232         if (write_in_full(fd, buf, len) < 0)
4233                 rc = error_errno(_("could not write to '%s'"), path);
4234         if (close(fd) && !rc)
4235                 rc = error_errno(_("could not close '%s'"), path);
4236         return rc;
4237 }
4238
4239 /* skip picking commits whose parents are unchanged */
4240 int skip_unnecessary_picks(void)
4241 {
4242         const char *todo_file = rebase_path_todo();
4243         struct strbuf buf = STRBUF_INIT;
4244         struct todo_list todo_list = TODO_LIST_INIT;
4245         struct object_id onto_oid, *oid = &onto_oid, *parent_oid;
4246         int fd, i;
4247
4248         if (!read_oneliner(&buf, rebase_path_onto(), 0))
4249                 return error(_("could not read 'onto'"));
4250         if (get_oid(buf.buf, &onto_oid)) {
4251                 strbuf_release(&buf);
4252                 return error(_("need a HEAD to fixup"));
4253         }
4254         strbuf_release(&buf);
4255
4256         if (strbuf_read_file_or_whine(&todo_list.buf, todo_file) < 0)
4257                 return -1;
4258         if (parse_insn_buffer(todo_list.buf.buf, &todo_list) < 0) {
4259                 todo_list_release(&todo_list);
4260                 return -1;
4261         }
4262
4263         for (i = 0; i < todo_list.nr; i++) {
4264                 struct todo_item *item = todo_list.items + i;
4265
4266                 if (item->command >= TODO_NOOP)
4267                         continue;
4268                 if (item->command != TODO_PICK)
4269                         break;
4270                 if (parse_commit(item->commit)) {
4271                         todo_list_release(&todo_list);
4272                         return error(_("could not parse commit '%s'"),
4273                                 oid_to_hex(&item->commit->object.oid));
4274                 }
4275                 if (!item->commit->parents)
4276                         break; /* root commit */
4277                 if (item->commit->parents->next)
4278                         break; /* merge commit */
4279                 parent_oid = &item->commit->parents->item->object.oid;
4280                 if (hashcmp(parent_oid->hash, oid->hash))
4281                         break;
4282                 oid = &item->commit->object.oid;
4283         }
4284         if (i > 0) {
4285                 int offset = get_item_line_offset(&todo_list, i);
4286                 const char *done_path = rebase_path_done();
4287
4288                 fd = open(done_path, O_CREAT | O_WRONLY | O_APPEND, 0666);
4289                 if (fd < 0) {
4290                         error_errno(_("could not open '%s' for writing"),
4291                                     done_path);
4292                         todo_list_release(&todo_list);
4293                         return -1;
4294                 }
4295                 if (write_in_full(fd, todo_list.buf.buf, offset) < 0) {
4296                         error_errno(_("could not write to '%s'"), done_path);
4297                         todo_list_release(&todo_list);
4298                         close(fd);
4299                         return -1;
4300                 }
4301                 close(fd);
4302
4303                 if (rewrite_file(rebase_path_todo(), todo_list.buf.buf + offset,
4304                                  todo_list.buf.len - offset) < 0) {
4305                         todo_list_release(&todo_list);
4306                         return -1;
4307                 }
4308
4309                 todo_list.current = i;
4310                 if (is_fixup(peek_command(&todo_list, 0)))
4311                         record_in_rewritten(oid, peek_command(&todo_list, 0));
4312         }
4313
4314         todo_list_release(&todo_list);
4315         printf("%s\n", oid_to_hex(oid));
4316
4317         return 0;
4318 }
4319
4320 struct subject2item_entry {
4321         struct hashmap_entry entry;
4322         int i;
4323         char subject[FLEX_ARRAY];
4324 };
4325
4326 static int subject2item_cmp(const void *fndata,
4327                             const struct subject2item_entry *a,
4328                             const struct subject2item_entry *b, const void *key)
4329 {
4330         return key ? strcmp(a->subject, key) : strcmp(a->subject, b->subject);
4331 }
4332
4333 /*
4334  * Rearrange the todo list that has both "pick commit-id msg" and "pick
4335  * commit-id fixup!/squash! msg" in it so that the latter is put immediately
4336  * after the former, and change "pick" to "fixup"/"squash".
4337  *
4338  * Note that if the config has specified a custom instruction format, each log
4339  * message will have to be retrieved from the commit (as the oneline in the
4340  * script cannot be trusted) in order to normalize the autosquash arrangement.
4341  */
4342 int rearrange_squash(void)
4343 {
4344         const char *todo_file = rebase_path_todo();
4345         struct todo_list todo_list = TODO_LIST_INIT;
4346         struct hashmap subject2item;
4347         int res = 0, rearranged = 0, *next, *tail, i;
4348         char **subjects;
4349
4350         if (strbuf_read_file_or_whine(&todo_list.buf, todo_file) < 0)
4351                 return -1;
4352         if (parse_insn_buffer(todo_list.buf.buf, &todo_list) < 0) {
4353                 todo_list_release(&todo_list);
4354                 return -1;
4355         }
4356
4357         /*
4358          * The hashmap maps onelines to the respective todo list index.
4359          *
4360          * If any items need to be rearranged, the next[i] value will indicate
4361          * which item was moved directly after the i'th.
4362          *
4363          * In that case, last[i] will indicate the index of the latest item to
4364          * be moved to appear after the i'th.
4365          */
4366         hashmap_init(&subject2item, (hashmap_cmp_fn) subject2item_cmp,
4367                      NULL, todo_list.nr);
4368         ALLOC_ARRAY(next, todo_list.nr);
4369         ALLOC_ARRAY(tail, todo_list.nr);
4370         ALLOC_ARRAY(subjects, todo_list.nr);
4371         for (i = 0; i < todo_list.nr; i++) {
4372                 struct strbuf buf = STRBUF_INIT;
4373                 struct todo_item *item = todo_list.items + i;
4374                 const char *commit_buffer, *subject, *p;
4375                 size_t subject_len;
4376                 int i2 = -1;
4377                 struct subject2item_entry *entry;
4378
4379                 next[i] = tail[i] = -1;
4380                 if (!item->commit || item->command == TODO_DROP) {
4381                         subjects[i] = NULL;
4382                         continue;
4383                 }
4384
4385                 if (is_fixup(item->command)) {
4386                         todo_list_release(&todo_list);
4387                         return error(_("the script was already rearranged."));
4388                 }
4389
4390                 item->commit->util = item;
4391
4392                 parse_commit(item->commit);
4393                 commit_buffer = get_commit_buffer(item->commit, NULL);
4394                 find_commit_subject(commit_buffer, &subject);
4395                 format_subject(&buf, subject, " ");
4396                 subject = subjects[i] = strbuf_detach(&buf, &subject_len);
4397                 unuse_commit_buffer(item->commit, commit_buffer);
4398                 if ((skip_prefix(subject, "fixup! ", &p) ||
4399                      skip_prefix(subject, "squash! ", &p))) {
4400                         struct commit *commit2;
4401
4402                         for (;;) {
4403                                 while (isspace(*p))
4404                                         p++;
4405                                 if (!skip_prefix(p, "fixup! ", &p) &&
4406                                     !skip_prefix(p, "squash! ", &p))
4407                                         break;
4408                         }
4409
4410                         if ((entry = hashmap_get_from_hash(&subject2item,
4411                                                            strhash(p), p)))
4412                                 /* found by title */
4413                                 i2 = entry->i;
4414                         else if (!strchr(p, ' ') &&
4415                                  (commit2 =
4416                                   lookup_commit_reference_by_name(p)) &&
4417                                  commit2->util)
4418                                 /* found by commit name */
4419                                 i2 = (struct todo_item *)commit2->util
4420                                         - todo_list.items;
4421                         else {
4422                                 /* copy can be a prefix of the commit subject */
4423                                 for (i2 = 0; i2 < i; i2++)
4424                                         if (subjects[i2] &&
4425                                             starts_with(subjects[i2], p))
4426                                                 break;
4427                                 if (i2 == i)
4428                                         i2 = -1;
4429                         }
4430                 }
4431                 if (i2 >= 0) {
4432                         rearranged = 1;
4433                         todo_list.items[i].command =
4434                                 starts_with(subject, "fixup!") ?
4435                                 TODO_FIXUP : TODO_SQUASH;
4436                         if (next[i2] < 0)
4437                                 next[i2] = i;
4438                         else
4439                                 next[tail[i2]] = i;
4440                         tail[i2] = i;
4441                 } else if (!hashmap_get_from_hash(&subject2item,
4442                                                 strhash(subject), subject)) {
4443                         FLEX_ALLOC_MEM(entry, subject, subject, subject_len);
4444                         entry->i = i;
4445                         hashmap_entry_init(entry, strhash(entry->subject));
4446                         hashmap_put(&subject2item, entry);
4447                 }
4448         }
4449
4450         if (rearranged) {
4451                 struct strbuf buf = STRBUF_INIT;
4452
4453                 for (i = 0; i < todo_list.nr; i++) {
4454                         enum todo_command command = todo_list.items[i].command;
4455                         int cur = i;
4456
4457                         /*
4458                          * Initially, all commands are 'pick's. If it is a
4459                          * fixup or a squash now, we have rearranged it.
4460                          */
4461                         if (is_fixup(command))
4462                                 continue;
4463
4464                         while (cur >= 0) {
4465                                 const char *bol =
4466                                         get_item_line(&todo_list, cur);
4467                                 const char *eol =
4468                                         get_item_line(&todo_list, cur + 1);
4469
4470                                 /* replace 'pick', by 'fixup' or 'squash' */
4471                                 command = todo_list.items[cur].command;
4472                                 if (is_fixup(command)) {
4473                                         strbuf_addstr(&buf,
4474                                                 todo_command_info[command].str);
4475                                         bol += strcspn(bol, " \t");
4476                                 }
4477
4478                                 strbuf_add(&buf, bol, eol - bol);
4479
4480                                 cur = next[cur];
4481                         }
4482                 }
4483
4484                 res = rewrite_file(todo_file, buf.buf, buf.len);
4485                 strbuf_release(&buf);
4486         }
4487
4488         free(next);
4489         free(tail);
4490         for (i = 0; i < todo_list.nr; i++)
4491                 free(subjects[i]);
4492         free(subjects);
4493         hashmap_free(&subject2item, 1);
4494         todo_list_release(&todo_list);
4495
4496         return res;
4497 }