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