git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v3 1/7] gpg-interface: add new config to select how to sign a commit

From
Junio C Hamano <gitster@pobox.com>
Date
Jul 16, 2018, 20:14 UTC
Message-ID
<xmqqh8kzszth.fsf@gitster-ct.c.googlers.com>
In-Reply-To
<5e88da5eac1e1aea8a946960d455ba321e3e42b1.1531470729.git.henning.schild@siemens.com>
Henning Schild <henning.schild@siemens.com> writes:
Show 45 quoted lines
> Add "gpg.format" where the user can specify which type of signature to
> use for commits. At the moment only "openpgp" is supported and the value is
> not even used. This commit prepares for a new types of signatures.
>
> Signed-off-by: Henning Schild <henning.schild@siemens.com>
> ---
>  Documentation/config.txt | 4 ++++
>  gpg-interface.c          | 7 +++++++
>  2 files changed, 11 insertions(+)
>
> diff --git a/Documentation/config.txt b/Documentation/config.txt
> index 1cc18a828..ac373e3f4 100644
> --- a/Documentation/config.txt
> +++ b/Documentation/config.txt
> @@ -1828,6 +1828,10 @@ gpg.program::
>  	signed, and the program is expected to send the result to its
>  	standard output.
>  
> +gpg.format::
> +	Specifies which key format to use when signing with `--gpg-sign`.
> +	Default is "openpgp", that is also the only supported value.
> +
>  gui.commitMsgWidth::
>  	Defines how wide the commit message window is in the
>  	linkgit:git-gui[1]. "75" is the default.
> diff --git a/gpg-interface.c b/gpg-interface.c
> index 09ddfbc26..960c40086 100644
> --- a/gpg-interface.c
> +++ b/gpg-interface.c
> @@ -7,6 +7,7 @@
>  #include "tempfile.h"
>  
>  static char *configured_signing_key;
> +static const char *gpg_format = "openpgp";
>  static const char *gpg_program = "gpg";
>  
>  #define PGP_SIGNATURE "-----BEGIN PGP SIGNATURE-----"
> @@ -138,6 +139,12 @@ int git_gpg_config(const char *var, const char *value, void *cb)
>  		return 0;
>  	}
>  
> +	if (!strcmp(var, "gpg.format")) {
> +		if (value && strcasecmp(value, "openpgp"))
> +			return error("malformed value for %s: %s", var, value);
> +		return git_config_string(&gpg_format, var, value);

I may be mistaken (sorry, I read so many topics X-<) but I think the consensus was to accept only "openpgp" so that we can ensure that

	[gpg "openpgp"] program = foo

etc. can be parsed more naturally without having to manually special case the subsection name to be case insensitive. In other words, strcasecmp() should just be strcmp(). Otherwise, people would get a wrong expectation that

	[gpg] format = OpenPGP
	[gpg "openpgp"] program = foo

should refer to the same and single OpenPGP, but that would violate the usual configuration syntax rules.

The structure of checking the error looks quite suboptimal even when we initially support the single "openpgp" at this step. I would have expected you to be writing the above like so:

	if (!value)
		return config_error_nonbool(var);
	if (strcmp(value, "openpgp"))
		return error("unsupported value for %s: %s", var, value);
	return git_config_string(...);

That would make it more clear that the variable is "nonbool", which does not change across additional support for new formats in later steps.

Show 5 quoted lines
> +	}
> +
>  	if (!strcmp(var, "gpg.program")) {
>  		if (!value)
>  			return config_error_nonbool(var);
Previous: Henning SchildNext: Jeff King
Message 5 of 19 in “X509 (gpgsm) commit signing support”
  1. 0/7 X509 (gpgsm) commit signing supportHenning Schild, Jul 13, 2018
  2. 2/7 t/t7510: check the validation of the new config gpg.formatHenning Schild, Jul 13, 2018
  3. Junio C HamanoJul 16, 2018
  4. 1/7 gpg-interface: add new config to select how to sign a commitHenning Schild, Jul 13, 2018
  5. Junio C HamanoJul 16, 2018
  6. Jeff KingJul 16, 2018
  7. Henning SchildJul 17, 2018
  8. brian m. carlsonJul 17, 2018
  9. Jeff KingJul 17, 2018
  10. 4/7 gpg-interface: do not hardcode the key string len anymoreHenning Schild, Jul 13, 2018
  11. Junio C HamanoJul 16, 2018
  12. 3/7 gpg-interface: introduce an abstraction for multiple gpg formatsHenning Schild, Jul 13, 2018
  13. Junio C HamanoJul 16, 2018
  14. Henning SchildJul 17, 2018
  15. 5/7 gpg-interface: introduce new config to select per gpg format programHenning Schild, Jul 13, 2018
  16. Junio C HamanoJul 16, 2018
  17. Henning SchildJul 17, 2018
  18. 6/7 gpg-interface: introduce new signature format "x509" using gpgsmHenning Schild, Jul 13, 2018
  19. 7/7 gpg-interface t: extend the existing GPG tests with GPGSMHenning Schild, Jul 13, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.