All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kim Altintop <kim@eagain.st>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Jonathan Tan <jonathantanmy@google.com>,
	Brandon Williams <bwilliams.eng@gmail.com>
Subject: Re: [PATCH v3] upload-pack.c: treat want-ref relative to namespace
Date: Wed, 04 Aug 2021 22:04:05 +0000	[thread overview]
Message-ID: <CDB2GX6ICZMC.1FDRFIKZU9GU6@schmidt> (raw)
In-Reply-To: <xmqq35rooqr5.fsf@gitster.g>

On Wed Aug 4, 2021 at 11:15 PM CEST, Junio C Hamano wrote:
>
> Kim Altintop <kim@eagain.st> writes:
>
> > diff --git a/t/t5703-upload-pack-ref-in-want.sh b/t/t5703-upload-pack-ref-in-want.sh
> > index e9e471621d..4a828042bb 100755
> > --- a/t/t5703-upload-pack-ref-in-want.sh
> > +++ b/t/t5703-upload-pack-ref-in-want.sh
> > @@ -298,6 +298,134 @@ test_expect_success 'fetching with wildcard that matches multiple refs' '
> >  	grep "want-ref refs/heads/o/bar" log
> >  '
> >
> > +REPO="$(pwd)/repo-ns"
> > +
> > +write_fetch_want_ref() {
>
> Style; missing SP before ().
>
> > +	local wanted_ref="$1"
> > +
> > +	write_command fetch
> > +	echo "0001"
> > +	echo "no-progress"
> > +	echo "want-ref $1"
> > +	echo "done"
> > +	echo "0000"
> > +}
>
> All other helper shell functions in this file are defined near the
> top. If we compare them with this, we notice that this does not
> check for any errors. We should string these steps together with
> "&&".
>
> Also, having this in the middle looks a bit out of place. If this
> helper is useful only in the tests that are being added by this
> patch, that may be OK, but we may want to have a preliminary
> clean-up step before the main patch that adds this helper function
> near the top (perhaps after "write_command" is defined), and use it
> in existing tests. It seems that 'invalid want-ref line', 'basic
> want-ref', and 'multiple want-ref lines' tests among others may
> benefit from a slightly expanded variant, something along the lines
> of ...
>
> write_fetch_command () {
> write_command fetch &&
> echo "0001" &&
> echo "no-progress" || return
> # want-ref ...
> # --
> # want ...
> # --
> # have ...
> # --
> while :
> do
> case $# in 0) break ;; esac &&
> case "$1" in --) shift; break ;; esac &&
> echo "want-ref $1" &&
> shift || return
> done &&
> while :
> do
> case $# in 0) break ;; esac &&
> case "$1" in --) shift; break ;; esac &&
> echo "want $1" &&
> shift || return
> done &&
> while :
> do
> case $# in 0) break ;; esac &&
> case "$1" in --) shift; break ;; esac &&
> echo "have $1" &&
> shift || return
> done &&
> echo "done" &&
> echo "0000"
> }
>
> and with something like that, an existing test like this one:
>
> test_expect_success 'mix want and want-ref' '
> oid=$(git rev-parse f) &&
> cat >expected_refs <<-EOF &&
> $oid refs/heads/main
> EOF
> git rev-parse e f >expected_commits &&
>
> test-tool pkt-line pack >in <<-EOF &&
> $(write_command fetch)
> 0001
> no-progress
> want-ref refs/heads/main
> want $(git rev-parse e)
> have $(git rev-parse a)
> done
> 0000
> EOF
>
> test-tool serve-v2 --stateless-rpc >out <in &&
> check_output
> '
>
> may become
>
> test_expect_success 'mix want and want-ref' '
> oid=$(git rev-parse f) &&
> cat >expected_refs <<-EOF &&
> $oid refs/heads/main
> EOF
> git rev-parse e f >expected_commits &&
>
> test-tool pkt-line pack >in <<-EOF &&
> $(write_fetch_command
> refs/heads/main
> --
> $(git rev-parse e)
> --
> $(git rev-parse a)
> )
> EOF
>
> test-tool serve-v2 --stateless-rpc >out <in &&
> check_output
> '
>
> And after preparing a reusable helper like that, we can add
> namespace tests using the same helper in the main patch (so it would
> become an at least 2-patch series).


Ok got it. I did not want to come forward with a grand refactoring of that test
in my very first patch, but since reviewers seem to think it's in order I'll
give it a spin.


