MCPcopy
hub / github.com/github/git-sizer / NextEntry

Method NextEntry

git/tree.go:51–85  ·  view source on GitHub ↗

NextEntry returns either the next entry in a Git tree, or a `false` boolean value if there are no more entries.

()

Source from the content-addressed store, hash-verified

49// NextEntry returns either the next entry in a Git tree, or a `false`
50// boolean value if there are no more entries.
51func (iter *TreeIter) NextEntry() (TreeEntry, bool, error) {
52 var entry TreeEntry
53
54 if len(iter.data) == 0 {
55 return TreeEntry{}, false, nil
56 }
57
58 spAt := strings.IndexByte(iter.data, ' ')
59 if spAt < 0 {
60 return TreeEntry{}, false, errors.New("failed to find SP after mode")
61 }
62 mode, err := strconv.ParseUint(iter.data[:spAt], 8, 32)
63 if err != nil {
64 return TreeEntry{}, false, err
65 }
66 entry.Filemode = uint(mode)
67
68 iter.data = iter.data[spAt+1:]
69 nulAt := strings.IndexByte(iter.data, 0)
70 if nulAt < 0 {
71 return TreeEntry{}, false, errors.New("failed to find NUL after filename")
72 }
73
74 entry.Name = iter.data[:nulAt]
75
76 iter.data = iter.data[nulAt+1:]
77 if len(iter.data) < 20 {
78 return TreeEntry{}, false, errors.New("tree entry ends unexpectedly")
79 }
80
81 copy(entry.OID.v[0:20], iter.data[0:20])
82 iter.data = iter.data[20:]
83
84 return entry, true, nil
85}

Callers 1

initializeMethod · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected