Merge branch 'jl/submodule-mv'
[git.git] / builtin / commit.c
blob80d886ab3af371a003ae026c19bd76ea83df9690
1 /*
2 * Builtin "git commit"
4 * Copyright (c) 2007 Kristian Høgsberg <krh@redhat.com>
5 * Based on git-commit.sh by Junio C Hamano and Linus Torvalds
6 */
8 #include "cache.h"
9 #include "cache-tree.h"
10 #include "color.h"
11 #include "dir.h"
12 #include "builtin.h"
13 #include "diff.h"
14 #include "diffcore.h"
15 #include "commit.h"
16 #include "revision.h"
17 #include "wt-status.h"
18 #include "run-command.h"
19 #include "refs.h"
20 #include "log-tree.h"
21 #include "strbuf.h"
22 #include "utf8.h"
23 #include "parse-options.h"
24 #include "string-list.h"
25 #include "rerere.h"
26 #include "unpack-trees.h"
27 #include "quote.h"
28 #include "submodule.h"
29 #include "gpg-interface.h"
30 #include "column.h"
31 #include "sequencer.h"
32 #include "notes-utils.h"
34 static const char * const builtin_commit_usage[] = {
35 N_("git commit [options] [--] <pathspec>..."),
36 NULL
39 static const char * const builtin_status_usage[] = {
40 N_("git status [options] [--] <pathspec>..."),
41 NULL
44 static const char implicit_ident_advice[] =
45 N_("Your name and email address were configured automatically based\n"
46 "on your username and hostname. Please check that they are accurate.\n"
47 "You can suppress this message by setting them explicitly:\n"
48 "\n"
49 " git config --global user.name \"Your Name\"\n"
50 " git config --global user.email you@example.com\n"
51 "\n"
52 "After doing this, you may fix the identity used for this commit with:\n"
53 "\n"
54 " git commit --amend --reset-author\n");
56 static const char empty_amend_advice[] =
57 N_("You asked to amend the most recent commit, but doing so would make\n"
58 "it empty. You can repeat your command with --allow-empty, or you can\n"
59 "remove the commit entirely with \"git reset HEAD^\".\n");
61 static const char empty_cherry_pick_advice[] =
62 N_("The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
63 "If you wish to commit it anyway, use:\n"
64 "\n"
65 " git commit --allow-empty\n"
66 "\n");
68 static const char empty_cherry_pick_advice_single[] =
69 N_("Otherwise, please use 'git reset'\n");
71 static const char empty_cherry_pick_advice_multi[] =
72 N_("If you wish to skip this commit, use:\n"
73 "\n"
74 " git reset\n"
75 "\n"
76 "Then \"git cherry-pick --continue\" will resume cherry-picking\n"
77 "the remaining commits.\n");
79 static const char *use_message_buffer;
80 static const char commit_editmsg[] = "COMMIT_EDITMSG";
81 static struct lock_file index_lock; /* real index */
82 static struct lock_file false_lock; /* used only for partial commits */
83 static enum {
84 COMMIT_AS_IS = 1,
85 COMMIT_NORMAL,
86 COMMIT_PARTIAL
87 } commit_style;
89 static const char *logfile, *force_author;
90 static const char *template_file;
92 * The _message variables are commit names from which to take
93 * the commit message and/or authorship.
95 static const char *author_message, *author_message_buffer;
96 static char *edit_message, *use_message;
97 static char *fixup_message, *squash_message;
98 static int all, also, interactive, patch_interactive, only, amend, signoff;
99 static int edit_flag = -1; /* unspecified */
100 static int quiet, verbose, no_verify, allow_empty, dry_run, renew_authorship;
101 static int no_post_rewrite, allow_empty_message;
102 static char *untracked_files_arg, *force_date, *ignore_submodule_arg;
103 static char *sign_commit;
106 * The default commit message cleanup mode will remove the lines
107 * beginning with # (shell comments) and leading and trailing
108 * whitespaces (empty lines or containing only whitespaces)
109 * if editor is used, and only the whitespaces if the message
110 * is specified explicitly.
112 static enum {
113 CLEANUP_SPACE,
114 CLEANUP_NONE,
115 CLEANUP_ALL
116 } cleanup_mode;
117 static const char *cleanup_arg;
119 static enum commit_whence whence;
120 static int sequencer_in_use;
121 static int use_editor = 1, include_status = 1;
122 static int show_ignored_in_status, have_option_m;
123 static const char *only_include_assumed;
124 static struct strbuf message = STRBUF_INIT;
126 static enum status_format {
127 STATUS_FORMAT_NONE = 0,
128 STATUS_FORMAT_LONG,
129 STATUS_FORMAT_SHORT,
130 STATUS_FORMAT_PORCELAIN,
132 STATUS_FORMAT_UNSPECIFIED
133 } status_format = STATUS_FORMAT_UNSPECIFIED;
135 static int opt_parse_m(const struct option *opt, const char *arg, int unset)
137 struct strbuf *buf = opt->value;
138 if (unset) {
139 have_option_m = 0;
140 strbuf_setlen(buf, 0);
141 } else {
142 have_option_m = 1;
143 if (buf->len)
144 strbuf_addch(buf, '\n');
145 strbuf_addstr(buf, arg);
146 strbuf_complete_line(buf);
148 return 0;
151 static void determine_whence(struct wt_status *s)
153 if (file_exists(git_path("MERGE_HEAD")))
154 whence = FROM_MERGE;
155 else if (file_exists(git_path("CHERRY_PICK_HEAD"))) {
156 whence = FROM_CHERRY_PICK;
157 if (file_exists(git_path("sequencer")))
158 sequencer_in_use = 1;
160 else
161 whence = FROM_COMMIT;
162 if (s)
163 s->whence = whence;
166 static void rollback_index_files(void)
168 switch (commit_style) {
169 case COMMIT_AS_IS:
170 break; /* nothing to do */
171 case COMMIT_NORMAL:
172 rollback_lock_file(&index_lock);
173 break;
174 case COMMIT_PARTIAL:
175 rollback_lock_file(&index_lock);
176 rollback_lock_file(&false_lock);
177 break;
181 static int commit_index_files(void)
183 int err = 0;
185 switch (commit_style) {
186 case COMMIT_AS_IS:
187 break; /* nothing to do */
188 case COMMIT_NORMAL:
189 err = commit_lock_file(&index_lock);
190 break;
191 case COMMIT_PARTIAL:
192 err = commit_lock_file(&index_lock);
193 rollback_lock_file(&false_lock);
194 break;
197 return err;
201 * Take a union of paths in the index and the named tree (typically, "HEAD"),
202 * and return the paths that match the given pattern in list.
204 static int list_paths(struct string_list *list, const char *with_tree,
205 const char *prefix, const struct pathspec *pattern)
207 int i;
208 char *m;
210 if (!pattern->nr)
211 return 0;
213 m = xcalloc(1, pattern->nr);
215 if (with_tree) {
216 char *max_prefix = common_prefix(pattern);
217 overlay_tree_on_cache(with_tree, max_prefix ? max_prefix : prefix);
218 free(max_prefix);
221 for (i = 0; i < active_nr; i++) {
222 const struct cache_entry *ce = active_cache[i];
223 struct string_list_item *item;
225 if (ce->ce_flags & CE_UPDATE)
226 continue;
227 if (!match_pathspec_depth(pattern, ce->name, ce_namelen(ce), 0, m))
228 continue;
229 item = string_list_insert(list, ce->name);
230 if (ce_skip_worktree(ce))
231 item->util = item; /* better a valid pointer than a fake one */
234 return report_path_error(m, pattern, prefix);
237 static void add_remove_files(struct string_list *list)
239 int i;
240 for (i = 0; i < list->nr; i++) {
241 struct stat st;
242 struct string_list_item *p = &(list->items[i]);
244 /* p->util is skip-worktree */
245 if (p->util)
246 continue;
248 if (!lstat(p->string, &st)) {
249 if (add_to_cache(p->string, &st, 0))
250 die(_("updating files failed"));
251 } else
252 remove_file_from_cache(p->string);
256 static void create_base_index(const struct commit *current_head)
258 struct tree *tree;
259 struct unpack_trees_options opts;
260 struct tree_desc t;
262 if (!current_head) {
263 discard_cache();
264 return;
267 memset(&opts, 0, sizeof(opts));
268 opts.head_idx = 1;
269 opts.index_only = 1;
270 opts.merge = 1;
271 opts.src_index = &the_index;
272 opts.dst_index = &the_index;
274 opts.fn = oneway_merge;
275 tree = parse_tree_indirect(current_head->object.sha1);
276 if (!tree)
277 die(_("failed to unpack HEAD tree object"));
278 parse_tree(tree);
279 init_tree_desc(&t, tree->buffer, tree->size);
280 if (unpack_trees(1, &t, &opts))
281 exit(128); /* We've already reported the error, finish dying */
284 static void refresh_cache_or_die(int refresh_flags)
287 * refresh_flags contains REFRESH_QUIET, so the only errors
288 * are for unmerged entries.
290 if (refresh_cache(refresh_flags | REFRESH_IN_PORCELAIN))
291 die_resolve_conflict("commit");
294 static char *prepare_index(int argc, const char **argv, const char *prefix,
295 const struct commit *current_head, int is_status)
297 int fd;
298 struct string_list partial;
299 struct pathspec pathspec;
300 char *old_index_env = NULL;
301 int refresh_flags = REFRESH_QUIET;
303 if (is_status)
304 refresh_flags |= REFRESH_UNMERGED;
305 parse_pathspec(&pathspec, 0,
306 PATHSPEC_PREFER_FULL,
307 prefix, argv);
309 if (read_cache_preload(&pathspec) < 0)
310 die(_("index file corrupt"));
312 if (interactive) {
313 fd = hold_locked_index(&index_lock, 1);
315 refresh_cache_or_die(refresh_flags);
317 if (write_cache(fd, active_cache, active_nr) ||
318 close_lock_file(&index_lock))
319 die(_("unable to create temporary index"));
321 old_index_env = getenv(INDEX_ENVIRONMENT);
322 setenv(INDEX_ENVIRONMENT, index_lock.filename, 1);
324 if (interactive_add(argc, argv, prefix, patch_interactive) != 0)
325 die(_("interactive add failed"));
327 if (old_index_env && *old_index_env)
328 setenv(INDEX_ENVIRONMENT, old_index_env, 1);
329 else
330 unsetenv(INDEX_ENVIRONMENT);
332 discard_cache();
333 read_cache_from(index_lock.filename);
335 commit_style = COMMIT_NORMAL;
336 return index_lock.filename;
340 * Non partial, non as-is commit.
342 * (1) get the real index;
343 * (2) update the_index as necessary;
344 * (3) write the_index out to the real index (still locked);
345 * (4) return the name of the locked index file.
347 * The caller should run hooks on the locked real index, and
348 * (A) if all goes well, commit the real index;
349 * (B) on failure, rollback the real index.
351 if (all || (also && pathspec.nr)) {
352 fd = hold_locked_index(&index_lock, 1);
353 add_files_to_cache(also ? prefix : NULL, &pathspec, 0);
354 refresh_cache_or_die(refresh_flags);
355 update_main_cache_tree(WRITE_TREE_SILENT);
356 if (write_cache(fd, active_cache, active_nr) ||
357 close_lock_file(&index_lock))
358 die(_("unable to write new_index file"));
359 commit_style = COMMIT_NORMAL;
360 return index_lock.filename;
364 * As-is commit.
366 * (1) return the name of the real index file.
368 * The caller should run hooks on the real index,
369 * and create commit from the_index.
370 * We still need to refresh the index here.
372 if (!only && !pathspec.nr) {
373 fd = hold_locked_index(&index_lock, 1);
374 refresh_cache_or_die(refresh_flags);
375 if (active_cache_changed) {
376 update_main_cache_tree(WRITE_TREE_SILENT);
377 if (write_cache(fd, active_cache, active_nr) ||
378 commit_locked_index(&index_lock))
379 die(_("unable to write new_index file"));
380 } else {
381 rollback_lock_file(&index_lock);
383 commit_style = COMMIT_AS_IS;
384 return get_index_file();
388 * A partial commit.
390 * (0) find the set of affected paths;
391 * (1) get lock on the real index file;
392 * (2) update the_index with the given paths;
393 * (3) write the_index out to the real index (still locked);
394 * (4) get lock on the false index file;
395 * (5) reset the_index from HEAD;
396 * (6) update the_index the same way as (2);
397 * (7) write the_index out to the false index file;
398 * (8) return the name of the false index file (still locked);
400 * The caller should run hooks on the locked false index, and
401 * create commit from it. Then
402 * (A) if all goes well, commit the real index;
403 * (B) on failure, rollback the real index;
404 * In either case, rollback the false index.
406 commit_style = COMMIT_PARTIAL;
408 if (whence != FROM_COMMIT) {
409 if (whence == FROM_MERGE)
410 die(_("cannot do a partial commit during a merge."));
411 else if (whence == FROM_CHERRY_PICK)
412 die(_("cannot do a partial commit during a cherry-pick."));
415 memset(&partial, 0, sizeof(partial));
416 partial.strdup_strings = 1;
417 if (list_paths(&partial, !current_head ? NULL : "HEAD", prefix, &pathspec))
418 exit(1);
420 discard_cache();
421 if (read_cache() < 0)
422 die(_("cannot read the index"));
424 fd = hold_locked_index(&index_lock, 1);
425 add_remove_files(&partial);
426 refresh_cache(REFRESH_QUIET);
427 if (write_cache(fd, active_cache, active_nr) ||
428 close_lock_file(&index_lock))
429 die(_("unable to write new_index file"));
431 fd = hold_lock_file_for_update(&false_lock,
432 git_path("next-index-%"PRIuMAX,
433 (uintmax_t) getpid()),
434 LOCK_DIE_ON_ERROR);
436 create_base_index(current_head);
437 add_remove_files(&partial);
438 refresh_cache(REFRESH_QUIET);
440 if (write_cache(fd, active_cache, active_nr) ||
441 close_lock_file(&false_lock))
442 die(_("unable to write temporary index file"));
444 discard_cache();
445 read_cache_from(false_lock.filename);
447 return false_lock.filename;
450 static int run_status(FILE *fp, const char *index_file, const char *prefix, int nowarn,
451 struct wt_status *s)
453 unsigned char sha1[20];
455 if (s->relative_paths)
456 s->prefix = prefix;
458 if (amend) {
459 s->amend = 1;
460 s->reference = "HEAD^1";
462 s->verbose = verbose;
463 s->index_file = index_file;
464 s->fp = fp;
465 s->nowarn = nowarn;
466 s->is_initial = get_sha1(s->reference, sha1) ? 1 : 0;
468 wt_status_collect(s);
470 switch (status_format) {
471 case STATUS_FORMAT_SHORT:
472 wt_shortstatus_print(s);
473 break;
474 case STATUS_FORMAT_PORCELAIN:
475 wt_porcelain_print(s);
476 break;
477 case STATUS_FORMAT_UNSPECIFIED:
478 die("BUG: finalize_deferred_config() should have been called");
479 break;
480 case STATUS_FORMAT_NONE:
481 case STATUS_FORMAT_LONG:
482 wt_status_print(s);
483 break;
486 return s->commitable;
489 static int is_a_merge(const struct commit *current_head)
491 return !!(current_head->parents && current_head->parents->next);
494 static void export_one(const char *var, const char *s, const char *e, int hack)
496 struct strbuf buf = STRBUF_INIT;
497 if (hack)
498 strbuf_addch(&buf, hack);
499 strbuf_addf(&buf, "%.*s", (int)(e - s), s);
500 setenv(var, buf.buf, 1);
501 strbuf_release(&buf);
504 static int sane_ident_split(struct ident_split *person)
506 if (!person->name_begin || !person->name_end ||
507 person->name_begin == person->name_end)
508 return 0; /* no human readable name */
509 if (!person->mail_begin || !person->mail_end ||
510 person->mail_begin == person->mail_end)
511 return 0; /* no usable mail */
512 if (!person->date_begin || !person->date_end ||
513 !person->tz_begin || !person->tz_end)
514 return 0;
515 return 1;
518 static void determine_author_info(struct strbuf *author_ident)
520 char *name, *email, *date;
521 struct ident_split author;
523 name = getenv("GIT_AUTHOR_NAME");
524 email = getenv("GIT_AUTHOR_EMAIL");
525 date = getenv("GIT_AUTHOR_DATE");
527 if (author_message) {
528 const char *a, *lb, *rb, *eol;
529 size_t len;
531 a = strstr(author_message_buffer, "\nauthor ");
532 if (!a)
533 die(_("invalid commit: %s"), author_message);
535 lb = strchrnul(a + strlen("\nauthor "), '<');
536 rb = strchrnul(lb, '>');
537 eol = strchrnul(rb, '\n');
538 if (!*lb || !*rb || !*eol)
539 die(_("invalid commit: %s"), author_message);
541 if (lb == a + strlen("\nauthor "))
542 /* \nauthor <foo@example.com> */
543 name = xcalloc(1, 1);
544 else
545 name = xmemdupz(a + strlen("\nauthor "),
546 (lb - strlen(" ") -
547 (a + strlen("\nauthor "))));
548 email = xmemdupz(lb + strlen("<"), rb - (lb + strlen("<")));
549 len = eol - (rb + strlen("> "));
550 date = xmalloc(len + 2);
551 *date = '@';
552 memcpy(date + 1, rb + strlen("> "), len);
553 date[len + 1] = '\0';
556 if (force_author) {
557 const char *lb = strstr(force_author, " <");
558 const char *rb = strchr(force_author, '>');
560 if (!lb || !rb)
561 die(_("malformed --author parameter"));
562 name = xstrndup(force_author, lb - force_author);
563 email = xstrndup(lb + 2, rb - (lb + 2));
566 if (force_date)
567 date = force_date;
568 strbuf_addstr(author_ident, fmt_ident(name, email, date, IDENT_STRICT));
569 if (!split_ident_line(&author, author_ident->buf, author_ident->len) &&
570 sane_ident_split(&author)) {
571 export_one("GIT_AUTHOR_NAME", author.name_begin, author.name_end, 0);
572 export_one("GIT_AUTHOR_EMAIL", author.mail_begin, author.mail_end, 0);
573 export_one("GIT_AUTHOR_DATE", author.date_begin, author.tz_end, '@');
577 static char *cut_ident_timestamp_part(char *string)
579 char *ket = strrchr(string, '>');
580 if (!ket || ket[1] != ' ')
581 die(_("Malformed ident string: '%s'"), string);
582 *++ket = '\0';
583 return ket;
586 static int prepare_to_commit(const char *index_file, const char *prefix,
587 struct commit *current_head,
588 struct wt_status *s,
589 struct strbuf *author_ident)
591 struct stat statbuf;
592 struct strbuf committer_ident = STRBUF_INIT;
593 int commitable, saved_color_setting;
594 struct strbuf sb = STRBUF_INIT;
595 char *buffer;
596 const char *hook_arg1 = NULL;
597 const char *hook_arg2 = NULL;
598 int ident_shown = 0;
599 int clean_message_contents = (cleanup_mode != CLEANUP_NONE);
601 /* This checks and barfs if author is badly specified */
602 determine_author_info(author_ident);
604 if (!no_verify && run_hook(index_file, "pre-commit", NULL))
605 return 0;
607 if (squash_message) {
609 * Insert the proper subject line before other commit
610 * message options add their content.
612 if (use_message && !strcmp(use_message, squash_message))
613 strbuf_addstr(&sb, "squash! ");
614 else {
615 struct pretty_print_context ctx = {0};
616 struct commit *c;
617 c = lookup_commit_reference_by_name(squash_message);
618 if (!c)
619 die(_("could not lookup commit %s"), squash_message);
620 ctx.output_encoding = get_commit_output_encoding();
621 format_commit_message(c, "squash! %s\n\n", &sb,
622 &ctx);
626 if (message.len) {
627 strbuf_addbuf(&sb, &message);
628 hook_arg1 = "message";
629 } else if (logfile && !strcmp(logfile, "-")) {
630 if (isatty(0))
631 fprintf(stderr, _("(reading log message from standard input)\n"));
632 if (strbuf_read(&sb, 0, 0) < 0)
633 die_errno(_("could not read log from standard input"));
634 hook_arg1 = "message";
635 } else if (logfile) {
636 if (strbuf_read_file(&sb, logfile, 0) < 0)
637 die_errno(_("could not read log file '%s'"),
638 logfile);
639 hook_arg1 = "message";
640 } else if (use_message) {
641 buffer = strstr(use_message_buffer, "\n\n");
642 if (!use_editor && (!buffer || buffer[2] == '\0'))
643 die(_("commit has empty message"));
644 strbuf_add(&sb, buffer + 2, strlen(buffer + 2));
645 hook_arg1 = "commit";
646 hook_arg2 = use_message;
647 } else if (fixup_message) {
648 struct pretty_print_context ctx = {0};
649 struct commit *commit;
650 commit = lookup_commit_reference_by_name(fixup_message);
651 if (!commit)
652 die(_("could not lookup commit %s"), fixup_message);
653 ctx.output_encoding = get_commit_output_encoding();
654 format_commit_message(commit, "fixup! %s\n\n",
655 &sb, &ctx);
656 hook_arg1 = "message";
657 } else if (!stat(git_path("MERGE_MSG"), &statbuf)) {
658 if (strbuf_read_file(&sb, git_path("MERGE_MSG"), 0) < 0)
659 die_errno(_("could not read MERGE_MSG"));
660 hook_arg1 = "merge";
661 } else if (!stat(git_path("SQUASH_MSG"), &statbuf)) {
662 if (strbuf_read_file(&sb, git_path("SQUASH_MSG"), 0) < 0)
663 die_errno(_("could not read SQUASH_MSG"));
664 hook_arg1 = "squash";
665 } else if (template_file) {
666 if (strbuf_read_file(&sb, template_file, 0) < 0)
667 die_errno(_("could not read '%s'"), template_file);
668 hook_arg1 = "template";
669 clean_message_contents = 0;
673 * The remaining cases don't modify the template message, but
674 * just set the argument(s) to the prepare-commit-msg hook.
676 else if (whence == FROM_MERGE)
677 hook_arg1 = "merge";
678 else if (whence == FROM_CHERRY_PICK) {
679 hook_arg1 = "commit";
680 hook_arg2 = "CHERRY_PICK_HEAD";
683 if (squash_message) {
685 * If squash_commit was used for the commit subject,
686 * then we're possibly hijacking other commit log options.
687 * Reset the hook args to tell the real story.
689 hook_arg1 = "message";
690 hook_arg2 = "";
693 s->fp = fopen(git_path(commit_editmsg), "w");
694 if (s->fp == NULL)
695 die_errno(_("could not open '%s'"), git_path(commit_editmsg));
697 if (clean_message_contents)
698 stripspace(&sb, 0);
700 if (signoff) {
702 * See if we have a Conflicts: block at the end. If yes, count
703 * its size, so we can ignore it.
705 int ignore_footer = 0;
706 int i, eol, previous = 0;
707 const char *nl;
709 for (i = 0; i < sb.len; i++) {
710 nl = memchr(sb.buf + i, '\n', sb.len - i);
711 if (nl)
712 eol = nl - sb.buf;
713 else
714 eol = sb.len;
715 if (!prefixcmp(sb.buf + previous, "\nConflicts:\n")) {
716 ignore_footer = sb.len - previous;
717 break;
719 while (i < eol)
720 i++;
721 previous = eol;
724 append_signoff(&sb, ignore_footer, 0);
727 if (fwrite(sb.buf, 1, sb.len, s->fp) < sb.len)
728 die_errno(_("could not write commit template"));
730 strbuf_release(&sb);
732 /* This checks if committer ident is explicitly given */
733 strbuf_addstr(&committer_ident, git_committer_info(IDENT_STRICT));
734 if (use_editor && include_status) {
735 char *ai_tmp, *ci_tmp;
736 if (whence != FROM_COMMIT)
737 status_printf_ln(s, GIT_COLOR_NORMAL,
738 whence == FROM_MERGE
739 ? _("\n"
740 "It looks like you may be committing a merge.\n"
741 "If this is not correct, please remove the file\n"
742 " %s\n"
743 "and try again.\n")
744 : _("\n"
745 "It looks like you may be committing a cherry-pick.\n"
746 "If this is not correct, please remove the file\n"
747 " %s\n"
748 "and try again.\n"),
749 git_path(whence == FROM_MERGE
750 ? "MERGE_HEAD"
751 : "CHERRY_PICK_HEAD"));
753 fprintf(s->fp, "\n");
754 if (cleanup_mode == CLEANUP_ALL)
755 status_printf(s, GIT_COLOR_NORMAL,
756 _("Please enter the commit message for your changes."
757 " Lines starting\nwith '%c' will be ignored, and an empty"
758 " message aborts the commit.\n"), comment_line_char);
759 else /* CLEANUP_SPACE, that is. */
760 status_printf(s, GIT_COLOR_NORMAL,
761 _("Please enter the commit message for your changes."
762 " Lines starting\n"
763 "with '%c' will be kept; you may remove them"
764 " yourself if you want to.\n"
765 "An empty message aborts the commit.\n"), comment_line_char);
766 if (only_include_assumed)
767 status_printf_ln(s, GIT_COLOR_NORMAL,
768 "%s", only_include_assumed);
770 ai_tmp = cut_ident_timestamp_part(author_ident->buf);
771 ci_tmp = cut_ident_timestamp_part(committer_ident.buf);
772 if (strcmp(author_ident->buf, committer_ident.buf))
773 status_printf_ln(s, GIT_COLOR_NORMAL,
774 _("%s"
775 "Author: %s"),
776 ident_shown++ ? "" : "\n",
777 author_ident->buf);
779 if (!committer_ident_sufficiently_given())
780 status_printf_ln(s, GIT_COLOR_NORMAL,
781 _("%s"
782 "Committer: %s"),
783 ident_shown++ ? "" : "\n",
784 committer_ident.buf);
786 if (ident_shown)
787 status_printf_ln(s, GIT_COLOR_NORMAL, "");
789 saved_color_setting = s->use_color;
790 s->use_color = 0;
791 commitable = run_status(s->fp, index_file, prefix, 1, s);
792 s->use_color = saved_color_setting;
794 *ai_tmp = ' ';
795 *ci_tmp = ' ';
796 } else {
797 unsigned char sha1[20];
798 const char *parent = "HEAD";
800 if (!active_nr && read_cache() < 0)
801 die(_("Cannot read index"));
803 if (amend)
804 parent = "HEAD^1";
806 if (get_sha1(parent, sha1))
807 commitable = !!active_nr;
808 else
809 commitable = index_differs_from(parent, 0);
811 strbuf_release(&committer_ident);
813 fclose(s->fp);
816 * Reject an attempt to record a non-merge empty commit without
817 * explicit --allow-empty. In the cherry-pick case, it may be
818 * empty due to conflict resolution, which the user should okay.
820 if (!commitable && whence != FROM_MERGE && !allow_empty &&
821 !(amend && is_a_merge(current_head))) {
822 run_status(stdout, index_file, prefix, 0, s);
823 if (amend)
824 fputs(_(empty_amend_advice), stderr);
825 else if (whence == FROM_CHERRY_PICK) {
826 fputs(_(empty_cherry_pick_advice), stderr);
827 if (!sequencer_in_use)
828 fputs(_(empty_cherry_pick_advice_single), stderr);
829 else
830 fputs(_(empty_cherry_pick_advice_multi), stderr);
832 return 0;
836 * Re-read the index as pre-commit hook could have updated it,
837 * and write it out as a tree. We must do this before we invoke
838 * the editor and after we invoke run_status above.
840 discard_cache();
841 read_cache_from(index_file);
842 if (update_main_cache_tree(0)) {
843 error(_("Error building trees"));
844 return 0;
847 if (run_hook(index_file, "prepare-commit-msg",
848 git_path(commit_editmsg), hook_arg1, hook_arg2, NULL))
849 return 0;
851 if (use_editor) {
852 char index[PATH_MAX];
853 const char *env[2] = { NULL };
854 env[0] = index;
855 snprintf(index, sizeof(index), "GIT_INDEX_FILE=%s", index_file);
856 if (launch_editor(git_path(commit_editmsg), NULL, env)) {
857 fprintf(stderr,
858 _("Please supply the message using either -m or -F option.\n"));
859 exit(1);
863 if (!no_verify &&
864 run_hook(index_file, "commit-msg", git_path(commit_editmsg), NULL)) {
865 return 0;
868 return 1;
871 static int rest_is_empty(struct strbuf *sb, int start)
873 int i, eol;
874 const char *nl;
876 /* Check if the rest is just whitespace and Signed-of-by's. */
877 for (i = start; i < sb->len; i++) {
878 nl = memchr(sb->buf + i, '\n', sb->len - i);
879 if (nl)
880 eol = nl - sb->buf;
881 else
882 eol = sb->len;
884 if (strlen(sign_off_header) <= eol - i &&
885 !prefixcmp(sb->buf + i, sign_off_header)) {
886 i = eol;
887 continue;
889 while (i < eol)
890 if (!isspace(sb->buf[i++]))
891 return 0;
894 return 1;
898 * Find out if the message in the strbuf contains only whitespace and
899 * Signed-off-by lines.
901 static int message_is_empty(struct strbuf *sb)
903 if (cleanup_mode == CLEANUP_NONE && sb->len)
904 return 0;
905 return rest_is_empty(sb, 0);
909 * See if the user edited the message in the editor or left what
910 * was in the template intact
912 static int template_untouched(struct strbuf *sb)
914 struct strbuf tmpl = STRBUF_INIT;
915 char *start;
917 if (cleanup_mode == CLEANUP_NONE && sb->len)
918 return 0;
920 if (!template_file || strbuf_read_file(&tmpl, template_file, 0) <= 0)
921 return 0;
923 stripspace(&tmpl, cleanup_mode == CLEANUP_ALL);
924 start = (char *)skip_prefix(sb->buf, tmpl.buf);
925 if (!start)
926 start = sb->buf;
927 strbuf_release(&tmpl);
928 return rest_is_empty(sb, start - sb->buf);
931 static const char *find_author_by_nickname(const char *name)
933 struct rev_info revs;
934 struct commit *commit;
935 struct strbuf buf = STRBUF_INIT;
936 const char *av[20];
937 int ac = 0;
939 init_revisions(&revs, NULL);
940 strbuf_addf(&buf, "--author=%s", name);
941 av[++ac] = "--all";
942 av[++ac] = "-i";
943 av[++ac] = buf.buf;
944 av[++ac] = NULL;
945 setup_revisions(ac, av, &revs, NULL);
946 prepare_revision_walk(&revs);
947 commit = get_revision(&revs);
948 if (commit) {
949 struct pretty_print_context ctx = {0};
950 ctx.date_mode = DATE_NORMAL;
951 strbuf_release(&buf);
952 format_commit_message(commit, "%an <%ae>", &buf, &ctx);
953 return strbuf_detach(&buf, NULL);
955 die(_("No existing author found with '%s'"), name);
959 static void handle_untracked_files_arg(struct wt_status *s)
961 if (!untracked_files_arg)
962 ; /* default already initialized */
963 else if (!strcmp(untracked_files_arg, "no"))
964 s->show_untracked_files = SHOW_NO_UNTRACKED_FILES;
965 else if (!strcmp(untracked_files_arg, "normal"))
966 s->show_untracked_files = SHOW_NORMAL_UNTRACKED_FILES;
967 else if (!strcmp(untracked_files_arg, "all"))
968 s->show_untracked_files = SHOW_ALL_UNTRACKED_FILES;
969 else
970 die(_("Invalid untracked files mode '%s'"), untracked_files_arg);
973 static const char *read_commit_message(const char *name)
975 const char *out_enc;
976 struct commit *commit;
978 commit = lookup_commit_reference_by_name(name);
979 if (!commit)
980 die(_("could not lookup commit %s"), name);
981 out_enc = get_commit_output_encoding();
982 return logmsg_reencode(commit, NULL, out_enc);
986 * Enumerate what needs to be propagated when --porcelain
987 * is not in effect here.
989 static struct status_deferred_config {
990 enum status_format status_format;
991 int show_branch;
992 } status_deferred_config = {
993 STATUS_FORMAT_UNSPECIFIED,
994 -1 /* unspecified */
997 static void finalize_deferred_config(struct wt_status *s)
999 int use_deferred_config = (status_format != STATUS_FORMAT_PORCELAIN &&
1000 !s->null_termination);
1002 if (s->null_termination) {
1003 if (status_format == STATUS_FORMAT_NONE ||
1004 status_format == STATUS_FORMAT_UNSPECIFIED)
1005 status_format = STATUS_FORMAT_PORCELAIN;
1006 else if (status_format == STATUS_FORMAT_LONG)
1007 die(_("--long and -z are incompatible"));
1010 if (use_deferred_config && status_format == STATUS_FORMAT_UNSPECIFIED)
1011 status_format = status_deferred_config.status_format;
1012 if (status_format == STATUS_FORMAT_UNSPECIFIED)
1013 status_format = STATUS_FORMAT_NONE;
1015 if (use_deferred_config && s->show_branch < 0)
1016 s->show_branch = status_deferred_config.show_branch;
1017 if (s->show_branch < 0)
1018 s->show_branch = 0;
1021 static int parse_and_validate_options(int argc, const char *argv[],
1022 const struct option *options,
1023 const char * const usage[],
1024 const char *prefix,
1025 struct commit *current_head,
1026 struct wt_status *s)
1028 int f = 0;
1030 argc = parse_options(argc, argv, prefix, options, usage, 0);
1031 finalize_deferred_config(s);
1033 if (force_author && !strchr(force_author, '>'))
1034 force_author = find_author_by_nickname(force_author);
1036 if (force_author && renew_authorship)
1037 die(_("Using both --reset-author and --author does not make sense"));
1039 if (logfile || have_option_m || use_message || fixup_message)
1040 use_editor = 0;
1041 if (0 <= edit_flag)
1042 use_editor = edit_flag;
1043 if (!use_editor)
1044 setenv("GIT_EDITOR", ":", 1);
1046 /* Sanity check options */
1047 if (amend && !current_head)
1048 die(_("You have nothing to amend."));
1049 if (amend && whence != FROM_COMMIT) {
1050 if (whence == FROM_MERGE)
1051 die(_("You are in the middle of a merge -- cannot amend."));
1052 else if (whence == FROM_CHERRY_PICK)
1053 die(_("You are in the middle of a cherry-pick -- cannot amend."));
1055 if (fixup_message && squash_message)
1056 die(_("Options --squash and --fixup cannot be used together"));
1057 if (use_message)
1058 f++;
1059 if (edit_message)
1060 f++;
1061 if (fixup_message)
1062 f++;
1063 if (logfile)
1064 f++;
1065 if (f > 1)
1066 die(_("Only one of -c/-C/-F/--fixup can be used."));
1067 if (message.len && f > 0)
1068 die((_("Option -m cannot be combined with -c/-C/-F/--fixup.")));
1069 if (f || message.len)
1070 template_file = NULL;
1071 if (edit_message)
1072 use_message = edit_message;
1073 if (amend && !use_message && !fixup_message)
1074 use_message = "HEAD";
1075 if (!use_message && whence != FROM_CHERRY_PICK && renew_authorship)
1076 die(_("--reset-author can be used only with -C, -c or --amend."));
1077 if (use_message) {
1078 use_message_buffer = read_commit_message(use_message);
1079 if (!renew_authorship) {
1080 author_message = use_message;
1081 author_message_buffer = use_message_buffer;
1084 if (whence == FROM_CHERRY_PICK && !renew_authorship) {
1085 author_message = "CHERRY_PICK_HEAD";
1086 author_message_buffer = read_commit_message(author_message);
1089 if (patch_interactive)
1090 interactive = 1;
1092 if (also + only + all + interactive > 1)
1093 die(_("Only one of --include/--only/--all/--interactive/--patch can be used."));
1094 if (argc == 0 && (also || (only && !amend)))
1095 die(_("No paths with --include/--only does not make sense."));
1096 if (argc == 0 && only && amend)
1097 only_include_assumed = _("Clever... amending the last one with dirty index.");
1098 if (argc > 0 && !also && !only)
1099 only_include_assumed = _("Explicit paths specified without -i nor -o; assuming --only paths...");
1100 if (!cleanup_arg || !strcmp(cleanup_arg, "default"))
1101 cleanup_mode = use_editor ? CLEANUP_ALL : CLEANUP_SPACE;
1102 else if (!strcmp(cleanup_arg, "verbatim"))
1103 cleanup_mode = CLEANUP_NONE;
1104 else if (!strcmp(cleanup_arg, "whitespace"))
1105 cleanup_mode = CLEANUP_SPACE;
1106 else if (!strcmp(cleanup_arg, "strip"))
1107 cleanup_mode = CLEANUP_ALL;
1108 else
1109 die(_("Invalid cleanup mode %s"), cleanup_arg);
1111 handle_untracked_files_arg(s);
1113 if (all && argc > 0)
1114 die(_("Paths with -a does not make sense."));
1116 if (status_format != STATUS_FORMAT_NONE)
1117 dry_run = 1;
1119 return argc;
1122 static int dry_run_commit(int argc, const char **argv, const char *prefix,
1123 const struct commit *current_head, struct wt_status *s)
1125 int commitable;
1126 const char *index_file;
1128 index_file = prepare_index(argc, argv, prefix, current_head, 1);
1129 commitable = run_status(stdout, index_file, prefix, 0, s);
1130 rollback_index_files();
1132 return commitable ? 0 : 1;
1135 static int parse_status_slot(const char *var, int offset)
1137 if (!strcasecmp(var+offset, "header"))
1138 return WT_STATUS_HEADER;
1139 if (!strcasecmp(var+offset, "branch"))
1140 return WT_STATUS_ONBRANCH;
1141 if (!strcasecmp(var+offset, "updated")
1142 || !strcasecmp(var+offset, "added"))
1143 return WT_STATUS_UPDATED;
1144 if (!strcasecmp(var+offset, "changed"))
1145 return WT_STATUS_CHANGED;
1146 if (!strcasecmp(var+offset, "untracked"))
1147 return WT_STATUS_UNTRACKED;
1148 if (!strcasecmp(var+offset, "nobranch"))
1149 return WT_STATUS_NOBRANCH;
1150 if (!strcasecmp(var+offset, "unmerged"))
1151 return WT_STATUS_UNMERGED;
1152 return -1;
1155 static int git_status_config(const char *k, const char *v, void *cb)
1157 struct wt_status *s = cb;
1159 if (!prefixcmp(k, "column."))
1160 return git_column_config(k, v, "status", &s->colopts);
1161 if (!strcmp(k, "status.submodulesummary")) {
1162 int is_bool;
1163 s->submodule_summary = git_config_bool_or_int(k, v, &is_bool);
1164 if (is_bool && s->submodule_summary)
1165 s->submodule_summary = -1;
1166 return 0;
1168 if (!strcmp(k, "status.short")) {
1169 if (git_config_bool(k, v))
1170 status_deferred_config.status_format = STATUS_FORMAT_SHORT;
1171 else
1172 status_deferred_config.status_format = STATUS_FORMAT_NONE;
1173 return 0;
1175 if (!strcmp(k, "status.branch")) {
1176 status_deferred_config.show_branch = git_config_bool(k, v);
1177 return 0;
1179 if (!strcmp(k, "status.color") || !strcmp(k, "color.status")) {
1180 s->use_color = git_config_colorbool(k, v);
1181 return 0;
1183 if (!prefixcmp(k, "status.color.") || !prefixcmp(k, "color.status.")) {
1184 int slot = parse_status_slot(k, 13);
1185 if (slot < 0)
1186 return 0;
1187 if (!v)
1188 return config_error_nonbool(k);
1189 color_parse(v, k, s->color_palette[slot]);
1190 return 0;
1192 if (!strcmp(k, "status.relativepaths")) {
1193 s->relative_paths = git_config_bool(k, v);
1194 return 0;
1196 if (!strcmp(k, "status.showuntrackedfiles")) {
1197 if (!v)
1198 return config_error_nonbool(k);
1199 else if (!strcmp(v, "no"))
1200 s->show_untracked_files = SHOW_NO_UNTRACKED_FILES;
1201 else if (!strcmp(v, "normal"))
1202 s->show_untracked_files = SHOW_NORMAL_UNTRACKED_FILES;
1203 else if (!strcmp(v, "all"))
1204 s->show_untracked_files = SHOW_ALL_UNTRACKED_FILES;
1205 else
1206 return error(_("Invalid untracked files mode '%s'"), v);
1207 return 0;
1209 return git_diff_ui_config(k, v, NULL);
1212 int cmd_status(int argc, const char **argv, const char *prefix)
1214 static struct wt_status s;
1215 int fd;
1216 unsigned char sha1[20];
1217 static struct option builtin_status_options[] = {
1218 OPT__VERBOSE(&verbose, N_("be verbose")),
1219 OPT_SET_INT('s', "short", &status_format,
1220 N_("show status concisely"), STATUS_FORMAT_SHORT),
1221 OPT_BOOL('b', "branch", &s.show_branch,
1222 N_("show branch information")),
1223 OPT_SET_INT(0, "porcelain", &status_format,
1224 N_("machine-readable output"),
1225 STATUS_FORMAT_PORCELAIN),
1226 OPT_SET_INT(0, "long", &status_format,
1227 N_("show status in long format (default)"),
1228 STATUS_FORMAT_LONG),
1229 OPT_BOOL('z', "null", &s.null_termination,
1230 N_("terminate entries with NUL")),
1231 { OPTION_STRING, 'u', "untracked-files", &untracked_files_arg,
1232 N_("mode"),
1233 N_("show untracked files, optional modes: all, normal, no. (Default: all)"),
1234 PARSE_OPT_OPTARG, NULL, (intptr_t)"all" },
1235 OPT_BOOL(0, "ignored", &show_ignored_in_status,
1236 N_("show ignored files")),
1237 { OPTION_STRING, 0, "ignore-submodules", &ignore_submodule_arg, N_("when"),
1238 N_("ignore changes to submodules, optional when: all, dirty, untracked. (Default: all)"),
1239 PARSE_OPT_OPTARG, NULL, (intptr_t)"all" },
1240 OPT_COLUMN(0, "column", &s.colopts, N_("list untracked files in columns")),
1241 OPT_END(),
1244 if (argc == 2 && !strcmp(argv[1], "-h"))
1245 usage_with_options(builtin_status_usage, builtin_status_options);
1247 wt_status_prepare(&s);
1248 gitmodules_config();
1249 git_config(git_status_config, &s);
1250 determine_whence(&s);
1251 argc = parse_options(argc, argv, prefix,
1252 builtin_status_options,
1253 builtin_status_usage, 0);
1254 finalize_colopts(&s.colopts, -1);
1255 finalize_deferred_config(&s);
1257 handle_untracked_files_arg(&s);
1258 if (show_ignored_in_status)
1259 s.show_ignored_files = 1;
1260 parse_pathspec(&s.pathspec, 0,
1261 PATHSPEC_PREFER_FULL,
1262 prefix, argv);
1264 read_cache_preload(&s.pathspec);
1265 refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED, &s.pathspec, NULL, NULL);
1267 fd = hold_locked_index(&index_lock, 0);
1268 if (0 <= fd)
1269 update_index_if_able(&the_index, &index_lock);
1271 s.is_initial = get_sha1(s.reference, sha1) ? 1 : 0;
1272 s.ignore_submodule_arg = ignore_submodule_arg;
1273 wt_status_collect(&s);
1275 if (s.relative_paths)
1276 s.prefix = prefix;
1278 switch (status_format) {
1279 case STATUS_FORMAT_SHORT:
1280 wt_shortstatus_print(&s);
1281 break;
1282 case STATUS_FORMAT_PORCELAIN:
1283 wt_porcelain_print(&s);
1284 break;
1285 case STATUS_FORMAT_UNSPECIFIED:
1286 die("BUG: finalize_deferred_config() should have been called");
1287 break;
1288 case STATUS_FORMAT_NONE:
1289 case STATUS_FORMAT_LONG:
1290 s.verbose = verbose;
1291 s.ignore_submodule_arg = ignore_submodule_arg;
1292 wt_status_print(&s);
1293 break;
1295 return 0;
1298 static void print_summary(const char *prefix, const unsigned char *sha1,
1299 int initial_commit)
1301 struct rev_info rev;
1302 struct commit *commit;
1303 struct strbuf format = STRBUF_INIT;
1304 unsigned char junk_sha1[20];
1305 const char *head;
1306 struct pretty_print_context pctx = {0};
1307 struct strbuf author_ident = STRBUF_INIT;
1308 struct strbuf committer_ident = STRBUF_INIT;
1310 commit = lookup_commit(sha1);
1311 if (!commit)
1312 die(_("couldn't look up newly created commit"));
1313 if (!commit || parse_commit(commit))
1314 die(_("could not parse newly created commit"));
1316 strbuf_addstr(&format, "format:%h] %s");
1318 format_commit_message(commit, "%an <%ae>", &author_ident, &pctx);
1319 format_commit_message(commit, "%cn <%ce>", &committer_ident, &pctx);
1320 if (strbuf_cmp(&author_ident, &committer_ident)) {
1321 strbuf_addstr(&format, "\n Author: ");
1322 strbuf_addbuf_percentquote(&format, &author_ident);
1324 if (!committer_ident_sufficiently_given()) {
1325 strbuf_addstr(&format, "\n Committer: ");
1326 strbuf_addbuf_percentquote(&format, &committer_ident);
1327 if (advice_implicit_identity) {
1328 strbuf_addch(&format, '\n');
1329 strbuf_addstr(&format, _(implicit_ident_advice));
1332 strbuf_release(&author_ident);
1333 strbuf_release(&committer_ident);
1335 init_revisions(&rev, prefix);
1336 setup_revisions(0, NULL, &rev, NULL);
1338 rev.diff = 1;
1339 rev.diffopt.output_format =
1340 DIFF_FORMAT_SHORTSTAT | DIFF_FORMAT_SUMMARY;
1342 rev.verbose_header = 1;
1343 rev.show_root_diff = 1;
1344 get_commit_format(format.buf, &rev);
1345 rev.always_show_header = 0;
1346 rev.diffopt.detect_rename = 1;
1347 rev.diffopt.break_opt = 0;
1348 diff_setup_done(&rev.diffopt);
1350 head = resolve_ref_unsafe("HEAD", junk_sha1, 0, NULL);
1351 printf("[%s%s ",
1352 !prefixcmp(head, "refs/heads/") ?
1353 head + 11 :
1354 !strcmp(head, "HEAD") ?
1355 _("detached HEAD") :
1356 head,
1357 initial_commit ? _(" (root-commit)") : "");
1359 if (!log_tree_commit(&rev, commit)) {
1360 rev.always_show_header = 1;
1361 rev.use_terminator = 1;
1362 log_tree_commit(&rev, commit);
1365 strbuf_release(&format);
1368 static int git_commit_config(const char *k, const char *v, void *cb)
1370 struct wt_status *s = cb;
1371 int status;
1373 if (!strcmp(k, "commit.template"))
1374 return git_config_pathname(&template_file, k, v);
1375 if (!strcmp(k, "commit.status")) {
1376 include_status = git_config_bool(k, v);
1377 return 0;
1379 if (!strcmp(k, "commit.cleanup"))
1380 return git_config_string(&cleanup_arg, k, v);
1382 status = git_gpg_config(k, v, NULL);
1383 if (status)
1384 return status;
1385 return git_status_config(k, v, s);
1388 static int run_rewrite_hook(const unsigned char *oldsha1,
1389 const unsigned char *newsha1)
1391 /* oldsha1 SP newsha1 LF NUL */
1392 static char buf[2*40 + 3];
1393 struct child_process proc;
1394 const char *argv[3];
1395 int code;
1396 size_t n;
1398 argv[0] = find_hook("post-rewrite");
1399 if (!argv[0])
1400 return 0;
1402 argv[1] = "amend";
1403 argv[2] = NULL;
1405 memset(&proc, 0, sizeof(proc));
1406 proc.argv = argv;
1407 proc.in = -1;
1408 proc.stdout_to_stderr = 1;
1410 code = start_command(&proc);
1411 if (code)
1412 return code;
1413 n = snprintf(buf, sizeof(buf), "%s %s\n",
1414 sha1_to_hex(oldsha1), sha1_to_hex(newsha1));
1415 write_in_full(proc.in, buf, n);
1416 close(proc.in);
1417 return finish_command(&proc);
1420 int cmd_commit(int argc, const char **argv, const char *prefix)
1422 static struct wt_status s;
1423 static struct option builtin_commit_options[] = {
1424 OPT__QUIET(&quiet, N_("suppress summary after successful commit")),
1425 OPT__VERBOSE(&verbose, N_("show diff in commit message template")),
1427 OPT_GROUP(N_("Commit message options")),
1428 OPT_FILENAME('F', "file", &logfile, N_("read message from file")),
1429 OPT_STRING(0, "author", &force_author, N_("author"), N_("override author for commit")),
1430 OPT_STRING(0, "date", &force_date, N_("date"), N_("override date for commit")),
1431 OPT_CALLBACK('m', "message", &message, N_("message"), N_("commit message"), opt_parse_m),
1432 OPT_STRING('c', "reedit-message", &edit_message, N_("commit"), N_("reuse and edit message from specified commit")),
1433 OPT_STRING('C', "reuse-message", &use_message, N_("commit"), N_("reuse message from specified commit")),
1434 OPT_STRING(0, "fixup", &fixup_message, N_("commit"), N_("use autosquash formatted message to fixup specified commit")),
1435 OPT_STRING(0, "squash", &squash_message, N_("commit"), N_("use autosquash formatted message to squash specified commit")),
1436 OPT_BOOL(0, "reset-author", &renew_authorship, N_("the commit is authored by me now (used with -C/-c/--amend)")),
1437 OPT_BOOL('s', "signoff", &signoff, N_("add Signed-off-by:")),
1438 OPT_FILENAME('t', "template", &template_file, N_("use specified template file")),
1439 OPT_BOOL('e', "edit", &edit_flag, N_("force edit of commit")),
1440 OPT_STRING(0, "cleanup", &cleanup_arg, N_("default"), N_("how to strip spaces and #comments from message")),
1441 OPT_BOOL(0, "status", &include_status, N_("include status in commit message template")),
1442 { OPTION_STRING, 'S', "gpg-sign", &sign_commit, N_("key id"),
1443 N_("GPG sign commit"), PARSE_OPT_OPTARG, NULL, (intptr_t) "" },
1444 /* end commit message options */
1446 OPT_GROUP(N_("Commit contents options")),
1447 OPT_BOOL('a', "all", &all, N_("commit all changed files")),
1448 OPT_BOOL('i', "include", &also, N_("add specified files to index for commit")),
1449 OPT_BOOL(0, "interactive", &interactive, N_("interactively add files")),
1450 OPT_BOOL('p', "patch", &patch_interactive, N_("interactively add changes")),
1451 OPT_BOOL('o', "only", &only, N_("commit only specified files")),
1452 OPT_BOOL('n', "no-verify", &no_verify, N_("bypass pre-commit hook")),
1453 OPT_BOOL(0, "dry-run", &dry_run, N_("show what would be committed")),
1454 OPT_SET_INT(0, "short", &status_format, N_("show status concisely"),
1455 STATUS_FORMAT_SHORT),
1456 OPT_BOOL(0, "branch", &s.show_branch, N_("show branch information")),
1457 OPT_SET_INT(0, "porcelain", &status_format,
1458 N_("machine-readable output"), STATUS_FORMAT_PORCELAIN),
1459 OPT_SET_INT(0, "long", &status_format,
1460 N_("show status in long format (default)"),
1461 STATUS_FORMAT_LONG),
1462 OPT_BOOL('z', "null", &s.null_termination,
1463 N_("terminate entries with NUL")),
1464 OPT_BOOL(0, "amend", &amend, N_("amend previous commit")),
1465 OPT_BOOL(0, "no-post-rewrite", &no_post_rewrite, N_("bypass post-rewrite hook")),
1466 { 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" },
1467 /* end commit contents options */
1469 OPT_HIDDEN_BOOL(0, "allow-empty", &allow_empty,
1470 N_("ok to record an empty change")),
1471 OPT_HIDDEN_BOOL(0, "allow-empty-message", &allow_empty_message,
1472 N_("ok to record a change with an empty message")),
1474 OPT_END()
1477 struct strbuf sb = STRBUF_INIT;
1478 struct strbuf author_ident = STRBUF_INIT;
1479 const char *index_file, *reflog_msg;
1480 char *nl, *p;
1481 unsigned char sha1[20];
1482 struct ref_lock *ref_lock;
1483 struct commit_list *parents = NULL, **pptr = &parents;
1484 struct stat statbuf;
1485 int allow_fast_forward = 1;
1486 struct commit *current_head = NULL;
1487 struct commit_extra_header *extra = NULL;
1489 if (argc == 2 && !strcmp(argv[1], "-h"))
1490 usage_with_options(builtin_commit_usage, builtin_commit_options);
1492 wt_status_prepare(&s);
1493 gitmodules_config();
1494 git_config(git_commit_config, &s);
1495 status_format = STATUS_FORMAT_NONE; /* Ignore status.short */
1496 determine_whence(&s);
1497 s.colopts = 0;
1499 if (get_sha1("HEAD", sha1))
1500 current_head = NULL;
1501 else {
1502 current_head = lookup_commit_or_die(sha1, "HEAD");
1503 if (!current_head || parse_commit(current_head))
1504 die(_("could not parse HEAD commit"));
1506 argc = parse_and_validate_options(argc, argv, builtin_commit_options,
1507 builtin_commit_usage,
1508 prefix, current_head, &s);
1509 if (dry_run)
1510 return dry_run_commit(argc, argv, prefix, current_head, &s);
1511 index_file = prepare_index(argc, argv, prefix, current_head, 0);
1513 /* Set up everything for writing the commit object. This includes
1514 running hooks, writing the trees, and interacting with the user. */
1515 if (!prepare_to_commit(index_file, prefix,
1516 current_head, &s, &author_ident)) {
1517 rollback_index_files();
1518 return 1;
1521 /* Determine parents */
1522 reflog_msg = getenv("GIT_REFLOG_ACTION");
1523 if (!current_head) {
1524 if (!reflog_msg)
1525 reflog_msg = "commit (initial)";
1526 } else if (amend) {
1527 struct commit_list *c;
1529 if (!reflog_msg)
1530 reflog_msg = "commit (amend)";
1531 for (c = current_head->parents; c; c = c->next)
1532 pptr = &commit_list_insert(c->item, pptr)->next;
1533 } else if (whence == FROM_MERGE) {
1534 struct strbuf m = STRBUF_INIT;
1535 FILE *fp;
1537 if (!reflog_msg)
1538 reflog_msg = "commit (merge)";
1539 pptr = &commit_list_insert(current_head, pptr)->next;
1540 fp = fopen(git_path("MERGE_HEAD"), "r");
1541 if (fp == NULL)
1542 die_errno(_("could not open '%s' for reading"),
1543 git_path("MERGE_HEAD"));
1544 while (strbuf_getline(&m, fp, '\n') != EOF) {
1545 struct commit *parent;
1547 parent = get_merge_parent(m.buf);
1548 if (!parent)
1549 die(_("Corrupt MERGE_HEAD file (%s)"), m.buf);
1550 pptr = &commit_list_insert(parent, pptr)->next;
1552 fclose(fp);
1553 strbuf_release(&m);
1554 if (!stat(git_path("MERGE_MODE"), &statbuf)) {
1555 if (strbuf_read_file(&sb, git_path("MERGE_MODE"), 0) < 0)
1556 die_errno(_("could not read MERGE_MODE"));
1557 if (!strcmp(sb.buf, "no-ff"))
1558 allow_fast_forward = 0;
1560 if (allow_fast_forward)
1561 parents = reduce_heads(parents);
1562 } else {
1563 if (!reflog_msg)
1564 reflog_msg = (whence == FROM_CHERRY_PICK)
1565 ? "commit (cherry-pick)"
1566 : "commit";
1567 pptr = &commit_list_insert(current_head, pptr)->next;
1570 /* Finally, get the commit message */
1571 strbuf_reset(&sb);
1572 if (strbuf_read_file(&sb, git_path(commit_editmsg), 0) < 0) {
1573 int saved_errno = errno;
1574 rollback_index_files();
1575 die(_("could not read commit message: %s"), strerror(saved_errno));
1578 /* Truncate the message just before the diff, if any. */
1579 if (verbose) {
1580 p = strstr(sb.buf, "\ndiff --git ");
1581 if (p != NULL)
1582 strbuf_setlen(&sb, p - sb.buf + 1);
1585 if (cleanup_mode != CLEANUP_NONE)
1586 stripspace(&sb, cleanup_mode == CLEANUP_ALL);
1587 if (template_untouched(&sb) && !allow_empty_message) {
1588 rollback_index_files();
1589 fprintf(stderr, _("Aborting commit; you did not edit the message.\n"));
1590 exit(1);
1592 if (message_is_empty(&sb) && !allow_empty_message) {
1593 rollback_index_files();
1594 fprintf(stderr, _("Aborting commit due to empty commit message.\n"));
1595 exit(1);
1598 if (amend) {
1599 const char *exclude_gpgsig[2] = { "gpgsig", NULL };
1600 extra = read_commit_extra_headers(current_head, exclude_gpgsig);
1601 } else {
1602 struct commit_extra_header **tail = &extra;
1603 append_merge_tag_headers(parents, &tail);
1606 if (commit_tree_extended(&sb, active_cache_tree->sha1, parents, sha1,
1607 author_ident.buf, sign_commit, extra)) {
1608 rollback_index_files();
1609 die(_("failed to write commit object"));
1611 strbuf_release(&author_ident);
1612 free_commit_extra_headers(extra);
1614 ref_lock = lock_any_ref_for_update("HEAD",
1615 !current_head
1616 ? NULL
1617 : current_head->object.sha1,
1620 nl = strchr(sb.buf, '\n');
1621 if (nl)
1622 strbuf_setlen(&sb, nl + 1 - sb.buf);
1623 else
1624 strbuf_addch(&sb, '\n');
1625 strbuf_insert(&sb, 0, reflog_msg, strlen(reflog_msg));
1626 strbuf_insert(&sb, strlen(reflog_msg), ": ", 2);
1628 if (!ref_lock) {
1629 rollback_index_files();
1630 die(_("cannot lock HEAD ref"));
1632 if (write_ref_sha1(ref_lock, sha1, sb.buf) < 0) {
1633 rollback_index_files();
1634 die(_("cannot update HEAD ref"));
1637 unlink(git_path("CHERRY_PICK_HEAD"));
1638 unlink(git_path("REVERT_HEAD"));
1639 unlink(git_path("MERGE_HEAD"));
1640 unlink(git_path("MERGE_MSG"));
1641 unlink(git_path("MERGE_MODE"));
1642 unlink(git_path("SQUASH_MSG"));
1644 if (commit_index_files())
1645 die (_("Repository has been updated, but unable to write\n"
1646 "new_index file. Check that disk is not full or quota is\n"
1647 "not exceeded, and then \"git reset HEAD\" to recover."));
1649 rerere(0);
1650 run_hook(get_index_file(), "post-commit", NULL);
1651 if (amend && !no_post_rewrite) {
1652 struct notes_rewrite_cfg *cfg;
1653 cfg = init_copy_notes_for_rewrite("amend");
1654 if (cfg) {
1655 /* we are amending, so current_head is not NULL */
1656 copy_note_for_rewrite(cfg, current_head->object.sha1, sha1);
1657 finish_copy_notes_for_rewrite(cfg, "Notes added by 'git commit --amend'");
1659 run_rewrite_hook(current_head->object.sha1, sha1);
1661 if (!quiet)
1662 print_summary(prefix, sha1, !current_head);
1664 return 0;