On Tue, 3 Nov 2026 at 22:53, Justin Tobler [off-list ref] wrote:
Regarding the fix proposed in this patch, I'm not quite sure this is
really the right layer to address the problem. The root of the problem
is that we are swapping around the "real" and quarantine object
directories to facilitate writing to the "files" ODB transaction. IMO,
this is already rather fragile. So I do agree with Patrick that I think
the better long-term fix is to stop modifying the primary object
directory altogether and instead propagate some context about the
pending transaction via environment variables to the child process that
it can use to reconstruct the proper environment. This is certainly a
more involved change, but something that I've been wanting to do for a
while now regardless.
If we are interested in a more simple fix for the short-term, we could
adapt `odb_transaction_env()` to have a "read-only" mode flag that does
not modify the primary object directory and only appends the quarantine
directory as an alternate. For the connectivity check in
git-receive-pack(1) we don't write any object anyways, so configuring
the environment in this manner should be sufficient to fix the issue.
I agree with that long-term direction. What do you think we should
do for the short term? I see a few options:
1. A smaller, more focused patch in the alternate refs code, as Peff
suggested in the other message.
2. Your read-only transaction environment for the connectivity check,
(if you want to take that on, I would probably mess it up :-) ).
3. Only a regression test for now, with the hidden refs case marked as
test_expect_failure, so that we do not lose track of it.
4. Or nothing, and wait for the long-term fix, as nobody seems to be
hit hard by this at the moment.
Thanks,
Kristofer