Re: [PATCH] commit: make default of "cleanup" option configurable

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Ralf Thielow <ralf.thielow@xxxxxxxxx> 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 <ralf.thielow@xxxxxxxxx>
> ---

The idea makes sense, but I am not sure the implementation is
correct.  Does the code already know the final value of use_editor
at the point where it calls git_commit_config?  I think you do not
know at least until you call parse_and_validate_options().

Once you got the implementation right, we would want to make sure
that future changes will not break it by adding some tests that
verify:

 - Without configuration and without option, the command keeps the
   built-in default;

 - Without configuration but with option, the command uses the
   command line option (we may already have this test, I didn't
   check);

 - With configuration and without option, the command uses the
   configured default (what this patch adds); and

 - With configuration and with option, the command uses the command
   line option.

The latter two probably needs a few variants, one with --edit (with
EDITOR set to something like "true"), another with --no-edit, one
without --edit nor --no-edit but with -m "$msg" to implicitly turn
use_editor off, and one without --edit, --no-edit, nor -m but with
EDITOR set to a scriptlet that writes a message to the file to
implicitly turn use_editor on.

Also, the readers of the documentation for "commit --cleanup" will
wonder the same thing you wondered before you wrote this patch;
mentioning the configuration variable in its documentation will help
them.

Thanks.

>  Documentation/config.txt |  4 ++++
>  builtin/commit.c         | 29 ++++++++++++++++++-----------
>  2 files changed, 22 insertions(+), 11 deletions(-)
>
> diff --git a/Documentation/config.txt b/Documentation/config.txt
> index 53c4ca1..3f76cd1 100644
> --- a/Documentation/config.txt
> +++ b/Documentation/config.txt
> @@ -917,6 +917,10 @@ 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.
> +
>  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/builtin/commit.c b/builtin/commit.c
> index d6dd3df..42acde7 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;
> +const static char *cleanup_arg;
>  
>  static enum commit_whence whence;
>  static int use_editor = 1, include_status = 1;
> @@ -966,6 +966,20 @@ static const char *read_commit_message(const char *name)
>  	return out;
>  }
>  
> +static void parse_cleanup_arg()
> +{
> +	if (!cleanup_arg || !strcmp(cleanup_arg, "default"))
> +		cleanup_mode = use_editor ? CLEANUP_ALL : CLEANUP_SPACE;
> +	else if (!strcmp(cleanup_arg, "verbatim"))
> +		cleanup_mode = CLEANUP_NONE;
> +	else if (!strcmp(cleanup_arg, "whitespace"))
> +		cleanup_mode = CLEANUP_SPACE;
> +	else if (!strcmp(cleanup_arg, "strip"))
> +		cleanup_mode = CLEANUP_ALL;
> +	else
> +		die(_("Invalid cleanup mode %s"), cleanup_arg);
> +}
> +
>  static int parse_and_validate_options(int argc, const char *argv[],
>  				      const struct option *options,
>  				      const char * const usage[],
> @@ -1044,18 +1058,9 @@ static int parse_and_validate_options(int argc, const char *argv[],
>  		only_include_assumed = _("Clever... amending the last one with dirty index.");
>  	if (argc > 0 && !also && !only)
>  		only_include_assumed = _("Explicit paths specified without -i nor -o; assuming --only paths...");
> -	if (!cleanup_arg || !strcmp(cleanup_arg, "default"))
> -		cleanup_mode = use_editor ? CLEANUP_ALL : CLEANUP_SPACE;
> -	else if (!strcmp(cleanup_arg, "verbatim"))
> -		cleanup_mode = CLEANUP_NONE;
> -	else if (!strcmp(cleanup_arg, "whitespace"))
> -		cleanup_mode = CLEANUP_SPACE;
> -	else if (!strcmp(cleanup_arg, "strip"))
> -		cleanup_mode = CLEANUP_ALL;
> -	else
> -		die(_("Invalid cleanup mode %s"), cleanup_arg);
>  
>  	handle_untracked_files_arg(s);
> +	parse_cleanup_arg();
>  
>  	if (all && argc > 0)
>  		die(_("Paths with -a does not make sense."));
> @@ -1320,6 +1325,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)
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]