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