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"
35 static const char * const builtin_commit_usage[] = {
36 N_("git commit [options] [--] <pathspec>..."),
40 static const char * const builtin_status_usage[] = {
41 N_("git status [options] [--] <pathspec>..."),
45 static const char implicit_ident_advice[] =
46 N_("Your name and email address were configured automatically based\n"
47 "on your username and hostname. Please check that they are accurate.\n"
48 "You can suppress this message by setting them explicitly:\n"
50 " git config --global user.name \"Your Name\"\n"
51 " git config --global user.email you@example.com\n"
53 "After doing this, you may fix the identity used for this commit with:\n"
55 " git commit --amend --reset-author\n");
57 static const char empty_amend_advice[] =
58 N_("You asked to amend the most recent commit, but doing so would make\n"
59 "it empty. You can repeat your command with --allow-empty, or you can\n"
60 "remove the commit entirely with \"git reset HEAD^\".\n");
62 static const char empty_cherry_pick_advice[] =
63 N_("The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
64 "If you wish to commit it anyway, use:\n"
66 " git commit --allow-empty\n"
69 static const char empty_cherry_pick_advice_single[] =
70 N_("Otherwise, please use 'git reset'\n");
72 static const char empty_cherry_pick_advice_multi[] =
73 N_("If you wish to skip this commit, use:\n"
77 "Then \"git cherry-pick --continue\" will resume cherry-picking\n"
78 "the remaining commits.\n");
80 static const char *use_message_buffer;
81 static const char commit_editmsg[] = "COMMIT_EDITMSG";
82 static struct lock_file index_lock; /* real index */
83 static struct lock_file false_lock; /* used only for partial commits */
90 static const char *logfile, *force_author;
91 static const char *template_file;
93 * The _message variables are commit names from which to take
94 * the commit message and/or authorship.
96 static const char *author_message, *author_message_buffer;
97 static char *edit_message, *use_message;
98 static char *fixup_message, *squash_message;
99 static int all, also, interactive, patch_interactive, only, amend, signoff;
100 static int edit_flag = -1; /* unspecified */
101 static int quiet, verbose, no_verify, allow_empty, dry_run, renew_authorship;
102 static int no_post_rewrite, allow_empty_message;
103 static char *untracked_files_arg, *force_date, *ignore_submodule_arg;
104 static char *sign_commit;
107 * The default commit message cleanup mode will remove the lines
108 * beginning with # (shell comments) and leading and trailing
109 * whitespaces (empty lines or containing only whitespaces)
110 * if editor is used, and only the whitespaces if the message
111 * is specified explicitly.
119 static const char *cleanup_arg;
121 static enum commit_whence whence;
122 static int sequencer_in_use;
123 static int use_editor = 1, include_status = 1;
124 static int show_ignored_in_status, have_option_m;
125 static const char *only_include_assumed;
126 static struct strbuf message = STRBUF_INIT;
128 static enum status_format {
129 STATUS_FORMAT_NONE = 0,
132 STATUS_FORMAT_PORCELAIN,
134 STATUS_FORMAT_UNSPECIFIED
135 } status_format = STATUS_FORMAT_UNSPECIFIED;
137 static int opt_parse_m(const struct option *opt, const char *arg, int unset)
139 struct strbuf *buf = opt->value;
142 strbuf_setlen(buf, 0);
146 strbuf_addch(buf, '\n');
147 strbuf_addstr(buf, arg);
148 strbuf_complete_line(buf);
153 static void determine_whence(struct wt_status *s)
155 if (file_exists(git_path("MERGE_HEAD")))
157 else if (file_exists(git_path("CHERRY_PICK_HEAD"))) {
158 whence = FROM_CHERRY_PICK;
159 if (file_exists(git_path("sequencer")))
160 sequencer_in_use = 1;
163 whence = FROM_COMMIT;
168 static void status_init_config(struct wt_status *s, config_fn_t fn)
170 wt_status_prepare(s);
174 s->hints = advice_status_hints; /* must come after git_config() */
177 static void rollback_index_files(void)
179 switch (commit_style) {
181 break; /* nothing to do */
183 rollback_lock_file(&index_lock);
186 rollback_lock_file(&index_lock);
187 rollback_lock_file(&false_lock);
192 static int commit_index_files(void)
196 switch (commit_style) {
198 break; /* nothing to do */
200 err = commit_lock_file(&index_lock);
203 err = commit_lock_file(&index_lock);
204 rollback_lock_file(&false_lock);
212 * Take a union of paths in the index and the named tree (typically, "HEAD"),
213 * and return the paths that match the given pattern in list.
215 static int list_paths(struct string_list *list, const char *with_tree,
216 const char *prefix, const struct pathspec *pattern)
224 m = xcalloc(1, pattern->nr);
227 char *max_prefix = common_prefix(pattern);
228 overlay_tree_on_cache(with_tree, max_prefix ? max_prefix : prefix);
232 for (i = 0; i < active_nr; i++) {
233 const struct cache_entry *ce = active_cache[i];
234 struct string_list_item *item;
236 if (ce->ce_flags & CE_UPDATE)
238 if (!match_pathspec_depth(pattern, ce->name, ce_namelen(ce), 0, m))
240 item = string_list_insert(list, ce->name);
241 if (ce_skip_worktree(ce))
242 item->util = item; /* better a valid pointer than a fake one */
245 return report_path_error(m, pattern, prefix);
248 static void add_remove_files(struct string_list *list)
251 for (i = 0; i < list->nr; i++) {
253 struct string_list_item *p = &(list->items[i]);
255 /* p->util is skip-worktree */
259 if (!lstat(p->string, &st)) {
260 if (add_to_cache(p->string, &st, 0))
261 die(_("updating files failed"));
263 remove_file_from_cache(p->string);
267 static void create_base_index(const struct commit *current_head)
270 struct unpack_trees_options opts;
278 memset(&opts, 0, sizeof(opts));
282 opts.src_index = &the_index;
283 opts.dst_index = &the_index;
285 opts.fn = oneway_merge;
286 tree = parse_tree_indirect(current_head->object.sha1);
288 die(_("failed to unpack HEAD tree object"));
290 init_tree_desc(&t, tree->buffer, tree->size);
291 if (unpack_trees(1, &t, &opts))
292 exit(128); /* We've already reported the error, finish dying */
295 static void refresh_cache_or_die(int refresh_flags)
298 * refresh_flags contains REFRESH_QUIET, so the only errors
299 * are for unmerged entries.
301 if (refresh_cache(refresh_flags | REFRESH_IN_PORCELAIN))
302 die_resolve_conflict("commit");
305 static char *prepare_index(int argc, const char **argv, const char *prefix,
306 const struct commit *current_head, int is_status)
309 struct string_list partial;
310 struct pathspec pathspec;
311 char *old_index_env = NULL;
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 fd = hold_locked_index(&index_lock, 1);
326 refresh_cache_or_die(refresh_flags);
328 if (write_cache(fd, active_cache, active_nr) ||
329 close_lock_file(&index_lock))
330 die(_("unable to create temporary index"));
332 old_index_env = getenv(INDEX_ENVIRONMENT);
333 setenv(INDEX_ENVIRONMENT, index_lock.filename, 1);
335 if (interactive_add(argc, argv, prefix, patch_interactive) != 0)
336 die(_("interactive add failed"));
338 if (old_index_env && *old_index_env)
339 setenv(INDEX_ENVIRONMENT, old_index_env, 1);
341 unsetenv(INDEX_ENVIRONMENT);
344 read_cache_from(index_lock.filename);
346 commit_style = COMMIT_NORMAL;
347 return index_lock.filename;
351 * Non partial, non as-is commit.
353 * (1) get the real index;
354 * (2) update the_index as necessary;
355 * (3) write the_index out to the real index (still locked);
356 * (4) return the name of the locked index file.
358 * The caller should run hooks on the locked real index, and
359 * (A) if all goes well, commit the real index;
360 * (B) on failure, rollback the real index.
362 if (all || (also && pathspec.nr)) {
363 fd = hold_locked_index(&index_lock, 1);
364 add_files_to_cache(also ? prefix : NULL, &pathspec, 0);
365 refresh_cache_or_die(refresh_flags);
366 update_main_cache_tree(WRITE_TREE_SILENT);
367 if (write_cache(fd, active_cache, active_nr) ||
368 close_lock_file(&index_lock))
369 die(_("unable to write new_index file"));
370 commit_style = COMMIT_NORMAL;
371 return index_lock.filename;
377 * (1) return the name of the real index file.
379 * The caller should run hooks on the real index,
380 * and create commit from the_index.
381 * We still need to refresh the index here.
383 if (!only && !pathspec.nr) {
384 fd = hold_locked_index(&index_lock, 1);
385 refresh_cache_or_die(refresh_flags);
386 if (active_cache_changed) {
387 update_main_cache_tree(WRITE_TREE_SILENT);
388 if (write_cache(fd, active_cache, active_nr) ||
389 commit_locked_index(&index_lock))
390 die(_("unable to write new_index file"));
392 rollback_lock_file(&index_lock);
394 commit_style = COMMIT_AS_IS;
395 return get_index_file();
401 * (0) find the set of affected paths;
402 * (1) get lock on the real index file;
403 * (2) update the_index with the given paths;
404 * (3) write the_index out to the real index (still locked);
405 * (4) get lock on the false index file;
406 * (5) reset the_index from HEAD;
407 * (6) update the_index the same way as (2);
408 * (7) write the_index out to the false index file;
409 * (8) return the name of the false index file (still locked);
411 * The caller should run hooks on the locked false index, and
412 * create commit from it. Then
413 * (A) if all goes well, commit the real index;
414 * (B) on failure, rollback the real index;
415 * In either case, rollback the false index.
417 commit_style = COMMIT_PARTIAL;
419 if (whence != FROM_COMMIT) {
420 if (whence == FROM_MERGE)
421 die(_("cannot do a partial commit during a merge."));
422 else if (whence == FROM_CHERRY_PICK)
423 die(_("cannot do a partial commit during a cherry-pick."));
426 memset(&partial, 0, sizeof(partial));
427 partial.strdup_strings = 1;
428 if (list_paths(&partial, !current_head ? NULL : "HEAD", prefix, &pathspec))
432 if (read_cache() < 0)
433 die(_("cannot read the index"));
435 fd = hold_locked_index(&index_lock, 1);
436 add_remove_files(&partial);
437 refresh_cache(REFRESH_QUIET);
438 if (write_cache(fd, active_cache, active_nr) ||
439 close_lock_file(&index_lock))
440 die(_("unable to write new_index file"));
442 fd = hold_lock_file_for_update(&false_lock,
443 git_path("next-index-%"PRIuMAX,
444 (uintmax_t) getpid()),
447 create_base_index(current_head);
448 add_remove_files(&partial);
449 refresh_cache(REFRESH_QUIET);
451 if (write_cache(fd, active_cache, active_nr) ||
452 close_lock_file(&false_lock))
453 die(_("unable to write temporary index file"));
456 read_cache_from(false_lock.filename);
458 return false_lock.filename;
461 static int run_status(FILE *fp, const char *index_file, const char *prefix, int nowarn,
464 unsigned char sha1[20];
466 if (s->relative_paths)
471 s->reference = "HEAD^1";
473 s->verbose = verbose;
474 s->index_file = index_file;
477 s->is_initial = get_sha1(s->reference, sha1) ? 1 : 0;
479 wt_status_collect(s);
481 switch (status_format) {
482 case STATUS_FORMAT_SHORT:
483 wt_shortstatus_print(s);
485 case STATUS_FORMAT_PORCELAIN:
486 wt_porcelain_print(s);
488 case STATUS_FORMAT_UNSPECIFIED:
489 die("BUG: finalize_deferred_config() should have been called");
491 case STATUS_FORMAT_NONE:
492 case STATUS_FORMAT_LONG:
497 return s->commitable;
500 static int is_a_merge(const struct commit *current_head)
502 return !!(current_head->parents && current_head->parents->next);
505 static void export_one(const char *var, const char *s, const char *e, int hack)
507 struct strbuf buf = STRBUF_INIT;
509 strbuf_addch(&buf, hack);
510 strbuf_addf(&buf, "%.*s", (int)(e - s), s);
511 setenv(var, buf.buf, 1);
512 strbuf_release(&buf);
515 static int sane_ident_split(struct ident_split *person)
517 if (!person->name_begin || !person->name_end ||
518 person->name_begin == person->name_end)
519 return 0; /* no human readable name */
520 if (!person->mail_begin || !person->mail_end ||
521 person->mail_begin == person->mail_end)
522 return 0; /* no usable mail */
523 if (!person->date_begin || !person->date_end ||
524 !person->tz_begin || !person->tz_end)
529 static void determine_author_info(struct strbuf *author_ident)
531 char *name, *email, *date;
532 struct ident_split author;
534 name = getenv("GIT_AUTHOR_NAME");
535 email = getenv("GIT_AUTHOR_EMAIL");
536 date = getenv("GIT_AUTHOR_DATE");
538 if (author_message) {
539 const char *a, *lb, *rb, *eol;
542 a = strstr(author_message_buffer, "\nauthor ");
544 die(_("invalid commit: %s"), author_message);
546 lb = strchrnul(a + strlen("\nauthor "), '<');
547 rb = strchrnul(lb, '>');
548 eol = strchrnul(rb, '\n');
549 if (!*lb || !*rb || !*eol)
550 die(_("invalid commit: %s"), author_message);
552 if (lb == a + strlen("\nauthor "))
553 /* \nauthor <foo@example.com> */
554 name = xcalloc(1, 1);
556 name = xmemdupz(a + strlen("\nauthor "),
558 (a + strlen("\nauthor "))));
559 email = xmemdupz(lb + strlen("<"), rb - (lb + strlen("<")));
560 len = eol - (rb + strlen("> "));
561 date = xmalloc(len + 2);
563 memcpy(date + 1, rb + strlen("> "), len);
564 date[len + 1] = '\0';
568 const char *lb = strstr(force_author, " <");
569 const char *rb = strchr(force_author, '>');
572 die(_("malformed --author parameter"));
573 name = xstrndup(force_author, lb - force_author);
574 email = xstrndup(lb + 2, rb - (lb + 2));
579 strbuf_addstr(author_ident, fmt_ident(name, email, date, IDENT_STRICT));
580 if (!split_ident_line(&author, author_ident->buf, author_ident->len) &&
581 sane_ident_split(&author)) {
582 export_one("GIT_AUTHOR_NAME", author.name_begin, author.name_end, 0);
583 export_one("GIT_AUTHOR_EMAIL", author.mail_begin, author.mail_end, 0);
584 export_one("GIT_AUTHOR_DATE", author.date_begin, author.tz_end, '@');
588 static char *cut_ident_timestamp_part(char *string)
590 char *ket = strrchr(string, '>');
591 if (!ket || ket[1] != ' ')
592 die(_("Malformed ident string: '%s'"), string);
597 static int prepare_to_commit(const char *index_file, const char *prefix,
598 struct commit *current_head,
600 struct strbuf *author_ident)
603 struct strbuf committer_ident = STRBUF_INIT;
604 int commitable, saved_color_setting;
605 struct strbuf sb = STRBUF_INIT;
607 const char *hook_arg1 = NULL;
608 const char *hook_arg2 = NULL;
610 int clean_message_contents = (cleanup_mode != CLEANUP_NONE);
611 int old_display_comment_prefix;
613 /* This checks and barfs if author is badly specified */
614 determine_author_info(author_ident);
616 if (!no_verify && run_hook(index_file, "pre-commit", NULL))
619 if (squash_message) {
621 * Insert the proper subject line before other commit
622 * message options add their content.
624 if (use_message && !strcmp(use_message, squash_message))
625 strbuf_addstr(&sb, "squash! ");
627 struct pretty_print_context ctx = {0};
629 c = lookup_commit_reference_by_name(squash_message);
631 die(_("could not lookup commit %s"), squash_message);
632 ctx.output_encoding = get_commit_output_encoding();
633 format_commit_message(c, "squash! %s\n\n", &sb,
639 strbuf_addbuf(&sb, &message);
640 hook_arg1 = "message";
641 } else if (logfile && !strcmp(logfile, "-")) {
643 fprintf(stderr, _("(reading log message from standard input)\n"));
644 if (strbuf_read(&sb, 0, 0) < 0)
645 die_errno(_("could not read log from standard input"));
646 hook_arg1 = "message";
647 } else if (logfile) {
648 if (strbuf_read_file(&sb, logfile, 0) < 0)
649 die_errno(_("could not read log file '%s'"),
651 hook_arg1 = "message";
652 } 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) {
757 char *ai_tmp, *ci_tmp;
758 if (whence != FROM_COMMIT) {
759 if (cleanup_mode == CLEANUP_SCISSORS)
760 wt_status_add_cut_line(s->fp);
761 status_printf_ln(s, GIT_COLOR_NORMAL,
764 "It looks like you may be committing a merge.\n"
765 "If this is not correct, please remove the file\n"
769 "It looks like you may be committing a cherry-pick.\n"
770 "If this is not correct, please remove the file\n"
773 git_path(whence == FROM_MERGE
775 : "CHERRY_PICK_HEAD"));
778 fprintf(s->fp, "\n");
779 if (cleanup_mode == CLEANUP_ALL)
780 status_printf(s, GIT_COLOR_NORMAL,
781 _("Please enter the commit message for your changes."
782 " Lines starting\nwith '%c' will be ignored, and an empty"
783 " message aborts the commit.\n"), comment_line_char);
784 else if (cleanup_mode == CLEANUP_SCISSORS && whence == FROM_COMMIT)
785 wt_status_add_cut_line(s->fp);
786 else /* CLEANUP_SPACE, that is. */
787 status_printf(s, GIT_COLOR_NORMAL,
788 _("Please enter the commit message for your changes."
790 "with '%c' will be kept; you may remove them"
791 " yourself if you want to.\n"
792 "An empty message aborts the commit.\n"), comment_line_char);
793 if (only_include_assumed)
794 status_printf_ln(s, GIT_COLOR_NORMAL,
795 "%s", only_include_assumed);
797 ai_tmp = cut_ident_timestamp_part(author_ident->buf);
798 ci_tmp = cut_ident_timestamp_part(committer_ident.buf);
799 if (strcmp(author_ident->buf, committer_ident.buf))
800 status_printf_ln(s, GIT_COLOR_NORMAL,
803 ident_shown++ ? "" : "\n",
806 if (!committer_ident_sufficiently_given())
807 status_printf_ln(s, GIT_COLOR_NORMAL,
810 ident_shown++ ? "" : "\n",
811 committer_ident.buf);
814 status_printf_ln(s, GIT_COLOR_NORMAL, "");
816 saved_color_setting = s->use_color;
818 commitable = run_status(s->fp, index_file, prefix, 1, s);
819 s->use_color = saved_color_setting;
824 unsigned char sha1[20];
825 const char *parent = "HEAD";
827 if (!active_nr && read_cache() < 0)
828 die(_("Cannot read index"));
833 if (get_sha1(parent, sha1))
834 commitable = !!active_nr;
836 commitable = index_differs_from(parent, 0);
838 strbuf_release(&committer_ident);
843 * Reject an attempt to record a non-merge empty commit without
844 * explicit --allow-empty. In the cherry-pick case, it may be
845 * empty due to conflict resolution, which the user should okay.
847 if (!commitable && whence != FROM_MERGE && !allow_empty &&
848 !(amend && is_a_merge(current_head))) {
849 s->display_comment_prefix = old_display_comment_prefix;
850 run_status(stdout, index_file, prefix, 0, s);
852 fputs(_(empty_amend_advice), stderr);
853 else if (whence == FROM_CHERRY_PICK) {
854 fputs(_(empty_cherry_pick_advice), stderr);
855 if (!sequencer_in_use)
856 fputs(_(empty_cherry_pick_advice_single), stderr);
858 fputs(_(empty_cherry_pick_advice_multi), stderr);
864 * Re-read the index as pre-commit hook could have updated it,
865 * and write it out as a tree. We must do this before we invoke
866 * the editor and after we invoke run_status above.
869 read_cache_from(index_file);
870 if (update_main_cache_tree(0)) {
871 error(_("Error building trees"));
875 if (run_hook(index_file, "prepare-commit-msg",
876 git_path(commit_editmsg), hook_arg1, hook_arg2, NULL))
880 char index[PATH_MAX];
881 const char *env[2] = { NULL };
883 snprintf(index, sizeof(index), "GIT_INDEX_FILE=%s", index_file);
884 if (launch_editor(git_path(commit_editmsg), NULL, env)) {
886 _("Please supply the message using either -m or -F option.\n"));
892 run_hook(index_file, "commit-msg", git_path(commit_editmsg), NULL)) {
899 static int rest_is_empty(struct strbuf *sb, int start)
904 /* Check if the rest is just whitespace and Signed-of-by's. */
905 for (i = start; i < sb->len; i++) {
906 nl = memchr(sb->buf + i, '\n', sb->len - i);
912 if (strlen(sign_off_header) <= eol - i &&
913 starts_with(sb->buf + i, sign_off_header)) {
918 if (!isspace(sb->buf[i++]))
926 * Find out if the message in the strbuf contains only whitespace and
927 * Signed-off-by lines.
929 static int message_is_empty(struct strbuf *sb)
931 if (cleanup_mode == CLEANUP_NONE && sb->len)
933 return rest_is_empty(sb, 0);
937 * See if the user edited the message in the editor or left what
938 * was in the template intact
940 static int template_untouched(struct strbuf *sb)
942 struct strbuf tmpl = STRBUF_INIT;
945 if (cleanup_mode == CLEANUP_NONE && sb->len)
948 if (!template_file || strbuf_read_file(&tmpl, template_file, 0) <= 0)
951 stripspace(&tmpl, cleanup_mode == CLEANUP_ALL);
952 start = (char *)skip_prefix(sb->buf, tmpl.buf);
955 strbuf_release(&tmpl);
956 return rest_is_empty(sb, start - sb->buf);
959 static const char *find_author_by_nickname(const char *name)
961 struct rev_info revs;
962 struct commit *commit;
963 struct strbuf buf = STRBUF_INIT;
964 struct string_list mailmap = STRING_LIST_INIT_NODUP;
968 init_revisions(&revs, NULL);
969 strbuf_addf(&buf, "--author=%s", name);
974 setup_revisions(ac, av, &revs, NULL);
975 revs.mailmap = &mailmap;
976 read_mailmap(revs.mailmap, NULL);
978 prepare_revision_walk(&revs);
979 commit = get_revision(&revs);
981 struct pretty_print_context ctx = {0};
982 ctx.date_mode = DATE_NORMAL;
983 strbuf_release(&buf);
984 format_commit_message(commit, "%aN <%aE>", &buf, &ctx);
985 clear_mailmap(&mailmap);
986 return strbuf_detach(&buf, NULL);
988 die(_("No existing author found with '%s'"), name);
992 static void handle_untracked_files_arg(struct wt_status *s)
994 if (!untracked_files_arg)
995 ; /* default already initialized */
996 else if (!strcmp(untracked_files_arg, "no"))
997 s->show_untracked_files = SHOW_NO_UNTRACKED_FILES;
998 else if (!strcmp(untracked_files_arg, "normal"))
999 s->show_untracked_files = SHOW_NORMAL_UNTRACKED_FILES;
1000 else if (!strcmp(untracked_files_arg, "all"))
1001 s->show_untracked_files = SHOW_ALL_UNTRACKED_FILES;
1003 die(_("Invalid untracked files mode '%s'"), untracked_files_arg);
1006 static const char *read_commit_message(const char *name)
1008 const char *out_enc;
1009 struct commit *commit;
1011 commit = lookup_commit_reference_by_name(name);
1013 die(_("could not lookup commit %s"), name);
1014 out_enc = get_commit_output_encoding();
1015 return logmsg_reencode(commit, NULL, out_enc);
1019 * Enumerate what needs to be propagated when --porcelain
1020 * is not in effect here.
1022 static struct status_deferred_config {
1023 enum status_format status_format;
1025 } status_deferred_config = {
1026 STATUS_FORMAT_UNSPECIFIED,
1027 -1 /* unspecified */
1030 static void finalize_deferred_config(struct wt_status *s)
1032 int use_deferred_config = (status_format != STATUS_FORMAT_PORCELAIN &&
1033 !s->null_termination);
1035 if (s->null_termination) {
1036 if (status_format == STATUS_FORMAT_NONE ||
1037 status_format == STATUS_FORMAT_UNSPECIFIED)
1038 status_format = STATUS_FORMAT_PORCELAIN;
1039 else if (status_format == STATUS_FORMAT_LONG)
1040 die(_("--long and -z are incompatible"));
1043 if (use_deferred_config && status_format == STATUS_FORMAT_UNSPECIFIED)
1044 status_format = status_deferred_config.status_format;
1045 if (status_format == STATUS_FORMAT_UNSPECIFIED)
1046 status_format = STATUS_FORMAT_NONE;
1048 if (use_deferred_config && s->show_branch < 0)
1049 s->show_branch = status_deferred_config.show_branch;
1050 if (s->show_branch < 0)
1054 static int parse_and_validate_options(int argc, const char *argv[],
1055 const struct option *options,
1056 const char * const usage[],
1058 struct commit *current_head,
1059 struct wt_status *s)
1063 argc = parse_options(argc, argv, prefix, options, usage, 0);
1064 finalize_deferred_config(s);
1066 if (force_author && !strchr(force_author, '>'))
1067 force_author = find_author_by_nickname(force_author);
1069 if (force_author && renew_authorship)
1070 die(_("Using both --reset-author and --author does not make sense"));
1072 if (logfile || have_option_m || use_message || fixup_message)
1075 use_editor = edit_flag;
1077 setenv("GIT_EDITOR", ":", 1);
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 nor -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);
1418 status = git_gpg_config(k, v, NULL);
1421 return git_status_config(k, v, s);
1424 static int run_rewrite_hook(const unsigned char *oldsha1,
1425 const unsigned char *newsha1)
1427 /* oldsha1 SP newsha1 LF NUL */
1428 static char buf[2*40 + 3];
1429 struct child_process proc;
1430 const char *argv[3];
1434 argv[0] = find_hook("post-rewrite");
1441 memset(&proc, 0, sizeof(proc));
1444 proc.stdout_to_stderr = 1;
1446 code = start_command(&proc);
1449 n = snprintf(buf, sizeof(buf), "%s %s\n",
1450 sha1_to_hex(oldsha1), sha1_to_hex(newsha1));
1451 write_in_full(proc.in, buf, n);
1453 return finish_command(&proc);
1456 int cmd_commit(int argc, const char **argv, const char *prefix)
1458 static struct wt_status s;
1459 static struct option builtin_commit_options[] = {
1460 OPT__QUIET(&quiet, N_("suppress summary after successful commit")),
1461 OPT__VERBOSE(&verbose, N_("show diff in commit message template")),
1463 OPT_GROUP(N_("Commit message options")),
1464 OPT_FILENAME('F', "file", &logfile, N_("read message from file")),
1465 OPT_STRING(0, "author", &force_author, N_("author"), N_("override author for commit")),
1466 OPT_STRING(0, "date", &force_date, N_("date"), N_("override date for commit")),
1467 OPT_CALLBACK('m', "message", &message, N_("message"), N_("commit message"), opt_parse_m),
1468 OPT_STRING('c', "reedit-message", &edit_message, N_("commit"), N_("reuse and edit message from specified commit")),
1469 OPT_STRING('C', "reuse-message", &use_message, N_("commit"), N_("reuse message from specified commit")),
1470 OPT_STRING(0, "fixup", &fixup_message, N_("commit"), N_("use autosquash formatted message to fixup specified commit")),
1471 OPT_STRING(0, "squash", &squash_message, N_("commit"), N_("use autosquash formatted message to squash specified commit")),
1472 OPT_BOOL(0, "reset-author", &renew_authorship, N_("the commit is authored by me now (used with -C/-c/--amend)")),
1473 OPT_BOOL('s', "signoff", &signoff, N_("add Signed-off-by:")),
1474 OPT_FILENAME('t', "template", &template_file, N_("use specified template file")),
1475 OPT_BOOL('e', "edit", &edit_flag, N_("force edit of commit")),
1476 OPT_STRING(0, "cleanup", &cleanup_arg, N_("default"), N_("how to strip spaces and #comments from message")),
1477 OPT_BOOL(0, "status", &include_status, N_("include status in commit message template")),
1478 { OPTION_STRING, 'S', "gpg-sign", &sign_commit, N_("key id"),
1479 N_("GPG sign commit"), PARSE_OPT_OPTARG, NULL, (intptr_t) "" },
1480 /* end commit message options */
1482 OPT_GROUP(N_("Commit contents options")),
1483 OPT_BOOL('a', "all", &all, N_("commit all changed files")),
1484 OPT_BOOL('i', "include", &also, N_("add specified files to index for commit")),
1485 OPT_BOOL(0, "interactive", &interactive, N_("interactively add files")),
1486 OPT_BOOL('p', "patch", &patch_interactive, N_("interactively add changes")),
1487 OPT_BOOL('o', "only", &only, N_("commit only specified files")),
1488 OPT_BOOL('n', "no-verify", &no_verify, N_("bypass pre-commit hook")),
1489 OPT_BOOL(0, "dry-run", &dry_run, N_("show what would be committed")),
1490 OPT_SET_INT(0, "short", &status_format, N_("show status concisely"),
1491 STATUS_FORMAT_SHORT),
1492 OPT_BOOL(0, "branch", &s.show_branch, N_("show branch information")),
1493 OPT_SET_INT(0, "porcelain", &status_format,
1494 N_("machine-readable output"), STATUS_FORMAT_PORCELAIN),
1495 OPT_SET_INT(0, "long", &status_format,
1496 N_("show status in long format (default)"),
1497 STATUS_FORMAT_LONG),
1498 OPT_BOOL('z', "null", &s.null_termination,
1499 N_("terminate entries with NUL")),
1500 OPT_BOOL(0, "amend", &amend, N_("amend previous commit")),
1501 OPT_BOOL(0, "no-post-rewrite", &no_post_rewrite, N_("bypass post-rewrite hook")),
1502 { 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" },
1503 /* end commit contents options */
1505 OPT_HIDDEN_BOOL(0, "allow-empty", &allow_empty,
1506 N_("ok to record an empty change")),
1507 OPT_HIDDEN_BOOL(0, "allow-empty-message", &allow_empty_message,
1508 N_("ok to record a change with an empty message")),
1513 struct strbuf sb = STRBUF_INIT;
1514 struct strbuf author_ident = STRBUF_INIT;
1515 const char *index_file, *reflog_msg;
1517 unsigned char sha1[20];
1518 struct ref_lock *ref_lock;
1519 struct commit_list *parents = NULL, **pptr = &parents;
1520 struct stat statbuf;
1521 int allow_fast_forward = 1;
1522 struct commit *current_head = NULL;
1523 struct commit_extra_header *extra = NULL;
1525 if (argc == 2 && !strcmp(argv[1], "-h"))
1526 usage_with_options(builtin_commit_usage, builtin_commit_options);
1528 status_init_config(&s, git_commit_config);
1529 status_format = STATUS_FORMAT_NONE; /* Ignore status.short */
1532 if (get_sha1("HEAD", sha1))
1533 current_head = NULL;
1535 current_head = lookup_commit_or_die(sha1, "HEAD");
1536 if (parse_commit(current_head))
1537 die(_("could not parse HEAD commit"));
1539 argc = parse_and_validate_options(argc, argv, builtin_commit_options,
1540 builtin_commit_usage,
1541 prefix, current_head, &s);
1543 return dry_run_commit(argc, argv, prefix, current_head, &s);
1544 index_file = prepare_index(argc, argv, prefix, current_head, 0);
1546 /* Set up everything for writing the commit object. This includes
1547 running hooks, writing the trees, and interacting with the user. */
1548 if (!prepare_to_commit(index_file, prefix,
1549 current_head, &s, &author_ident)) {
1550 rollback_index_files();
1554 /* Determine parents */
1555 reflog_msg = getenv("GIT_REFLOG_ACTION");
1556 if (!current_head) {
1558 reflog_msg = "commit (initial)";
1560 struct commit_list *c;
1563 reflog_msg = "commit (amend)";
1564 for (c = current_head->parents; c; c = c->next)
1565 pptr = &commit_list_insert(c->item, pptr)->next;
1566 } else if (whence == FROM_MERGE) {
1567 struct strbuf m = STRBUF_INIT;
1571 reflog_msg = "commit (merge)";
1572 pptr = &commit_list_insert(current_head, pptr)->next;
1573 fp = fopen(git_path("MERGE_HEAD"), "r");
1575 die_errno(_("could not open '%s' for reading"),
1576 git_path("MERGE_HEAD"));
1577 while (strbuf_getline(&m, fp, '\n') != EOF) {
1578 struct commit *parent;
1580 parent = get_merge_parent(m.buf);
1582 die(_("Corrupt MERGE_HEAD file (%s)"), m.buf);
1583 pptr = &commit_list_insert(parent, pptr)->next;
1587 if (!stat(git_path("MERGE_MODE"), &statbuf)) {
1588 if (strbuf_read_file(&sb, git_path("MERGE_MODE"), 0) < 0)
1589 die_errno(_("could not read MERGE_MODE"));
1590 if (!strcmp(sb.buf, "no-ff"))
1591 allow_fast_forward = 0;
1593 if (allow_fast_forward)
1594 parents = reduce_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_hook(get_index_file(), "post-commit", NULL);
1681 if (amend && !no_post_rewrite) {
1682 struct notes_rewrite_cfg *cfg;
1683 cfg = init_copy_notes_for_rewrite("amend");
1685 /* we are amending, so current_head is not NULL */
1686 copy_note_for_rewrite(cfg, current_head->object.sha1, sha1);
1687 finish_copy_notes_for_rewrite(cfg, "Notes added by 'git commit --amend'");
1689 run_rewrite_hook(current_head->object.sha1, sha1);
1692 print_summary(prefix, sha1, !current_head);