package git-http
Library
Module
Module type
Parameter
Class
Class type
HTTP helpers to implement Git's Smart-HTTP protocol.
The "smart" HTTP connection simulates a normal channel by a sequence of RPC calls (the HTTP requests and responses) by:
- allowing a read only after a write: the write is in the HTTP request, the read is in the HTTP response.
- replaying all the previous communication in both directions every time. The new thing to read or write is appended to the history and part of a new RPC.
This looks like a terrible idea, but in practice there are very few round-trips between the client and the server with relatively small amounts of data. These round-trips correspond to the negotiation phase, where the client and the server need to find which hashes they have in common. Once this is done, the final RPC response contains the pack file, which is where most of the data is.
The good thing with that scheme (I guess) is that the server doesn't have to keep any client state. Note: there are more clever ways to do this...
That module implements a "restartable" HTTP channel, which hides all that reconnection and replay complexity behind a regular channel interface.
module type CLIENT = sig ... end