api/types: use regular slices for disk usage types

Signed-off-by: Austin Vazquez <austin.vazquez@docker.com>
This commit is contained in:
Austin Vazquez
2025-11-05 14:39:20 -06:00
parent 52217f1592
commit 6881ae72c7
15 changed files with 131 additions and 135 deletions

View File

@@ -2096,7 +2096,6 @@ definitions:
type: "array" type: "array"
x-omitempty: true x-omitempty: true
items: items:
x-nullable: true
x-go-type: x-go-type:
type: Summary type: Summary
@@ -2279,7 +2278,6 @@ definitions:
type: "array" type: "array"
x-omitempty: true x-omitempty: true
items: items:
x-nullable: true
x-go-type: x-go-type:
type: Volume type: Volume
@@ -2893,7 +2891,6 @@ definitions:
type: "array" type: "array"
x-omitempty: true x-omitempty: true
items: items:
x-nullable: true
x-go-type: x-go-type:
type: CacheRecord type: CacheRecord
@@ -5617,7 +5614,6 @@ definitions:
type: "array" type: "array"
x-omitempty: true x-omitempty: true
items: items:
x-nullable: true
x-go-type: x-go-type:
type: Summary type: Summary

View File

@@ -2096,7 +2096,6 @@ definitions:
type: "array" type: "array"
x-omitempty: true x-omitempty: true
items: items:
x-nullable: true
x-go-type: x-go-type:
type: Summary type: Summary
@@ -2279,7 +2278,6 @@ definitions:
type: "array" type: "array"
x-omitempty: true x-omitempty: true
items: items:
x-nullable: true
x-go-type: x-go-type:
type: Volume type: Volume
@@ -2893,7 +2891,6 @@ definitions:
type: "array" type: "array"
x-omitempty: true x-omitempty: true
items: items:
x-nullable: true
x-go-type: x-go-type:
type: CacheRecord type: CacheRecord
@@ -5617,7 +5614,6 @@ definitions:
type: "array" type: "array"
x-omitempty: true x-omitempty: true
items: items:
x-nullable: true
x-go-type: x-go-type:
type: Summary type: Summary

View File

