git-lfs-transfer 0.7.0

Concurrent transfer queue and basic adapter for Git LFS uploads and downloads
Documentation

git-lfs-transfer

Concurrent transfer queue and basic adapter for Git LFS uploads and downloads.

When Git LFS wants to transfer files between a client and a server, it first asks the server's batch endpoint with a list of OIDs and sizes for the files involved, and the server returns one URL per object (typically a presigned link to S3 or a CDN, plus auth headers and an expiry window); the client then PUTs or GETs the bytes against those URLs.

This crate implements the client side of that dance. It sits between git-lfs-api and git-lfs-store: given a list of (oid, size) pairs, it negotiates the batch, drives the per-object byte movement concurrently, and streams progress events back to the caller.

A bounded pool runs up to concurrency transfers in flight at once. Each transfer streams through the network rather than buffering the whole object in memory, and downloads hash-verify against the OID the server promised before committing into the store.

Failures are localized: one corrupt object doesn't tear down the queue. Retries handle transient errors (5xx, 429, network blips) with exponential backoff, or the server's Retry-After when one is supplied. Expired action URLs are caught before dialing rather than burning a request on a guaranteed-to-fail endpoint, and interrupted downloads resume via Range: from a .part file rather than restarting at byte 0.

Only the basic HTTPS transfer is implemented at the moment. The tus, custom-transfer-agent, and pure-SSH adapters are not implemented yet.