Subject: Re: [BUG] gpg.program: '~' not expanded to home directory

From: Junio C Hamano <[email-masked]>
Date: Fri, 11 Jul 2025 17:05:44 -0700

Ross MacArthur <[email-masked]> writes:

> `gpg.program` treats a leading ‘~’ literally, unlike other path
> options such as `core.excludesfile`.

I think that is correct; I do not think gpg.program is to give a
path to the program, so comparison with core.excludesfile is
probably not so appropriate.

It gives a command line, e.g. "mysign --compat=gnupg", where the
program "mysign" somewhere on your path can be told to behave in a
way compatible to GPG when a command line option "--compat=gnupg" is
given.  We further append our own command line options when we
invoke this command, like the "git config --help" on this variable
says.  When we want to verify GPG signature $signature in a file
$file, for example, instead of running gpg, we would run:

	mysign --compat=gnupg --verify $signature - <$file

> Expected: Git should expand ‘~’ to $HOME.

So this expectation does not quite hold true.

I wonder if letting your shell to handle the tilde expansion would
make it work, though.  Continuing with the example, it may look
something like this, perhaps?

 $ git config set gpg.program "sh -c '~/mysign --compat=gnupg \"\$@\"' -"