@@ -17,7 +17,7 @@ type DiskUsage struct {
// List of build cache records. // List of build cache records.
// //
Items []*CacheRecord `json:"Items,omitempty"` Items []CacheRecord `json:"Items,omitempty"`
// Disk space that can be reclaimed by removing inactive build cache records. // Disk space that can be reclaimed by removing inactive build cache records.
// //

View File

@@ -17,7 +17,7 @@ type DiskUsage struct {
// List of container summaries. // List of container summaries.
// //
Items []*Summary `json:"Items,omitempty"` Items []Summary `json:"Items,omitempty"`
// Disk space that can be reclaimed by removing inactive containers. // Disk space that can be reclaimed by removing inactive containers.
// //

View File

@@ -17,7 +17,7 @@ type DiskUsage struct {
// List of image summaries. // List of image summaries.
// //
Items []*Summary `json:"Items,omitempty"` Items []Summary `json:"Items,omitempty"`
// Disk space that can be reclaimed by removing unused images. // Disk space that can be reclaimed by removing unused images.
// //

View File

@@ -17,7 +17,7 @@ type DiskUsage struct {
// List of volumes. // List of volumes.
// //
Items []*Volume `json:"Items,omitempty"` Items []Volume `json:"Items,omitempty"`
// Disk space that can be reclaimed by removing inactive volumes. // Disk space that can be reclaimed by removing inactive volumes.
// //

View File

@@ -5,6 +5,7 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"net/url" "net/url"
"slices"
"github.com/moby/moby/api/types/build" "github.com/moby/moby/api/types/build"
"github.com/moby/moby/api/types/container" "github.com/moby/moby/api/types/container"
@@ -151,14 +152,7 @@ func (cli *Client) DiskUsage(ctx context.Context, options DiskUsageOptions) (Dis
return DiskUsageResult{}, fmt.Errorf("Error retrieving disk usage: %v", err) return DiskUsageResult{}, fmt.Errorf("Error retrieving disk usage: %v", err)
} }
var ( var r DiskUsageResult
r DiskUsageResult
imagesFrom = []*image.Summary{}
containersFrom = []*container.Summary{}
volumesFrom = []*volume.Volume{}
buildCacheFrom = []*build.CacheRecord{}
)
if du.ImageUsage != nil { if du.ImageUsage != nil {
r.Images = ImagesDiskUsage{ r.Images = ImagesDiskUsage{
ActiveImages: du.ImageUsage.ActiveImages, ActiveImages: du.ImageUsage.ActiveImages,
@@ -168,7 +162,7 @@ func (cli *Client) DiskUsage(ctx context.Context, options DiskUsageOptions) (Dis
} }
if options.Verbose { if options.Verbose {
imagesFrom = du.ImageUsage.Items r.Images.Items = slices.Clone(du.ImageUsage.Items)
} }
} else { } else {
// Fallback for legacy response. // Fallback for legacy response.
@@ -176,16 +170,17 @@ func (cli *Client) DiskUsage(ctx context.Context, options DiskUsageOptions) (Dis
TotalSize: du.LayersSize, TotalSize: du.LayersSize,
} }
if du.Images != nil && options.Verbose { if options.Verbose {
imagesFrom = du.Images r.Images.Items = slices.Collect(func(yield func(image.Summary) bool) {
for _, i := range du.Images {
if !yield(*i) {
return
}
}
})
} }
} }
r.Images.Items = make([]image.Summary, len(imagesFrom))
for i, ii := range imagesFrom {
r.Images.Items[i] = *ii
}
if du.ContainerUsage != nil { if du.ContainerUsage != nil {
r.Containers = ContainersDiskUsage{ r.Containers = ContainersDiskUsage{
ActiveContainers: du.ContainerUsage.ActiveContainers, ActiveContainers: du.ContainerUsage.ActiveContainers,
@@ -195,16 +190,17 @@ func (cli *Client) DiskUsage(ctx context.Context, options DiskUsageOptions) (Dis
} }
if options.Verbose { if options.Verbose {
containersFrom = du.ContainerUsage.Items r.Containers.Items = slices.Clone(du.ContainerUsage.Items)
} }
} else if du.Containers != nil && options.Verbose { } else if du.Containers != nil && options.Verbose {
// Fallback for legacy response. // Fallback for legacy response.
containersFrom = du.Containers r.Containers.Items = slices.Collect(func(yield func(container.Summary) bool) {
} for _, c := range du.Containers {
if !yield(*c) {
r.Containers.Items = make([]container.Summary, len(containersFrom)) return
for i, c := range containersFrom { }
r.Containers.Items[i] = *c }
})
} }
if du.BuildCacheUsage != nil { if du.BuildCacheUsage != nil {
@@ -216,16 +212,17 @@ func (cli *Client) DiskUsage(ctx context.Context, options DiskUsageOptions) (Dis
} }
if options.Verbose { if options.Verbose {
buildCacheFrom = du.BuildCacheUsage.Items r.BuildCache.Items = slices.Clone(du.BuildCacheUsage.Items)
} }
} else if du.BuildCache != nil && options.Verbose { } else if du.BuildCache != nil && options.Verbose {
// Fallback for legacy response. // Fallback for legacy response.
buildCacheFrom = du.BuildCache r.BuildCache.Items = slices.Collect(func(yield func(build.CacheRecord) bool) {
} for _, b := range du.BuildCache {
if !yield(*b) {
r.BuildCache.Items = make([]build.CacheRecord, len(buildCacheFrom)) return
for i, b := range buildCacheFrom { }
r.BuildCache.Items[i] = *b }
})
} }
if du.VolumeUsage != nil { if du.VolumeUsage != nil {
@@ -237,16 +234,17 @@ func (cli *Client) DiskUsage(ctx context.Context, options DiskUsageOptions) (Dis
} }
if options.Verbose { if options.Verbose {
volumesFrom = du.VolumeUsage.Items r.Volumes.Items = slices.Clone(du.VolumeUsage.Items)
} }
} else if du.Volumes != nil && options.Verbose { } else if du.Volumes != nil && options.Verbose {
// Fallback for legacy response. // Fallback for legacy response.
volumesFrom = du.Volumes r.Volumes.Items = slices.Collect(func(yield func(volume.Volume) bool) {
} for _, v := range du.Volumes {
if !yield(*v) {
r.Volumes.Items = make([]volume.Volume, len(volumesFrom)) return
for i, v := range volumesFrom { }
r.Volumes.Items[i] = *v }
})
} }
return r, nil return r, nil

View File

@@ -33,7 +33,7 @@ func TestDiskUsage(t *testing.T) {
TotalImages: 0, TotalImages: 0,
Reclaimable: 0, Reclaimable: 0,
TotalSize: 4096, TotalSize: 4096,
Items: []*image.Summary{}, Items: []image.Summary{},
}, },
})(req) })(req)
})) }))

