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 <tibor@docker.com> (cherry picked from commit b6137bebb83e886aef906b7ff277778b69616991) Signed-off-by: Tibor Vass <tibor@docker.com> Upstream-commit: 52a3c39506b883f713694ce39d1a4fd9f5638800 Component: engine
This commit is contained in:
@ -532,20 +532,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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user