Skip to content

Commit b11eaab

Browse files
authored
Merge pull request go-git#869 from dsymonds/compact
packfile: optimise NewIndexFromIdxFile for a very common case
2 parents 0710c6c + 2d9816a commit b11eaab

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

plumbing/format/packfile/index.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,20 @@ func NewIndexFromIdxFile(idxf *idxfile.Idxfile) *Index {
3131
byHash: make(map[plumbing.Hash]*idxfile.Entry, idxf.ObjectCount),
3232
byOffset: make([]*idxfile.Entry, 0, idxf.ObjectCount),
3333
}
34-
for _, e := range idxf.Entries {
34+
sorted := true
35+
for i, e := range idxf.Entries {
3536
idx.addUnsorted(e)
37+
if i > 0 && idx.byOffset[i-1].Offset >= e.Offset {
38+
sorted = false
39+
}
40+
}
41+
42+
// If the idxfile was loaded from a regular packfile index
43+
// then it will already be in offset order, in which case we
44+
// can avoid doing a relatively expensive idempotent sort.
45+
if !sorted {
46+
sort.Sort(orderByOffset(idx.byOffset))
3647
}
37-
sort.Sort(orderByOffset(idx.byOffset))
3848

3949
return idx
4050
}

0 commit comments

Comments
 (0)