git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: Patrick Steinhardt <ps@pks.im>
Cc: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>
Subject: Re: [PATCH] t5503: simplify setup of test which exercises failure of backfill
Date: Thu, 03 Mar 2022 11:23:48 +0100	[thread overview]
Message-ID: <220303.86bkyn5npc.gmgdl@evledraar.gmail.com> (raw)
In-Reply-To: <cc7de043de67bb8243c764ef6764b07170b01929.1646291929.git.ps@pks.im>


On Thu, Mar 03 2022, Patrick Steinhardt wrote:

> [[PGP Signed Part:Undecided]]
> In the testcase to exercise backfilling of tags for fetches we evoke a
> failure of the backfilling mechanism by creating a reference that later
> on causes a D/F conflict. Because the assumption was that git-fetch(1)
> would notice the D/F conflict early on this conflicting reference was
> created via the reference-transaction hook just when we were about to
> write the backfilled tag. As it turns out though this is not the case,
> and the fetch fails in the same way when we create the conflicting ref
> up front.
>
> Simplify the test setup creating the reference up front, which allows us
> to get rid of the hook script.
>
> Signed-off-by: Patrick Steinhardt <ps@pks.im>
> ---
>
> This simplifies the test setup of t5503 as discussed in [1]. The patch
> applies on top of Junio's ps/fetch-atomic (583bc41923 (fetch: make
> `--atomic` flag cover pruning of refs, 2022-02-17)).

FWIW for something in "next" already the OID will be stable, so it's OK
(and better) to mention 583bc419235 in the commit message itself.

> Patrick
>
>  t/t5503-tagfollow.sh | 20 +++++---------------
>  1 file changed, 5 insertions(+), 15 deletions(-)
>
> diff --git a/t/t5503-tagfollow.sh b/t/t5503-tagfollow.sh
> index e72fdc2534..a3c01014b7 100755
> --- a/t/t5503-tagfollow.sh
> +++ b/t/t5503-tagfollow.sh
> @@ -212,21 +212,11 @@ test_expect_success 'atomic fetch with backfill should use single transaction' '
>  test_expect_success 'backfill failure causes command to fail' '
>  	git init clone5 &&
>  
> -	write_script clone5/.git/hooks/reference-transaction <<-EOF &&
> -		while read oldrev newrev reference
> -		do
> -			if test "\$reference" = refs/tags/tag1
> -			then
> -				# Create a nested tag below the actual tag we
> -				# wanted to write, which causes a D/F conflict
> -				# later when we want to commit refs/tags/tag1.
> -				# We cannot just `exit 1` here given that this
> -				# would cause us to die immediately.
> -				git update-ref refs/tags/tag1/nested $B
> -				exit \$!
> -			fi
> -		done
> -	EOF
> +	# Create a tag that is nested below the tag we are about to fetch via
> +	# the backfill mechanism. This causes a D/F conflict when backfilling
> +	# and should thus cause the command to fail.
> +	empty_blob=$(git -C clone5 hash-object -w --stdin </dev/null) &&
> +	git -C clone5 update-ref refs/tags/tag1/nested $empty_blob &&

This looks better, but FWIW for the discussion about quoted
v.s. unquoted here-doc in this case it's also OK for the pre-image (and
arguably better) to do (and any issues of $? v.s. $! etc. aside):
	
	diff --git a/t/t5503-tagfollow.sh b/t/t5503-tagfollow.sh
	index e72fdc25346..eebf0ddc4c2 100755
	--- a/t/t5503-tagfollow.sh
	+++ b/t/t5503-tagfollow.sh
	@@ -212,18 +212,18 @@ test_expect_success 'atomic fetch with backfill should use single transaction' '
	 test_expect_success 'backfill failure causes command to fail' '
	 	git init clone5 &&
	 
	-	write_script clone5/.git/hooks/reference-transaction <<-EOF &&
	+	write_script clone5/.git/hooks/reference-transaction <<-\EOF &&
	 		while read oldrev newrev reference
	 		do
	-			if test "\$reference" = refs/tags/tag1
	+			if test "$reference" = refs/tags/tag1
	 			then
	 				# Create a nested tag below the actual tag we
	 				# wanted to write, which causes a D/F conflict
	 				# later when we want to commit refs/tags/tag1.
	 				# We cannot just `exit 1` here given that this
	 				# would cause us to die immediately.
	-				git update-ref refs/tags/tag1/nested $B
	-				exit \$!
	+				git update-ref refs/tags/tag1/nested '$B'
	+				exit $!
	 			fi
	 		done
	 	EOF

I.e. to end the quote and interpolate $B. IMO also more readable as
e.g. shell syntax highlighting will show that we're interpolating that
outside-test $B.

>  
>  	test_must_fail git -C clone5 fetch .. $B:refs/heads/something &&
>  	test $B = $(git -C clone5 rev-parse --verify refs/heads/something) &&

(In the pre-image, but..) this way of using "test" will hide segfaults
etc. from the invoked git command.

Better to:

    echo $B >expect &&
    git ... >actual &&
    test_cmp expect actual

Or better yet "test_cmp_rev" in this case, but all of that's in "next"
already, so purely optional (and also more food for the "hiding exit
status" microproject) :)

      reply	other threads:[~2022-03-03 10:34 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-03  7:20 [PATCH] t5503: simplify setup of test which exercises failure of backfill Patrick Steinhardt
2022-03-03 10:23 ` Ævar Arnfjörð Bjarmason [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=220303.86bkyn5npc.gmgdl@evledraar.gmail.com \
    --to=avarab@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=ps@pks.im \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).