mirror of
https://github.com/containers/podman.git
synced 2025-07-18 01:57:24 +08:00
bump c/common to latest main
Includes the fixes for the search filter changes. [NO NEW TESTS NEEDED] Signed-off-by: Paul Holzinger <pholzing@redhat.com>
This commit is contained in:
55
vendor/github.com/containers/common/libimage/filter/filter.go
generated
vendored
Normal file
55
vendor/github.com/containers/common/libimage/filter/filter.go
generated
vendored
Normal file
@ -0,0 +1,55 @@
|
||||
package filter
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/containers/common/libimage/define"
|
||||
"github.com/containers/image/v5/types"
|
||||
)
|
||||
|
||||
// SearchFilter allows filtering images while searching.
|
||||
type SearchFilter struct {
|
||||
// Stars describes the minimal amount of starts of an image.
|
||||
Stars int
|
||||
// IsAutomated decides if only images from automated builds are displayed.
|
||||
IsAutomated types.OptionalBool
|
||||
// IsOfficial decides if only official images are displayed.
|
||||
IsOfficial types.OptionalBool
|
||||
}
|
||||
|
||||
// ParseSearchFilter turns the filter into a SearchFilter that can be used for
|
||||
// searching images.
|
||||
func ParseSearchFilter(filter []string) (*SearchFilter, error) {
|
||||
sFilter := new(SearchFilter)
|
||||
for _, f := range filter {
|
||||
arr := strings.SplitN(f, "=", 2)
|
||||
switch arr[0] {
|
||||
case define.SearchFilterStars:
|
||||
if len(arr) < 2 {
|
||||
return nil, fmt.Errorf("invalid filter %q, should be stars=<value>", filter)
|
||||
}
|
||||
stars, err := strconv.Atoi(arr[1])
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("incorrect value type for stars filter: %w", err)
|
||||
}
|
||||
sFilter.Stars = stars
|
||||
case define.SearchFilterAutomated:
|
||||
if len(arr) == 2 && arr[1] == "false" {
|
||||
sFilter.IsAutomated = types.OptionalBoolFalse
|
||||
} else {
|
||||
sFilter.IsAutomated = types.OptionalBoolTrue
|
||||
}
|
||||
case define.SearchFilterOfficial:
|
||||
if len(arr) == 2 && arr[1] == "false" {
|
||||
sFilter.IsOfficial = types.OptionalBoolFalse
|
||||
} else {
|
||||
sFilter.IsOfficial = types.OptionalBoolTrue
|
||||
}
|
||||
default:
|
||||
return nil, fmt.Errorf("invalid filter type %q", f)
|
||||
}
|
||||
}
|
||||
return sFilter, nil
|
||||
}
|
58
vendor/github.com/containers/common/libimage/search.go
generated
vendored
58
vendor/github.com/containers/common/libimage/search.go
generated
vendored
@ -3,11 +3,10 @@ package libimage
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/containers/common/libimage/define"
|
||||
"github.com/containers/common/libimage/filter"
|
||||
registryTransport "github.com/containers/image/v5/docker"
|
||||
"github.com/containers/image/v5/pkg/sysregistriesv2"
|
||||
"github.com/containers/image/v5/transports/alltransports"
|
||||
@ -46,7 +45,7 @@ type SearchResult struct {
|
||||
// SearchOptions customize searching images.
|
||||
type SearchOptions struct {
|
||||
// Filter allows to filter the results.
|
||||
Filter SearchFilter
|
||||
Filter filter.SearchFilter
|
||||
// Limit limits the number of queries per index (default: 25). Must be
|
||||
// greater than 0 to overwrite the default value.
|
||||
Limit int
|
||||
@ -77,51 +76,6 @@ type SearchOptions struct {
|
||||
Registries []string
|
||||
}
|
||||
|
||||
// SearchFilter allows filtering images while searching.
|
||||
type SearchFilter struct {
|
||||
// Stars describes the minimal amount of starts of an image.
|
||||
Stars int
|
||||
// IsAutomated decides if only images from automated builds are displayed.
|
||||
IsAutomated types.OptionalBool
|
||||
// IsOfficial decides if only official images are displayed.
|
||||
IsOfficial types.OptionalBool
|
||||
}
|
||||
|
||||
// ParseSearchFilter turns the filter into a SearchFilter that can be used for
|
||||
// searching images.
|
||||
func ParseSearchFilter(filter []string) (*SearchFilter, error) {
|
||||
sFilter := new(SearchFilter)
|
||||
for _, f := range filter {
|
||||
arr := strings.SplitN(f, "=", 2)
|
||||
switch arr[0] {
|
||||
case define.SearchFilterStars:
|
||||
if len(arr) < 2 {
|
||||
return nil, fmt.Errorf("invalid filter %q, should be stars=<value>", filter)
|
||||
}
|
||||
stars, err := strconv.Atoi(arr[1])
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("incorrect value type for stars filter: %w", err)
|
||||
}
|
||||
sFilter.Stars = stars
|
||||
case define.SearchFilterAutomated:
|
||||
if len(arr) == 2 && arr[1] == "false" {
|
||||
sFilter.IsAutomated = types.OptionalBoolFalse
|
||||
} else {
|
||||
sFilter.IsAutomated = types.OptionalBoolTrue
|
||||
}
|
||||
case define.SearchFilterOfficial:
|
||||
if len(arr) == 2 && arr[1] == "false" {
|
||||
sFilter.IsOfficial = types.OptionalBoolFalse
|
||||
} else {
|
||||
sFilter.IsOfficial = types.OptionalBoolTrue
|
||||
}
|
||||
default:
|
||||
return nil, fmt.Errorf("invalid filter type %q", f)
|
||||
}
|
||||
}
|
||||
return sFilter, nil
|
||||
}
|
||||
|
||||
// Search searches term. If term includes a registry, only this registry will
|
||||
// be used for searching. Otherwise, the unqualified-search registries in
|
||||
// containers-registries.conf(5) or the ones specified in the options will be
|
||||
@ -261,7 +215,7 @@ func (r *Runtime) searchImageInRegistry(ctx context.Context, term, registry stri
|
||||
paramsArr := []SearchResult{}
|
||||
for i := 0; i < limit; i++ {
|
||||
// Check whether query matches filters
|
||||
if !(options.Filter.matchesAutomatedFilter(results[i]) && options.Filter.matchesOfficialFilter(results[i]) && options.Filter.matchesStarFilter(results[i])) {
|
||||
if !(filterMatchesAutomatedFilter(&options.Filter, results[i]) && filterMatchesOfficialFilter(&options.Filter, results[i]) && filterMatchesStarFilter(&options.Filter, results[i])) {
|
||||
continue
|
||||
}
|
||||
official := ""
|
||||
@ -330,18 +284,18 @@ func searchRepositoryTags(ctx context.Context, sys *types.SystemContext, registr
|
||||
return paramsArr, nil
|
||||
}
|
||||
|
||||
func (f *SearchFilter) matchesStarFilter(result registryTransport.SearchResult) bool {
|
||||
func filterMatchesStarFilter(f *filter.SearchFilter, result registryTransport.SearchResult) bool {
|
||||
return result.StarCount >= f.Stars
|
||||
}
|
||||
|
||||
func (f *SearchFilter) matchesAutomatedFilter(result registryTransport.SearchResult) bool {
|
||||
func filterMatchesAutomatedFilter(f *filter.SearchFilter, result registryTransport.SearchResult) bool {
|
||||
if f.IsAutomated != types.OptionalBoolUndefined {
|
||||
return result.IsAutomated == (f.IsAutomated == types.OptionalBoolTrue)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func (f *SearchFilter) matchesOfficialFilter(result registryTransport.SearchResult) bool {
|
||||
func filterMatchesOfficialFilter(f *filter.SearchFilter, result registryTransport.SearchResult) bool {
|
||||
if f.IsOfficial != types.OptionalBoolUndefined {
|
||||
return result.IsOfficial == (f.IsOfficial == types.OptionalBoolTrue)
|
||||
}
|
||||
|
4
vendor/github.com/containers/common/pkg/cgroups/cgroups.go
generated
vendored
4
vendor/github.com/containers/common/pkg/cgroups/cgroups.go
generated
vendored
@ -582,7 +582,7 @@ func (c *CgroupControl) Stat() (*Metrics, error) {
|
||||
return &m, nil
|
||||
}
|
||||
|
||||
func readCgroup2MapPath(path string) (map[string][]string, error) {
|
||||
func readCgroupMapPath(path string) (map[string][]string, error) {
|
||||
ret := map[string][]string{}
|
||||
f, err := os.Open(path)
|
||||
if err != nil {
|
||||
@ -610,5 +610,5 @@ func readCgroup2MapPath(path string) (map[string][]string, error) {
|
||||
func readCgroup2MapFile(ctr *CgroupControl, name string) (map[string][]string, error) {
|
||||
p := filepath.Join(cgroupRoot, ctr.path, name)
|
||||
|
||||
return readCgroup2MapPath(p)
|
||||
return readCgroupMapPath(p)
|
||||
}
|
||||
|
4
vendor/github.com/containers/common/pkg/cgroups/cgroups_linux.go
generated
vendored
4
vendor/github.com/containers/common/pkg/cgroups/cgroups_linux.go
generated
vendored
@ -542,7 +542,7 @@ func (c *CgroupControl) Stat() (*cgroups.Stats, error) {
|
||||
return &m, nil
|
||||
}
|
||||
|
||||
func readCgroup2MapPath(path string) (map[string][]string, error) {
|
||||
func readCgroupMapPath(path string) (map[string][]string, error) {
|
||||
ret := map[string][]string{}
|
||||
f, err := os.Open(path)
|
||||
if err != nil {
|
||||
@ -570,5 +570,5 @@ func readCgroup2MapPath(path string) (map[string][]string, error) {
|
||||
func readCgroup2MapFile(ctr *CgroupControl, name string) (map[string][]string, error) {
|
||||
p := filepath.Join(cgroupRoot, ctr.config.Path, name)
|
||||
|
||||
return readCgroup2MapPath(p)
|
||||
return readCgroupMapPath(p)
|
||||
}
|
||||
|
21
vendor/github.com/containers/common/pkg/cgroups/memory_linux.go
generated
vendored
21
vendor/github.com/containers/common/pkg/cgroups/memory_linux.go
generated
vendored
@ -4,7 +4,9 @@
|
||||
package cgroups
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
|
||||
"github.com/opencontainers/runc/libcontainer/cgroups"
|
||||
"github.com/opencontainers/runc/libcontainer/cgroups/fs"
|
||||
@ -63,9 +65,26 @@ func (c *linuxMemHandler) Stat(ctr *CgroupControl, m *cgroups.Stats) error {
|
||||
} else {
|
||||
memoryRoot = ctr.getCgroupv1Path(Memory)
|
||||
limitFilename = "memory.limit_in_bytes"
|
||||
if memUsage.Usage.Usage, err = readFileAsUint64(filepath.Join(memoryRoot, "memory.usage_in_bytes")); err != nil {
|
||||
|
||||
path := filepath.Join(memoryRoot, "memory.stat")
|
||||
values, err := readCgroupMapPath(path)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// cgroup v1 does not have a single "anon" field, but we can calculate it
|
||||
// from total_active_anon and total_inactive_anon
|
||||
memUsage.Usage.Usage = 0
|
||||
for _, key := range []string{"total_active_anon", "total_inactive_anon"} {
|
||||
if _, found := values[key]; !found {
|
||||
continue
|
||||
}
|
||||
res, err := strconv.ParseUint(values[key][0], 10, 64)
|
||||
if err != nil {
|
||||
return fmt.Errorf("parse %s from %s: %w", key, path, err)
|
||||
}
|
||||
memUsage.Usage.Usage += res
|
||||
}
|
||||
}
|
||||
|
||||
memUsage.Usage.Limit, err = readFileAsUint64(filepath.Join(memoryRoot, limitFilename))
|
||||
|
2
vendor/github.com/containers/common/pkg/cgroups/utils.go
generated
vendored
2
vendor/github.com/containers/common/pkg/cgroups/utils.go
generated
vendored
@ -64,7 +64,7 @@ func GetSystemCPUUsage() (uint64, error) {
|
||||
}
|
||||
p := filepath.Join(cgroupRoot, file.Name(), "cpu.stat")
|
||||
|
||||
values, err := readCgroup2MapPath(p)
|
||||
values, err := readCgroupMapPath(p)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
Reference in New Issue
Block a user