Skip to content

Commit edbe30a

Browse files
committed
make compatible with go 1.19
1 parent 32a7ff0 commit edbe30a

File tree

1 file changed

+26
-6
lines changed

1 file changed

+26
-6
lines changed

deb/reflist.go

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,10 @@ func bucketRefPrefix(ref []byte) []byte {
428428
ref = ref[len(libPrefix):]
429429
}
430430

431-
prefixLen := min(maxPrefixLen, len(ref))
431+
prefixLen := len(ref)
432+
if maxPrefixLen < prefixLen {
433+
prefixLen = maxPrefixLen
434+
}
432435
prefix, _, _ := bytes.Cut(ref[:prefixLen], []byte{' '})
433436
return prefix
434437
}
@@ -715,9 +718,16 @@ func (set *RefListDigestSet) ForEach(handler func(digest []byte) error) error {
715718
return nil
716719
}
717720

721+
// workaround for: conversion of slices to arrays requires go1.20 or later
722+
func newRefListArray(digest []byte) reflistDigestArray {
723+
var array reflistDigestArray
724+
copy(array[:], digest)
725+
return array
726+
}
727+
718728
// Add adds digest to set, doing nothing if the digest was already present
719729
func (set *RefListDigestSet) Add(digest []byte) {
720-
set.items[reflistDigestArray(digest)] = struct{}{}
730+
set.items[newRefListArray(digest)] = struct{}{}
721731
}
722732

723733
// AddAllInRefList adds all the bucket digests in a SplitRefList to the set
@@ -731,13 +741,13 @@ func (set *RefListDigestSet) AddAllInRefList(sl *SplitRefList) {
731741

732742
// Has checks whether a digest is part of set
733743
func (set *RefListDigestSet) Has(digest []byte) bool {
734-
_, ok := set.items[reflistDigestArray(digest)]
744+
_, ok := set.items[newRefListArray(digest)]
735745
return ok
736746
}
737747

738748
// Remove removes a digest from set
739749
func (set *RefListDigestSet) Remove(digest []byte) {
740-
delete(set.items, reflistDigestArray(digest))
750+
delete(set.items, newRefListArray(digest))
741751
}
742752

743753
// RemoveAll removes all the digests in other from the current set
@@ -776,10 +786,20 @@ func segmentPrefix(encodedDigest string) []byte {
776786
return []byte(fmt.Sprintf("F%s-", encodedDigest))
777787
}
778788

789+
// workaround for go 1.19 instead of bytes.Clone
790+
func cloneBytes(b []byte) []byte {
791+
if b == nil {
792+
return nil
793+
}
794+
cloned := make([]byte, len(b))
795+
copy(cloned, b)
796+
return cloned
797+
}
798+
779799
func segmentIndexKey(prefix []byte, idx int) []byte {
780800
// Assume most buckets won't have more than 0xFFFF = ~65k segments (which
781801
// would be an extremely large bucket!).
782-
return append(bytes.Clone(prefix), []byte(fmt.Sprintf("%04x", idx))...)
802+
return append(cloneBytes(prefix), []byte(fmt.Sprintf("%04x", idx))...)
783803
}
784804

785805
// AllBucketDigests returns a set of all the bucket digests in the database
@@ -861,7 +881,7 @@ func (collection *RefListCollection) loadBuckets(sl *SplitRefList) error {
861881
var bucket *PackageRefList
862882

863883
if digest := sl.Buckets[idx]; len(digest) > 0 {
864-
cacheKey := reflistDigestArray(digest)
884+
cacheKey := newRefListArray(digest)
865885
bucket = collection.cache[cacheKey]
866886
if bucket == nil {
867887
bucket = NewPackageRefList()

0 commit comments

Comments
 (0)