4 * Copyright (c) 2007 Kristian Høgsberg <krh@redhat.com>
5 * Based on git-commit.sh by Junio C Hamano and Linus Torvalds
9 #include "cache-tree.h"
17 #include "wt-status.h"
18 #include "run-command.h"
23 #include "parse-options.h"
24 #include "string-list.h"
26 #include "unpack-trees.h"
28 #include "submodule.h"
29 #include "gpg-interface.h"
31 #include "sequencer.h"
32 #include "notes-utils.h"
36 static const char * const builtin_commit_usage[] = {
37 N_("git commit [options] [--] <pathspec>..."),
41 static const char * const builtin_status_usage[] = {
42 N_("git status [options] [--] <pathspec>..."),
46 static const char implicit_ident_advice[] =
47 N_("Your name and email address were configured automatically based\n"
48 "on your username and hostname. Please check that they are accurate.\n"
49 "You can suppress this message by setting them explicitly:\n"
51 " git config --global user.name \"Your Name\"\n"
52 " git config --global user.email you@example.com\n"
54 "After doing this, you may fix the identity used for this commit with:\n"
56 " git commit --amend --reset-author\n");
58 static const char empty_amend_advice[] =
59 N_("You asked to amend the most recent commit, but doing so would make\n"
60 "it empty. You can repeat your command with --allow-empty, or you can\n"
61 "remove the commit entirely with \"git reset HEAD^\".\n");
63 static const char empty_cherry_pick_advice[] =
64 N_("The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
65 "If you wish to commit it anyway, use:\n"
67 " git commit --allow-empty\n"
70 static const char empty_cherry_pick_advice_single[] =
71 N_("Otherwise, please use 'git reset'\n");
73 static const char empty_cherry_pick_advice_multi[] =
74 N_("If you wish to skip this commit, use:\n"
78 "Then \"git cherry-pick --continue\" will resume cherry-picking\n"
79 "the remaining commits.\n");
81 static const char *use_message_buffer;
82 static const char commit_editmsg[] = "COMMIT_EDITMSG";
83 static struct lock_file index_lock; /* real index */
84 static struct lock_file false_lock; /* used only for partial commits */
91 static const char *logfile, *force_author;
92 static const char *template_file;
94 * The _message variables are commit names from which to take
95 * the commit message and/or authorship.
97 static const char *author_message, *author_message_buffer;
98 static char *edit_message, *use_message;
99 static char *fixup_message, *squash_message;
100 static int all, also, interactive, patch_interactive, only, amend, signoff;
101 static int edit_flag = -1; /* unspecified */
102 static int quiet, verbose, no_verify, allow_empty, dry_run, renew_authorship;
103 static int no_post_rewrite, allow_empty_message;
104 static char *untracked_files_arg, *force_date, *ignore_submodule_arg;
105 static char *sign_commit;
108 * The default commit message cleanup mode will remove the lines
109 * beginning with # (shell comments) and leading and trailing
110 * whitespaces (empty lines or containing only whitespaces)
111 * if editor is used, and only the whitespaces if the message
112 * is specified explicitly.
120 static const char *cleanup_arg;
122 static enum commit_whence whence;
123 static int sequencer_in_use;
124 static int use_editor = 1, include_status = 1;
125 static int show_ignored_in_status, have_option_m;
126 static const char *only_include_assumed;
127 static struct strbuf message = STRBUF_INIT;
129 static enum status_format {
130 STATUS_FORMAT_NONE = 0,
133 STATUS_FORMAT_PORCELAIN,
135 STATUS_FORMAT_UNSPECIFIED
136 } status_format = STATUS_FORMAT_UNSPECIFIED;
138 static int opt_parse_m(const struct option *opt, const char *arg, int unset)
140 struct strbuf *buf = opt->value;
143 strbuf_setlen(buf, 0);
147 strbuf_addch(buf, '\n');
148 strbuf_addstr(buf, arg);
149 strbuf_complete_line(buf);
154 static void determine_whence(struct wt_status *s)
156 if (file_exists(git_path("MERGE_HEAD")))
158 else if (file_exists(git_path("CHERRY_PICK_HEAD"))) {
159 whence = FROM_CHERRY_PICK;
160 if (file_exists(git_path("sequencer")))
161 sequencer_in_use = 1;
164 whence = FROM_COMMIT;
169 static void status_init_config(struct wt_status *s, config_fn_t fn)
171 wt_status_prepare(s);
175 s->hints = advice_status_hints; /* must come after git_config() */
178 static void rollback_index_files(void)
180 switch (commit_style) {
182 break; /* nothing to do */
184 rollback_lock_file(&index_lock);
187 rollback_lock_file(&index_lock);
188 rollback_lock_file(&false_lock);
193 static int commit_index_files(void)
197 switch (commit_style) {
199 break; /* nothing to do */
201 err = commit_lock_file(&index_lock);
204 err = commit_lock_file(&index_lock);
205 rollback_lock_file(&false_lock);
213 * Take a union of paths in the index and the named tree (typically, "HEAD"),
214 * and return the paths that match the given pattern in list.
216 static int list_paths(struct string_list *list, const char *with_tree,
217 const char *prefix, const struct pathspec *pattern)
225 m = xcalloc(1, pattern->nr);
228 char *max_prefix = common_prefix(pattern);
229 overlay_tree_on_cache(with_tree, max_prefix ? max_prefix : prefix);
233 for (i = 0; i < active_nr; i++) {
234 const struct cache_entry *ce = active_cache[i];
235 struct string_list_item *item;
237 if (ce->ce_flags & CE_UPDATE)
239 if (!ce_path_match(ce, pattern, m))
241 item = string_list_insert(list, ce->name);
242 if (ce_skip_worktree(ce))
243 item->util = item; /* better a valid pointer than a fake one */
246 return report_path_error(m, pattern, prefix);
249 static void add_remove_files(struct string_list *list)
252 for (i = 0; i < list->nr; i++) {
254 struct string_list_item *p = &(list->items[i]);
256 /* p->util is skip-worktree */
260 if (!lstat(p->string, &st)) {
261 if (add_to_cache(p->string, &st, 0))
262 die(_("updating files failed"));
264 remove_file_from_cache(p->string);
268 static void create_base_index(const struct commit *current_head)
271 struct unpack_trees_options opts;
279 memset(&opts, 0, sizeof(opts));
283 opts.src_index = &the_index;
284 opts.dst_index = &the_index;
286 opts.fn = oneway_merge;
287 tree = parse_tree_indirect(current_head->object.sha1);
289 die(_("failed to unpack HEAD tree object"));
291 init_tree_desc(&t, tree->buffer, tree->size);
292 if (unpack_trees(1, &t, &opts))
293 exit(128); /* We've already reported the error, finish dying */
296 static void refresh_cache_or_die(int refresh_flags)
299 * refresh_flags contains REFRESH_QUIET, so the only errors
300 * are for unmerged entries.
302 if (refresh_cache(refresh_flags | REFRESH_IN_PORCELAIN))
303 die_resolve_conflict("commit");
306 static char *prepare_index(int argc, const char **argv, const char *prefix,
307 const struct commit *current_head, int is_status)
310 struct string_list partial;
311 struct pathspec pathspec;
312 int refresh_flags = REFRESH_QUIET;
315 refresh_flags |= REFRESH_UNMERGED;
316 parse_pathspec(&pathspec, 0,
317 PATHSPEC_PREFER_FULL,
320 if (read_cache_preload(&pathspec) < 0)
321 die(_("index file corrupt"));
324 char *old_index_env = NULL;
325 fd = hold_locked_index(&index_lock, 1);
327 refresh_cache_or_die(refresh_flags);
329 if (write_cache(fd, active_cache, active_nr) ||
330 close_lock_file(&index_lock))
331 die(_("unable to create temporary index"));
333 old_index_env = getenv(INDEX_ENVIRONMENT);
334 setenv(INDEX_ENVIRONMENT, index_lock.filename, 1);
336 if (interactive_add(argc, argv, prefix, patch_interactive) != 0)
337 die(_("interactive add failed"));
339 if (old_index_env && *old_index_env)
340 setenv(INDEX_ENVIRONMENT, old_index_env, 1);
342 unsetenv(INDEX_ENVIRONMENT);
345 read_cache_from(index_lock.filename);
347 commit_style = COMMIT_NORMAL;
348 return index_lock.filename;
352 * Non partial, non as-is commit.
354 * (1) get the real index;
355 * (2) update the_index as necessary;
356 * (3) write the_index out to the real index (still locked);
357 * (4) return the name of the locked index file.
359 * The caller should run hooks on the locked real index, and
360 * (A) if all goes well, commit the real index;
361 * (B) on failure, rollback the real index.
363 if (all || (also && pathspec.nr)) {
364 fd = hold_locked_index(&index_lock, 1);
365 add_files_to_cache(also ? prefix : NULL, &pathspec, 0);
366 refresh_cache_or_die(refresh_flags);
367 update_main_cache_tree(WRITE_TREE_SILENT);
368 if (write_cache(fd, active_cache, active_nr) ||
369 close_lock_file(&index_lock))
370 die(_("unable to write new_index file"));
371 commit_style = COMMIT_NORMAL;
372 return index_lock.filename;
378 * (1) return the name of the real index file.
380 * The caller should run hooks on the real index,
381 * and create commit from the_index.
382 * We still need to refresh the index here.
384 if (!only && !pathspec.nr) {
385 fd = hold_locked_index(&index_lock, 1);
386 refresh_cache_or_die(refresh_flags);
387 if (active_cache_changed) {
388 update_main_cache_tree(WRITE_TREE_SILENT);
389 if (write_cache(fd, active_cache, active_nr) ||
390 commit_locked_index(&index_lock))
391 die(_("unable to write new_index file"));
393 rollback_lock_file(&index_lock);
395 commit_style = COMMIT_AS_IS;
396 return get_index_file();
402 * (0) find the set of affected paths;
403 * (1) get lock on the real index file;
404 * (2) update the_index with the given paths;
405 * (3) write the_index out to the real index (still locked);
406 * (4) get lock on the false index file;
407 * (5) reset the_index from HEAD;
408 * (6) update the_index the same way as (2);
409 * (7) write the_index out to the false index file;
410 * (8) return the name of the false index file (still locked);
412 * The caller should run hooks on the locked false index, and
413 * create commit from it. Then
414 * (A) if all goes well, commit the real index;
415 * (B) on failure, rollback the real index;
416 * In either case, rollback the false index.
418 commit_style = COMMIT_PARTIAL;
420 if (whence != FROM_COMMIT) {
421 if (whence == FROM_MERGE)
422 die(_("cannot do a partial commit during a merge."));
423 else if (whence == FROM_CHERRY_PICK)
424 die(_("cannot do a partial commit during a cherry-pick."));
427 memset(&partial, 0, sizeof(partial));
428 partial.strdup_strings = 1;
429 if (list_paths(&partial, !current_head ? NULL : "HEAD", prefix, &pathspec))
433 if (read_cache() < 0)
434 die(_("cannot read the index"));
436 fd = hold_locked_index(&index_lock, 1);
437 add_remove_files(&partial);
438 refresh_cache(REFRESH_QUIET);
439 if (write_cache(fd, active_cache, active_nr) ||
440 close_lock_file(&index_lock))
441 die(_("unable to write new_index file"));
443 fd = hold_lock_file_for_update(&false_lock,
444 git_path("next-index-%"PRIuMAX,
445 (uintmax_t) getpid()),
448 create_base_index(current_head);
449 add_remove_files(&partial);
450 refresh_cache(REFRESH_QUIET);
452 if (write_cache(fd, active_cache, active_nr) ||
453 close_lock_file(&false_lock))
454 die(_("unable to write temporary index file"));
457 read_cache_from(false_lock.filename);
459 return false_lock.filename;
462 static int run_status(FILE *fp, const char *index_file, const char *prefix, int nowarn,
465 unsigned char sha1[20];
467 if (s->relative_paths)
472 s->reference = "HEAD^1";
474 s->verbose = verbose;
475 s->index_file = index_file;
478 s->is_initial = get_sha1(s->reference, sha1) ? 1 : 0;
480 wt_status_collect(s);
482 switch (status_format) {
483 case STATUS_FORMAT_SHORT:
484 wt_shortstatus_print(s);
486 case STATUS_FORMAT_PORCELAIN:
487 wt_porcelain_print(s);
489 case STATUS_FORMAT_UNSPECIFIED:
490 die("BUG: finalize_deferred_config() should have been called");
492 case STATUS_FORMAT_NONE:
493 case STATUS_FORMAT_LONG:
498 return s->commitable;
501 static int is_a_merge(const struct commit *current_head)
503 return !!(current_head->parents && current_head->parents->next);
506 static void export_one(const char *var, const char *s, const char *e, int hack)
508 struct strbuf buf = STRBUF_INIT;
510 strbuf_addch(&buf, hack);
511 strbuf_addf(&buf, "%.*s", (int)(e - s), s);
512 setenv(var, buf.buf, 1);
513 strbuf_release(&buf);
516 static int sane_ident_split(struct ident_split *person)
518 if (!person->name_begin || !person->name_end ||
519 person->name_begin == person->name_end)
520 return 0; /* no human readable name */
521 if (!person->mail_begin || !person->mail_end ||
522 person->mail_begin == person->mail_end)
523 return 0; /* no usable mail */
524 if (!person->date_begin || !person->date_end ||
525 !person->tz_begin || !person->tz_end)
530 static void determine_author_info(struct strbuf *author_ident)
532 char *name, *email, *date;
533 struct ident_split author;
535 name = getenv("GIT_AUTHOR_NAME");
536 email = getenv("GIT_AUTHOR_EMAIL");
537 date = getenv("GIT_AUTHOR_DATE");
539 if (author_message) {
540 const char *a, *lb, *rb, *eol;
543 a = strstr(author_message_buffer, "\nauthor ");
545 die(_("invalid commit: %s"), author_message);
547 lb = strchrnul(a + strlen("\nauthor "), '<');
548 rb = strchrnul(lb, '>');
549 eol = strchrnul(rb, '\n');
550 if (!*lb || !*rb || !*eol)
551 die(_("invalid commit: %s"), author_message);
553 if (lb == a + strlen("\nauthor "))
554 /* \nauthor <foo@example.com> */
555 name = xcalloc(1, 1);
557 name = xmemdupz(a + strlen("\nauthor "),
559 (a + strlen("\nauthor "))));
560 email = xmemdupz(lb + strlen("<"), rb - (lb + strlen("<")));
561 len = eol - (rb + strlen("> "));
562 date = xmalloc(len + 2);
564 memcpy(date + 1, rb + strlen("> "), len);
565 date[len + 1] = '\0';
569 const char *lb = strstr(force_author, " <");
570 const char *rb = strchr(force_author, '>');
573 die(_("malformed --author parameter"));
574 name = xstrndup(force_author, lb - force_author);
575 email = xstrndup(lb + 2, rb - (lb + 2));
580 strbuf_addstr(author_ident, fmt_ident(name, email, date, IDENT_STRICT));
581 if (!split_ident_line(&author, author_ident->buf, author_ident->len) &&
582 sane_ident_split(&author)) {
583 export_one("GIT_AUTHOR_NAME", author.name_begin, author.name_end, 0);
584 export_one("GIT_AUTHOR_EMAIL", author.mail_begin, author.mail_end, 0);
585 export_one("GIT_AUTHOR_DATE", author.date_begin, author.tz_end, '@');
589 static char *cut_ident_timestamp_part(char *string)
591 char *ket = strrchr(string, '>');
592 if (!ket || ket[1] != ' ')
593 die(_("Malformed ident string: '%s'"), string);
598 static int prepare_to_commit(const char *index_file, const char *prefix,
599 struct commit *current_head,
601 struct strbuf *author_ident)
604 struct strbuf committer_ident = STRBUF_INIT;
606 struct strbuf sb = STRBUF_INIT;
607 const char *hook_arg1 = NULL;
608 const char *hook_arg2 = NULL;
609 int clean_message_contents = (cleanup_mode != CLEANUP_NONE);
610 int old_display_comment_prefix;
612 /* This checks and barfs if author is badly specified */
613 determine_author_info(author_ident);
615 if (!no_verify && run_commit_hook(use_editor, index_file, "pre-commit", NULL))
618 if (squash_message) {
620 * Insert the proper subject line before other commit
621 * message options add their content.
623 if (use_message && !strcmp(use_message, squash_message))
624 strbuf_addstr(&sb, "squash! ");
626 struct pretty_print_context ctx = {0};
628 c = lookup_commit_reference_by_name(squash_message);
630 die(_("could not lookup commit %s"), squash_message);
631 ctx.output_encoding = get_commit_output_encoding();
632 format_commit_message(c, "squash! %s\n\n", &sb,
638 strbuf_addbuf(&sb, &message);
639 hook_arg1 = "message";
640 } else if (logfile && !strcmp(logfile, "-")) {
642 fprintf(stderr, _("(reading log message from standard input)\n"));
643 if (strbuf_read(&sb, 0, 0) < 0)
644 die_errno(_("could not read log from standard input"));
645 hook_arg1 = "message";
646 } else if (logfile) {
647 if (strbuf_read_file(&sb, logfile, 0) < 0)
648 die_errno(_("could not read log file '%s'"),
650 hook_arg1 = "message";
651 } else if (use_message) {
653 buffer = strstr(use_message_buffer, "\n\n");
654 if (!use_editor && (!buffer || buffer[2] == '\0'))
655 die(_("commit has empty message"));
656 strbuf_add(&sb, buffer + 2, strlen(buffer + 2));
657 hook_arg1 = "commit";
658 hook_arg2 = use_message;
659 } else if (fixup_message) {
660 struct pretty_print_context ctx = {0};
661 struct commit *commit;
662 commit = lookup_commit_reference_by_name(fixup_message);
664 die(_("could not lookup commit %s"), fixup_message);
665 ctx.output_encoding = get_commit_output_encoding();
666 format_commit_message(commit, "fixup! %s\n\n",
668 hook_arg1 = "message";
669 } else if (!stat(git_path("MERGE_MSG"), &statbuf)) {
670 if (strbuf_read_file(&sb, git_path("MERGE_MSG"), 0) < 0)
671 die_errno(_("could not read MERGE_MSG"));
673 } else if (!stat(git_path("SQUASH_MSG"), &statbuf)) {
674 if (strbuf_read_file(&sb, git_path("SQUASH_MSG"), 0) < 0)
675 die_errno(_("could not read SQUASH_MSG"));
676 hook_arg1 = "squash";
677 } else if (template_file) {
678 if (strbuf_read_file(&sb, template_file, 0) < 0)
679 die_errno(_("could not read '%s'"), template_file);
680 hook_arg1 = "template";
681 clean_message_contents = 0;
685 * The remaining cases don't modify the template message, but
686 * just set the argument(s) to the prepare-commit-msg hook.
688 else if (whence == FROM_MERGE)
690 else if (whence == FROM_CHERRY_PICK) {
691 hook_arg1 = "commit";
692 hook_arg2 = "CHERRY_PICK_HEAD";
695 if (squash_message) {
697 * If squash_commit was used for the commit subject,
698 * then we're possibly hijacking other commit log options.
699 * Reset the hook args to tell the real story.
701 hook_arg1 = "message";
705 s->fp = fopen(git_path(commit_editmsg), "w");
707 die_errno(_("could not open '%s'"), git_path(commit_editmsg));
709 /* Ignore status.displayCommentPrefix: we do need comments in COMMIT_EDITMSG. */
710 old_display_comment_prefix = s->display_comment_prefix;
711 s->display_comment_prefix = 1;
714 * Most hints are counter-productive when the commit has
719 if (clean_message_contents)
724 * See if we have a Conflicts: block at the end. If yes, count
725 * its size, so we can ignore it.
727 int ignore_footer = 0;
728 int i, eol, previous = 0;
731 for (i = 0; i < sb.len; i++) {
732 nl = memchr(sb.buf + i, '\n', sb.len - i);
737 if (starts_with(sb.buf + previous, "\nConflicts:\n")) {
738 ignore_footer = sb.len - previous;
746 append_signoff(&sb, ignore_footer, 0);
749 if (fwrite(sb.buf, 1, sb.len, s->fp) < sb.len)
750 die_errno(_("could not write commit template"));
754 /* This checks if committer ident is explicitly given */
755 strbuf_addstr(&committer_ident, git_committer_info(IDENT_STRICT));
756 if (use_editor && include_status) {
758 int saved_color_setting;
759 char *ai_tmp, *ci_tmp;
760 if (whence != FROM_COMMIT) {
761 if (cleanup_mode == CLEANUP_SCISSORS)
762 wt_status_add_cut_line(s->fp);
763 status_printf_ln(s, GIT_COLOR_NORMAL,
766 "It looks like you may be committing a merge.\n"
767 "If this is not correct, please remove the file\n"
771 "It looks like you may be committing a cherry-pick.\n"
772 "If this is not correct, please remove the file\n"
775 git_path(whence == FROM_MERGE
777 : "CHERRY_PICK_HEAD"));
780 fprintf(s->fp, "\n");
781 if (cleanup_mode == CLEANUP_ALL)
782 status_printf(s, GIT_COLOR_NORMAL,
783 _("Please enter the commit message for your changes."
784 " Lines starting\nwith '%c' will be ignored, and an empty"
785 " message aborts the commit.\n"), comment_line_char);
786 else if (cleanup_mode == CLEANUP_SCISSORS && whence == FROM_COMMIT)
787 wt_status_add_cut_line(s->fp);
788 else /* CLEANUP_SPACE, that is. */
789 status_printf(s, GIT_COLOR_NORMAL,
790 _("Please enter the commit message for your changes."
792 "with '%c' will be kept; you may remove them"
793 " yourself if you want to.\n"
794 "An empty message aborts the commit.\n"), comment_line_char);
795 if (only_include_assumed)
796 status_printf_ln(s, GIT_COLOR_NORMAL,
797 "%s", only_include_assumed);
799 ai_tmp = cut_ident_timestamp_part(author_ident->buf);
800 ci_tmp = cut_ident_timestamp_part(committer_ident.buf);
801 if (strcmp(author_ident->buf, committer_ident.buf))
802 status_printf_ln(s, GIT_COLOR_NORMAL,
805 ident_shown++ ? "" : "\n",
808 if (!committer_ident_sufficiently_given())
809 status_printf_ln(s, GIT_COLOR_NORMAL,
812 ident_shown++ ? "" : "\n",
813 committer_ident.buf);
816 status_printf_ln(s, GIT_COLOR_NORMAL, "%s", "");
818 saved_color_setting = s->use_color;
820 commitable = run_status(s->fp, index_file, prefix, 1, s);
821 s->use_color = saved_color_setting;
826 unsigned char sha1[20];
827 const char *parent = "HEAD";
829 if (!active_nr && read_cache() < 0)
830 die(_("Cannot read index"));
835 if (get_sha1(parent, sha1))
836 commitable = !!active_nr;
838 commitable = index_differs_from(parent, 0);
840 strbuf_release(&committer_ident);
845 * Reject an attempt to record a non-merge empty commit without
846 * explicit --allow-empty. In the cherry-pick case, it may be
847 * empty due to conflict resolution, which the user should okay.
849 if (!commitable && whence != FROM_MERGE && !allow_empty &&
850 !(amend && is_a_merge(current_head))) {
851 s->display_comment_prefix = old_display_comment_prefix;
852 run_status(stdout, index_file, prefix, 0, s);
854 fputs(_(empty_amend_advice), stderr);
855 else if (whence == FROM_CHERRY_PICK) {
856 fputs(_(empty_cherry_pick_advice), stderr);
857 if (!sequencer_in_use)
858 fputs(_(empty_cherry_pick_advice_single), stderr);
860 fputs(_(empty_cherry_pick_advice_multi), stderr);
866 * Re-read the index as pre-commit hook could have updated it,
867 * and write it out as a tree. We must do this before we invoke
868 * the editor and after we invoke run_status above.
871 read_cache_from(index_file);
872 if (update_main_cache_tree(0)) {
873 error(_("Error building trees"));
877 if (run_commit_hook(use_editor, index_file, "prepare-commit-msg",
878 git_path(commit_editmsg), hook_arg1, hook_arg2, NULL))
882 char index[PATH_MAX];
883 const char *env[2] = { NULL };
885 snprintf(index, sizeof(index), "GIT_INDEX_FILE=%s", index_file);
886 if (launch_editor(git_path(commit_editmsg), NULL, env)) {
888 _("Please supply the message using either -m or -F option.\n"));
894 run_commit_hook(use_editor, index_file, "commit-msg", git_path(commit_editmsg), NULL)) {
901 static int rest_is_empty(struct strbuf *sb, int start)
906 /* Check if the rest is just whitespace and Signed-of-by's. */
907 for (i = start; i < sb->len; i++) {
908 nl = memchr(sb->buf + i, '\n', sb->len - i);
914 if (strlen(sign_off_header) <= eol - i &&
915 starts_with(sb->buf + i, sign_off_header)) {
920 if (!isspace(sb->buf[i++]))
928 * Find out if the message in the strbuf contains only whitespace and
929 * Signed-off-by lines.
931 static int message_is_empty(struct strbuf *sb)
933 if (cleanup_mode == CLEANUP_NONE && sb->len)
935 return rest_is_empty(sb, 0);
939 * See if the user edited the message in the editor or left what
940 * was in the template intact
942 static int template_untouched(struct strbuf *sb)
944 struct strbuf tmpl = STRBUF_INIT;
947 if (cleanup_mode == CLEANUP_NONE && sb->len)
950 if (!template_file || strbuf_read_file(&tmpl, template_file, 0) <= 0)
953 stripspace(&tmpl, cleanup_mode == CLEANUP_ALL);
954 start = (char *)skip_prefix(sb->buf, tmpl.buf);
957 strbuf_release(&tmpl);
958 return rest_is_empty(sb, start - sb->buf);
961 static const char *find_author_by_nickname(const char *name)
963 struct rev_info revs;
964 struct commit *commit;
965 struct strbuf buf = STRBUF_INIT;
966 struct string_list mailmap = STRING_LIST_INIT_NODUP;
970 init_revisions(&revs, NULL);
971 strbuf_addf(&buf, "--author=%s", name);
976 setup_revisions(ac, av, &revs, NULL);
977 revs.mailmap = &mailmap;
978 read_mailmap(revs.mailmap, NULL);
980 prepare_revision_walk(&revs);
981 commit = get_revision(&revs);
983 struct pretty_print_context ctx = {0};
984 ctx.date_mode = DATE_NORMAL;
985 strbuf_release(&buf);
986 format_commit_message(commit, "%aN <%aE>", &buf, &ctx);
987 clear_mailmap(&mailmap);
988 return strbuf_detach(&buf, NULL);
990 die(_("No existing author found with '%s'"), name);
994 static void handle_untracked_files_arg(struct wt_status *s)
996 if (!untracked_files_arg)
997 ; /* default already initialized */
998 else if (!strcmp(untracked_files_arg, "no"))
999 s->show_untracked_files = SHOW_NO_UNTRACKED_FILES;
1000 else if (!strcmp(untracked_files_arg, "normal"))
1001 s->show_untracked_files = SHOW_NORMAL_UNTRACKED_FILES;
1002 else if (!strcmp(untracked_files_arg, "all"))
1003 s->show_untracked_files = SHOW_ALL_UNTRACKED_FILES;
1005 die(_("Invalid untracked files mode '%s'"), untracked_files_arg);
1008 static const char *read_commit_message(const char *name)
1010 const char *out_enc;
1011 struct commit *commit;
1013 commit = lookup_commit_reference_by_name(name);
1015 die(_("could not lookup commit %s"), name);
1016 out_enc = get_commit_output_encoding();
1017 return logmsg_reencode(commit, NULL, out_enc);
1021 * Enumerate what needs to be propagated when --porcelain
1022 * is not in effect here.
1024 static struct status_deferred_config {
1025 enum status_format status_format;
1027 } status_deferred_config = {
1028 STATUS_FORMAT_UNSPECIFIED,
1029 -1 /* unspecified */
1032 static void finalize_deferred_config(struct wt_status *s)
1034 int use_deferred_config = (status_format != STATUS_FORMAT_PORCELAIN &&
1035 !s->null_termination);
1037 if (s->null_termination) {
1038 if (status_format == STATUS_FORMAT_NONE ||
1039 status_format == STATUS_FORMAT_UNSPECIFIED)
1040 status_format = STATUS_FORMAT_PORCELAIN;
1041 else if (status_format == STATUS_FORMAT_LONG)
1042 die(_("--long and -z are incompatible"));
1045 if (use_deferred_config && status_format == STATUS_FORMAT_UNSPECIFIED)
1046 status_format = status_deferred_config.status_format;
1047 if (status_format == STATUS_FORMAT_UNSPECIFIED)
1048 status_format = STATUS_FORMAT_NONE;
1050 if (use_deferred_config && s->show_branch < 0)
1051 s->show_branch = status_deferred_config.show_branch;
1052 if (s->show_branch < 0)
1056 static int parse_and_validate_options(int argc, const char *argv[],
1057 const struct option *options,
1058 const char * const usage[],
1060 struct commit *current_head,
1061 struct wt_status *s)
1065 argc = parse_options(argc, argv, prefix, options, usage, 0);
1066 finalize_deferred_config(s);
1068 if (force_author && !strchr(force_author, '>'))
1069 force_author = find_author_by_nickname(force_author);
1071 if (force_author && renew_authorship)
1072 die(_("Using both --reset-author and --author does not make sense"));
1074 if (logfile || have_option_m || use_message || fixup_message)
1077 use_editor = edit_flag;
1079 /* Sanity check options */
1080 if (amend && !current_head)
1081 die(_("You have nothing to amend."));
1082 if (amend && whence != FROM_COMMIT) {
1083 if (whence == FROM_MERGE)
1084 die(_("You are in the middle of a merge -- cannot amend."));
1085 else if (whence == FROM_CHERRY_PICK)
1086 die(_("You are in the middle of a cherry-pick -- cannot amend."));
1088 if (fixup_message && squash_message)
1089 die(_("Options --squash and --fixup cannot be used together"));
1099 die(_("Only one of -c/-C/-F/--fixup can be used."));
1100 if (message.len && f > 0)
1101 die((_("Option -m cannot be combined with -c/-C/-F/--fixup.")));
1102 if (f || message.len)
1103 template_file = NULL;
1105 use_message = edit_message;
1106 if (amend && !use_message && !fixup_message)
1107 use_message = "HEAD";
1108 if (!use_message && whence != FROM_CHERRY_PICK && renew_authorship)
1109 die(_("--reset-author can be used only with -C, -c or --amend."));
1111 use_message_buffer = read_commit_message(use_message);
1112 if (!renew_authorship) {
1113 author_message = use_message;
1114 author_message_buffer = use_message_buffer;
1117 if (whence == FROM_CHERRY_PICK && !renew_authorship) {
1118 author_message = "CHERRY_PICK_HEAD";
1119 author_message_buffer = read_commit_message(author_message);
1122 if (patch_interactive)
1125 if (also + only + all + interactive > 1)
1126 die(_("Only one of --include/--only/--all/--interactive/--patch can be used."));
1127 if (argc == 0 && (also || (only && !amend)))
1128 die(_("No paths with --include/--only does not make sense."));
1129 if (argc == 0 && only && amend)
1130 only_include_assumed = _("Clever... amending the last one with dirty index.");
1131 if (argc > 0 && !also && !only)
1132 only_include_assumed = _("Explicit paths specified without -i or -o; assuming --only paths...");
1133 if (!cleanup_arg || !strcmp(cleanup_arg, "default"))
1134 cleanup_mode = use_editor ? CLEANUP_ALL : CLEANUP_SPACE;
1135 else if (!strcmp(cleanup_arg, "verbatim"))
1136 cleanup_mode = CLEANUP_NONE;
1137 else if (!strcmp(cleanup_arg, "whitespace"))
1138 cleanup_mode = CLEANUP_SPACE;
1139 else if (!strcmp(cleanup_arg, "strip"))
1140 cleanup_mode = CLEANUP_ALL;
1141 else if (!strcmp(cleanup_arg, "scissors"))
1142 cleanup_mode = use_editor ? CLEANUP_SCISSORS : CLEANUP_SPACE;
1144 die(_("Invalid cleanup mode %s"), cleanup_arg);
1146 handle_untracked_files_arg(s);
1148 if (all && argc > 0)
1149 die(_("Paths with -a does not make sense."));
1151 if (status_format != STATUS_FORMAT_NONE)
1157 static int dry_run_commit(int argc, const char **argv, const char *prefix,
1158 const struct commit *current_head, struct wt_status *s)
1161 const char *index_file;
1163 index_file = prepare_index(argc, argv, prefix, current_head, 1);
1164 commitable = run_status(stdout, index_file, prefix, 0, s);
1165 rollback_index_files();
1167 return commitable ? 0 : 1;
1170 static int parse_status_slot(const char *var, int offset)
1172 if (!strcasecmp(var+offset, "header"))
1173 return WT_STATUS_HEADER;
1174 if (!strcasecmp(var+offset, "branch"))
1175 return WT_STATUS_ONBRANCH;
1176 if (!strcasecmp(var+offset, "updated")
1177 || !strcasecmp(var+offset, "added"))
1178 return WT_STATUS_UPDATED;
1179 if (!strcasecmp(var+offset, "changed"))
1180 return WT_STATUS_CHANGED;
1181 if (!strcasecmp(var+offset, "untracked"))
1182 return WT_STATUS_UNTRACKED;
1183 if (!strcasecmp(var+offset, "nobranch"))
1184 return WT_STATUS_NOBRANCH;
1185 if (!strcasecmp(var+offset, "unmerged"))
1186 return WT_STATUS_UNMERGED;
1190 static int git_status_config(const char *k, const char *v, void *cb)
1192 struct wt_status *s = cb;
1194 if (starts_with(k, "column."))
1195 return git_column_config(k, v, "status", &s->colopts);
1196 if (!strcmp(k, "status.submodulesummary")) {
1198 s->submodule_summary = git_config_bool_or_int(k, v, &is_bool);
1199 if (is_bool && s->submodule_summary)
1200 s->submodule_summary = -1;
1203 if (!strcmp(k, "status.short")) {
1204 if (git_config_bool(k, v))
1205 status_deferred_config.status_format = STATUS_FORMAT_SHORT;
1207 status_deferred_config.status_format = STATUS_FORMAT_NONE;
1210 if (!strcmp(k, "status.branch")) {
1211 status_deferred_config.show_branch = git_config_bool(k, v);
1214 if (!strcmp(k, "status.color") || !strcmp(k, "color.status")) {
1215 s->use_color = git_config_colorbool(k, v);
1218 if (!strcmp(k, "status.displaycommentprefix")) {
1219 s->display_comment_prefix = git_config_bool(k, v);
1222 if (starts_with(k, "status.color.") || starts_with(k, "color.status.")) {
1223 int slot = parse_status_slot(k, 13);
1227 return config_error_nonbool(k);
1228 color_parse(v, k, s->color_palette[slot]);
1231 if (!strcmp(k, "status.relativepaths")) {
1232 s->relative_paths = git_config_bool(k, v);
1235 if (!strcmp(k, "status.showuntrackedfiles")) {
1237 return config_error_nonbool(k);
1238 else if (!strcmp(v, "no"))
1239 s->show_untracked_files = SHOW_NO_UNTRACKED_FILES;
1240 else if (!strcmp(v, "normal"))
1241 s->show_untracked_files = SHOW_NORMAL_UNTRACKED_FILES;
1242 else if (!strcmp(v, "all"))
1243 s->show_untracked_files = SHOW_ALL_UNTRACKED_FILES;
1245 return error(_("Invalid untracked files mode '%s'"), v);
1248 return git_diff_ui_config(k, v, NULL);
1251 int cmd_status(int argc, const char **argv, const char *prefix)
1253 static struct wt_status s;
1255 unsigned char sha1[20];
1256 static struct option builtin_status_options[] = {
1257 OPT__VERBOSE(&verbose, N_("be verbose")),
1258 OPT_SET_INT('s', "short", &status_format,
1259 N_("show status concisely"), STATUS_FORMAT_SHORT),
1260 OPT_BOOL('b', "branch", &s.show_branch,
1261 N_("show branch information")),
1262 OPT_SET_INT(0, "porcelain", &status_format,
1263 N_("machine-readable output"),
1264 STATUS_FORMAT_PORCELAIN),
1265 OPT_SET_INT(0, "long", &status_format,
1266 N_("show status in long format (default)"),
1267 STATUS_FORMAT_LONG),
1268 OPT_BOOL('z', "null", &s.null_termination,
1269 N_("terminate entries with NUL")),
1270 { OPTION_STRING, 'u', "untracked-files", &untracked_files_arg,
1272 N_("show untracked files, optional modes: all, normal, no. (Default: all)"),
1273 PARSE_OPT_OPTARG, NULL, (intptr_t)"all" },
1274 OPT_BOOL(0, "ignored", &show_ignored_in_status,
1275 N_("show ignored files")),
1276 { OPTION_STRING, 0, "ignore-submodules", &ignore_submodule_arg, N_("when"),
1277 N_("ignore changes to submodules, optional when: all, dirty, untracked. (Default: all)"),
1278 PARSE_OPT_OPTARG, NULL, (intptr_t)"all" },
1279 OPT_COLUMN(0, "column", &s.colopts, N_("list untracked files in columns")),
1283 if (argc == 2 && !strcmp(argv[1], "-h"))
1284 usage_with_options(builtin_status_usage, builtin_status_options);
1286 status_init_config(&s, git_status_config);
1287 argc = parse_options(argc, argv, prefix,
1288 builtin_status_options,
1289 builtin_status_usage, 0);
1290 finalize_colopts(&s.colopts, -1);
1291 finalize_deferred_config(&s);
1293 handle_untracked_files_arg(&s);
1294 if (show_ignored_in_status)
1295 s.show_ignored_files = 1;
1296 parse_pathspec(&s.pathspec, 0,
1297 PATHSPEC_PREFER_FULL,
1300 read_cache_preload(&s.pathspec);
1301 refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED, &s.pathspec, NULL, NULL);
1303 fd = hold_locked_index(&index_lock, 0);
1305 update_index_if_able(&the_index, &index_lock);
1307 s.is_initial = get_sha1(s.reference, sha1) ? 1 : 0;
1308 s.ignore_submodule_arg = ignore_submodule_arg;
1309 wt_status_collect(&s);
1311 if (s.relative_paths)
1314 switch (status_format) {
1315 case STATUS_FORMAT_SHORT:
1316 wt_shortstatus_print(&s);
1318 case STATUS_FORMAT_PORCELAIN:
1319 wt_porcelain_print(&s);
1321 case STATUS_FORMAT_UNSPECIFIED:
1322 die("BUG: finalize_deferred_config() should have been called");
1324 case STATUS_FORMAT_NONE:
1325 case STATUS_FORMAT_LONG:
1326 s.verbose = verbose;
1327 s.ignore_submodule_arg = ignore_submodule_arg;
1328 wt_status_print(&s);
1334 static void print_summary(const char *prefix, const unsigned char *sha1,
1337 struct rev_info rev;
1338 struct commit *commit;
1339 struct strbuf format = STRBUF_INIT;
1340 unsigned char junk_sha1[20];
1342 struct pretty_print_context pctx = {0};
1343 struct strbuf author_ident = STRBUF_INIT;
1344 struct strbuf committer_ident = STRBUF_INIT;
1346 commit = lookup_commit(sha1);
1348 die(_("couldn't look up newly created commit"));
1349 if (parse_commit(commit))
1350 die(_("could not parse newly created commit"));
1352 strbuf_addstr(&format, "format:%h] %s");
1354 format_commit_message(commit, "%an <%ae>", &author_ident, &pctx);
1355 format_commit_message(commit, "%cn <%ce>", &committer_ident, &pctx);
1356 if (strbuf_cmp(&author_ident, &committer_ident)) {
1357 strbuf_addstr(&format, "\n Author: ");
1358 strbuf_addbuf_percentquote(&format, &author_ident);
1360 if (!committer_ident_sufficiently_given()) {
1361 strbuf_addstr(&format, "\n Committer: ");
1362 strbuf_addbuf_percentquote(&format, &committer_ident);
1363 if (advice_implicit_identity) {
1364 strbuf_addch(&format, '\n');
1365 strbuf_addstr(&format, _(implicit_ident_advice));
1368 strbuf_release(&author_ident);
1369 strbuf_release(&committer_ident);
1371 init_revisions(&rev, prefix);
1372 setup_revisions(0, NULL, &rev, NULL);
1375 rev.diffopt.output_format =
1376 DIFF_FORMAT_SHORTSTAT | DIFF_FORMAT_SUMMARY;
1378 rev.verbose_header = 1;
1379 rev.show_root_diff = 1;
1380 get_commit_format(format.buf, &rev);
1381 rev.always_show_header = 0;
1382 rev.diffopt.detect_rename = 1;
1383 rev.diffopt.break_opt = 0;
1384 diff_setup_done(&rev.diffopt);
1386 head = resolve_ref_unsafe("HEAD", junk_sha1, 0, NULL);
1388 starts_with(head, "refs/heads/") ?
1390 !strcmp(head, "HEAD") ?
1391 _("detached HEAD") :
1393 initial_commit ? _(" (root-commit)") : "");
1395 if (!log_tree_commit(&rev, commit)) {
1396 rev.always_show_header = 1;
1397 rev.use_terminator = 1;
1398 log_tree_commit(&rev, commit);
1401 strbuf_release(&format);
1404 static int git_commit_config(const char *k, const char *v, void *cb)
1406 struct wt_status *s = cb;
1409 if (!strcmp(k, "commit.template"))
1410 return git_config_pathname(&template_file, k, v);
1411 if (!strcmp(k, "commit.status")) {
1412 include_status = git_config_bool(k, v);
1415 if (!strcmp(k, "commit.cleanup"))
1416 return git_config_string(&cleanup_arg, k, v);
1417 if (!strcmp(k, "commit.gpgsign")) {
1418 sign_commit = git_config_bool(k, v) ? "" : NULL;
1422 status = git_gpg_config(k, v, NULL);
1425 return git_status_config(k, v, s);
1428 int run_commit_hook(int editor_is_used, const char *index_file, const char *name, ...)
1430 const char *hook_env[3] = { NULL };
1431 char index[PATH_MAX];
1435 snprintf(index, sizeof(index), "GIT_INDEX_FILE=%s", index_file);
1436 hook_env[0] = index;
1439 * Let the hook know that no editor will be launched.
1441 if (!editor_is_used)
1442 hook_env[1] = "GIT_EDITOR=:";
1444 va_start(args, name);
1445 ret = run_hook_ve(hook_env, name, args);
1451 int cmd_commit(int argc, const char **argv, const char *prefix)
1453 static struct wt_status s;
1454 static struct option builtin_commit_options[] = {
1455 OPT__QUIET(&quiet, N_("suppress summary after successful commit")),
1456 OPT__VERBOSE(&verbose, N_("show diff in commit message template")),
1458 OPT_GROUP(N_("Commit message options")),
1459 OPT_FILENAME('F', "file", &logfile, N_("read message from file")),
1460 OPT_STRING(0, "author", &force_author, N_("author"), N_("override author for commit")),
1461 OPT_STRING(0, "date", &force_date, N_("date"), N_("override date for commit")),
1462 OPT_CALLBACK('m', "message", &message, N_("message"), N_("commit message"), opt_parse_m),
1463 OPT_STRING('c', "reedit-message", &edit_message, N_("commit"), N_("reuse and edit message from specified commit")),
1464 OPT_STRING('C', "reuse-message", &use_message, N_("commit"), N_("reuse message from specified commit")),
1465 OPT_STRING(0, "fixup", &fixup_message, N_("commit"), N_("use autosquash formatted message to fixup specified commit")),
1466 OPT_STRING(0, "squash", &squash_message, N_("commit"), N_("use autosquash formatted message to squash specified commit")),
1467 OPT_BOOL(0, "reset-author", &renew_authorship, N_("the commit is authored by me now (used with -C/-c/--amend)")),
1468 OPT_BOOL('s', "signoff", &signoff, N_("add Signed-off-by:")),
1469 OPT_FILENAME('t', "template", &template_file, N_("use specified template file")),
1470 OPT_BOOL('e', "edit", &edit_flag, N_("force edit of commit")),
1471 OPT_STRING(0, "cleanup", &cleanup_arg, N_("default"), N_("how to strip spaces and #comments from message")),
1472 OPT_BOOL(0, "status", &include_status, N_("include status in commit message template")),
1473 { OPTION_STRING, 'S', "gpg-sign", &sign_commit, N_("key-id"),
1474 N_("GPG sign commit"), PARSE_OPT_OPTARG, NULL, (intptr_t) "" },
1475 /* end commit message options */
1477 OPT_GROUP(N_("Commit contents options")),
1478 OPT_BOOL('a', "all", &all, N_("commit all changed files")),
1479 OPT_BOOL('i', "include", &also, N_("add specified files to index for commit")),
1480 OPT_BOOL(0, "interactive", &interactive, N_("interactively add files")),
1481 OPT_BOOL('p', "patch", &patch_interactive, N_("interactively add changes")),
1482 OPT_BOOL('o', "only", &only, N_("commit only specified files")),
1483 OPT_BOOL('n', "no-verify", &no_verify, N_("bypass pre-commit hook")),
1484 OPT_BOOL(0, "dry-run", &dry_run, N_("show what would be committed")),
1485 OPT_SET_INT(0, "short", &status_format, N_("show status concisely"),
1486 STATUS_FORMAT_SHORT),
1487 OPT_BOOL(0, "branch", &s.show_branch, N_("show branch information")),
1488 OPT_SET_INT(0, "porcelain", &status_format,
1489 N_("machine-readable output"), STATUS_FORMAT_PORCELAIN),
1490 OPT_SET_INT(0, "long", &status_format,
1491 N_("show status in long format (default)"),
1492 STATUS_FORMAT_LONG),
1493 OPT_BOOL('z', "null", &s.null_termination,
1494 N_("terminate entries with NUL")),
1495 OPT_BOOL(0, "amend", &amend, N_("amend previous commit")),
1496 OPT_BOOL(0, "no-post-rewrite", &no_post_rewrite, N_("bypass post-rewrite hook")),
1497 { OPTION_STRING, 'u', "untracked-files", &untracked_files_arg, N_("mode"), N_("show untracked files, optional modes: all, normal, no. (Default: all)"), PARSE_OPT_OPTARG, NULL, (intptr_t)"all" },
1498 /* end commit contents options */
1500 OPT_HIDDEN_BOOL(0, "allow-empty", &allow_empty,
1501 N_("ok to record an empty change")),
1502 OPT_HIDDEN_BOOL(0, "allow-empty-message", &allow_empty_message,
1503 N_("ok to record a change with an empty message")),
1508 struct strbuf sb = STRBUF_INIT;
1509 struct strbuf author_ident = STRBUF_INIT;
1510 const char *index_file, *reflog_msg;
1512 unsigned char sha1[20];
1513 struct ref_lock *ref_lock;
1514 struct commit_list *parents = NULL, **pptr = &parents;
1515 struct stat statbuf;
1516 int reverse_parents = 0;
1517 struct commit *current_head = NULL;
1518 struct commit_extra_header *extra = NULL;
1520 if (argc == 2 && !strcmp(argv[1], "-h"))
1521 usage_with_options(builtin_commit_usage, builtin_commit_options);
1523 status_init_config(&s, git_commit_config);
1524 status_format = STATUS_FORMAT_NONE; /* Ignore status.short */
1527 if (get_sha1("HEAD", sha1))
1528 current_head = NULL;
1530 current_head = lookup_commit_or_die(sha1, "HEAD");
1531 if (parse_commit(current_head))
1532 die(_("could not parse HEAD commit"));
1534 argc = parse_and_validate_options(argc, argv, builtin_commit_options,
1535 builtin_commit_usage,
1536 prefix, current_head, &s);
1538 return dry_run_commit(argc, argv, prefix, current_head, &s);
1539 index_file = prepare_index(argc, argv, prefix, current_head, 0);
1541 /* Set up everything for writing the commit object. This includes
1542 running hooks, writing the trees, and interacting with the user. */
1543 if (!prepare_to_commit(index_file, prefix,
1544 current_head, &s, &author_ident)) {
1545 rollback_index_files();
1549 /* Determine parents */
1550 reflog_msg = getenv("GIT_REFLOG_ACTION");
1551 if (!current_head) {
1553 reflog_msg = "commit (initial)";
1555 struct commit_list *c;
1558 reflog_msg = "commit (amend)";
1559 for (c = current_head->parents; c; c = c->next)
1560 pptr = &commit_list_insert(c->item, pptr)->next;
1561 } else if (whence == FROM_MERGE) {
1562 struct strbuf m = STRBUF_INIT;
1564 int allow_fast_forward = 1;
1567 reflog_msg = "commit (merge)";
1568 pptr = &commit_list_insert(current_head, pptr)->next;
1569 fp = fopen(git_path("MERGE_HEAD"), "r");
1571 die_errno(_("could not open '%s' for reading"),
1572 git_path("MERGE_HEAD"));
1573 while (strbuf_getline(&m, fp, '\n') != EOF) {
1574 struct commit *parent;
1576 parent = get_merge_parent(m.buf);
1578 die(_("Corrupt MERGE_HEAD file (%s)"), m.buf);
1579 pptr = &commit_list_insert(parent, pptr)->next;
1583 if (!stat(git_path("MERGE_MODE"), &statbuf)) {
1584 if (strbuf_read_file(&sb, git_path("MERGE_MODE"), 0) < 0)
1585 die_errno(_("could not read MERGE_MODE"));
1586 if (strstr(sb.buf, "no-ff"))
1587 allow_fast_forward = 0;
1588 if (strstr(sb.buf, "reverse"))
1589 reverse_parents = 1;
1591 if (allow_fast_forward)
1592 parents = reduce_heads(parents);
1593 if (reverse_parents)
1594 parents = reverse_heads(parents);
1597 reflog_msg = (whence == FROM_CHERRY_PICK)
1598 ? "commit (cherry-pick)"
1600 pptr = &commit_list_insert(current_head, pptr)->next;
1603 /* Finally, get the commit message */
1605 if (strbuf_read_file(&sb, git_path(commit_editmsg), 0) < 0) {
1606 int saved_errno = errno;
1607 rollback_index_files();
1608 die(_("could not read commit message: %s"), strerror(saved_errno));
1611 if (verbose || /* Truncate the message just before the diff, if any. */
1612 cleanup_mode == CLEANUP_SCISSORS)
1613 wt_status_truncate_message_at_cut_line(&sb);
1615 if (cleanup_mode != CLEANUP_NONE)
1616 stripspace(&sb, cleanup_mode == CLEANUP_ALL);
1617 if (template_untouched(&sb) && !allow_empty_message) {
1618 rollback_index_files();
1619 fprintf(stderr, _("Aborting commit; you did not edit the message.\n"));
1622 if (message_is_empty(&sb) && !allow_empty_message) {
1623 rollback_index_files();
1624 fprintf(stderr, _("Aborting commit due to empty commit message.\n"));
1629 const char *exclude_gpgsig[2] = { "gpgsig", NULL };
1630 extra = read_commit_extra_headers(current_head, exclude_gpgsig);
1632 struct commit_extra_header **tail = &extra;
1633 append_merge_tag_headers(parents, &tail);
1636 if (commit_tree_extended(&sb, active_cache_tree->sha1, parents, sha1,
1637 author_ident.buf, sign_commit, extra)) {
1638 rollback_index_files();
1639 die(_("failed to write commit object"));
1641 strbuf_release(&author_ident);
1642 free_commit_extra_headers(extra);
1644 ref_lock = lock_any_ref_for_update("HEAD",
1647 : current_head->object.sha1,
1650 nl = strchr(sb.buf, '\n');
1652 strbuf_setlen(&sb, nl + 1 - sb.buf);
1654 strbuf_addch(&sb, '\n');
1655 strbuf_insert(&sb, 0, reflog_msg, strlen(reflog_msg));
1656 strbuf_insert(&sb, strlen(reflog_msg), ": ", 2);
1659 rollback_index_files();
1660 die(_("cannot lock HEAD ref"));
1662 if (write_ref_sha1(ref_lock, sha1, sb.buf) < 0) {
1663 rollback_index_files();
1664 die(_("cannot update HEAD ref"));
1667 unlink(git_path("CHERRY_PICK_HEAD"));
1668 unlink(git_path("REVERT_HEAD"));
1669 unlink(git_path("MERGE_HEAD"));
1670 unlink(git_path("MERGE_MSG"));
1671 unlink(git_path("MERGE_MODE"));
1672 unlink(git_path("SQUASH_MSG"));
1674 if (commit_index_files())
1675 die (_("Repository has been updated, but unable to write\n"
1676 "new_index file. Check that disk is not full or quota is\n"
1677 "not exceeded, and then \"git reset HEAD\" to recover."));
1680 run_commit_hook(use_editor, get_index_file(), "post-commit", NULL);
1681 if (amend && !no_post_rewrite) {
1682 struct rewritten rewrite;
1683 memset(&rewrite, 0, sizeof(rewrite));
1684 add_rewritten(&rewrite, current_head->object.sha1, sha1);
1685 copy_rewrite_notes(&rewrite, "amend", "Notes added by 'git commit --amend'");
1686 run_rewrite_hook(&rewrite, "amend");
1689 print_summary(prefix, sha1, !current_head);