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