radicle-heartwood-lfs/crates/radicle-cli
Maciek "mab122" Bator 7c6d342ef9 lfs: add fetch-batch, a long-lived worker for multi-object downloads
`rad lfs fetch` still exists for single-object/manual use, but
`radicle-lfs-transfer` used to spawn a fresh one per object during
`git lfs pull`/checkout -- for a private repo, each one independently
loaded the signer, so N files meant N passphrase prompts. Same bug
class `rad lfs precommit` already fixed for commits, unfixed here
until now.

Unlike precommit (which knows every staged file upfront and can read
stdin until EOF), fetch can't collect a batch before starting:
git-lfs's custom-transfer protocol requests objects one at a time.
`rad lfs fetch-batch` instead stays alive for as long as its caller
keeps its stdin open, answering one "<oid> <size> <out-path>" request
at a time with a JSON response line, reusing the same unwrapped
signer across all of them -- paired with radicle-lfs-transfer's new
FetchWorker, which spawns this once per transfer session instead of
once per object.

Also factors `fetch::run`'s core logic out into `fetch_object`,
taking a `&mut Option<MemorySigner>` the same way `store::store_object`
already does, so both the single-shot `rad lfs fetch` and the new
batch worker share one implementation.
2026-07-17 23:42:30 +02:00
..
examples radicle/cob/identity: Enforce sibling-accept invariant for `RevisionAccept` in `action` 2026-07-03 15:22:13 +01:00
src lfs: add fetch-batch, a long-lived worker for multi-object downloads 2026-07-17 23:42:30 +02:00
tests cli/examples: Introduce a suite of merge and revert tests for patch.target 2026-06-09 11:37:26 +02:00
CHANGELOG.md cli: Release 0.21.0 2026-05-06 21:15:54 +01:00
Cargo.toml Add client-side encryption for private-repo LFS objects 2026-07-14 16:01:49 +02:00
build.rs repo: Move workspace crates into `crates` subdirectory 2025-06-09 15:09:21 +02:00