11 // packHeader is the expected header that begins all valid packfiles.
12 packHeader = []byte{'P', 'A', 'C', 'K'}
14 // errBadPackHeader is a sentinel error value returned when the given
15 // pack header does not match the expected one.
16 errBadPackHeader = errors.New("gitobj/pack: bad pack header")
19 // DecodePackfile opens the packfile given by the io.ReaderAt "r" for reading.
20 // It does not apply any delta-base chains, nor does it do reading otherwise
23 // If the header is malformed, or otherwise cannot be read, an error will be
24 // returned without a corresponding packfile.
25 func DecodePackfile(r io.ReaderAt) (*Packfile, error) {
26 header := make([]byte, 12)
27 if _, err := r.ReadAt(header[:], 0); err != nil {
31 if !bytes.HasPrefix(header, packHeader) {
32 return nil, errBadPackHeader
35 version := binary.BigEndian.Uint32(header[4:])
36 objects := binary.BigEndian.Uint32(header[8:])