View File

@@ -5,6 +5,7 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"net/http" "net/http"
"slices"
"strconv" "strconv"
"time" "time"
@@ -230,7 +231,13 @@ func (s *systemRouter) getDiskUsage(ctx context.Context, w http.ResponseWriter,
v.LayersSize = systemDiskUsage.Images.TotalSize //nolint: staticcheck,SA1019: v.LayersSize is deprecated: kept to maintain backwards compatibility with API < v1.52, use [ImagesDiskUsage.TotalSize] instead. v.LayersSize = systemDiskUsage.Images.TotalSize //nolint: staticcheck,SA1019: v.LayersSize is deprecated: kept to maintain backwards compatibility with API < v1.52, use [ImagesDiskUsage.TotalSize] instead.
v.Images = systemDiskUsage.Images.Items //nolint: staticcheck,SA1019: v.Images is deprecated: kept to maintain backwards compatibility with API < v1.52, use [ImagesDiskUsage.Items] instead. v.Images = systemDiskUsage.Images.Items //nolint: staticcheck,SA1019: v.Images is deprecated: kept to maintain backwards compatibility with API < v1.52, use [ImagesDiskUsage.Items] instead.
} else if verbose { } else if verbose {
v.ImageUsage.Items = systemDiskUsage.Images.Items v.ImageUsage.Items = slices.Collect(func(yield func(image.Summary) bool) {
for _, i := range systemDiskUsage.Images.Items {
if !yield(*i) {
return
}
}
})
} }
} }
if systemDiskUsage != nil && systemDiskUsage.Containers != nil { if systemDiskUsage != nil && systemDiskUsage.Containers != nil {
@@ -244,7 +251,13 @@ func (s *systemRouter) getDiskUsage(ctx context.Context, w http.ResponseWriter,
if legacyFields { if legacyFields {
v.Containers = systemDiskUsage.Containers.Items //nolint: staticcheck,SA1019: v.Containers is deprecated: kept to maintain backwards compatibility with API < v1.52, use [ContainersDiskUsage.Items] instead. v.Containers = systemDiskUsage.Containers.Items //nolint: staticcheck,SA1019: v.Containers is deprecated: kept to maintain backwards compatibility with API < v1.52, use [ContainersDiskUsage.Items] instead.
} else if verbose { } else if verbose {
v.ContainerUsage.Items = systemDiskUsage.Containers.Items v.ContainerUsage.Items = slices.Collect(func(yield func(container.Summary) bool) {
for _, c := range systemDiskUsage.Containers.Items {
if !yield(*c) {
return
}
}
})
} }
} }
if systemDiskUsage != nil && systemDiskUsage.Volumes != nil { if systemDiskUsage != nil && systemDiskUsage.Volumes != nil {
@@ -258,7 +271,13 @@ func (s *systemRouter) getDiskUsage(ctx context.Context, w http.ResponseWriter,
if legacyFields { if legacyFields {
v.Volumes = systemDiskUsage.Volumes.Items //nolint: staticcheck,SA1019: v.Volumes is deprecated: kept to maintain backwards compatibility with API < v1.52, use [VolumesDiskUsage.Items] instead. v.Volumes = systemDiskUsage.Volumes.Items //nolint: staticcheck,SA1019: v.Volumes is deprecated: kept to maintain backwards compatibility with API < v1.52, use [VolumesDiskUsage.Items] instead.
} else if verbose { } else if verbose {
v.VolumeUsage.Items = systemDiskUsage.Volumes.Items v.VolumeUsage.Items = slices.Collect(func(yield func(volume.Volume) bool) {
for _, v := range systemDiskUsage.Volumes.Items {
if !yield(*v) {
return
}
}
})
} }
} }
if getBuildCache { if getBuildCache {
@@ -289,7 +308,13 @@ func (s *systemRouter) getDiskUsage(ctx context.Context, w http.ResponseWriter,
if legacyFields { if legacyFields {
v.BuildCache = buildCache //nolint: staticcheck,SA1019: v.BuildCache is deprecated: kept to maintain backwards compatibility with API < v1.52, use [BuildCacheDiskUsage.Items] instead. v.BuildCache = buildCache //nolint: staticcheck,SA1019: v.BuildCache is deprecated: kept to maintain backwards compatibility with API < v1.52, use [BuildCacheDiskUsage.Items] instead.
} else if verbose { } else if verbose {
v.BuildCacheUsage.Items = buildCache v.BuildCacheUsage.Items = slices.Collect(func(yield func(buildtypes.CacheRecord) bool) {
for _, b := range buildCache {
if !yield(*b) {
return
}
}
})
} }
} }
return httputils.WriteJSON(w, http.StatusOK, v) return httputils.WriteJSON(w, http.StatusOK, v)

View File

@@ -5,10 +5,6 @@ import (
"testing" "testing"
"github.com/google/go-cmp/cmp/cmpopts" "github.com/google/go-cmp/cmp/cmpopts"
"github.com/moby/moby/api/types/build"
containertypes "github.com/moby/moby/api/types/container"
"github.com/moby/moby/api/types/image"
"github.com/moby/moby/api/types/volume"
"github.com/moby/moby/client" "github.com/moby/moby/client"
"github.com/moby/moby/v2/integration/internal/container" "github.com/moby/moby/v2/integration/internal/container"
"github.com/moby/moby/v2/internal/testutil" "github.com/moby/moby/v2/internal/testutil"
@@ -56,19 +52,12 @@ func TestDiskUsage(t *testing.T) {
} }
assert.DeepEqual(t, du, client.DiskUsageResult{ assert.DeepEqual(t, du, client.DiskUsageResult{
Containers: client.ContainersDiskUsage{ Containers: client.ContainersDiskUsage{},
Items: []containertypes.Summary{},
},
Images: client.ImagesDiskUsage{ Images: client.ImagesDiskUsage{
TotalSize: expectedLayersSize, TotalSize: expectedLayersSize,
Items: []image.Summary{},
},
BuildCache: client.BuildCacheDiskUsage{
Items: []build.CacheRecord{},
},
Volumes: client.VolumesDiskUsage{
Items: []volume.Volume{},
}, },
BuildCache: client.BuildCacheDiskUsage{},
Volumes: client.VolumesDiskUsage{},
}) })
return du return du
}, },
@@ -155,9 +144,9 @@ func TestDiskUsage(t *testing.T) {
}, },
expected: client.DiskUsageResult{ expected: client.DiskUsageResult{
Containers: stepDU.Containers, Containers: stepDU.Containers,
Images: client.ImagesDiskUsage{Items: []image.Summary{}}, Images: client.ImagesDiskUsage{},
BuildCache: client.BuildCacheDiskUsage{Items: []build.CacheRecord{}}, BuildCache: client.BuildCacheDiskUsage{},
Volumes: client.VolumesDiskUsage{Items: []volume.Volume{}}, Volumes: client.VolumesDiskUsage{},
}, },
}, },
{ {
@@ -167,10 +156,10 @@ func TestDiskUsage(t *testing.T) {
Verbose: true, Verbose: true,
}, },
expected: client.DiskUsageResult{ expected: client.DiskUsageResult{
Containers: client.ContainersDiskUsage{Items: []containertypes.Summary{}}, Containers: client.ContainersDiskUsage{},
Images: stepDU.Images, Images: stepDU.Images,
BuildCache: client.BuildCacheDiskUsage{Items: []build.CacheRecord{}}, BuildCache: client.BuildCacheDiskUsage{},
Volumes: client.VolumesDiskUsage{Items: []volume.Volume{}}, Volumes: client.VolumesDiskUsage{},
}, },
}, },
{ {
@@ -180,9 +169,9 @@ func TestDiskUsage(t *testing.T) {
Verbose: true, Verbose: true,
}, },
expected: client.DiskUsageResult{ expected: client.DiskUsageResult{
Containers: client.ContainersDiskUsage{Items: []containertypes.Summary{}}, Containers: client.ContainersDiskUsage{},
Images: client.ImagesDiskUsage{Items: []image.Summary{}}, Images: client.ImagesDiskUsage{},
BuildCache: client.BuildCacheDiskUsage{Items: []build.CacheRecord{}}, BuildCache: client.BuildCacheDiskUsage{},
Volumes: stepDU.Volumes, Volumes: stepDU.Volumes,
}, },
}, },
@@ -193,10 +182,10 @@ func TestDiskUsage(t *testing.T) {
Verbose: true, Verbose: true,
}, },
expected: client.DiskUsageResult{ expected: client.DiskUsageResult{
Containers: client.ContainersDiskUsage{Items: []containertypes.Summary{}}, Containers: client.ContainersDiskUsage{},
Images: client.ImagesDiskUsage{Items: []image.Summary{}}, Images: client.ImagesDiskUsage{},
BuildCache: stepDU.BuildCache, BuildCache: stepDU.BuildCache,
Volumes: client.VolumesDiskUsage{Items: []volume.Volume{}}, Volumes: client.VolumesDiskUsage{},
}, },
}, },
{ {
@@ -208,8 +197,8 @@ func TestDiskUsage(t *testing.T) {
}, },
expected: client.DiskUsageResult{ expected: client.DiskUsageResult{
Containers: stepDU.Containers, Containers: stepDU.Containers,
Images: client.ImagesDiskUsage{Items: []image.Summary{}}, Images: client.ImagesDiskUsage{},
BuildCache: client.BuildCacheDiskUsage{Items: []build.CacheRecord{}}, BuildCache: client.BuildCacheDiskUsage{},
Volumes: stepDU.Volumes, Volumes: stepDU.Volumes,
}, },
}, },
@@ -221,10 +210,10 @@ func TestDiskUsage(t *testing.T) {
Verbose: true, Verbose: true,
}, },
expected: client.DiskUsageResult{ expected: client.DiskUsageResult{
Containers: client.ContainersDiskUsage{Items: []containertypes.Summary{}}, Containers: client.ContainersDiskUsage{},
Images: stepDU.Images, Images: stepDU.Images,
BuildCache: stepDU.BuildCache, BuildCache: stepDU.BuildCache,
Volumes: client.VolumesDiskUsage{Items: []volume.Volume{}}, Volumes: client.VolumesDiskUsage{},
}, },
}, },
{ {
@@ -237,9 +226,7 @@ func TestDiskUsage(t *testing.T) {
}, },
expected: client.DiskUsageResult{ expected: client.DiskUsageResult{
Containers: stepDU.Containers, Containers: stepDU.Containers,
Images: client.ImagesDiskUsage{ Images: client.ImagesDiskUsage{},
Items: []image.Summary{},
},
BuildCache: stepDU.BuildCache, BuildCache: stepDU.BuildCache,
Volumes: stepDU.Volumes, Volumes: stepDU.Volumes,
}, },
@@ -253,9 +240,7 @@ func TestDiskUsage(t *testing.T) {
Verbose: true, Verbose: true,
}, },
expected: client.DiskUsageResult{ expected: client.DiskUsageResult{
Containers: client.ContainersDiskUsage{ Containers: client.ContainersDiskUsage{},
Items: []containertypes.Summary{},
},
Images: stepDU.Images, Images: stepDU.Images,
BuildCache: stepDU.BuildCache, BuildCache: stepDU.BuildCache,
Volumes: stepDU.Volumes, Volumes: stepDU.Volumes,
@@ -272,10 +257,8 @@ func TestDiskUsage(t *testing.T) {
expected: client.DiskUsageResult{ expected: client.DiskUsageResult{
Containers: stepDU.Containers, Containers: stepDU.Containers,
Images: stepDU.Images, Images: stepDU.Images,
BuildCache: client.BuildCacheDiskUsage{ BuildCache: client.BuildCacheDiskUsage{},
Items: []build.CacheRecord{}, Volumes: stepDU.Volumes,
},
Volumes: stepDU.Volumes,
}, },
}, },
{ {

View File

@@ -17,7 +17,7 @@ type DiskUsage struct {
// List of build cache records. // List of build cache records.
// //
Items []*CacheRecord `json:"Items,omitempty"` Items []CacheRecord `json:"Items,omitempty"`
// Disk space that can be reclaimed by removing inactive build cache records. // Disk space that can be reclaimed by removing inactive build cache records.
// //

View File

@@ -17,7 +17,7 @@ type DiskUsage struct {
// List of container summaries. // List of container summaries.
// //
Items []*Summary `json:"Items,omitempty"` Items []Summary `json:"Items,omitempty"`
// Disk space that can be reclaimed by removing inactive containers. // Disk space that can be reclaimed by removing inactive containers.
// //

View File

@@ -17,7 +17,7 @@ type DiskUsage struct {
// List of image summaries. // List of image summaries.
// //
Items []*Summary `json:"Items,omitempty"` Items []Summary `json:"Items,omitempty"`
// Disk space that can be reclaimed by removing unused images. // Disk space that can be reclaimed by removing unused images.
// //

View File

@@ -17,7 +17,7 @@ type DiskUsage struct {
// List of volumes. // List of volumes.
// //
Items []*Volume `json:"Items,omitempty"` Items []Volume `json:"Items,omitempty"`
// Disk space that can be reclaimed by removing inactive volumes. // Disk space that can be reclaimed by removing inactive volumes.
// //

View File

@@ -5,6 +5,7 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"net/url" "net/url"
"slices"
"github.com/moby/moby/api/types/build" "github.com/moby/moby/api/types/build"
"github.com/moby/moby/api/types/container" "github.com/moby/moby/api/types/container"
@@ -151,14 +152,7 @@ func (cli *Client) DiskUsage(ctx context.Context, options DiskUsageOptions) (Dis
return DiskUsageResult{}, fmt.Errorf("Error retrieving disk usage: %v", err) return DiskUsageResult{}, fmt.Errorf("Error retrieving disk usage: %v", err)
} }
var ( var r DiskUsageResult
r DiskUsageResult
imagesFrom = []*image.Summary{}
containersFrom = []*container.Summary{}
volumesFrom = []*volume.Volume{}
buildCacheFrom = []*build.CacheRecord{}
)
if du.ImageUsage != nil { if du.ImageUsage != nil {
r.Images = ImagesDiskUsage{ r.Images = ImagesDiskUsage{
ActiveImages: du.ImageUsage.ActiveImages, ActiveImages: du.ImageUsage.ActiveImages,
@@ -168,7 +162,7 @@ func (cli *Client) DiskUsage(ctx context.Context, options DiskUsageOptions) (Dis
} }
if options.Verbose { if options.Verbose {
imagesFrom = du.ImageUsage.Items r.Images.Items = slices.Clone(du.ImageUsage.Items)
} }
} else { } else {
// Fallback for legacy response. // Fallback for legacy response.
@@ -176,16 +170,17 @@ func (cli *Client) DiskUsage(ctx context.Context, options DiskUsageOptions) (Dis
TotalSize: du.LayersSize, TotalSize: du.LayersSize,
} }
if du.Images != nil && options.Verbose { if options.Verbose {
imagesFrom = du.Images r.Images.Items = slices.Collect(func(yield func(image.Summary) bool) {
for _, i := range du.Images {
if !yield(*i) {
return
}
}
})
} }
} }
r.Images.Items = make([]image.Summary, len(imagesFrom))
for i, ii := range imagesFrom {
r.Images.Items[i] = *ii
}
if du.ContainerUsage != nil { if du.ContainerUsage != nil {
r.Containers = ContainersDiskUsage{ r.Containers = ContainersDiskUsage{
ActiveContainers: du.ContainerUsage.ActiveContainers, ActiveContainers: du.ContainerUsage.ActiveContainers,
@@ -195,16 +190,17 @@ func (cli *Client) DiskUsage(ctx context.Context, options DiskUsageOptions) (Dis
} }
if options.Verbose { if options.Verbose {
containersFrom = du.ContainerUsage.Items r.Containers.Items = slices.Clone(du.ContainerUsage.Items)
} }
} else if du.Containers != nil && options.Verbose { } else if du.Containers != nil && options.Verbose {
// Fallback for legacy response. // Fallback for legacy response.
containersFrom = du.Containers r.Containers.Items = slices.Collect(func(yield func(container.Summary) bool) {
} for _, c := range du.Containers {
if !yield(*c) {
r.Containers.Items = make([]container.Summary, len(containersFrom)) return
for i, c := range containersFrom { }
r.Containers.Items[i] = *c }
})
} }
if du.BuildCacheUsage != nil { if du.BuildCacheUsage != nil {
@@ -216,16 +212,17 @@ func (cli *Client) DiskUsage(ctx context.Context, options DiskUsageOptions) (Dis
} }
if options.Verbose { if options.Verbose {
buildCacheFrom = du.BuildCacheUsage.Items r.BuildCache.Items = slices.Clone(du.BuildCacheUsage.Items)
} }
} else if du.BuildCache != nil && options.Verbose { } else if du.BuildCache != nil && options.Verbose {
// Fallback for legacy response. // Fallback for legacy response.
buildCacheFrom = du.BuildCache r.BuildCache.Items = slices.Collect(func(yield func(build.CacheRecord) bool) {
} for _, b := range du.BuildCache {
if !yield(*b) {
r.BuildCache.Items = make([]build.CacheRecord, len(buildCacheFrom)) return
for i, b := range buildCacheFrom { }
r.BuildCache.Items[i] = *b }
})
} }
if du.VolumeUsage != nil { if du.VolumeUsage != nil {
@@ -237,16 +234,17 @@ func (cli *Client) DiskUsage(ctx context.Context, options DiskUsageOptions) (Dis
} }
if options.Verbose { if options.Verbose {
volumesFrom = du.VolumeUsage.Items r.Volumes.Items = slices.Clone(du.VolumeUsage.Items)
} }
} else if du.Volumes != nil && options.Verbose { } else if du.Volumes != nil && options.Verbose {
// Fallback for legacy response. // Fallback for legacy response.
volumesFrom = du.Volumes r.Volumes.Items = slices.Collect(func(yield func(volume.Volume) bool) {
} for _, v := range du.Volumes {
if !yield(*v) {
r.Volumes.Items = make([]volume.Volume, len(volumesFrom)) return
for i, v := range volumesFrom { }
r.Volumes.Items[i] = *v }
})
} }
return r, nil return r, nil