Re: [PATCH 2/2] ref-filter: support filtering of operational refs
From: Karthik Nayak <hidden>
Date: 2024-01-02 15:23:50
Patrick Steinhardt [off-list ref] writes:
One interesting question is how we should treat files that look like a pseudoref, but which really aren't. I'm not aware of any such files written by Git itself, but it could certainly be that a user wrote such a file into the repository manually. But given that we're adding new behaviour that will be opt-in (e.g. via a new switch) I'd rather err on the side of caution and mark any such file as broken instead of silently ignoring them.
This is definitely tricky, especially since something like `COMMIT_EDITMSG` passes the `is_pseudoref_syntax()` check and could simply contain a commit-ish object ID. Here identifying that this is not a pseudoref is hard when it satisfies both: 1. The general pseudoref syntax 2. Contains the expected file content type
Yup, for the reftable we don't have the issue of "How do we detect refs
dynamically" at all. So I would love for there to be a way to print all
refs in the refdb, regardless of whether they start with `refs/` or look
like a pseudoref or whatever else. Otherwise it wouldn't be possible for
a user to delete anything stored in the refdb that may have a funny
name, be it intentionally, by accident or due to a bug.
In the reftable backend, the ref iterator's `_advance()` function has a
hardcoded `starts_with(refname, "refs/")` check. If false, then we'd
skip the ref in order to retain the same behaviour that the files
backend has. So maybe what we should be doing is to introduce a new flag
`DO_FOR_EACH_ALL_REFS` and expose it via git-for-each-ref(1) or
git-show-ref(1). So:
- For the reftable backend we'd skip the `starts_with()` check and
simply return all refs.
- For the files backend we'd also iterate through all files in
$GIT_DIR and check whether they are pseudoref-like.This makes sense to me and is along what I was considering for the dynamic approach, thanks for writing it down, clarifies my thoughts.
Attachments
- signature.asc [application/pgp-signature] 690 bytes