Skip to content

Commit

Permalink
commit: make default of "cleanup" option configurable
Browse files Browse the repository at this point in the history
The default of the "cleanup" option in "git commit"
is not configurable. Users who don't want to use the
default have to pass this option on every commit since
there's no way to configure it. This commit introduces
a new config option "commit.cleanup" which can be used
to change the default of the "cleanup" option in
"git commit".

Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Ralf Thielow authored and Junio C Hamano committed Jan 10, 2013
1 parent 44fe835 commit 51fb3a3
Show file tree
Hide file tree
Showing 5 changed files with 97 additions and 9 deletions.
9 changes: 9 additions & 0 deletions Documentation/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -923,6 +923,15 @@ column.tag::
Specify whether to output tag listing in `git tag` in columns.
See `column.ui` for details.

commit.cleanup::
This setting overrides the default of the `--cleanup` option in
`git commit`. See linkgit:git-commit[1] for details. Changing the
default can be useful when you always want to keep lines that begin
with comment character `#` in your log message, in which case you
would do `git config commit.cleanup whitespace` (note that you will
have to remove the help lines that begin with `#` in the commit log
template yourself, if you do this).

commit.status::
A boolean to enable/disable inclusion of status information in the
commit message template when using an editor to prepare the commit
Expand Down
4 changes: 3 additions & 1 deletion Documentation/git-commit.txt
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,9 @@ OPTIONS
only if the message is to be edited. Otherwise only whitespace
removed. The 'verbatim' mode does not change message at all,
'whitespace' removes just leading/trailing whitespace lines
and 'strip' removes both whitespace and commentary.
and 'strip' removes both whitespace and commentary. The default
can be changed by the 'commit.cleanup' configuration variable
(see linkgit:git-config[1]).

-e::
--edit::
Expand Down
4 changes: 3 additions & 1 deletion builtin/commit.c
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ static enum {
CLEANUP_NONE,
CLEANUP_ALL
} cleanup_mode;
static char *cleanup_arg;
static const char *cleanup_arg;

static enum commit_whence whence;
static int use_editor = 1, include_status = 1;
Expand Down Expand Up @@ -1320,6 +1320,8 @@ static int git_commit_config(const char *k, const char *v, void *cb)
include_status = git_config_bool(k, v);
return 0;
}
if (!strcmp(k, "commit.cleanup"))
return git_config_string(&cleanup_arg, k, v);

status = git_gpg_config(k, v, NULL);
if (status)
Expand Down
5 changes: 5 additions & 0 deletions t/t7500/add-content-and-comment
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/sh
echo "commit message" >> "$1"
echo "# comment" >> "$1"
exit 0

84 changes: 77 additions & 7 deletions t/t7502-commit.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,15 @@ test_description='git commit porcelain-ish'

. ./test-lib.sh

commit_msg_is () {
expect=commit_msg_is.expect
actual=commit_msg_is.actual

printf "%s" "$(git log --pretty=format:%s%b -1)" >$actual &&
printf "%s" "$1" >$expect &&
test_i18ncmp $expect $actual
}

