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>
| ... | ... |
@@ -530,20 +530,26 @@ func toBuildkitPruneInfo(opts types.BuildCachePruneOptions) (client.PruneInfo, e |
| 530 | 530 |
|
| 531 | 531 |
bkFilter := make([]string, 0, opts.Filters.Len()) |
| 532 | 532 |
for cacheField := range cacheFields {
|
| 533 |
- values := opts.Filters.Get(cacheField) |
|
| 534 |
- switch len(values) {
|
|
| 535 |
- case 0: |
|
| 536 |
- bkFilter = append(bkFilter, cacheField) |
|
| 537 |
- case 1: |
|
| 538 |
- bkFilter = append(bkFilter, cacheField+"=="+values[0]) |
|
| 539 |
- default: |
|
| 540 |
- return client.PruneInfo{}, errMultipleFilterValues
|
|
| 533 |
+ if opts.Filters.Include(cacheField) {
|
|
| 534 |
+ values := opts.Filters.Get(cacheField) |
|
| 535 |
+ switch len(values) {
|
|
| 536 |
+ case 0: |
|
| 537 |
+ bkFilter = append(bkFilter, cacheField) |
|
| 538 |
+ case 1: |
|
| 539 |
+ if cacheField == "id" {
|
|
| 540 |
+ bkFilter = append(bkFilter, cacheField+"~="+values[0]) |
|
| 541 |
+ } else {
|
|
| 542 |
+ bkFilter = append(bkFilter, cacheField+"=="+values[0]) |
|
| 543 |
+ } |
|
| 544 |
+ default: |
|
| 545 |
+ return client.PruneInfo{}, errMultipleFilterValues
|
|
| 546 |
+ } |
|
| 541 | 547 |
} |
| 542 | 548 |
} |
| 543 | 549 |
return client.PruneInfo{
|
| 544 | 550 |
All: opts.All, |
| 545 | 551 |
KeepDuration: unusedFor, |
| 546 | 552 |
KeepBytes: opts.KeepStorage, |
| 547 |
- Filter: bkFilter, |
|
| 553 |
+ Filter: []string{strings.Join(bkFilter, ",")},
|
|
| 548 | 554 |
}, nil |
| 549 | 555 |
} |