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