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

Method GetCommitDataByIndex

plumbing/format/commitgraph/file.go:187–249  ·  view source on GitHub ↗
(idx int)

Source from the content-addressed store, hash-verified

185}
186
187func (fi *fileIndex) GetCommitDataByIndex(idx int) (*CommitData, error) {
188 if idx >= fi.fanout[0xff] {
189 return nil, plumbing.ErrObjectNotFound
190 }
191
192 offset := fi.commitDataOffset + int64(idx)*(hash.Size+commitDataSize)
193 commitDataReader := io.NewSectionReader(fi.reader, offset, hash.Size+commitDataSize)
194
195 treeHash, err := binary.ReadHash(commitDataReader)
196 if err != nil {
197 return nil, err
198 }
199 parent1, err := binary.ReadUint32(commitDataReader)
200 if err != nil {
201 return nil, err
202 }
203 parent2, err := binary.ReadUint32(commitDataReader)
204 if err != nil {
205 return nil, err
206 }
207 genAndTime, err := binary.ReadUint64(commitDataReader)
208 if err != nil {
209 return nil, err
210 }
211
212 var parentIndexes []int
213 if parent2&parentOctopusUsed == parentOctopusUsed {
214 // Octopus merge
215 parentIndexes = []int{int(parent1 & parentOctopusMask)}
216 offset := fi.extraEdgeListOffset + 4*int64(parent2&parentOctopusMask)
217 buf := make([]byte, 4)
218 for {
219 _, err := fi.reader.ReadAt(buf, offset)
220 if err != nil {
221 return nil, err
222 }
223
224 parent := encbin.BigEndian.Uint32(buf)
225 offset += 4
226 parentIndexes = append(parentIndexes, int(parent&parentOctopusMask))
227 if parent&parentLast == parentLast {
228 break
229 }
230 }
231 } else if parent2 != parentNone {
232 parentIndexes = []int{int(parent1 & parentOctopusMask), int(parent2 & parentOctopusMask)}
233 } else if parent1 != parentNone {
234 parentIndexes = []int{int(parent1 & parentOctopusMask)}
235 }
236
237 parentHashes, err := fi.getHashesFromIndexes(parentIndexes)
238 if err != nil {
239 return nil, err
240 }
241
242 return &CommitData{
243 TreeHash: treeHash,
244 ParentIndexes: parentIndexes,

Callers

nothing calls this directly

Calls 4

getHashesFromIndexesMethod · 0.95
ReadHashFunction · 0.92
ReadUint32Function · 0.92
ReadUint64Function · 0.92

Tested by

no test coverage detected