Skip to content

Commit 35b3e0f

Browse files
committed
Avoid unnecessary manually-coded loops
Use the "slices", "maps" standard library packages, or other readily-available features. Should not change behavior. Signed-off-by: Miloslav Trmač <[email protected]>
1 parent ee94e88 commit 35b3e0f

File tree

15 files changed

+81
-269
lines changed

15 files changed

+81
-269
lines changed

check.go

+3-6
Original file line numberDiff line numberDiff line change
@@ -770,12 +770,9 @@ func (s *store) Repair(report CheckReport, options *RepairOptions) []error {
770770
return d
771771
}
772772
isUnaccounted := func(errs []error) bool {
773-
for _, err := range errs {
774-
if errors.Is(err, ErrLayerUnaccounted) {
775-
return true
776-
}
777-
}
778-
return false
773+
return slices.ContainsFunc(errs, func(err error) bool {
774+
return errors.Is(err, ErrLayerUnaccounted)
775+
})
779776
}
780777
sort.Slice(layersToDelete, func(i, j int) bool {
781778
// we've not heard of either of them, so remove them in the order the driver suggested

containers.go

+7-13
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package storage
33
import (
44
"errors"
55
"fmt"
6+
"maps"
67
"os"
78
"path/filepath"
89
"slices"
@@ -163,17 +164,17 @@ type containerStore struct {
163164
func copyContainer(c *Container) *Container {
164165
return &Container{
165166
ID: c.ID,
166-
Names: copyStringSlice(c.Names),
167+
Names: slices.Clone(c.Names),
167168
ImageID: c.ImageID,
168169
LayerID: c.LayerID,
169170
Metadata: c.Metadata,
170-
BigDataNames: copyStringSlice(c.BigDataNames),
171-
BigDataSizes: copyStringInt64Map(c.BigDataSizes),
172-
BigDataDigests: copyStringDigestMap(c.BigDataDigests),
171+
BigDataNames: slices.Clone(c.BigDataNames),
172+
BigDataSizes: maps.Clone(c.BigDataSizes),
173+
BigDataDigests: maps.Clone(c.BigDataDigests),
173174
Created: c.Created,
174175
UIDMap: copyIDMap(c.UIDMap),
175176
GIDMap: copyIDMap(c.GIDMap),
176-
Flags: copyStringInterfaceMap(c.Flags),
177+
Flags: maps.Clone(c.Flags),
177178
volatileStore: c.volatileStore,
178179
}
179180
}
@@ -937,14 +938,7 @@ func (r *containerStore) SetBigData(id, key string, data []byte) error {
937938
if !sizeOk || oldSize != c.BigDataSizes[key] || !digestOk || oldDigest != newDigest {
938939
save = true
939940
}
940-
addName := true
941-
for _, name := range c.BigDataNames {
942-
if name == key {
943-
addName = false
944-
break
945-
}
946-
}
947-
if addName {
941+
if !slices.Contains(c.BigDataNames, key) {
948942
c.BigDataNames = append(c.BigDataNames, key)
949943
save = true
950944
}

drivers/graphtest/graphtest_unix.go

+9-31
Original file line numberDiff line numberDiff line change
@@ -205,17 +205,13 @@ func DriverTestCreateFromTemplate(t testing.TB, drivername string, driverOptions
205205
if err != nil {
206206
t.Fatal(err)
207207
}
208-
if err = checkChanges(noChanges, changes); err != nil {
209-
t.Fatal(err)
210-
}
208+
require.ElementsMatch(t, noChanges, changes)
211209

212210
changes, err = driver.Changes("ROFromTemplate", nil, "Snap3", nil, "")
213211
if err != nil {
214212
t.Fatal(err)
215213
}
216-
if err = checkChanges(noChanges, changes); err != nil {
217-
t.Fatal(err)
218-
}
214+
require.ElementsMatch(t, noChanges, changes)
219215

220216
if err := checkFile(driver, "FromTemplate", "testfile.txt", content); err != nil {
221217
t.Fatal(err)
@@ -236,25 +232,19 @@ func DriverTestCreateFromTemplate(t testing.TB, drivername string, driverOptions
236232
if err != nil {
237233
t.Fatal(err)
238234
}
239-
if err = checkChanges(expectedChanges, changes); err != nil {
240-
t.Fatal(err)
241-
}
235+
require.ElementsMatch(t, expectedChanges, changes)
242236

243237
changes, err = driver.Changes("FromTemplate", nil, "Base3", nil, "")
244238
if err != nil {
245239
t.Fatal(err)
246240
}
247-
if err = checkChanges(expectedChanges, changes); err != nil {
248-
t.Fatal(err)
249-
}
241+
require.ElementsMatch(t, expectedChanges, changes)
250242

251243
changes, err = driver.Changes("ROFromTemplate", nil, "Base3", nil, "")
252244
if err != nil {
253245
t.Fatal(err)
254246
}
255-
if err = checkChanges(expectedChanges, changes); err != nil {
256-
t.Fatal(err)
257-
}
247+
require.ElementsMatch(t, expectedChanges, changes)
258248

259249
verifyBase(t, driver, "Base3", defaultPerms)
260250
}
@@ -417,10 +407,7 @@ func DriverTestChanges(t testing.TB, drivername string, driverOptions ...string)
417407
if err != nil {
418408
t.Fatal(err)
419409
}
420-
421-
if err = checkChanges(expectedChanges, changes); err != nil {
422-
t.Fatal(err)
423-
}
410+
require.ElementsMatch(t, expectedChanges, changes)
424411
}
425412

426413
func writeRandomFile(path string, size uint64) error {
@@ -513,10 +500,7 @@ func DriverTestEcho(t testing.TB, drivername string, driverOptions ...string) {
513500
if err != nil {
514501
t.Fatal(err)
515502
}
516-
517-
if err = checkChanges(expectedChanges, changes); err != nil {
518-
t.Fatal(err)
519-
}
503+
require.ElementsMatch(t, expectedChanges, changes)
520504

521505
if err := driver.Create(second, base, nil); err != nil {
522506
t.Fatal(err)
@@ -540,10 +524,7 @@ func DriverTestEcho(t testing.TB, drivername string, driverOptions ...string) {
540524
if err != nil {
541525
t.Fatal(err)
542526
}
543-
544-
if err = checkChanges(expectedChanges, changes); err != nil {
545-
t.Fatal(err)
546-
}
527+
require.ElementsMatch(t, expectedChanges, changes)
547528

548529
if err = driver.Create(third, second, nil); err != nil {
549530
t.Fatal(err)
@@ -573,10 +554,7 @@ func DriverTestEcho(t testing.TB, drivername string, driverOptions ...string) {
573554
if err != nil {
574555
t.Fatal(err)
575556
}
576-
577-
if err = checkChanges(expectedChanges, changes); err != nil {
578-
t.Fatal(err)
579-
}
557+
require.ElementsMatch(t, expectedChanges, changes)
580558

581559
err = driver.Put(third)
582560
if err != nil {

drivers/graphtest/testutil.go

-28
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import (
1212
"math/rand"
1313
"os"
1414
"path"
15-
"sort"
1615
"testing"
1716

1817
graphdriver "github.com/containers/storage/drivers"
@@ -270,33 +269,6 @@ func checkManyFiles(drv graphdriver.Driver, layer string, count int, seed int64)
270269
return nil
271270
}
272271

273-
type changeList []archive.Change
274-
275-
func (c changeList) Less(i, j int) bool {
276-
if c[i].Path == c[j].Path {
277-
return c[i].Kind < c[j].Kind
278-
}
279-
return c[i].Path < c[j].Path
280-
}
281-
func (c changeList) Len() int { return len(c) }
282-
func (c changeList) Swap(i, j int) { c[j], c[i] = c[i], c[j] }
283-
284-
func checkChanges(expected, actual []archive.Change) error {
285-
if len(expected) != len(actual) {
286-
return fmt.Errorf("unexpected number of changes, expected %d, got %d", len(expected), len(actual))
287-
}
288-
sort.Sort(changeList(expected))
289-
sort.Sort(changeList(actual))
290-
291-
for i := range expected {
292-
if expected[i] != actual[i] {
293-
return fmt.Errorf("unexpected change, expecting %v, got %v", expected[i], actual[i])
294-
}
295-
}
296-
297-
return nil
298-
}
299-
300272
func addLayerFiles(drv graphdriver.Driver, layer, parent string, i int) error {
301273
root, err := drv.Get(layer, graphdriver.MountOpts{})
302274
if err != nil {

drivers/overlay/overlay.go

+4-21
Original file line numberDiff line numberDiff line change
@@ -159,21 +159,7 @@ func init() {
159159
}
160160

161161
func hasMetacopyOption(opts []string) bool {
162-
for _, s := range opts {
163-
if s == "metacopy=on" {
164-
return true
165-
}
166-
}
167-
return false
168-
}
169-
170-
func hasVolatileOption(opts []string) bool {
171-
for _, s := range opts {
172-
if s == "volatile" {
173-
return true
174-
}
175-
}
176-
return false
162+
return slices.Contains(opts, "metacopy=on")
177163
}
178164

179165
func getMountProgramFlagFile(path string) string {
@@ -1523,11 +1509,8 @@ func (d *Driver) get(id string, disableShifting bool, options graphdriver.MountO
15231509
})
15241510
}
15251511

1526-
for _, o := range optsList {
1527-
if o == "ro" {
1528-
readWrite = false
1529-
break
1530-
}
1512+
if slices.Contains(optsList, "ro") {
1513+
readWrite = false
15311514
}
15321515

15331516
lowers, err := os.ReadFile(path.Join(dir, lowerFile))
@@ -1726,7 +1709,7 @@ func (d *Driver) get(id string, disableShifting bool, options graphdriver.MountO
17261709
optsList = append(optsList, "userxattr")
17271710
}
17281711

1729-
if options.Volatile && !hasVolatileOption(optsList) {
1712+
if options.Volatile && !slices.Contains(optsList, "volatile") {
17301713
supported, err := d.getSupportsVolatile()
17311714
if err != nil {
17321715
return "", err

images.go

+17-32
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package storage
22

33
import (
44
"fmt"
5+
"maps"
56
"os"
67
"path/filepath"
78
"slices"
@@ -182,18 +183,18 @@ func copyImage(i *Image) *Image {
182183
return &Image{
183184
ID: i.ID,
184185
Digest: i.Digest,
185-
Digests: copyDigestSlice(i.Digests),
186-
Names: copyStringSlice(i.Names),
187-
NamesHistory: copyStringSlice(i.NamesHistory),
186+
Digests: slices.Clone(i.Digests),
187+
Names: slices.Clone(i.Names),
188+
NamesHistory: slices.Clone(i.NamesHistory),
188189
TopLayer: i.TopLayer,
189-
MappedTopLayers: copyStringSlice(i.MappedTopLayers),
190+
MappedTopLayers: slices.Clone(i.MappedTopLayers),
190191
Metadata: i.Metadata,
191-
BigDataNames: copyStringSlice(i.BigDataNames),
192-
BigDataSizes: copyStringInt64Map(i.BigDataSizes),
193-
BigDataDigests: copyStringDigestMap(i.BigDataDigests),
192+
BigDataNames: slices.Clone(i.BigDataNames),
193+
BigDataSizes: maps.Clone(i.BigDataSizes),
194+
BigDataDigests: maps.Clone(i.BigDataDigests),
194195
Created: i.Created,
195196
ReadOnly: i.ReadOnly,
196-
Flags: copyStringInterfaceMap(i.Flags),
197+
Flags: maps.Clone(i.Flags),
197198
}
198199
}
199200

@@ -872,7 +873,9 @@ func (r *imageStore) Delete(id string) error {
872873
delete(r.byname, name)
873874
}
874875
for _, digest := range image.Digests {
875-
prunedList := imageSliceWithoutValue(r.bydigest[digest], image)
876+
prunedList := slices.DeleteFunc(r.bydigest[digest], func(i *Image) bool {
877+
return i == image
878+
})
876879
if len(prunedList) == 0 {
877880
delete(r.bydigest, digest)
878881
} else {
@@ -967,17 +970,6 @@ func (r *imageStore) BigDataNames(id string) ([]string, error) {
967970
return copyStringSlice(image.BigDataNames), nil
968971
}
969972

970-
func imageSliceWithoutValue(slice []*Image, value *Image) []*Image {
971-
modified := make([]*Image, 0, len(slice))
972-
for _, v := range slice {
973-
if v == value {
974-
continue
975-
}
976-
modified = append(modified, v)
977-
}
978-
return modified
979-
}
980-
981973
// Requires startWriting.
982974
func (r *imageStore) SetBigData(id, key string, data []byte, digestManifest func([]byte) (digest.Digest, error)) error {
983975
if !r.lockfile.IsReadWrite() {
@@ -1027,21 +1019,16 @@ func (r *imageStore) setBigData(image *Image, key string, data []byte, newDigest
10271019
if !sizeOk || oldSize != image.BigDataSizes[key] || !digestOk || oldDigest != newDigest {
10281020
save = true
10291021
}
1030-
addName := true
1031-
for _, name := range image.BigDataNames {
1032-
if name == key {
1033-
addName = false
1034-
break
1035-
}
1036-
}
1037-
if addName {
1022+
if !slices.Contains(image.BigDataNames, key) {
10381023
image.BigDataNames = append(image.BigDataNames, key)
10391024
save = true
10401025
}
10411026
for _, oldDigest := range image.Digests {
10421027
// remove the image from the list of images in the digest-based index
10431028
if list, ok := r.bydigest[oldDigest]; ok {
1044-
prunedList := imageSliceWithoutValue(list, image)
1029+
prunedList := slices.DeleteFunc(list, func(i *Image) bool {
1030+
return i == image
1031+
})
10451032
if len(prunedList) == 0 {
10461033
delete(r.bydigest, oldDigest)
10471034
} else {
@@ -1056,9 +1043,7 @@ func (r *imageStore) setBigData(image *Image, key string, data []byte, newDigest
10561043
// add the image to the list of images in the digest-based index which
10571044
// corresponds to the new digest for this item, unless it's already there
10581045
list := r.bydigest[newDigest]
1059-
if len(list) == len(imageSliceWithoutValue(list, image)) {
1060-
// the list isn't shortened by trying to prune this image from it,
1061-
// so it's not in there yet
1046+
if !slices.Contains(list, image) {
10621047
r.bydigest[newDigest] = append(list, image)
10631048
}
10641049
}

0 commit comments

Comments
 (0)