1// Package packfile implements encoding and decoding of packfile format.
2//
3//  == pack-*.pack files have the following format:
4//
5//    - A header appears at the beginning and consists of the following:
6//
7//      4-byte signature:
8//          The signature is: {'P', 'A', 'C', 'K'}
9//
10//      4-byte version number (network byte order):
11//          GIT currently accepts version number 2 or 3 but
12//          generates version 2 only.
13//
14//      4-byte number of objects contained in the pack (network byte order)
15//
16//      Observation: we cannot have more than 4G versions ;-) and
17//      more than 4G objects in a pack.
18//
19//    - The header is followed by number of object entries, each of
20//      which looks like this:
21//
22//      (undeltified representation)
23//      n-byte type and length (3-bit type, (n-1)*7+4-bit length)
24//      compressed data
25//
26//      (deltified representation)
27//      n-byte type and length (3-bit type, (n-1)*7+4-bit length)
28//      20-byte base object name
29//      compressed delta data
30//
31//      Observation: length of each object is encoded in a variable
32//      length format and is not constrained to 32-bit or anything.
33//
34//   - The trailer records 20-byte SHA1 checksum of all of the above.
35//
36//
37// Source:
38// https://www.kernel.org/pub/software/scm/git/docs/v1.7.5/technical/pack-protocol.txt
39package packfile
40