git-lfs-transfer
Concurrent transfer queue and "basic" adapter for Git LFS object uploads and downloads.
Sits between git-lfs-api and
git-lfs-store: given a list
of (oid, size) pairs, it negotiates a batch with the LFS server,
spawns a bounded pool of tasks to drive the resulting actions, and
streams progress events back to the caller.
What's implemented today:
- The basic transfer adapter (HTTPS upload via PUT, download via GET, optional verify callback).
- Concurrent dispatch with per-object error reporting; each transfer is independent so partial failures don't tear down the queue.
- Streaming uploads/downloads (no full buffering), and a hash check on the download path.
- Retry on transient failures (5xx, 429, network blips) at both the
per-object and batch-request layers.
Retry-Afteris honored when the server pins a delay; otherwise exponential backoff applies. - Range-resume on interrupted downloads: partial files persist at
.git/lfs/incomplete/<oid>.partso the next attempt sendsRange: bytes=…rather than re-fetching from byte 0.
Not yet here: tus uploads, custom transfer agents. Tracked in the
workspace NOTES.md.
Part of the git-lfs Rust workspace. Experimental — not yet ready for production. License: MIT.