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