4 * Copyright (c) 2007 Kristian Høgsberg <krh@redhat.com>
5 * Based on git-commit.sh by Junio C Hamano and Linus Torvalds
10 #include "cache-tree.h"
18 #include "wt-status.h"
19 #include "run-command.h"
24 #include "parse-options.h"
25 #include "string-list.h"
27 #include "unpack-trees.h"
29 #include "submodule.h"
30 #include "gpg-interface.h"
32 #include "sequencer.h"
33 #include "notes-utils.h"
37 static const char * const builtin_commit_usage[] = {
38 N_("git commit [<options>] [--] <pathspec>..."),
42 static const char * const builtin_status_usage[] = {
43 N_("git status [<options>] [--] <pathspec>..."),
47 static const char implicit_ident_advice_noconfig[] =
48 N_("Your name and email address were configured automatically based\n"
49 "on your username and hostname. Please check that they are accurate.\n"
50 "You can suppress this message by setting them explicitly. Run the\n"
51 "following command and follow the instructions in your editor to edit\n"
52 "your configuration file:\n"
54 " git config --global --edit\n"
56 "After doing this, you may fix the identity used for this commit with:\n"
58 " git commit --amend --reset-author\n");
60 static const char implicit_ident_advice_config[] =
61 N_("Your name and email address were configured automatically based\n"
62 "on your username and hostname. Please check that they are accurate.\n"
63 "You can suppress this message by setting them explicitly:\n"
65 " git config --global user.name \"Your Name\"\n"
66 " git config --global user.email you@example.com\n"
68 "After doing this, you may fix the identity used for this commit with:\n"
70 " git commit --amend --reset-author\n");
72 static const char empty_amend_advice[] =
73 N_("You asked to amend the most recent commit, but doing so would make\n"
74 "it empty. You can repeat your command with --allow-empty, or you can\n"
75 "remove the commit entirely with \"git reset HEAD^\".\n");
77 static const char empty_cherry_pick_advice[] =
78 N_("The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
79 "If you wish to commit it anyway, use:\n"
81 " git commit --allow-empty\n"
84 static const char empty_cherry_pick_advice_single[] =
85 N_("Otherwise, please use 'git reset'\n");
87 static const char empty_cherry_pick_advice_multi[] =
88 N_("If you wish to skip this commit, use:\n"
92 "Then \"git cherry-pick --continue\" will resume cherry-picking\n"
93 "the remaining commits.\n");
95 static GIT_PATH_FUNC(git_path_commit_editmsg, "COMMIT_EDITMSG")
97 static const char *use_message_buffer;
98 static struct lock_file index_lock; /* real index */
99 static struct lock_file false_lock; /* used only for partial commits */
106 static const char *logfile, *force_author;
107 static const char *template_file;
109 * The _message variables are commit names from which to take
110 * the commit message and/or authorship.
112 static const char *author_message, *author_message_buffer;
113 static char *edit_message, *use_message;
114 static char *fixup_message, *squash_message;
115 static int all, also, interactive, patch_interactive, only, amend, signoff;
116 static int edit_flag = -1; /* unspecified */
117 static int quiet, verbose, no_verify, allow_empty, dry_run, renew_authorship;
118 static int config_commit_verbose = -1; /* unspecified */
119 static int no_post_rewrite, allow_empty_message;
120 static char *untracked_files_arg, *force_date, *ignore_submodule_arg;
121 static char *sign_commit;
124 * The default commit message cleanup mode will remove the lines
125 * beginning with # (shell comments) and leading and trailing
126 * whitespaces (empty lines or containing only whitespaces)
127 * if editor is used, and only the whitespaces if the message
128 * is specified explicitly.
136 static const char *cleanup_arg;
138 static enum commit_whence whence;
139 static int sequencer_in_use;
140 static int use_editor = 1, include_status = 1;
141 static int show_ignored_in_status, have_option_m;
142 static struct strbuf message = STRBUF_INIT;
144 static enum wt_status_format status_format = STATUS_FORMAT_UNSPECIFIED;
146 static int opt_parse_porcelain(const struct option *opt, const char *arg, int unset)
148 enum wt_status_format *value = (enum wt_status_format *)opt->value;
150 *value = STATUS_FORMAT_NONE;
152 *value = STATUS_FORMAT_PORCELAIN;
153 else if (!strcmp(arg, "v1") || !strcmp(arg, "1"))
154 *value = STATUS_FORMAT_PORCELAIN;
155 else if (!strcmp(arg, "v2") || !strcmp(arg, "2"))
156 *value = STATUS_FORMAT_PORCELAIN_V2;
158 die("unsupported porcelain version '%s'", arg);
163 static int opt_parse_m(const struct option *opt, const char *arg, int unset)
165 struct strbuf *buf = opt->value;
168 strbuf_setlen(buf, 0);
172 strbuf_addch(buf, '\n');
173 strbuf_addstr(buf, arg);
174 strbuf_complete_line(buf);
179 static void determine_whence(struct wt_status *s)
181 if (file_exists(git_path_merge_head()))
183 else if (file_exists(git_path_cherry_pick_head())) {
184 whence = FROM_CHERRY_PICK;
185 if (file_exists(git_path_seq_dir()))
186 sequencer_in_use = 1;
189 whence = FROM_COMMIT;
194 static void status_init_config(struct wt_status *s, config_fn_t fn)
196 wt_status_prepare(s);
200 init_diff_ui_defaults();
201 s->hints = advice_status_hints; /* must come after git_config() */
204 static void rollback_index_files(void)
206 switch (commit_style) {
208 break; /* nothing to do */
210 rollback_lock_file(&index_lock);
213 rollback_lock_file(&index_lock);
214 rollback_lock_file(&false_lock);
219 static int commit_index_files(void)
223 switch (commit_style) {
225 break; /* nothing to do */
227 err = commit_lock_file(&index_lock);
230 err = commit_lock_file(&index_lock);
231 rollback_lock_file(&false_lock);
239 * Take a union of paths in the index and the named tree (typically, "HEAD"),
240 * and return the paths that match the given pattern in list.
242 static int list_paths(struct string_list *list, const char *with_tree,
243 const char *prefix, const struct pathspec *pattern)
251 m = xcalloc(1, pattern->nr);
254 char *max_prefix = common_prefix(pattern);
255 overlay_tree_on_cache(with_tree, max_prefix ? max_prefix : prefix);
259 for (i = 0; i < active_nr; i++) {
260 const struct cache_entry *ce = active_cache[i];
261 struct string_list_item *item;
263 if (ce->ce_flags & CE_UPDATE)
265 if (!ce_path_match(ce, pattern, m))
267 item = string_list_insert(list, ce->name);
268 if (ce_skip_worktree(ce))
269 item->util = item; /* better a valid pointer than a fake one */
272 ret = report_path_error(m, pattern, prefix);
277 static void add_remove_files(struct string_list *list)
280 for (i = 0; i < list->nr; i++) {
282 struct string_list_item *p = &(list->items[i]);
284 /* p->util is skip-worktree */
288 if (!lstat(p->string, &st)) {
289 if (add_to_cache(p->string, &st, 0))
290 die(_("updating files failed"));
292 remove_file_from_cache(p->string);
296 static void create_base_index(const struct commit *current_head)
299 struct unpack_trees_options opts;
307 memset(&opts, 0, sizeof(opts));
311 opts.src_index = &the_index;
312 opts.dst_index = &the_index;
314 opts.fn = oneway_merge;
315 tree = parse_tree_indirect(current_head->object.oid.hash);
317 die(_("failed to unpack HEAD tree object"));
319 init_tree_desc(&t, tree->buffer, tree->size);
320 if (unpack_trees(1, &t, &opts))
321 exit(128); /* We've already reported the error, finish dying */
324 static void refresh_cache_or_die(int refresh_flags)
327 * refresh_flags contains REFRESH_QUIET, so the only errors
328 * are for unmerged entries.
330 if (refresh_cache(refresh_flags | REFRESH_IN_PORCELAIN))
331 die_resolve_conflict("commit");
334 static const char *prepare_index(int argc, const char **argv, const char *prefix,
335 const struct commit *current_head, int is_status)
337 struct string_list partial;
338 struct pathspec pathspec;
339 int refresh_flags = REFRESH_QUIET;
343 refresh_flags |= REFRESH_UNMERGED;
344 parse_pathspec(&pathspec, 0,
345 PATHSPEC_PREFER_FULL,
348 if (read_cache_preload(&pathspec) < 0)
349 die(_("index file corrupt"));
352 char *old_index_env = NULL;
353 hold_locked_index(&index_lock, LOCK_DIE_ON_ERROR);
355 refresh_cache_or_die(refresh_flags);
357 if (write_locked_index(&the_index, &index_lock, CLOSE_LOCK))
358 die(_("unable to create temporary index"));
360 old_index_env = getenv(INDEX_ENVIRONMENT);
361 setenv(INDEX_ENVIRONMENT, get_lock_file_path(&index_lock), 1);
363 if (interactive_add(argc, argv, prefix, patch_interactive) != 0)
364 die(_("interactive add failed"));
366 if (old_index_env && *old_index_env)
367 setenv(INDEX_ENVIRONMENT, old_index_env, 1);
369 unsetenv(INDEX_ENVIRONMENT);
372 read_cache_from(get_lock_file_path(&index_lock));
373 if (update_main_cache_tree(WRITE_TREE_SILENT) == 0) {
374 if (reopen_lock_file(&index_lock) < 0)
375 die(_("unable to write index file"));
376 if (write_locked_index(&the_index, &index_lock, CLOSE_LOCK))
377 die(_("unable to update temporary index"));
379 warning(_("Failed to update main cache tree"));
381 commit_style = COMMIT_NORMAL;
382 return get_lock_file_path(&index_lock);
386 * Non partial, non as-is commit.
388 * (1) get the real index;
389 * (2) update the_index as necessary;
390 * (3) write the_index out to the real index (still locked);
391 * (4) return the name of the locked index file.
393 * The caller should run hooks on the locked real index, and
394 * (A) if all goes well, commit the real index;
395 * (B) on failure, rollback the real index.
397 if (all || (also && pathspec.nr)) {
398 hold_locked_index(&index_lock, LOCK_DIE_ON_ERROR);
399 add_files_to_cache(also ? prefix : NULL, &pathspec, 0);
400 refresh_cache_or_die(refresh_flags);
401 update_main_cache_tree(WRITE_TREE_SILENT);
402 if (write_locked_index(&the_index, &index_lock, CLOSE_LOCK))
403 die(_("unable to write new_index file"));
404 commit_style = COMMIT_NORMAL;
405 return get_lock_file_path(&index_lock);
411 * (1) return the name of the real index file.
413 * The caller should run hooks on the real index,
414 * and create commit from the_index.
415 * We still need to refresh the index here.
417 if (!only && !pathspec.nr) {
418 hold_locked_index(&index_lock, LOCK_DIE_ON_ERROR);
419 refresh_cache_or_die(refresh_flags);
420 if (active_cache_changed
421 || !cache_tree_fully_valid(active_cache_tree))
422 update_main_cache_tree(WRITE_TREE_SILENT);
423 if (active_cache_changed) {
424 if (write_locked_index(&the_index, &index_lock,
426 die(_("unable to write new_index file"));
428 rollback_lock_file(&index_lock);
430 commit_style = COMMIT_AS_IS;
431 return get_index_file();
437 * (0) find the set of affected paths;
438 * (1) get lock on the real index file;
439 * (2) update the_index with the given paths;
440 * (3) write the_index out to the real index (still locked);
441 * (4) get lock on the false index file;
442 * (5) reset the_index from HEAD;
443 * (6) update the_index the same way as (2);
444 * (7) write the_index out to the false index file;
445 * (8) return the name of the false index file (still locked);
447 * The caller should run hooks on the locked false index, and
448 * create commit from it. Then
449 * (A) if all goes well, commit the real index;
450 * (B) on failure, rollback the real index;
451 * In either case, rollback the false index.
453 commit_style = COMMIT_PARTIAL;
455 if (whence != FROM_COMMIT) {
456 if (whence == FROM_MERGE)
457 die(_("cannot do a partial commit during a merge."));
458 else if (whence == FROM_CHERRY_PICK)
459 die(_("cannot do a partial commit during a cherry-pick."));
462 string_list_init(&partial, 1);
463 if (list_paths(&partial, !current_head ? NULL : "HEAD", prefix, &pathspec))
467 if (read_cache() < 0)
468 die(_("cannot read the index"));
470 hold_locked_index(&index_lock, LOCK_DIE_ON_ERROR);
471 add_remove_files(&partial);
472 refresh_cache(REFRESH_QUIET);
473 update_main_cache_tree(WRITE_TREE_SILENT);
474 if (write_locked_index(&the_index, &index_lock, CLOSE_LOCK))
475 die(_("unable to write new_index file"));
477 hold_lock_file_for_update(&false_lock,
478 git_path("next-index-%"PRIuMAX,
479 (uintmax_t) getpid()),
482 create_base_index(current_head);
483 add_remove_files(&partial);
484 refresh_cache(REFRESH_QUIET);
486 if (write_locked_index(&the_index, &false_lock, CLOSE_LOCK))
487 die(_("unable to write temporary index file"));
490 ret = get_lock_file_path(&false_lock);
491 read_cache_from(ret);
495 static int run_status(FILE *fp, const char *index_file, const char *prefix, int nowarn,
498 struct object_id oid;
500 if (s->relative_paths)
505 s->reference = "HEAD^1";
507 s->verbose = verbose;
508 s->index_file = index_file;
511 s->is_initial = get_sha1(s->reference, oid.hash) ? 1 : 0;
513 hashcpy(s->sha1_commit, oid.hash);
514 s->status_format = status_format;
515 s->ignore_submodule_arg = ignore_submodule_arg;
517 wt_status_collect(s);
520 return s->commitable;
523 static int is_a_merge(const struct commit *current_head)
525 return !!(current_head->parents && current_head->parents->next);
528 static void assert_split_ident(struct ident_split *id, const struct strbuf *buf)
530 if (split_ident_line(id, buf->buf, buf->len) || !id->date_begin)
531 die("BUG: unable to parse our own ident: %s", buf->buf);
534 static void export_one(const char *var, const char *s, const char *e, int hack)
536 struct strbuf buf = STRBUF_INIT;
538 strbuf_addch(&buf, hack);
539 strbuf_addf(&buf, "%.*s", (int)(e - s), s);
540 setenv(var, buf.buf, 1);
541 strbuf_release(&buf);
544 static int parse_force_date(const char *in, struct strbuf *out)
546 strbuf_addch(out, '@');
548 if (parse_date(in, out) < 0) {
550 unsigned long t = approxidate_careful(in, &errors);
553 strbuf_addf(out, "%lu", t);
559 static void set_ident_var(char **buf, char *val)
565 static void determine_author_info(struct strbuf *author_ident)
567 char *name, *email, *date;
568 struct ident_split author;
570 name = xstrdup_or_null(getenv("GIT_AUTHOR_NAME"));
571 email = xstrdup_or_null(getenv("GIT_AUTHOR_EMAIL"));
572 date = xstrdup_or_null(getenv("GIT_AUTHOR_DATE"));
574 if (author_message) {
575 struct ident_split ident;
579 a = find_commit_header(author_message_buffer, "author", &len);
581 die(_("commit '%s' lacks author header"), author_message);
582 if (split_ident_line(&ident, a, len) < 0)
583 die(_("commit '%s' has malformed author line"), author_message);
585 set_ident_var(&name, xmemdupz(ident.name_begin, ident.name_end - ident.name_begin));
586 set_ident_var(&email, xmemdupz(ident.mail_begin, ident.mail_end - ident.mail_begin));
588 if (ident.date_begin) {
589 struct strbuf date_buf = STRBUF_INIT;
590 strbuf_addch(&date_buf, '@');
591 strbuf_add(&date_buf, ident.date_begin, ident.date_end - ident.date_begin);
592 strbuf_addch(&date_buf, ' ');
593 strbuf_add(&date_buf, ident.tz_begin, ident.tz_end - ident.tz_begin);
594 set_ident_var(&date, strbuf_detach(&date_buf, NULL));
599 struct ident_split ident;
601 if (split_ident_line(&ident, force_author, strlen(force_author)) < 0)
602 die(_("malformed --author parameter"));
603 set_ident_var(&name, xmemdupz(ident.name_begin, ident.name_end - ident.name_begin));
604 set_ident_var(&email, xmemdupz(ident.mail_begin, ident.mail_end - ident.mail_begin));
608 struct strbuf date_buf = STRBUF_INIT;
609 if (parse_force_date(force_date, &date_buf))
610 die(_("invalid date format: %s"), force_date);
611 set_ident_var(&date, strbuf_detach(&date_buf, NULL));
614 strbuf_addstr(author_ident, fmt_ident(name, email, date, IDENT_STRICT));
615 assert_split_ident(&author, author_ident);
616 export_one("GIT_AUTHOR_NAME", author.name_begin, author.name_end, 0);
617 export_one("GIT_AUTHOR_EMAIL", author.mail_begin, author.mail_end, 0);
618 export_one("GIT_AUTHOR_DATE", author.date_begin, author.tz_end, '@');
624 static int author_date_is_interesting(void)
626 return author_message || force_date;
629 static void adjust_comment_line_char(const struct strbuf *sb)
631 char candidates[] = "#;@!$%^&|:";
635 comment_line_char = candidates[0];
636 if (!memchr(sb->buf, comment_line_char, sb->len))
640 candidate = strchr(candidates, *p);
643 for (p = sb->buf; *p; p++) {
644 if ((p[0] == '\n' || p[0] == '\r') && p[1]) {
645 candidate = strchr(candidates, p[1]);
651 for (p = candidates; *p == ' '; p++)
654 die(_("unable to select a comment character that is not used\n"
655 "in the current commit message"));
656 comment_line_char = *p;
659 static int prepare_to_commit(const char *index_file, const char *prefix,
660 struct commit *current_head,
662 struct strbuf *author_ident)
665 struct strbuf committer_ident = STRBUF_INIT;
667 struct strbuf sb = STRBUF_INIT;
668 const char *hook_arg1 = NULL;
669 const char *hook_arg2 = NULL;
670 int clean_message_contents = (cleanup_mode != CLEANUP_NONE);
671 int old_display_comment_prefix;
673 /* This checks and barfs if author is badly specified */
674 determine_author_info(author_ident);
676 if (!no_verify && run_commit_hook(use_editor, index_file, "pre-commit", NULL))
679 if (squash_message) {
681 * Insert the proper subject line before other commit
682 * message options add their content.
684 if (use_message && !strcmp(use_message, squash_message))
685 strbuf_addstr(&sb, "squash! ");
687 struct pretty_print_context ctx = {0};
689 c = lookup_commit_reference_by_name(squash_message);
691 die(_("could not lookup commit %s"), squash_message);
692 ctx.output_encoding = get_commit_output_encoding();
693 format_commit_message(c, "squash! %s\n\n", &sb,
699 strbuf_addbuf(&sb, &message);
700 hook_arg1 = "message";
701 } else if (logfile && !strcmp(logfile, "-")) {
703 fprintf(stderr, _("(reading log message from standard input)\n"));
704 if (strbuf_read(&sb, 0, 0) < 0)
705 die_errno(_("could not read log from standard input"));
706 hook_arg1 = "message";
707 } else if (logfile) {
708 if (strbuf_read_file(&sb, logfile, 0) < 0)
709 die_errno(_("could not read log file '%s'"),
711 hook_arg1 = "message";
712 } else if (use_message) {
714 buffer = strstr(use_message_buffer, "\n\n");
716 strbuf_addstr(&sb, skip_blank_lines(buffer + 2));
717 hook_arg1 = "commit";
718 hook_arg2 = use_message;
719 } else if (fixup_message) {
720 struct pretty_print_context ctx = {0};
721 struct commit *commit;
722 commit = lookup_commit_reference_by_name(fixup_message);
724 die(_("could not lookup commit %s"), fixup_message);
725 ctx.output_encoding = get_commit_output_encoding();
726 format_commit_message(commit, "fixup! %s\n\n",
728 hook_arg1 = "message";
729 } else if (!stat(git_path_merge_msg(), &statbuf)) {
731 * prepend SQUASH_MSG here if it exists and a
732 * "merge --squash" was originally performed
734 if (!stat(git_path_squash_msg(), &statbuf)) {
735 if (strbuf_read_file(&sb, git_path_squash_msg(), 0) < 0)
736 die_errno(_("could not read SQUASH_MSG"));
737 hook_arg1 = "squash";
740 if (strbuf_read_file(&sb, git_path_merge_msg(), 0) < 0)
741 die_errno(_("could not read MERGE_MSG"));
742 } else if (!stat(git_path_squash_msg(), &statbuf)) {
743 if (strbuf_read_file(&sb, git_path_squash_msg(), 0) < 0)
744 die_errno(_("could not read SQUASH_MSG"));
745 hook_arg1 = "squash";
746 } else if (template_file) {
747 if (strbuf_read_file(&sb, template_file, 0) < 0)
748 die_errno(_("could not read '%s'"), template_file);
749 hook_arg1 = "template";
750 clean_message_contents = 0;
754 * The remaining cases don't modify the template message, but
755 * just set the argument(s) to the prepare-commit-msg hook.
757 else if (whence == FROM_MERGE)
759 else if (whence == FROM_CHERRY_PICK) {
760 hook_arg1 = "commit";
761 hook_arg2 = "CHERRY_PICK_HEAD";
764 if (squash_message) {
766 * If squash_commit was used for the commit subject,
767 * then we're possibly hijacking other commit log options.
768 * Reset the hook args to tell the real story.
770 hook_arg1 = "message";
774 s->fp = fopen_for_writing(git_path_commit_editmsg());
776 die_errno(_("could not open '%s'"), git_path_commit_editmsg());
778 /* Ignore status.displayCommentPrefix: we do need comments in COMMIT_EDITMSG. */
779 old_display_comment_prefix = s->display_comment_prefix;
780 s->display_comment_prefix = 1;
783 * Most hints are counter-productive when the commit has
788 if (clean_message_contents)
789 strbuf_stripspace(&sb, 0);
792 append_signoff(&sb, ignore_non_trailer(sb.buf, sb.len), 0);
794 if (fwrite(sb.buf, 1, sb.len, s->fp) < sb.len)
795 die_errno(_("could not write commit template"));
797 if (auto_comment_line_char)
798 adjust_comment_line_char(&sb);
801 /* This checks if committer ident is explicitly given */
802 strbuf_addstr(&committer_ident, git_committer_info(IDENT_STRICT));
803 if (use_editor && include_status) {
805 int saved_color_setting;
806 struct ident_split ci, ai;
808 if (whence != FROM_COMMIT) {
809 if (cleanup_mode == CLEANUP_SCISSORS)
810 wt_status_add_cut_line(s->fp);
811 status_printf_ln(s, GIT_COLOR_NORMAL,
814 "It looks like you may be committing a merge.\n"
815 "If this is not correct, please remove the file\n"
819 "It looks like you may be committing a cherry-pick.\n"
820 "If this is not correct, please remove the file\n"
823 whence == FROM_MERGE ?
824 git_path_merge_head() :
825 git_path_cherry_pick_head());
828 fprintf(s->fp, "\n");
829 if (cleanup_mode == CLEANUP_ALL)
830 status_printf(s, GIT_COLOR_NORMAL,
831 _("Please enter the commit message for your changes."
832 " Lines starting\nwith '%c' will be ignored, and an empty"
833 " message aborts the commit.\n"), comment_line_char);
834 else if (cleanup_mode == CLEANUP_SCISSORS && whence == FROM_COMMIT)
835 wt_status_add_cut_line(s->fp);
836 else /* CLEANUP_SPACE, that is. */
837 status_printf(s, GIT_COLOR_NORMAL,
838 _("Please enter the commit message for your changes."
840 "with '%c' will be kept; you may remove them"
841 " yourself if you want to.\n"
842 "An empty message aborts the commit.\n"), comment_line_char);
845 * These should never fail because they come from our own
846 * fmt_ident. They may fail the sane_ident test, but we know
847 * that the name and mail pointers will at least be valid,
848 * which is enough for our tests and printing here.
850 assert_split_ident(&ai, author_ident);
851 assert_split_ident(&ci, &committer_ident);
853 if (ident_cmp(&ai, &ci))
854 status_printf_ln(s, GIT_COLOR_NORMAL,
856 "Author: %.*s <%.*s>"),
857 ident_shown++ ? "" : "\n",
858 (int)(ai.name_end - ai.name_begin), ai.name_begin,
859 (int)(ai.mail_end - ai.mail_begin), ai.mail_begin);
861 if (author_date_is_interesting())
862 status_printf_ln(s, GIT_COLOR_NORMAL,
865 ident_shown++ ? "" : "\n",
866 show_ident_date(&ai, DATE_MODE(NORMAL)));
868 if (!committer_ident_sufficiently_given())
869 status_printf_ln(s, GIT_COLOR_NORMAL,
871 "Committer: %.*s <%.*s>"),
872 ident_shown++ ? "" : "\n",
873 (int)(ci.name_end - ci.name_begin), ci.name_begin,
874 (int)(ci.mail_end - ci.mail_begin), ci.mail_begin);
876 status_printf_ln(s, GIT_COLOR_NORMAL, "%s", ""); /* Add new line for clarity */
878 saved_color_setting = s->use_color;
880 commitable = run_status(s->fp, index_file, prefix, 1, s);
881 s->use_color = saved_color_setting;
883 struct object_id oid;
884 const char *parent = "HEAD";
886 if (!active_nr && read_cache() < 0)
887 die(_("Cannot read index"));
892 if (get_sha1(parent, oid.hash)) {
895 for (i = 0; i < active_nr; i++)
896 if (ce_intent_to_add(active_cache[i]))
898 commitable = active_nr - ita_nr > 0;
901 * Unless the user did explicitly request a submodule
902 * ignore mode by passing a command line option we do
903 * not ignore any changed submodule SHA-1s when
904 * comparing index and parent, no matter what is
905 * configured. Otherwise we won't commit any
906 * submodules which were manually staged, which would
907 * be really confusing.
909 int diff_flags = DIFF_OPT_OVERRIDE_SUBMODULE_CONFIG;
910 if (ignore_submodule_arg &&
911 !strcmp(ignore_submodule_arg, "all"))
912 diff_flags |= DIFF_OPT_IGNORE_SUBMODULES;
913 commitable = index_differs_from(parent, diff_flags, 1);
916 strbuf_release(&committer_ident);
921 * Reject an attempt to record a non-merge empty commit without
922 * explicit --allow-empty. In the cherry-pick case, it may be
923 * empty due to conflict resolution, which the user should okay.
925 if (!commitable && whence != FROM_MERGE && !allow_empty &&
926 !(amend && is_a_merge(current_head))) {
927 s->display_comment_prefix = old_display_comment_prefix;
928 run_status(stdout, index_file, prefix, 0, s);
930 fputs(_(empty_amend_advice), stderr);
931 else if (whence == FROM_CHERRY_PICK) {
932 fputs(_(empty_cherry_pick_advice), stderr);
933 if (!sequencer_in_use)
934 fputs(_(empty_cherry_pick_advice_single), stderr);
936 fputs(_(empty_cherry_pick_advice_multi), stderr);
942 * Re-read the index as pre-commit hook could have updated it,
943 * and write it out as a tree. We must do this before we invoke
944 * the editor and after we invoke run_status above.
947 read_cache_from(index_file);
948 if (update_main_cache_tree(0)) {
949 error(_("Error building trees"));
953 if (run_commit_hook(use_editor, index_file, "prepare-commit-msg",
954 git_path_commit_editmsg(), hook_arg1, hook_arg2, NULL))
958 struct argv_array env = ARGV_ARRAY_INIT;
960 argv_array_pushf(&env, "GIT_INDEX_FILE=%s", index_file);
961 if (launch_editor(git_path_commit_editmsg(), NULL, env.argv)) {
963 _("Please supply the message using either -m or -F option.\n"));
966 argv_array_clear(&env);
970 run_commit_hook(use_editor, index_file, "commit-msg", git_path_commit_editmsg(), NULL)) {
977 static int rest_is_empty(struct strbuf *sb, int start)
982 /* Check if the rest is just whitespace and Signed-of-by's. */
983 for (i = start; i < sb->len; i++) {
984 nl = memchr(sb->buf + i, '\n', sb->len - i);
990 if (strlen(sign_off_header) <= eol - i &&
991 starts_with(sb->buf + i, sign_off_header)) {
996 if (!isspace(sb->buf[i++]))
1004 * Find out if the message in the strbuf contains only whitespace and
1005 * Signed-off-by lines.
1007 static int message_is_empty(struct strbuf *sb)
1009 if (cleanup_mode == CLEANUP_NONE && sb->len)
1011 return rest_is_empty(sb, 0);
1015 * See if the user edited the message in the editor or left what
1016 * was in the template intact
1018 static int template_untouched(struct strbuf *sb)
1020 struct strbuf tmpl = STRBUF_INIT;
1023 if (cleanup_mode == CLEANUP_NONE && sb->len)
1026 if (!template_file || strbuf_read_file(&tmpl, template_file, 0) <= 0)
1029 strbuf_stripspace(&tmpl, cleanup_mode == CLEANUP_ALL);
1030 if (!skip_prefix(sb->buf, tmpl.buf, &start))
1032 strbuf_release(&tmpl);
1033 return rest_is_empty(sb, start - sb->buf);
1036 static const char *find_author_by_nickname(const char *name)
1038 struct rev_info revs;
1039 struct commit *commit;
1040 struct strbuf buf = STRBUF_INIT;
1041 struct string_list mailmap = STRING_LIST_INIT_NODUP;
1045 init_revisions(&revs, NULL);
1046 strbuf_addf(&buf, "--author=%s", name);
1051 setup_revisions(ac, av, &revs, NULL);
1052 revs.mailmap = &mailmap;
1053 read_mailmap(revs.mailmap, NULL);
1055 if (prepare_revision_walk(&revs))
1056 die(_("revision walk setup failed"));
1057 commit = get_revision(&revs);
1059 struct pretty_print_context ctx = {0};
1060 ctx.date_mode.type = DATE_NORMAL;
1061 strbuf_release(&buf);
1062 format_commit_message(commit, "%aN <%aE>", &buf, &ctx);
1063 clear_mailmap(&mailmap);
1064 return strbuf_detach(&buf, NULL);
1066 die(_("--author '%s' is not 'Name <email>' and matches no existing author"), name);
1070 static void handle_untracked_files_arg(struct wt_status *s)
1072 if (!untracked_files_arg)
1073 ; /* default already initialized */
1074 else if (!strcmp(untracked_files_arg, "no"))
1075 s->show_untracked_files = SHOW_NO_UNTRACKED_FILES;
1076 else if (!strcmp(untracked_files_arg, "normal"))
1077 s->show_untracked_files = SHOW_NORMAL_UNTRACKED_FILES;
1078 else if (!strcmp(untracked_files_arg, "all"))
1079 s->show_untracked_files = SHOW_ALL_UNTRACKED_FILES;
1081 die(_("Invalid untracked files mode '%s'"), untracked_files_arg);
1084 static const char *read_commit_message(const char *name)
1086 const char *out_enc;
1087 struct commit *commit;
1089 commit = lookup_commit_reference_by_name(name);
1091 die(_("could not lookup commit %s"), name);
1092 out_enc = get_commit_output_encoding();
1093 return logmsg_reencode(commit, NULL, out_enc);
1097 * Enumerate what needs to be propagated when --porcelain
1098 * is not in effect here.
1100 static struct status_deferred_config {
1101 enum wt_status_format status_format;
1103 } status_deferred_config = {
1104 STATUS_FORMAT_UNSPECIFIED,
1105 -1 /* unspecified */
1108 static void finalize_deferred_config(struct wt_status *s)
1110 int use_deferred_config = (status_format != STATUS_FORMAT_PORCELAIN &&
1111 status_format != STATUS_FORMAT_PORCELAIN_V2 &&
1112 !s->null_termination);
1114 if (s->null_termination) {
1115 if (status_format == STATUS_FORMAT_NONE ||
1116 status_format == STATUS_FORMAT_UNSPECIFIED)
1117 status_format = STATUS_FORMAT_PORCELAIN;
1118 else if (status_format == STATUS_FORMAT_LONG)
1119 die(_("--long and -z are incompatible"));
1122 if (use_deferred_config && status_format == STATUS_FORMAT_UNSPECIFIED)
1123 status_format = status_deferred_config.status_format;
1124 if (status_format == STATUS_FORMAT_UNSPECIFIED)
1125 status_format = STATUS_FORMAT_NONE;
1127 if (use_deferred_config && s->show_branch < 0)
1128 s->show_branch = status_deferred_config.show_branch;
1129 if (s->show_branch < 0)
1133 static int parse_and_validate_options(int argc, const char *argv[],
1134 const struct option *options,
1135 const char * const usage[],
1137 struct commit *current_head,
1138 struct wt_status *s)
1142 argc = parse_options(argc, argv, prefix, options, usage, 0);
1143 finalize_deferred_config(s);
1145 if (force_author && !strchr(force_author, '>'))
1146 force_author = find_author_by_nickname(force_author);
1148 if (force_author && renew_authorship)
1149 die(_("Using both --reset-author and --author does not make sense"));
1151 if (logfile || have_option_m || use_message || fixup_message)
1154 use_editor = edit_flag;
1156 /* Sanity check options */
1157 if (amend && !current_head)
1158 die(_("You have nothing to amend."));
1159 if (amend && whence != FROM_COMMIT) {
1160 if (whence == FROM_MERGE)
1161 die(_("You are in the middle of a merge -- cannot amend."));
1162 else if (whence == FROM_CHERRY_PICK)
1163 die(_("You are in the middle of a cherry-pick -- cannot amend."));
1165 if (fixup_message && squash_message)
1166 die(_("Options --squash and --fixup cannot be used together"));
1176 die(_("Only one of -c/-C/-F/--fixup can be used."));
1177 if (have_option_m && f > 0)
1178 die((_("Option -m cannot be combined with -c/-C/-F/--fixup.")));
1179 if (f || have_option_m)
1180 template_file = NULL;
1182 use_message = edit_message;
1183 if (amend && !use_message && !fixup_message)
1184 use_message = "HEAD";
1185 if (!use_message && whence != FROM_CHERRY_PICK && renew_authorship)
1186 die(_("--reset-author can be used only with -C, -c or --amend."));
1188 use_message_buffer = read_commit_message(use_message);
1189 if (!renew_authorship) {
1190 author_message = use_message;
1191 author_message_buffer = use_message_buffer;
1194 if (whence == FROM_CHERRY_PICK && !renew_authorship) {
1195 author_message = "CHERRY_PICK_HEAD";
1196 author_message_buffer = read_commit_message(author_message);
1199 if (patch_interactive)
1202 if (also + only + all + interactive > 1)
1203 die(_("Only one of --include/--only/--all/--interactive/--patch can be used."));
1204 if (argc == 0 && (also || (only && !amend && !allow_empty)))
1205 die(_("No paths with --include/--only does not make sense."));
1206 if (!cleanup_arg || !strcmp(cleanup_arg, "default"))
1207 cleanup_mode = use_editor ? CLEANUP_ALL : CLEANUP_SPACE;
1208 else if (!strcmp(cleanup_arg, "verbatim"))
1209 cleanup_mode = CLEANUP_NONE;
1210 else if (!strcmp(cleanup_arg, "whitespace"))
1211 cleanup_mode = CLEANUP_SPACE;
1212 else if (!strcmp(cleanup_arg, "strip"))
1213 cleanup_mode = CLEANUP_ALL;
1214 else if (!strcmp(cleanup_arg, "scissors"))
1215 cleanup_mode = use_editor ? CLEANUP_SCISSORS : CLEANUP_SPACE;
1217 die(_("Invalid cleanup mode %s"), cleanup_arg);
1219 handle_untracked_files_arg(s);
1221 if (all && argc > 0)
1222 die(_("Paths with -a does not make sense."));
1224 if (status_format != STATUS_FORMAT_NONE)
1230 static int dry_run_commit(int argc, const char **argv, const char *prefix,
1231 const struct commit *current_head, struct wt_status *s)
1234 const char *index_file;
1236 index_file = prepare_index(argc, argv, prefix, current_head, 1);
1237 commitable = run_status(stdout, index_file, prefix, 0, s);
1238 rollback_index_files();
1240 return commitable ? 0 : 1;
1243 static int parse_status_slot(const char *slot)
1245 if (!strcasecmp(slot, "header"))
1246 return WT_STATUS_HEADER;
1247 if (!strcasecmp(slot, "branch"))
1248 return WT_STATUS_ONBRANCH;
1249 if (!strcasecmp(slot, "updated") || !strcasecmp(slot, "added"))
1250 return WT_STATUS_UPDATED;
1251 if (!strcasecmp(slot, "changed"))
1252 return WT_STATUS_CHANGED;
1253 if (!strcasecmp(slot, "untracked"))
1254 return WT_STATUS_UNTRACKED;
1255 if (!strcasecmp(slot, "nobranch"))
1256 return WT_STATUS_NOBRANCH;
1257 if (!strcasecmp(slot, "unmerged"))
1258 return WT_STATUS_UNMERGED;
1262 static int git_status_config(const char *k, const char *v, void *cb)
1264 struct wt_status *s = cb;
1265 const char *slot_name;
1267 if (starts_with(k, "column."))
1268 return git_column_config(k, v, "status", &s->colopts);
1269 if (!strcmp(k, "status.submodulesummary")) {
1271 s->submodule_summary = git_config_bool_or_int(k, v, &is_bool);
1272 if (is_bool && s->submodule_summary)
1273 s->submodule_summary = -1;
1276 if (!strcmp(k, "status.short")) {
1277 if (git_config_bool(k, v))
1278 status_deferred_config.status_format = STATUS_FORMAT_SHORT;
1280 status_deferred_config.status_format = STATUS_FORMAT_NONE;
1283 if (!strcmp(k, "status.branch")) {
1284 status_deferred_config.show_branch = git_config_bool(k, v);
1287 if (!strcmp(k, "status.color") || !strcmp(k, "color.status")) {
1288 s->use_color = git_config_colorbool(k, v);
1291 if (!strcmp(k, "status.displaycommentprefix")) {
1292 s->display_comment_prefix = git_config_bool(k, v);
1295 if (skip_prefix(k, "status.color.", &slot_name) ||
1296 skip_prefix(k, "color.status.", &slot_name)) {
1297 int slot = parse_status_slot(slot_name);
1301 return config_error_nonbool(k);
1302 return color_parse(v, s->color_palette[slot]);
1304 if (!strcmp(k, "status.relativepaths")) {
1305 s->relative_paths = git_config_bool(k, v);
1308 if (!strcmp(k, "status.showuntrackedfiles")) {
1310 return config_error_nonbool(k);
1311 else if (!strcmp(v, "no"))
1312 s->show_untracked_files = SHOW_NO_UNTRACKED_FILES;
1313 else if (!strcmp(v, "normal"))
1314 s->show_untracked_files = SHOW_NORMAL_UNTRACKED_FILES;
1315 else if (!strcmp(v, "all"))
1316 s->show_untracked_files = SHOW_ALL_UNTRACKED_FILES;
1318 return error(_("Invalid untracked files mode '%s'"), v);
1321 return git_diff_ui_config(k, v, NULL);
1324 int cmd_status(int argc, const char **argv, const char *prefix)
1326 static struct wt_status s;
1328 struct object_id oid;
1329 static struct option builtin_status_options[] = {
1330 OPT__VERBOSE(&verbose, N_("be verbose")),
1331 OPT_SET_INT('s', "short", &status_format,
1332 N_("show status concisely"), STATUS_FORMAT_SHORT),
1333 OPT_BOOL('b', "branch", &s.show_branch,
1334 N_("show branch information")),
1335 { OPTION_CALLBACK, 0, "porcelain", &status_format,
1336 N_("version"), N_("machine-readable output"),
1337 PARSE_OPT_OPTARG, opt_parse_porcelain },
1338 OPT_SET_INT(0, "long", &status_format,
1339 N_("show status in long format (default)"),
1340 STATUS_FORMAT_LONG),
1341 OPT_BOOL('z', "null", &s.null_termination,
1342 N_("terminate entries with NUL")),
1343 { OPTION_STRING, 'u', "untracked-files", &untracked_files_arg,
1345 N_("show untracked files, optional modes: all, normal, no. (Default: all)"),
1346 PARSE_OPT_OPTARG, NULL, (intptr_t)"all" },
1347 OPT_BOOL(0, "ignored", &show_ignored_in_status,
1348 N_("show ignored files")),
1349 { OPTION_STRING, 0, "ignore-submodules", &ignore_submodule_arg, N_("when"),
1350 N_("ignore changes to submodules, optional when: all, dirty, untracked. (Default: all)"),
1351 PARSE_OPT_OPTARG, NULL, (intptr_t)"all" },
1352 OPT_COLUMN(0, "column", &s.colopts, N_("list untracked files in columns")),
1356 if (argc == 2 && !strcmp(argv[1], "-h"))
1357 usage_with_options(builtin_status_usage, builtin_status_options);
1359 status_init_config(&s, git_status_config);
1360 argc = parse_options(argc, argv, prefix,
1361 builtin_status_options,
1362 builtin_status_usage, 0);
1363 finalize_colopts(&s.colopts, -1);
1364 finalize_deferred_config(&s);
1366 handle_untracked_files_arg(&s);
1367 if (show_ignored_in_status)
1368 s.show_ignored_files = 1;
1369 parse_pathspec(&s.pathspec, 0,
1370 PATHSPEC_PREFER_FULL,
1373 read_cache_preload(&s.pathspec);
1374 refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED, &s.pathspec, NULL, NULL);
1376 fd = hold_locked_index(&index_lock, 0);
1378 s.is_initial = get_sha1(s.reference, oid.hash) ? 1 : 0;
1380 hashcpy(s.sha1_commit, oid.hash);
1382 s.ignore_submodule_arg = ignore_submodule_arg;
1383 s.status_format = status_format;
1384 s.verbose = verbose;
1386 wt_status_collect(&s);
1389 update_index_if_able(&the_index, &index_lock);
1391 if (s.relative_paths)
1394 wt_status_print(&s);
1398 static const char *implicit_ident_advice(void)
1400 char *user_config = expand_user_path("~/.gitconfig", 0);
1401 char *xdg_config = xdg_config_home("config");
1402 int config_exists = file_exists(user_config) || file_exists(xdg_config);
1408 return _(implicit_ident_advice_config);
1410 return _(implicit_ident_advice_noconfig);
1414 static void print_summary(const char *prefix, const struct object_id *oid,
1417 struct rev_info rev;
1418 struct commit *commit;
1419 struct strbuf format = STRBUF_INIT;
1420 struct object_id junk_oid;
1422 struct pretty_print_context pctx = {0};
1423 struct strbuf author_ident = STRBUF_INIT;
1424 struct strbuf committer_ident = STRBUF_INIT;
1426 commit = lookup_commit(oid->hash);
1428 die(_("couldn't look up newly created commit"));
1429 if (parse_commit(commit))
1430 die(_("could not parse newly created commit"));
1432 strbuf_addstr(&format, "format:%h] %s");
1434 format_commit_message(commit, "%an <%ae>", &author_ident, &pctx);
1435 format_commit_message(commit, "%cn <%ce>", &committer_ident, &pctx);
1436 if (strbuf_cmp(&author_ident, &committer_ident)) {
1437 strbuf_addstr(&format, "\n Author: ");
1438 strbuf_addbuf_percentquote(&format, &author_ident);
1440 if (author_date_is_interesting()) {
1441 struct strbuf date = STRBUF_INIT;
1442 format_commit_message(commit, "%ad", &date, &pctx);
1443 strbuf_addstr(&format, "\n Date: ");
1444 strbuf_addbuf_percentquote(&format, &date);
1445 strbuf_release(&date);
1447 if (!committer_ident_sufficiently_given()) {
1448 strbuf_addstr(&format, "\n Committer: ");
1449 strbuf_addbuf_percentquote(&format, &committer_ident);
1450 if (advice_implicit_identity) {
1451 strbuf_addch(&format, '\n');
1452 strbuf_addstr(&format, implicit_ident_advice());
1455 strbuf_release(&author_ident);
1456 strbuf_release(&committer_ident);
1458 init_revisions(&rev, prefix);
1459 setup_revisions(0, NULL, &rev, NULL);
1462 rev.diffopt.output_format =
1463 DIFF_FORMAT_SHORTSTAT | DIFF_FORMAT_SUMMARY;
1465 rev.verbose_header = 1;
1466 rev.show_root_diff = 1;
1467 get_commit_format(format.buf, &rev);
1468 rev.always_show_header = 0;
1469 rev.diffopt.detect_rename = 1;
1470 rev.diffopt.break_opt = 0;
1471 diff_setup_done(&rev.diffopt);
1473 head = resolve_ref_unsafe("HEAD", 0, junk_oid.hash, NULL);
1474 if (!strcmp(head, "HEAD"))
1475 head = _("detached HEAD");
1477 skip_prefix(head, "refs/heads/", &head);
1478 printf("[%s%s ", head, initial_commit ? _(" (root-commit)") : "");
1480 if (!log_tree_commit(&rev, commit)) {
1481 rev.always_show_header = 1;
1482 rev.use_terminator = 1;
1483 log_tree_commit(&rev, commit);
1486 strbuf_release(&format);
1489 static int git_commit_config(const char *k, const char *v, void *cb)
1491 struct wt_status *s = cb;
1494 if (!strcmp(k, "commit.template"))
1495 return git_config_pathname(&template_file, k, v);
1496 if (!strcmp(k, "commit.status")) {
1497 include_status = git_config_bool(k, v);
1500 if (!strcmp(k, "commit.cleanup"))
1501 return git_config_string(&cleanup_arg, k, v);
1502 if (!strcmp(k, "commit.gpgsign")) {
1503 sign_commit = git_config_bool(k, v) ? "" : NULL;
1506 if (!strcmp(k, "commit.verbose")) {
1508 config_commit_verbose = git_config_bool_or_int(k, v, &is_bool);
1512 status = git_gpg_config(k, v, NULL);
1515 return git_status_config(k, v, s);
1518 static int run_rewrite_hook(const struct object_id *oldoid,
1519 const struct object_id *newoid)
1521 struct child_process proc = CHILD_PROCESS_INIT;
1522 const char *argv[3];
1524 struct strbuf sb = STRBUF_INIT;
1526 argv[0] = find_hook("post-rewrite");
1535 proc.stdout_to_stderr = 1;
1537 code = start_command(&proc);
1540 strbuf_addf(&sb, "%s %s\n", oid_to_hex(oldoid), oid_to_hex(newoid));
1541 sigchain_push(SIGPIPE, SIG_IGN);
1542 write_in_full(proc.in, sb.buf, sb.len);
1544 strbuf_release(&sb);
1545 sigchain_pop(SIGPIPE);
1546 return finish_command(&proc);
1549 int run_commit_hook(int editor_is_used, const char *index_file, const char *name, ...)
1551 struct argv_array hook_env = ARGV_ARRAY_INIT;
1555 argv_array_pushf(&hook_env, "GIT_INDEX_FILE=%s", index_file);
1558 * Let the hook know that no editor will be launched.
1560 if (!editor_is_used)
1561 argv_array_push(&hook_env, "GIT_EDITOR=:");
1563 va_start(args, name);
1564 ret = run_hook_ve(hook_env.argv,name, args);
1566 argv_array_clear(&hook_env);
1571 int cmd_commit(int argc, const char **argv, const char *prefix)
1573 static struct wt_status s;
1574 static struct option builtin_commit_options[] = {
1575 OPT__QUIET(&quiet, N_("suppress summary after successful commit")),
1576 OPT__VERBOSE(&verbose, N_("show diff in commit message template")),
1578 OPT_GROUP(N_("Commit message options")),
1579 OPT_FILENAME('F', "file", &logfile, N_("read message from file")),
1580 OPT_STRING(0, "author", &force_author, N_("author"), N_("override author for commit")),
1581 OPT_STRING(0, "date", &force_date, N_("date"), N_("override date for commit")),
1582 OPT_CALLBACK('m', "message", &message, N_("message"), N_("commit message"), opt_parse_m),
1583 OPT_STRING('c', "reedit-message", &edit_message, N_("commit"), N_("reuse and edit message from specified commit")),
1584 OPT_STRING('C', "reuse-message", &use_message, N_("commit"), N_("reuse message from specified commit")),
1585 OPT_STRING(0, "fixup", &fixup_message, N_("commit"), N_("use autosquash formatted message to fixup specified commit")),
1586 OPT_STRING(0, "squash", &squash_message, N_("commit"), N_("use autosquash formatted message to squash specified commit")),
1587 OPT_BOOL(0, "reset-author", &renew_authorship, N_("the commit is authored by me now (used with -C/-c/--amend)")),
1588 OPT_BOOL('s', "signoff", &signoff, N_("add Signed-off-by:")),
1589 OPT_FILENAME('t', "template", &template_file, N_("use specified template file")),
1590 OPT_BOOL('e', "edit", &edit_flag, N_("force edit of commit")),
1591 OPT_STRING(0, "cleanup", &cleanup_arg, N_("default"), N_("how to strip spaces and #comments from message")),
1592 OPT_BOOL(0, "status", &include_status, N_("include status in commit message template")),
1593 { OPTION_STRING, 'S', "gpg-sign", &sign_commit, N_("key-id"),
1594 N_("GPG sign commit"), PARSE_OPT_OPTARG, NULL, (intptr_t) "" },
1595 /* end commit message options */
1597 OPT_GROUP(N_("Commit contents options")),
1598 OPT_BOOL('a', "all", &all, N_("commit all changed files")),
1599 OPT_BOOL('i', "include", &also, N_("add specified files to index for commit")),
1600 OPT_BOOL(0, "interactive", &interactive, N_("interactively add files")),
1601 OPT_BOOL('p', "patch", &patch_interactive, N_("interactively add changes")),
1602 OPT_BOOL('o', "only", &only, N_("commit only specified files")),
1603 OPT_BOOL('n', "no-verify", &no_verify, N_("bypass pre-commit and commit-msg hooks")),
1604 OPT_BOOL(0, "dry-run", &dry_run, N_("show what would be committed")),
1605 OPT_SET_INT(0, "short", &status_format, N_("show status concisely"),
1606 STATUS_FORMAT_SHORT),
1607 OPT_BOOL(0, "branch", &s.show_branch, N_("show branch information")),
1608 OPT_SET_INT(0, "porcelain", &status_format,
1609 N_("machine-readable output"), STATUS_FORMAT_PORCELAIN),
1610 OPT_SET_INT(0, "long", &status_format,
1611 N_("show status in long format (default)"),
1612 STATUS_FORMAT_LONG),
1613 OPT_BOOL('z', "null", &s.null_termination,
1614 N_("terminate entries with NUL")),
1615 OPT_BOOL(0, "amend", &amend, N_("amend previous commit")),
1616 OPT_BOOL(0, "no-post-rewrite", &no_post_rewrite, N_("bypass post-rewrite hook")),
1617 { 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" },
1618 /* end commit contents options */
1620 OPT_HIDDEN_BOOL(0, "allow-empty", &allow_empty,
1621 N_("ok to record an empty change")),
1622 OPT_HIDDEN_BOOL(0, "allow-empty-message", &allow_empty_message,
1623 N_("ok to record a change with an empty message")),
1628 struct strbuf sb = STRBUF_INIT;
1629 struct strbuf author_ident = STRBUF_INIT;
1630 const char *index_file, *reflog_msg;
1632 struct object_id oid;
1633 struct commit_list *parents = NULL;
1634 struct stat statbuf;
1635 struct commit *current_head = NULL;
1636 struct commit_extra_header *extra = NULL;
1637 struct ref_transaction *transaction;
1638 struct strbuf err = STRBUF_INIT;
1640 if (argc == 2 && !strcmp(argv[1], "-h"))
1641 usage_with_options(builtin_commit_usage, builtin_commit_options);
1643 status_init_config(&s, git_commit_config);
1644 status_format = STATUS_FORMAT_NONE; /* Ignore status.short */
1647 if (get_sha1("HEAD", oid.hash))
1648 current_head = NULL;
1650 current_head = lookup_commit_or_die(oid.hash, "HEAD");
1651 if (parse_commit(current_head))
1652 die(_("could not parse HEAD commit"));
1654 verbose = -1; /* unspecified */
1655 argc = parse_and_validate_options(argc, argv, builtin_commit_options,
1656 builtin_commit_usage,
1657 prefix, current_head, &s);
1659 verbose = (config_commit_verbose < 0) ? 0 : config_commit_verbose;
1662 return dry_run_commit(argc, argv, prefix, current_head, &s);
1663 index_file = prepare_index(argc, argv, prefix, current_head, 0);
1665 /* Set up everything for writing the commit object. This includes
1666 running hooks, writing the trees, and interacting with the user. */
1667 if (!prepare_to_commit(index_file, prefix,
1668 current_head, &s, &author_ident)) {
1669 rollback_index_files();
1673 /* Determine parents */
1674 reflog_msg = getenv("GIT_REFLOG_ACTION");
1675 if (!current_head) {
1677 reflog_msg = "commit (initial)";
1680 reflog_msg = "commit (amend)";
1681 parents = copy_commit_list(current_head->parents);
1682 } else if (whence == FROM_MERGE) {
1683 struct strbuf m = STRBUF_INIT;
1685 int allow_fast_forward = 1;
1686 struct commit_list **pptr = &parents;
1689 reflog_msg = "commit (merge)";
1690 pptr = commit_list_append(current_head, pptr);
1691 fp = fopen(git_path_merge_head(), "r");
1693 die_errno(_("could not open '%s' for reading"),
1694 git_path_merge_head());
1695 while (strbuf_getline_lf(&m, fp) != EOF) {
1696 struct commit *parent;
1698 parent = get_merge_parent(m.buf);
1700 die(_("Corrupt MERGE_HEAD file (%s)"), m.buf);
1701 pptr = commit_list_append(parent, pptr);
1705 if (!stat(git_path_merge_mode(), &statbuf)) {
1706 if (strbuf_read_file(&sb, git_path_merge_mode(), 0) < 0)
1707 die_errno(_("could not read MERGE_MODE"));
1708 if (!strcmp(sb.buf, "no-ff"))
1709 allow_fast_forward = 0;
1711 if (allow_fast_forward)
1712 parents = reduce_heads(parents);
1715 reflog_msg = (whence == FROM_CHERRY_PICK)
1716 ? "commit (cherry-pick)"
1718 commit_list_insert(current_head, &parents);
1721 /* Finally, get the commit message */
1723 if (strbuf_read_file(&sb, git_path_commit_editmsg(), 0) < 0) {
1724 int saved_errno = errno;
1725 rollback_index_files();
1726 die(_("could not read commit message: %s"), strerror(saved_errno));
1729 if (verbose || /* Truncate the message just before the diff, if any. */
1730 cleanup_mode == CLEANUP_SCISSORS)
1731 wt_status_truncate_message_at_cut_line(&sb);
1733 if (cleanup_mode != CLEANUP_NONE)
1734 strbuf_stripspace(&sb, cleanup_mode == CLEANUP_ALL);
1735 if (template_untouched(&sb) && !allow_empty_message) {
1736 rollback_index_files();
1737 fprintf(stderr, _("Aborting commit; you did not edit the message.\n"));
1740 if (message_is_empty(&sb) && !allow_empty_message) {
1741 rollback_index_files();
1742 fprintf(stderr, _("Aborting commit due to empty commit message.\n"));
1747 const char *exclude_gpgsig[2] = { "gpgsig", NULL };
1748 extra = read_commit_extra_headers(current_head, exclude_gpgsig);
1750 struct commit_extra_header **tail = &extra;
1751 append_merge_tag_headers(parents, &tail);
1754 if (commit_tree_extended(sb.buf, sb.len, active_cache_tree->sha1,
1755 parents, oid.hash, author_ident.buf, sign_commit, extra)) {
1756 rollback_index_files();
1757 die(_("failed to write commit object"));
1759 strbuf_release(&author_ident);
1760 free_commit_extra_headers(extra);
1762 nl = strchr(sb.buf, '\n');
1764 strbuf_setlen(&sb, nl + 1 - sb.buf);
1766 strbuf_addch(&sb, '\n');
1767 strbuf_insert(&sb, 0, reflog_msg, strlen(reflog_msg));
1768 strbuf_insert(&sb, strlen(reflog_msg), ": ", 2);
1770 transaction = ref_transaction_begin(&err);
1772 ref_transaction_update(transaction, "HEAD", oid.hash,
1774 ? current_head->object.oid.hash : null_sha1,
1776 ref_transaction_commit(transaction, &err)) {
1777 rollback_index_files();
1780 ref_transaction_free(transaction);
1782 unlink(git_path_cherry_pick_head());
1783 unlink(git_path_revert_head());
1784 unlink(git_path_merge_head());
1785 unlink(git_path_merge_msg());
1786 unlink(git_path_merge_mode());
1787 unlink(git_path_squash_msg());
1789 if (commit_index_files())
1790 die (_("Repository has been updated, but unable to write\n"
1791 "new_index file. Check that disk is not full and quota is\n"
1792 "not exceeded, and then \"git reset HEAD\" to recover."));
1795 run_commit_hook(use_editor, get_index_file(), "post-commit", NULL);
1796 if (amend && !no_post_rewrite) {
1797 struct notes_rewrite_cfg *cfg;
1798 cfg = init_copy_notes_for_rewrite("amend");
1800 /* we are amending, so current_head is not NULL */
1801 copy_note_for_rewrite(cfg, current_head->object.oid.hash, oid.hash);
1802 finish_copy_notes_for_rewrite(cfg, "Notes added by 'git commit --amend'");
1804 run_rewrite_hook(¤t_head->object.oid, &oid);
1807 print_summary(prefix, &oid, !current_head);
1809 strbuf_release(&err);