MCPcopy Index your code
hub / github.com/go-git/go-git / readExtension

Method readExtension

plumbing/format/index/decoder.go:273–318  ·  view source on GitHub ↗
(idx *Index)

Source from the content-addressed store, hash-verified

271}
272
273func (d *Decoder) readExtension(idx *Index) error {
274 var header [4]byte
275
276 if _, err := io.ReadFull(d.r, header[:]); err != nil {
277 return err
278 }
279
280 r, err := d.getExtensionReader()
281 if err != nil {
282 return err
283 }
284
285 switch {
286 case bytes.Equal(header[:], treeExtSignature):
287 idx.Cache = &Tree{}
288 d := &treeExtensionDecoder{r}
289 if err := d.Decode(idx.Cache); err != nil {
290 return err
291 }
292 case bytes.Equal(header[:], resolveUndoExtSignature):
293 idx.ResolveUndo = &ResolveUndo{}
294 d := &resolveUndoDecoder{r}
295 if err := d.Decode(idx.ResolveUndo); err != nil {
296 return err
297 }
298 case bytes.Equal(header[:], endOfIndexEntryExtSignature):
299 idx.EndOfIndexEntry = &EndOfIndexEntry{}
300 d := &endOfIndexEntryDecoder{r}
301 if err := d.Decode(idx.EndOfIndexEntry); err != nil {
302 return err
303 }
304 default:
305 // See https://git-scm.com/docs/index-format, which says:
306 // If the first byte is 'A'..'Z' the extension is optional and can be ignored.
307 if header[0] < 'A' || header[0] > 'Z' {
308 return ErrUnknownExtension
309 }
310
311 d := &unknownExtensionDecoder{r}
312 if err := d.Decode(); err != nil {
313 return err
314 }
315 }
316
317 return nil
318}
319
320func (d *Decoder) getExtensionReader() (*bufio.Reader, error) {
321 len, err := binary.ReadUint32(d.r)

Callers 1

readExtensionsMethod · 0.95

Calls 2

getExtensionReaderMethod · 0.95
DecodeMethod · 0.95

Tested by

no test coverage detected