From bfeeabe5d3757425b00d0e159a7508cde154d22d Mon Sep 17 00:00:00 2001 From: Manu Gupta Date: Tue, 1 Oct 2024 20:43:13 -0700 Subject: [PATCH] 3452: Filter Volumes by name if any of the names match Signed-off-by: Manu Gupta --- cmd/nerdctl/volume/volume_list_test.go | 3 --- pkg/cmd/volume/list.go | 21 +++++++++++++++++---- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/cmd/nerdctl/volume/volume_list_test.go b/cmd/nerdctl/volume/volume_list_test.go index d0ad6d78463..8f5892cb6d9 100644 --- a/cmd/nerdctl/volume/volume_list_test.go +++ b/cmd/nerdctl/volume/volume_list_test.go @@ -270,9 +270,6 @@ func TestVolumeLsFilter(t *testing.T) { }, { Description: "Retrieving name=volume1 and name=volume2", - // FIXME: https://github.com/containerd/nerdctl/issues/3452 - // Nerdctl filter behavior is broken - Require: nerdtest.Docker, Command: func(data test.Data, helpers test.Helpers) test.Command { return helpers.Command("volume", "ls", "--quiet", "--filter", "name="+data.Get("vol1"), "--filter", "name="+data.Get("vol2")) }, diff --git a/pkg/cmd/volume/list.go b/pkg/cmd/volume/list.go index b934f0a9614..bb0654ba5b2 100644 --- a/pkg/cmd/volume/list.go +++ b/pkg/cmd/volume/list.go @@ -269,15 +269,28 @@ func volumeMatchesFilter(vol native.Volume, labelFilterFuncs []func(*map[string] return false } } - for _, nameFilterFunc := range nameFilterFuncs { - if !nameFilterFunc(vol.Name) { - return false - } + + if !anyMatch(vol.Name, nameFilterFuncs) { + return false } + for _, sizeFilterFunc := range sizeFilterFuncs { if !sizeFilterFunc(vol.Size) { return false } } + return true } + +func anyMatch[T any](vol T, filters []func(T) bool) bool { + if len(filters) == 0 { + return true + } + for _, f := range filters { + if f(vol) { + return true + } + } + return false +}