From 48620057beb843ee1fb4e69ae0ed1e8eac9f307a Mon Sep 17 00:00:00 2001 From: Tibor Vass Date: Tue, 16 Oct 2018 18:51:25 +0000 Subject: [PATCH] builder: fix bugs when pruning buildkit cache with filters Only the filters the user specified should be added as cache filters to buildkit. Make an AND operation of the provided filters. ID filter now does prefix-matching. Signed-off-by: Tibor Vass --- builder/builder-next/builder.go | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/builder/builder-next/builder.go b/builder/builder-next/builder.go index a51d8ec52c..369be15f96 100644 --- a/builder/builder-next/builder.go +++ b/builder/builder-next/builder.go @@ -530,20 +530,26 @@ func toBuildkitPruneInfo(opts types.BuildCachePruneOptions) (client.PruneInfo, e bkFilter := make([]string, 0, opts.Filters.Len()) for cacheField := range cacheFields { - values := opts.Filters.Get(cacheField) - switch len(values) { - case 0: - bkFilter = append(bkFilter, cacheField) - case 1: - bkFilter = append(bkFilter, cacheField+"=="+values[0]) - default: - return client.PruneInfo{}, errMultipleFilterValues + if opts.Filters.Include(cacheField) { + values := opts.Filters.Get(cacheField) + switch len(values) { + case 0: + bkFilter = append(bkFilter, cacheField) + case 1: + if cacheField == "id" { + bkFilter = append(bkFilter, cacheField+"~="+values[0]) + } else { + bkFilter = append(bkFilter, cacheField+"=="+values[0]) + } + default: + return client.PruneInfo{}, errMultipleFilterValues + } } } return client.PruneInfo{ All: opts.All, KeepDuration: unusedFor, KeepBytes: opts.KeepStorage, - Filter: bkFilter, + Filter: []string{strings.Join(bkFilter, ",")}, }, nil }