# Arguments: [<prefix] [<commit message>] [<commit options>]
check_summary_oneline() {
test_tick &&
Expand Down Expand Up @@ -168,7 +177,7 @@ test_expect_success 'verbose respects diff config' '
git config --unset color.diff
'

test_expect_success 'cleanup commit messages (verbatim,-t)' '
test_expect_success 'cleanup commit messages (verbatim option,-t)' '
echo >>negative &&
{ echo;echo "# text";echo; } >expect &&
Expand All @@ -178,7 +187,7 @@ test_expect_success 'cleanup commit messages (verbatim,-t)' '
'

test_expect_success 'cleanup commit messages (verbatim,-F)' '
test_expect_success 'cleanup commit messages (verbatim option,-F)' '
echo >>negative &&
git commit --cleanup=verbatim -F expect -a &&
Expand All @@ -187,7 +196,7 @@ test_expect_success 'cleanup commit messages (verbatim,-F)' '
'

test_expect_success 'cleanup commit messages (verbatim,-m)' '
test_expect_success 'cleanup commit messages (verbatim option,-m)' '
echo >>negative &&
git commit --cleanup=verbatim -m "$(cat expect)" -a &&
Expand All @@ -196,7 +205,7 @@ test_expect_success 'cleanup commit messages (verbatim,-m)' '
'

test_expect_success 'cleanup commit messages (whitespace,-F)' '
test_expect_success 'cleanup commit messages (whitespace option,-F)' '
echo >>negative &&
{ echo;echo "# text";echo; } >text &&
Expand All @@ -207,7 +216,7 @@ test_expect_success 'cleanup commit messages (whitespace,-F)' '
'

test_expect_success 'cleanup commit messages (strip,-F)' '
test_expect_success 'cleanup commit messages (strip option,-F)' '
echo >>negative &&
{ echo;echo "# text";echo sample;echo; } >text &&
Expand All @@ -218,7 +227,7 @@ test_expect_success 'cleanup commit messages (strip,-F)' '
'

test_expect_success 'cleanup commit messages (strip,-F,-e)' '
test_expect_success 'cleanup commit messages (strip option,-F,-e)' '
echo >>negative &&
{ echo;echo sample;echo; } >text &&
Expand All @@ -231,10 +240,71 @@ echo "sample
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit." >expect

test_expect_success 'cleanup commit messages (strip,-F,-e): output' '
test_expect_success 'cleanup commit messages (strip option,-F,-e): output' '
test_i18ncmp expect actual
'

test_expect_success 'cleanup commit message (fail on invalid cleanup mode option)' '
test_must_fail git commit --cleanup=non-existent
'

test_expect_success 'cleanup commit message (fail on invalid cleanup mode configuration)' '
test_must_fail git -c commit.cleanup=non-existent commit
'

test_expect_success 'cleanup commit message (no config and no option uses default)' '
echo content >>file &&
git add file &&
test_set_editor "$TEST_DIRECTORY"/t7500/add-content-and-comment &&
git commit --no-status &&
commit_msg_is "commit message"
'

test_expect_success 'cleanup commit message (option overrides default)' '
echo content >>file &&
git add file &&
test_set_editor "$TEST_DIRECTORY"/t7500/add-content-and-comment &&
git commit --cleanup=whitespace --no-status &&
commit_msg_is "commit message # comment"
'

test_expect_success 'cleanup commit message (config overrides default)' '
echo content >>file &&
git add file &&
test_set_editor "$TEST_DIRECTORY"/t7500/add-content-and-comment &&
git -c commit.cleanup=whitespace commit --no-status &&
commit_msg_is "commit message # comment"
'

test_expect_success 'cleanup commit message (option overrides config)' '
echo content >>file &&
git add file &&
test_set_editor "$TEST_DIRECTORY"/t7500/add-content-and-comment &&
git -c commit.cleanup=whitespace commit --cleanup=default &&
commit_msg_is "commit message"
'

test_expect_success 'cleanup commit message (default, -m)' '
echo content >>file &&
git add file &&
git commit -m "message #comment " &&
commit_msg_is "message #comment"
'

test_expect_success 'cleanup commit message (whitespace option, -m)' '
echo content >>file &&
git add file &&
git commit --cleanup=whitespace --no-status -m "message #comment " &&
commit_msg_is "message #comment"
'

test_expect_success 'cleanup commit message (whitespace config, -m)' '
echo content >>file &&
git add file &&
git -c commit.cleanup=whitespace commit --no-status -m "message #comment " &&
commit_msg_is "message #comment"
'

test_expect_success 'message shows author when it is not equal to committer' '
echo >>negative &&
git commit -e -m "sample" -a &&
Expand Down

0 comments on commit 51fb3a3

Please sign in to comment.