Cloning
- git-protocol
- sideband-all support
- test for multi-stage fetch response (one without a pack file in first round)
- delegate interaction to support clone
- parse server negotiation response
- negotiation via delegate
- received pack file passed to delegate
- assure there is a way to do fetches with have/want negotiation
- gixp-pack-receive
- hookup
git-protocolwith delegate to allow for receiving full packs - json support
- may optionally write received refs to the specified directory
- journey tests for each connection method
- file
- git
-
ssh - https (unauthenticated)
-
https (authenticated)
- make cloning https://github.com/torvalds/linux work - it's probably about not sending too many wants and filtering refs to send
- hookup
NEXT ITERATION: Fetching (more analysis needed after previous block)
- git-transport
- a way to support shallow lines during V1 handshake (doesnt' seem to happen in V2 at all)
- prodash
- force sub-progress support for
Sendand'staticbounds
- force sub-progress support for
- git-ref
- create ref pointing to ID
- assure to keep the path towards symbolic refs open, and allow specifying if these should be followed or not
- create ref pointing to ID
- git-repository
- instance for a valid looking repository
- support shallow repos/references
- create-update refs as received from clone/git-receive-pack
- instance for a valid looking repository
- gix clone
- try initializing repo on output path - if so, use that to learn about pack location and place new pack there, allow Repo to create refs somehow.
- _probably this is done using the repository itself, which steers the whole process and injects it's own delegates.
- otherwise create the scaffolding needed for a new repository, probably based on
initimplementation
- try initializing repo on output path - if so, use that to learn about pack location and place new pack there, allow Repo to create refs somehow.
- git-daemon-proxy - obtain real-world examples for the V1/V2 git protocols
- a standalone tool to serve as
git-daemon-proxy, which intercepts all interactions with it and dumps each one into files like N.request and N.response. - Differentiate request and response delimiters using timeouts
- a standalone tool to serve as
- receive pack
- resolve thin pack with Bundle
- git-repository
- clone from https remote
FSCK an entire repository
- multi-db (incorporate object lookup for loose objects and packs)
- single threaded
- optional object cache
- fs-check - verify all object content of a git repository
Notes
- response-end packets of V2 are not sent in stateless-rpc mode (i.e. http mode) and maybe even V2 daemons
- protocol V2 is always stateless
- The negotiation is the meat of the fetch algorithm, and even though not important for clones, the back-and-forth seems very relevant
to how the transfer interface should be built. I feel it must be on packet line level.
- after having looked at the http implementation and actual HTTP chatter, there is no need for packet line level in
git-protocolafter all. All good.
- after having looked at the http implementation and actual HTTP chatter, there is no need for packet line level in
Other
To be picked in any order….
- git-odb
- Find errors with
Box<dyn std::error::Error>fields and see if these could be generic with the use ofthiserror- definitely here
- …keep looking…
- Find errors with
- prodash
- finish transitioning to futures-lite to get rid of futures-util dependency to reduce compile times
- criner
- upgrade to prodash 9.0
- switch to
isahcseems to allow async-reading of bodies, allowing to get rid of reqwest and tokio. Redirect is configurable.