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.
next prev parent 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 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).