commit: add a commit.verbose config variable

Add commit.verbose configuration variable as a convenience for those
who always prefer --verbose.

Add tests to check the behavior introduced by this commit and also to
verify that behavior of status doesn't break because of this commit.

Helped-by: Junio C Hamano <gitster@pobox.com>
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Pranit Bauva <pranit.bauva@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Pranit Bauva 2016-05-05 15:20:02 +05:30 committed by Junio C Hamano
parent de45dbb818
commit aaab84203b
4 changed files with 67 additions and 1 deletions

View file

@ -1110,6 +1110,10 @@ commit.template::
"`~/`" is expanded to the value of `$HOME` and "`~user/`" to the "`~/`" is expanded to the value of `$HOME` and "`~user/`" to the
specified user's home directory. specified user's home directory.
commit.verbose::
A boolean or int to specify the level of verbose with `git commit`.
See linkgit:git-commit[1].
credential.helper:: credential.helper::
Specify an external helper to be called when a username or Specify an external helper to be called when a username or
password credential is needed; the helper may consult external password credential is needed; the helper may consult external

View file

@ -290,7 +290,8 @@ configuration variable documented in linkgit:git-config[1].
what changes the commit has. what changes the commit has.
Note that this diff output doesn't have its Note that this diff output doesn't have its
lines prefixed with '#'. This diff will not be a part lines prefixed with '#'. This diff will not be a part
of the commit message. of the commit message. See the `commit.verbose` configuration
variable in linkgit:git-config[1].
+ +
If specified twice, show in addition the unified diff between If specified twice, show in addition the unified diff between
what would be committed and the worktree files, i.e. the unstaged what would be committed and the worktree files, i.e. the unstaged

View file

@ -114,6 +114,7 @@ static char *fixup_message, *squash_message;
static int all, also, interactive, patch_interactive, only, amend, signoff; static int all, also, interactive, patch_interactive, only, amend, signoff;
static int edit_flag = -1; /* unspecified */ static int edit_flag = -1; /* unspecified */
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 config_commit_verbose = -1; /* unspecified */
static int no_post_rewrite, allow_empty_message; static int no_post_rewrite, allow_empty_message;
static char *untracked_files_arg, *force_date, *ignore_submodule_arg; static char *untracked_files_arg, *force_date, *ignore_submodule_arg;
static char *sign_commit; static char *sign_commit;
@ -1515,6 +1516,11 @@ static int git_commit_config(const char *k, const char *v, void *cb)
sign_commit = git_config_bool(k, v) ? "" : NULL; sign_commit = git_config_bool(k, v) ? "" : NULL;
return 0; return 0;
} }
if (!strcmp(k, "commit.verbose")) {
int is_bool;
config_commit_verbose = git_config_bool_or_int(k, v, &is_bool);
return 0;
}
status = git_gpg_config(k, v, NULL); status = git_gpg_config(k, v, NULL);
if (status) if (status)
@ -1661,9 +1667,13 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
if (parse_commit(current_head)) if (parse_commit(current_head))
die(_("could not parse HEAD commit")); die(_("could not parse HEAD commit"));
} }
verbose = -1; /* unspecified */
argc = parse_and_validate_options(argc, argv, builtin_commit_options, argc = parse_and_validate_options(argc, argv, builtin_commit_options,
builtin_commit_usage, builtin_commit_usage,
prefix, current_head, &s); prefix, current_head, &s);
if (verbose == -1)
verbose = (config_commit_verbose < 0) ? 0 : config_commit_verbose;
if (dry_run) if (dry_run)
return dry_run_commit(argc, argv, prefix, current_head, &s); return dry_run_commit(argc, argv, prefix, current_head, &s);
index_file = prepare_index(argc, argv, prefix, current_head, 0); index_file = prepare_index(argc, argv, prefix, current_head, 0);

View file

@ -103,4 +103,55 @@ test_expect_success 'status does not verbose without --verbose' '
! grep "^diff --git" actual ! grep "^diff --git" actual
' '
test_expect_success 'setup -v -v' '
echo dirty >file
'
for i in true 1
do
test_expect_success "commit.verbose=$i and --verbose omitted" "
git -c commit.verbose=$i commit --amend &&
test_line_count = 1 out
"
done
for i in false -2 -1 0
do
test_expect_success "commit.verbose=$i and --verbose omitted" "
git -c commit.verbose=$i commit --amend &&
test_line_count = 0 out
"
done
for i in 2 3
do
test_expect_success "commit.verbose=$i and --verbose omitted" "
git -c commit.verbose=$i commit --amend &&
test_line_count = 2 out
"
done
for i in true false -2 -1 0 1 2 3
do
test_expect_success "commit.verbose=$i and --verbose" "
git -c commit.verbose=$i commit --amend --verbose &&
test_line_count = 1 out
"
test_expect_success "commit.verbose=$i and --no-verbose" "
git -c commit.verbose=$i commit --amend --no-verbose &&
test_line_count = 0 out
"
test_expect_success "commit.verbose=$i and -v -v" "
git -c commit.verbose=$i commit --amend -v -v &&
test_line_count = 2 out
"
done
test_expect_success "status ignores commit.verbose=true" '
git -c commit.verbose=true status >actual &&
! grep "^diff --git actual"
'
test_done test_done