diff --git a/go.mod b/go.mod index 01a34528..a07aad96 100644 --- a/go.mod +++ b/go.mod @@ -20,5 +20,5 @@ require ( k8s.io/code-generator v0.21.4 k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7 knative.dev/hack v0.0.0-20211117134436-69a2295d54ce - knative.dev/pkg v0.0.0-20211117215328-5708c4c44232 + knative.dev/pkg v0.0.0-20211120133512-d016976f2567 ) diff --git a/go.sum b/go.sum index 00cbe55b..dcf2b395 100644 --- a/go.sum +++ b/go.sum @@ -1133,8 +1133,8 @@ k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/ knative.dev/hack v0.0.0-20211112192837-128cf0150a69/go.mod h1:PHt8x8yX5Z9pPquBEfIj0X66f8iWkWfR0S/sarACJrI= knative.dev/hack v0.0.0-20211117134436-69a2295d54ce h1:dPARWsX/9nmWg9g09MtGnsn7nZUwjA0UWpKSUozgS6g= knative.dev/hack v0.0.0-20211117134436-69a2295d54ce/go.mod h1:PHt8x8yX5Z9pPquBEfIj0X66f8iWkWfR0S/sarACJrI= -knative.dev/pkg v0.0.0-20211117215328-5708c4c44232 h1:mye0h0gL0sI2YraL1X5FjyfQZoYVaaaRemTJq+uw+/8= -knative.dev/pkg v0.0.0-20211117215328-5708c4c44232/go.mod h1:VqUp1KWJqpTDNoiSI/heaX3uMdubImslJE2tBkP+Bbw= +knative.dev/pkg v0.0.0-20211120133512-d016976f2567 h1:IPQ6QKOvMIRX9/UI1cAtSl36+CbGv8HErSvID03CRr4= +knative.dev/pkg v0.0.0-20211120133512-d016976f2567/go.mod h1:VqUp1KWJqpTDNoiSI/heaX3uMdubImslJE2tBkP+Bbw= pgregory.net/rapid v0.3.3/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= diff --git a/vendor/knative.dev/pkg/apis/duck/v1/status_types.go b/vendor/knative.dev/pkg/apis/duck/v1/status_types.go index bf740e06..15e26453 100644 --- a/vendor/knative.dev/pkg/apis/duck/v1/status_types.go +++ b/vendor/knative.dev/pkg/apis/duck/v1/status_types.go @@ -21,7 +21,7 @@ import ( "knative.dev/pkg/apis" "knative.dev/pkg/apis/duck/ducktypes" - "knative.dev/pkg/kmeta" + "knative.dev/pkg/kmap" ) // +genduck @@ -92,8 +92,7 @@ func (s *Status) GetCondition(t apis.ConditionType) *apis.Condition { func (s *Status) ConvertTo(ctx context.Context, sink *Status, predicates ...func(apis.ConditionType) bool) { sink.ObservedGeneration = s.ObservedGeneration if s.Annotations != nil { - // This will deep copy the map. - sink.Annotations = kmeta.UnionMaps(s.Annotations) + sink.Annotations = kmap.Union(s.Annotations) } conditions := make(apis.Conditions, 0, len(s.Conditions)) diff --git a/vendor/knative.dev/pkg/kmap/lookup.go b/vendor/knative.dev/pkg/kmap/lookup.go new file mode 100644 index 00000000..e24041b6 --- /dev/null +++ b/vendor/knative.dev/pkg/kmap/lookup.go @@ -0,0 +1,77 @@ +/* +Copyright 2021 The Knative Authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package kmap + +// KeyPriority is a utility struct for getting values from a map +// given a list of ordered keys +// +// This is to help the migration/renaming of annotations & labels +type KeyPriority []string + +// Key returns the default key that should be used for +// accessing the map +func (p KeyPriority) Key() string { + // this intentionally panics rather than returning an empty string + return p[0] +} + +// Value iterates looks up the ordered keys in the map and returns +// a string value. An empty string will be returned if the keys +// are not present in the map +func (p KeyPriority) Value(m map[string]string) string { + _, v, _ := p.Get(m) + return v +} + +// Get iterates over the ordered keys and looks up the corresponding +// values in the map +// +// It returns the key, value, and true|false signaling whether the +// key was present in the map +// +// If no key is present the default key (lowest ordinal) is returned +// with an empty string as the value +func (p KeyPriority) Get(m map[string]string) (string, string, bool) { + var k, v string + var ok bool + for _, k = range p { + v, ok = m[k] + if ok { + return k, v, ok + } + } + + return p.Key(), "", false +} + +// UpdateKey will update the map with the KeyPriority's default +// key iff any of the other synonym keys are present +func (p KeyPriority) UpdateKey(m map[string]string) { + if k, v, ok := p.Get(m); ok && k != p.Key() { + delete(m, k) + m[p.Key()] = v + } +} + +// UpdateKeys iterates over the lookups and updates entries in the map +// to use the default key +func UpdateKeys(m map[string]string, keys ...KeyPriority) map[string]string { + for _, key := range keys { + key.UpdateKey(m) + } + return m +} diff --git a/vendor/knative.dev/pkg/kmap/map.go b/vendor/knative.dev/pkg/kmap/map.go new file mode 100644 index 00000000..006348d7 --- /dev/null +++ b/vendor/knative.dev/pkg/kmap/map.go @@ -0,0 +1,80 @@ +/* +Copyright 2021 The Knative Authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package kmap + +// Copy makes a copy of the map. +func Copy(a map[string]string) map[string]string { + ret := make(map[string]string, len(a)) + for k, v := range a { + ret[k] = v + } + return ret +} + +// Union returns a map constructed from the union of input maps. +// where values from latter maps win. +func Union(maps ...map[string]string) map[string]string { + if len(maps) == 0 { + return map[string]string{} + } + out := make(map[string]string, len(maps[0])) + + for _, m := range maps { + for k, v := range m { + out[k] = v + } + } + return out +} + +// Filter creates a copy of the provided map, filtering out the elements +// that match `filter`. +// nil `filter` is accepted. +func Filter(in map[string]string, filter func(string) bool) map[string]string { + ret := make(map[string]string, len(in)) + for k, v := range in { + if filter != nil && filter(k) { + continue + } + ret[k] = v + } + return ret +} + +// ExcludeKeys creates a copy of the provided map filtering out the excluded `keys` +func ExcludeKeys(in map[string]string, keys ...string) map[string]string { + return ExcludeKeyList(in, keys) +} + +// ExcludeKeyList creates a copy of the provided map filtering out excluded `keys` +func ExcludeKeyList(in map[string]string, keys []string) map[string]string { + ret := make(map[string]string, len(in)) + +outer: + for k, v := range in { + // opted to skip memory allocation (creating a set) in favour of + // looping since the places Knative will use this we typically + // exclude one or two keys + for _, excluded := range keys { + if k == excluded { + continue outer + } + } + ret[k] = v + } + return ret +} diff --git a/vendor/knative.dev/pkg/kmeta/map.go b/vendor/knative.dev/pkg/kmeta/map.go index 37154cd2..47592332 100644 --- a/vendor/knative.dev/pkg/kmeta/map.go +++ b/vendor/knative.dev/pkg/kmeta/map.go @@ -16,41 +16,19 @@ limitations under the License. package kmeta +import "knative.dev/pkg/kmap" + // CopyMap makes a copy of the map. -func CopyMap(a map[string]string) map[string]string { - ret := make(map[string]string, len(a)) - for k, v := range a { - ret[k] = v - } - return ret -} +// Deprecated: use kmap.Copy +var CopyMap = kmap.Copy // UnionMaps returns a map constructed from the union of input maps. // where values from latter maps win. -func UnionMaps(maps ...map[string]string) map[string]string { - if len(maps) == 0 { - return map[string]string{} - } - out := make(map[string]string, len(maps[0])) - - for _, m := range maps { - for k, v := range m { - out[k] = v - } - } - return out -} +// Deprecated: use kmap.Union +var UnionMaps = kmap.Union // FilterMap creates a copy of the provided map, filtering out the elements // that match `filter`. // nil `filter` is accepted. -func FilterMap(in map[string]string, filter func(string) bool) map[string]string { - ret := make(map[string]string, len(in)) - for k, v := range in { - if filter != nil && filter(k) { - continue - } - ret[k] = v - } - return ret -} +// Deprecated: use kmap.Filter +var FilterMap = kmap.Filter diff --git a/vendor/modules.txt b/vendor/modules.txt index ea3ccb21..32197e36 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -611,7 +611,7 @@ k8s.io/utils/trace # knative.dev/hack v0.0.0-20211117134436-69a2295d54ce ## explicit knative.dev/hack -# knative.dev/pkg v0.0.0-20211117215328-5708c4c44232 +# knative.dev/pkg v0.0.0-20211120133512-d016976f2567 ## explicit knative.dev/pkg/apis knative.dev/pkg/apis/duck @@ -630,6 +630,7 @@ knative.dev/pkg/hack knative.dev/pkg/hash knative.dev/pkg/injection knative.dev/pkg/injection/clients/dynamicclient +knative.dev/pkg/kmap knative.dev/pkg/kmeta knative.dev/pkg/kmp knative.dev/pkg/leaderelection