Re: [PATCHv2] commit: make default of "cleanup" option configurable
Ralf Thielow writes: > 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 > --- Thanks. > Changes in v2: > - simplify implementation > - mention configuration variable in documentation of "git commit --cleanup" > - add an example usecase to documention of commit.cleanup configuration > variable > - add tests > > Documentation/config.txt| 7 > Documentation/git-commit.txt| 4 +- > builtin/commit.c| 5 ++- > t/t7500/add-content-and-comment | 4 ++ > t/t7502-commit.sh | 84 > + > 5 files changed, 95 insertions(+), 9 deletions(-) > create mode 100755 t/t7500/add-content-and-comment > > diff --git a/Documentation/config.txt b/Documentation/config.txt > index 53c4ca1..0452d56 100644 > --- a/Documentation/config.txt > +++ b/Documentation/config.txt > @@ -917,6 +917,13 @@ 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 if you want to use the comment character (#) > + consistently within your commit messages, in which case you would > + like to change the default to 'whitespace'. When the documentation suggests to use 'whitespace', it would be helpful to warn the readers that hints Git produces in '#'-commented section need to be removed, if they are not ment to be kept (which is 99.99% of the case). Perhaps: This setting overrides the default of the `--cleanup` option in `git commit`. 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). or something? > diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt > index 7bdb039..41b27da 100644 > --- a/Documentation/git-commit.txt > +++ b/Documentation/git-commit.txt > @@ -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]). Nicely written. > --- a/builtin/commit.c > +++ b/builtin/commit.c > @@ -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; > @@ -966,6 +966,7 @@ static const char *read_commit_message(const char *name) > return out; > } > > + > static int parse_and_validate_options(int argc, const char *argv[], > const struct option *options, > const char * const usage[], Don't add an extra blank line, please. > @@ -1320,6 +1321,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); Nice. > diff --git a/t/t7500/add-content-and-comment b/t/t7500/add-content-and-comment > new file mode 100755 > index 000..988f5e9 > --- /dev/null > +++ b/t/t7500/add-content-and-comment > @@ -0,0 +1,4 @@ > +#!/bin/sh > +echo "commit message" >> "$1" > +echo "# comment" >> "$1" > +exit 0 > \ No newline at end of file Have newline at end of file, please. > diff --git a/t/t7502-commit.sh b/t/t7502-commit.sh > index 1a5cb69..b1c7648 100755 > --- a/t/t7502-commit.sh > +++ b/t/t7502-commit.sh > @@ -4,6 +4,15 @@ test_description='git commit porcelain-ish' > +... > +' > + Nicely done. Thanks. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCHv2] commit: make default of "cleanup" option configurable
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 --- Changes in v2: - simplify implementation - mention configuration variable in documentation of "git commit --cleanup" - add an example usecase to documention of commit.cleanup configuration variable - add tests Documentation/config.txt| 7 Documentation/git-commit.txt| 4 +- builtin/commit.c| 5 ++- t/t7500/add-content-and-comment | 4 ++ t/t7502-commit.sh | 84 + 5 files changed, 95 insertions(+), 9 deletions(-) create mode 100755 t/t7500/add-content-and-comment diff --git a/Documentation/config.txt b/Documentation/config.txt index 53c4ca1..0452d56 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -917,6 +917,13 @@ 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 if you want to use the comment character (#) + consistently within your commit messages, in which case you would + like to change the default to 'whitespace'. + commit.status:: A boolean to enable/disable inclusion of status information in the commit message template when using an editor to prepare the commit diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt index 7bdb039..41b27da 100644 --- a/Documentation/git-commit.txt +++ b/Documentation/git-commit.txt @@ -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:: diff --git a/builtin/commit.c b/builtin/commit.c index d6dd3df..4d55f8f 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -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; @@ -966,6 +966,7 @@ static const char *read_commit_message(const char *name) return out; } + static int parse_and_validate_options(int argc, const char *argv[], const struct option *options, const char * const usage[], @@ -1320,6 +1321,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) diff --git a/t/t7500/add-content-and-comment b/t/t7500/add-content-and-comment new file mode 100755 index 000..988f5e9 --- /dev/null +++ b/t/t7500/add-content-and-comment @@ -0,0 +1,4 @@ +#!/bin/sh +echo "commit message" >> "$1" +echo "# comment" >> "$1" +exit 0 \ No newline at end of file diff --git a/t/t7502-commit.sh b/t/t7502-commit.sh index 1a5cb69..b1c7648 100755 --- a/t/t7502-commit.sh +++ b/t/t7502-commit.sh @@ -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: [] [] check_summary_oneline() { test_tick && @@ -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 && @@ -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 && @@ -187,7 +196,7 @@ test_expect_success 'cleanup commit messages (verbatim,-F)' ' ' -test