1 Documentation Common to Pack and Http Protocols
2 ===============================================
7 ABNF notation as described by RFC 5234 is used within the protocol documents,
8 except the following replacement core rules are used:
10 HEXDIG = DIGIT / "a" / "b" / "c" / "d" / "e" / "f"
13 We also define the following common rules:
17 obj-id = 40*(HEXDIGIT)
20 refname /= "refs/" <see discussion below>
23 A refname is a hierarchical octet string beginning with "refs/" and
24 not violating the 'git-check-ref-format' command's validation rules.
25 More specifically, they:
27 . They can include slash `/` for hierarchical (directory)
28 grouping, but no slash-separated component can begin with a
31 . They must contain at least one `/`. This enforces the presence of a
32 category like `heads/`, `tags/` etc. but the actual names are not
35 . They cannot have two consecutive dots `..` anywhere.
37 . They cannot have ASCII control characters (i.e. bytes whose
38 values are lower than \040, or \177 `DEL`), space, tilde `~`,
39 caret `^`, colon `:`, question-mark `?`, asterisk `*`,
40 or open bracket `[` anywhere.
42 . They cannot end with a slash `/` or a dot `.`.
44 . They cannot end with the sequence `.lock`.
46 . They cannot contain a sequence `@{`.
48 . They cannot contain a `\\`.
54 Much (but not all) of the payload is described around pkt-lines.
56 A pkt-line is a variable length binary string. The first four bytes
57 of the line, the pkt-len, indicates the total length of the line,
58 in hexadecimal. The pkt-len includes the 4 bytes used to contain
59 the length's hexadecimal representation.
61 A pkt-line MAY contain binary data, so implementors MUST ensure
62 pkt-line parsing/formatting routines are 8-bit clean.
64 A non-binary line SHOULD BE terminated by an LF, which if present
65 MUST be included in the total length. Receivers MUST treat pkt-lines
66 with non-binary data the same whether or not they contain the trailing
67 LF (stripping the LF if present, and not complaining when it is
70 The maximum length of a pkt-line's data component is 65516 bytes.
71 Implementations MUST NOT send pkt-line whose length exceeds 65520
72 (65516 bytes of payload + 4 bytes of length data).
74 Implementations SHOULD NOT send an empty pkt-line ("0004").
76 A pkt-line with a length field of 0 ("0000"), called a flush-pkt,
77 is a special case and MUST be handled differently than an empty
81 pkt-line = data-pkt / flush-pkt
83 data-pkt = pkt-len pkt-payload
85 pkt-payload = (pkt-len - 4)*(OCTET)
90 Examples (as C-style strings):
94 ---------------------------------
97 "000bfoobar\n" "foobar\n"