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