> > +
> > +test_expect_success 'setup namespaced repo' '
> > +	(
> > +		git init -b main "$REPO" &&
> > +		cd "$REPO" &&
> > +		test_commit a &&
> > +		test_commit b &&
> > +		git checkout a &&
> > +		test_commit c &&
> > +		git checkout a &&
> > +		test_commit d &&
> > +		git update-ref refs/heads/ns-no b &&
> > +		git update-ref refs/namespaces/ns/refs/heads/ns-yes c &&
> > +		git update-ref refs/namespaces/ns/refs/heads/hidden d
> > +	) &&
> > +	git -C "$REPO" config uploadpack.allowRefInWant true
>
> I do not see a reason why the last step wants to be done outside the
> subshell, which we would be using anyway. Does it clarify something?

I agree, but was sticking to the style that was already there. I'll then revise
the other setup steps as part of the refactor.


> > +test_expect_success 'with namespace: want-ref is considered relative to namespace' '
> > +	wanted_ref=refs/heads/ns-yes &&
> > +
> > +	oid=$(git -C "$REPO" rev-parse $wanted_ref) &&
> > +	cat >expected_refs <<-EOF &&
> > +	$oid $wanted_ref
> > +	EOF
> > +	git -C "$REPO" rev-parse a $wanted_ref >expected_commits &&
> > +
> > +	test-tool pkt-line pack >in <<-EOF &&
> > +	$(write_fetch_want_ref $wanted_ref)
> > +	EOF
> > +
> > +	env GIT_NAMESPACE=ns test-tool -C "$REPO" serve-v2 --stateless-rpc >out <in &&
>
> I am not sure why we want "env" in front (it does not hurt, but it
> should be unnecessary, as test-tool is a plain-vanilla binary
> executable, not a shell function). Is this a workaround for a buggy
> test linter or something?

The linter did indeed ask me to write `GIT_NAMESPACE=ns && export GIT_NAMESPACE
&& test-tool ...` in v1 of the patch, but now it doesn't... nevermind, I must
have held something the wrong way.


  reply	other threads:[~2021-08-04 22:04 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-30 13:59 [PATCH] upload-pack.c: treat want-ref relative to namespace Kim Altintop
2021-07-30 14:04 ` Kim Altintop
2021-07-30 18:57 ` Junio C Hamano
2021-07-30 21:08   ` Kim Altintop
2021-07-31 20:36 ` [PATCH v2] " Kim Altintop
2021-08-02 21:06   ` Jonathan Tan
2021-08-04 20:36     ` Kim Altintop
2021-08-04 20:42   ` [PATCH v3] " Kim Altintop
2021-08-04 21:00     ` [PATCH v4] " Kim Altintop
2021-08-09 17:56       ` [PATCH 0/3] upload-pack: " Kim Altintop
2021-08-09 17:56         ` [PATCH 1/3] t5730: introduce fetch command helper Kim Altintop
2021-08-09 19:16           ` Junio C Hamano
2021-08-09 21:18             ` Kim Altintop
2021-08-09 19:40           ` Jonathan Nieder
2021-08-09 21:43             ` Junio C Hamano
2021-08-09 21:56             ` Kim Altintop
2021-08-09 22:03               ` Junio C Hamano
2021-08-09 23:01                 ` Jonathan Nieder
2021-08-10  9:44                   ` Kim Altintop
2021-08-09 17:57         ` [PATCH 2/3] upload-pack.c: treat want-ref relative to namespace Kim Altintop
2021-08-09 17:57         ` [PATCH 3/3] docs: clarify the interaction of transfer.hideRefs and namespaces Kim Altintop
2021-08-10  9:49           ` Kim Altintop
2021-08-13  6:23         ` [PATCH v6 0/3] upload-pack: treat want-ref relative to namespace Kim Altintop
2021-08-14 21:46           ` Johannes Schindelin
2021-08-15 17:59             ` Junio C Hamano
2021-08-15 19:35             ` Kim Altintop
2021-08-16 12:39               ` Johannes Schindelin
2021-08-13  6:23         ` [PATCH v6 1/3] t5730: introduce fetch command helper Kim Altintop
2021-08-13  6:23         ` [PATCH v6 2/3] upload-pack.c: treat want-ref relative to namespace Kim Altintop
2021-08-13  6:23         ` [PATCH v6 3/3] docs: clarify the interaction of transfer.hideRefs and namespaces Kim Altintop
2021-08-04 21:15     ` [PATCH v3] upload-pack.c: treat want-ref relative to namespace Junio C Hamano
2021-08-04 22:04       ` Kim Altintop [this message]
2021-08-04 22:17         ` Eric Sunshine
2021-08-04 22:17         ` Junio C Hamano
2021-08-04 22:23         ` Junio C Hamano

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=CDB2GX6ICZMC.1FDRFIKZU9GU6@schmidt \
    --to=kim@eagain.st \
    --cc=bwilliams.eng@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jonathantanmy@google.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.