From: Patrick Steinhardt <ps@pks.im>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Han-Wen Nienhuys <hanwen@google.com>
Subject: Re: [PATCH 04/11] t: convert tests to not write references via the filesystem
Date: Mon, 23 Oct 2023 15:58:25 +0200 [thread overview]
Message-ID: <ZTZ8ATohRe7GVu5D@tanuki> (raw)
In-Reply-To: <xmqq1qdru6ds.fsf@gitster.g>
[-- Attachment #1: Type: text/plain, Size: 4699 bytes --]
On Wed, Oct 18, 2023 at 11:34:23AM -0700, Junio C Hamano wrote:
> Patrick Steinhardt <ps@pks.im> writes:
>
> > -test_expect_success "fail to create $n" '
> > - test_when_finished "rm -f .git/$n_dir" &&
> > - touch .git/$n_dir &&
> > - test_must_fail git update-ref $n $A
> > +test_expect_success "fail to create $n due to file/directory conflict" '
> > + test_when_finished "git update-ref -d refs/heads/gu" &&
> > + git update-ref refs/heads/gu $A &&
> > + test_must_fail git update-ref refs/heads/gu/fixes $A
> > '
>
> OK, the original checks "if a random garbage file, which may not
> necessarily be a ref, exists at $n_dir, we cannot create a ref at
> $n_dir/fixes, due to D/F conflict" more directly, but as long as our
> intention is to enforce the D/F restriction across different ref
> backends [*], creating a ref at $n_dir and making sure $n_dir/fixes
> cannot be created is an equivalent check that is better (because it
> can be applied for other backends).
>
> Side note: there is no fundamental need to, though, and there
> are cases where being able to have the 'seen' branch and
> 'seen/ps/ref-test-tools' branches at the same time is
> beneficial---packed-refs and ref-table backends would not
> have such an inherent limitation, but they can of course be
> castrated to match what files-backend can(not) do.
I think initially it is beneficial to keep any such restriction and cut
back new backends to match them, even though it's more work. The main
reason why I think this makes sense is that hosting providers are the
most likely to update to the newer backend fast. It would be detrimental
to the users though if hosting providers that converted to the newer
backend were able to store such references that would be conflicting
with the files backend because they wouldn't be able to clone such
repositories anymore. And this isn't only true for hosting providers,
but essentially whenever two repositories that use different backends
try to interact with each other.
So even though I wish for a future where we don't need to care for D/F
conflicts anymore, I think the time isn't ripe for it and we should for
now aim for matching behaviour.
> > @@ -222,7 +220,7 @@ test_expect_success 'delete symref without dereference when the referred ref is
> >
> > test_expect_success 'update-ref -d is not confused by self-reference' '
> > git symbolic-ref refs/heads/self refs/heads/self &&
> > - test_when_finished "rm -f .git/refs/heads/self" &&
> > + test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF refs/heads/self" &&
> > test_path_is_file .git/refs/heads/self &&
>
> I trust that this will be corrected to use some wrapper around "git
> symbolic-ref" (or an equivalent for it as a test-tool subcommand) in
> some future patch, if not in this series?
Yup, this is getting fixed in a subsequent patch. I had two different
options to structure this series:
- Either by test file so that questions like this don't come up when
a reviewer sees in the context that there are still tests that
exercise the filesystem directly. This was my first approach.
- The alternative is to write it such that we address common
patterns globally, which I then rewrote my first version to.
There were two reasons why I didn't like the first iteration:
- Commit messages would basically have to reexplain the exact same
thing for every single testcase as the motivation is the same
everywhere.
- I think it's easier to review when you only see the same kind of
transformation per patch.
But yes, it does have the downside that the reader is now left wondering
why the other call to `test_path_is_file` still exists.
Patrick
> > test_must_fail git update-ref -d refs/heads/self &&
> > test_path_is_file .git/refs/heads/self
>
> Likewise.
>
> > @@ -230,7 +228,7 @@ test_expect_success 'update-ref -d is not confused by self-reference' '
> >
> > test_expect_success 'update-ref --no-deref -d can delete self-reference' '
> > git symbolic-ref refs/heads/self refs/heads/self &&
> > - test_when_finished "rm -f .git/refs/heads/self" &&
> > + test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF refs/heads/self" &&
> > test_path_is_file .git/refs/heads/self &&
> > git update-ref --no-deref -d refs/heads/self &&
> > test_must_fail git show-ref --verify -q refs/heads/self
>
> We already have the "ref is missing" test here.
>
> I'll stop at this point for now; will hopefully continue in a
> separate message later. Thanks.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2023-10-23 13:58 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-18 5:35 [PATCH 00/11] t: reduce direct disk access to data structures Patrick Steinhardt
2023-10-18 5:35 ` [PATCH 01/11] t: add helpers to test for reference existence Patrick Steinhardt
2023-10-18 16:06 ` Junio C Hamano
2023-10-23 13:58 ` Patrick Steinhardt
2023-10-18 17:08 ` Eric Sunshine
2023-10-23 13:58 ` Patrick Steinhardt
2023-10-18 5:35 ` [PATCH 02/11] t: allow skipping expected object ID in `ref-store update-ref` Patrick Steinhardt
2023-10-18 16:08 ` Junio C Hamano
2023-10-23 13:58 ` Patrick Steinhardt
2023-10-23 19:06 ` Junio C Hamano
2023-10-18 5:35 ` [PATCH 03/11] t: convert tests to use helpers for reference existence Patrick Steinhardt
2023-10-18 16:28 ` Junio C Hamano
2023-10-18 5:35 ` [PATCH 04/11] t: convert tests to not write references via the filesystem Patrick Steinhardt
2023-10-18 18:34 ` Junio C Hamano
2023-10-23 13:58 ` Patrick Steinhardt [this message]
2023-10-23 19:10 ` Junio C Hamano
2023-10-18 21:18 ` Junio C Hamano
2023-10-23 13:58 ` Patrick Steinhardt
2023-10-18 5:35 ` [PATCH 05/11] t: convert tests to not access symrefs " Patrick Steinhardt
2023-10-20 19:52 ` Junio C Hamano
2023-10-18 5:35 ` [PATCH 06/11] t: convert tests to not access reflog " Patrick Steinhardt
2023-10-21 23:13 ` Junio C Hamano
2023-10-18 5:35 ` [PATCH 07/11] t1450: convert tests to remove worktrees via git-worktree(1) Patrick Steinhardt
2023-10-18 5:35 ` [PATCH 08/11] t4207: delete replace references via git-update-ref(1) Patrick Steinhardt
2023-10-18 13:27 ` Han-Wen Nienhuys
2023-10-23 13:58 ` Patrick Steinhardt
2023-10-23 16:42 ` Taylor Blau
2023-10-24 6:42 ` Patrick Steinhardt
2023-10-18 5:35 ` [PATCH 09/11] t7300: assert exact states of repo Patrick Steinhardt
2023-10-18 5:35 ` [PATCH 10/11] t7900: assert the absence of refs via git-for-each-ref(1) Patrick Steinhardt
2023-10-18 5:35 ` [PATCH 11/11] t: mark several tests that assume the files backend with REFFILES Patrick Steinhardt
2023-10-18 5:39 ` [PATCH 00/11] t: reduce direct disk access to data structures Patrick Steinhardt
2023-10-18 23:40 ` Junio C Hamano
2023-10-23 11:57 ` Patrick Steinhardt
2023-10-18 15:32 ` Junio C Hamano
2023-10-19 10:13 ` Han-Wen Nienhuys
2023-10-19 17:55 ` Junio C Hamano
2023-10-23 13:58 ` Patrick Steinhardt
2023-10-24 14:04 ` [PATCH v2 0/9] " Patrick Steinhardt
2023-10-24 14:04 ` [PATCH v2 1/9] t: allow skipping expected object ID in `ref-store update-ref` Patrick Steinhardt
2023-10-24 14:04 ` [PATCH v2 2/9] t: convert tests to not write references via the filesystem Patrick Steinhardt
2023-10-24 14:05 ` [PATCH v2 3/9] t: convert tests to not access symrefs " Patrick Steinhardt
2023-10-24 14:05 ` [PATCH v2 4/9] t: convert tests to not access reflog " Patrick Steinhardt
2023-10-24 14:05 ` [PATCH v2 5/9] t1450: convert tests to remove worktrees via git-worktree(1) Patrick Steinhardt
2023-10-27 2:42 ` Eric Sunshine
2023-10-24 14:05 ` [PATCH v2 6/9] t4207: delete replace references via git-update-ref(1) Patrick Steinhardt
2023-10-24 14:05 ` [PATCH v2 7/9] t7300: assert exact states of repo Patrick Steinhardt
2023-10-24 14:05 ` [PATCH v2 8/9] t7900: assert the absence of refs via git-for-each-ref(1) Patrick Steinhardt
2023-10-24 14:05 ` [PATCH v2 9/9] t: mark several tests that assume the files backend with REFFILES Patrick Steinhardt
2023-11-02 8:46 ` [PATCH v3 0/9] t: reduce direct disk access to data structures Patrick Steinhardt
2023-11-02 8:46 ` [PATCH v3 1/9] t: allow skipping expected object ID in `ref-store update-ref` Patrick Steinhardt
2023-11-02 8:46 ` [PATCH v3 2/9] t: convert tests to not write references via the filesystem Patrick Steinhardt
2023-11-02 8:46 ` [PATCH v3 3/9] t: convert tests to not access symrefs " Patrick Steinhardt
2023-11-02 8:46 ` [PATCH v3 4/9] t: convert tests to not access reflog " Patrick Steinhardt
2023-11-02 8:46 ` [PATCH v3 5/9] t1450: convert tests to remove worktrees via git-worktree(1) Patrick Steinhardt
2023-11-02 8:47 ` [PATCH v3 6/9] t4207: delete replace references via git-update-ref(1) Patrick Steinhardt
2023-11-02 8:47 ` [PATCH v3 7/9] t7300: assert exact states of repo Patrick Steinhardt
2023-11-02 8:47 ` [PATCH v3 8/9] t7900: assert the absence of refs via git-for-each-ref(1) Patrick Steinhardt
2023-11-02 8:47 ` [PATCH v3 9/9] t: mark several tests that assume the files backend with REFFILES Patrick Steinhardt
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=ZTZ8ATohRe7GVu5D@tanuki \
--to=ps@pks.im \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=hanwen@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).