package git
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=ef200d0412ed1a538525d0501298890e0b893e020528094d6a3ae12359fd0265
sha512=793009a9bf9413147e6c43dfdc4bbe39b00129a5ea0f5d3df149ad2e27b4a3c641ca3b6857476a1cee325aad4d192625220647575470f00d02fb95f085bd9009
doc/pkt_line/Pkt_line/Decoder/index.html
Module Pkt_line.DecoderSource
Module for decoding Git pkt lines, as specified at https://github.com/git/git/blob/master/Documentation/technical/protocol-common.txt
We define a "packet line" (aka a "packet") as
| 4 bytes || (enc-pkt-len)-4 | enc-pkt-len pkt-content |------- pkt-len ------|
Example: "0009done\n" where enc-pkt-len = 4 and pkt-content = "done" given we usually trim LF ("\n").
"Encoded" packet length, enc-pkt-len, is the first 4 bytes in the packet that encode the length of the packet in hex. It can have specific values of 0, 1, 2 to encode flush, delimiter, and message (response end) packets respectively. Otherwise, it should be >= 4, i.e., 4 length bytes + the length of the packet content.
In the docs, we define min_pkt_len = 4 as in specs.
type error = [ | `End_of_input| `Expected_char of char| `Unexpected_char of char| `Expected_string of string| `Expected_eol| `Expected_eol_or_space| `Unexpected_end_of_input| `No_enough_space| `Assert_predicate of char -> bool| `Invalid_pkt_line of string
]leave_with d error raises Leave { error; buffer = d.buffer; committed = d.pos }
safe k decoder wraps a call k decoder in a try-with block; if exception Leave err is raised, the function returns Error of err
returns true if decoder.max - decoder.pos is >= min_pkt_len and >= pkt_len, where pkt_len is the length of a pkt line starting at decoder.pos.
increase decoder.pos by max min_pkt_len pkt_len, where pkt_len is the length of the pkt line starting at the current value of decoder.pos (before increasing) and min_pkt_len = 4.
/