fangorn/ex_git_objectstore
public
ref:8701785765d01e1fd639fcd1349d685be1d45113
fix: serve promisor lazy-fetch without re-filtering wanted objects
Partial-clone clients fill in missing blobs on demand by sending a
new fetch with the specific object SHA as a `want`. Our server was
applying the same filter that made the object missing in the first
place, so the lazy fetch would return an empty pack and the
post-clone checkout would fail with
git://…/repo did not send all necessary objects
`collect_objects_maybe_shallow` now inspects each want's object
type. When any want is a blob, tree, or tag (i.e. not a commit),
the request is treated as a lazy fetch: the session-level filter is
bypassed and the early-blob-skip walker option is disabled. Normal
commit-ranged fetches continue to honour the filter as before.
With this fix the existing `--filter=blob:none` and `--filter=tree:0`
integration tests no longer need `--no-checkout` — the implicit
post-clone checkout now succeeds because missing blobs get lazily
fetched on request.
SHA:
8701785765d01e1fd639fcd1349d685be1d45113
Author:
Cole Christensen <cole.christensen@macmillan.com>
Date:
2026-04-19 01:04
Parents:
d84adbf
2 files changed
+28
-4
| Type | ||
|---|---|---|
|
|
lib/ex_git_objectstore/protocol/upload_pack_v2.ex | +28 −2 |
|
||