Add option to git-commit to allow empty log messages

Change git-commit(1) to accept the --allow-empty-message option
to allow a commit with an empty message.  This is analogous to the
existing --allow-empty option which allows a commit that records
no changes.  As these are mainly for interoperating with foreign SCM
systems, and are not meant for normal use, ensure that "git commit -h"
does not talk about them.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Ævar Arnfjörð Bjarmason 2010-04-06 08:40:35 +00:00 committed by Junio C Hamano
parent 537f6c7fb4
commit c9b5fde759
3 changed files with 38 additions and 4 deletions

View File

@ -10,7 +10,7 @@ SYNOPSIS
[verse] [verse]
'git commit' [-a | --interactive] [-s] [-v] [-u<mode>] [--amend] [--dry-run] 'git commit' [-a | --interactive] [-s] [-v] [-u<mode>] [--amend] [--dry-run]
[(-c | -C) <commit>] [-F <file> | -m <msg>] [--reset-author] [(-c | -C) <commit>] [-F <file> | -m <msg>] [--reset-author]
[--allow-empty] [--no-verify] [-e] [--author=<author>] [--allow-empty] [--allow-empty-message] [--no-verify] [-e] [--author=<author>]
[--date=<date>] [--cleanup=<mode>] [--status | --no-status] [--] [--date=<date>] [--cleanup=<mode>] [--status | --no-status] [--]
[[-i | -o ]<file>...] [[-i | -o ]<file>...]
@ -131,6 +131,12 @@ OPTIONS
from making such a commit. This option bypasses the safety, and from making such a commit. This option bypasses the safety, and
is primarily for use by foreign scm interface scripts. is primarily for use by foreign scm interface scripts.
--allow-empty-message::
Like --allow-empty this command is primarily for use by foreign
scm interface scripts. It allows you to create a commit with an
empty commit message without using plumbing commands like
linkgit:git-commit-tree[1].
--cleanup=<mode>:: --cleanup=<mode>::
This option sets how the commit message is cleaned up. This option sets how the commit message is cleaned up.
The '<mode>' can be one of 'verbatim', 'whitespace', 'strip', The '<mode>' can be one of 'verbatim', 'whitespace', 'strip',

View File

@ -66,7 +66,7 @@ static char *edit_message, *use_message;
static char *author_name, *author_email, *author_date; static char *author_name, *author_email, *author_date;
static int all, edit_flag, also, interactive, only, amend, signoff; static int all, edit_flag, also, interactive, only, amend, signoff;
static int quiet, verbose, no_verify, allow_empty, dry_run, renew_authorship; static int quiet, verbose, no_verify, allow_empty, dry_run, renew_authorship;
static int no_post_rewrite; static int no_post_rewrite, allow_empty_message;
static char *untracked_files_arg, *force_date; static char *untracked_files_arg, *force_date;
/* /*
* The default commit message cleanup mode will remove the lines * The default commit message cleanup mode will remove the lines
@ -140,9 +140,15 @@ static struct option builtin_commit_options[] = {
OPT_BOOLEAN(0, "amend", &amend, "amend previous commit"), OPT_BOOLEAN(0, "amend", &amend, "amend previous commit"),
OPT_BOOLEAN(0, "no-post-rewrite", &no_post_rewrite, "bypass post-rewrite hook"), OPT_BOOLEAN(0, "no-post-rewrite", &no_post_rewrite, "bypass post-rewrite hook"),
{ OPTION_STRING, 'u', "untracked-files", &untracked_files_arg, "mode", "show untracked files, optional modes: all, normal, no. (Default: all)", PARSE_OPT_OPTARG, NULL, (intptr_t)"all" }, { OPTION_STRING, 'u', "untracked-files", &untracked_files_arg, "mode", "show untracked files, optional modes: all, normal, no. (Default: all)", PARSE_OPT_OPTARG, NULL, (intptr_t)"all" },
OPT_BOOLEAN(0, "allow-empty", &allow_empty, "ok to record an empty change"),
/* end commit contents options */ /* end commit contents options */
{ OPTION_BOOLEAN, 0, "allow-empty", &allow_empty, NULL,
"ok to record an empty change",
PARSE_OPT_NOARG | PARSE_OPT_HIDDEN },
{ OPTION_BOOLEAN, 0, "allow-empty-message", &allow_empty_message, NULL,
"ok to record a change with an empty message",
PARSE_OPT_NOARG | PARSE_OPT_HIDDEN },
OPT_END() OPT_END()
}; };
@ -1293,7 +1299,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
if (cleanup_mode != CLEANUP_NONE) if (cleanup_mode != CLEANUP_NONE)
stripspace(&sb, cleanup_mode == CLEANUP_ALL); stripspace(&sb, cleanup_mode == CLEANUP_ALL);
if (message_is_empty(&sb)) { if (message_is_empty(&sb) && !allow_empty_message) {
rollback_index_files(); rollback_index_files();
fprintf(stderr, "Aborting commit due to empty commit message.\n"); fprintf(stderr, "Aborting commit due to empty commit message.\n");
exit(1); exit(1);

View File

@ -193,4 +193,26 @@ test_expect_success 'commit -F overrides -t' '
commit_msg_is "-F log" commit_msg_is "-F log"
' '
test_expect_success 'Commit without message is allowed with --allow-empty-message' '
echo "more content" >>foo &&
git add foo &&
>empty &&
git commit --allow-empty-message <empty &&
commit_msg_is ""
'
test_expect_success 'Commit without message is no-no without --allow-empty-message' '
echo "more content" >>foo &&
git add foo &&
>empty &&
test_must_fail git commit <empty
'
test_expect_success 'Commit a message with --allow-empty-message' '
echo "even more content" >>foo &&
git add foo &&
git commit --allow-empty-message -m"hello there" &&
commit_msg_is "hello there"
'
test_done test_done