Subject: Re: [PATCH 0/2] t/lib-gpg: ensure GNUPGHOME is created as needed

From: Junio C Hamano <[email-masked]>
Date: Mon, 27 Oct 2025 10:38:39 -0700

"Eric W. Biederman" <[email-masked]> writes:

>> I am tempted to do this in the meantime, but I'd really prefer not
>> to have to do so, assuming that these tests, when fixed, would be
>> materially contributing to the health of our codebase.
>
> I just dug into this a little and hopefully I have paged enough
> state back to understand this.
>
> In my testing a missing GNUPGHOME appears enough to prevent the
> prerequisite from succeeding. So let's fix that. Todd Zullinger's sent
> some nice patches to do that (up-thread), or you can take use my minimal
> version.

Sorry, but I am confused.  The above "tempted to do this" was meant
to come on top of Todd's patches.  IOW, I was seeing flakyness with
Todd's patches that fixed the missing GNUPGHOME.

> The only possible source of flakiness in the tests I can see is the
> possibility of t/t1016/gpg not getting called (which uses a fixed
> timestamp).  It appears you just fixed that problem in commit
> 516bf45749bb ("t1016: make sure to use specified GPG").

I think that one also is in 'seen', and yet we saw t1016 flaky X-<.

Let me isolate the relevant topics and test them again, i.e.

    $ git checkout --detach v2.51.0
    $ git merge --no-ff jc/t1016-setup-fix ;# 516bf45749
    $ git merge --no-ff tz/test-prepare-gnupghome~1 ;# 6cd8369ef3
    $ git log --no-merges --oneline v2.51.0..
    516bf45749 (jc/t1016-setup-fix) t1016: make sure to use specified GPG
    6cd8369ef3 t/lib-gpg: call prepare_gnupghome() in GPG2 prereq
    a35952b493 t/lib-gpg: add prepare_gnupghome() to create GNUPGHOME dir
    $ make
    $ cd t && ./t1016-*.sh --stress
    FAIL 10.1
    FAIL  5.1
    FAIL 34.1
    ...
    ++ eval 'diff -u' '"$@"'
    +++ diff -u signedcommit3_sha1 signedcommit3_sha1_expected
    --- signedcommit3_sha1	2025-10-27 17:34:58.237496945 +0000
    +++ signedcommit3_sha1_expected	2025-10-27 17:34:58.145497051 +0000
    @@ -1 +1 @@
    -de9cabc2419f97eb665452c198ed93e890a7ef87
    +c87cd5157461a81b60ef6d3c47562c12b328ef54
    error: last command exited with $?=1
    not ok 163 - Verify commit signedcommit3's sha1 oid
    #	
    #			git --git-dir=repo-sha256/.git rev-parse --output-object-format=sha1 ${sha256_oid} >${name}_sha1 &&
    #			test_cmp ${name}_sha1 ${name}_sha1_expected
    #		
    1..163

> With that commit reverted I can reproduce the flakiness locally
> by just running the test manually a few times.

The above is with all three patches mentioned.
FWIW, "gpg --version | head -2" says

    gpg (GnuPG) 2.4.8
    libgcrypt 1.11.2

Hmmmm.....

> I believe I used the GPG2 prereq because I don't have the older version
> of GPG to test with.  So I don't know if t1016 would work on the older
> version of GPG or not.
>
>
> diff --git a/t/lib-gpg.sh b/t/lib-gpg.sh
> index 937b876bd052..c4bbedfe081e 100644
> --- a/t/lib-gpg.sh
> +++ b/t/lib-gpg.sh
> @@ -62,6 +62,8 @@ test_lazy_prereq GPG2 '
>  		exit 1
>  		;;
>  	*)
> +		mkdir "$GNUPGHOME" &&
> +		chmod 0700 "$GNUPGHOME" &&
>  		(gpgconf --kill all || : ) &&
>  		gpg --homedir "${GNUPGHOME}" --import \
>  			"$TEST_DIRECTORY"/lib-gpg/keyring.gpg &&
>
>
> Eric