mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-10-09 00:26:58 +00:00
Bump SMD to v4.1.0
This commit is contained in:
48
vendor/sigs.k8s.io/structured-merge-diff/v4/fieldpath/set.go
generated
vendored
48
vendor/sigs.k8s.io/structured-merge-diff/v4/fieldpath/set.go
generated
vendored
@@ -206,6 +206,40 @@ func (s *Set) WithPrefix(pe PathElement) *Set {
|
||||
return subset
|
||||
}
|
||||
|
||||
// Leaves returns a set containing only the leaf paths
|
||||
// of a set.
|
||||
func (s *Set) Leaves() *Set {
|
||||
leaves := PathElementSet{}
|
||||
im := 0
|
||||
ic := 0
|
||||
|
||||
// any members that are not also children are leaves
|
||||
outer:
|
||||
for im < len(s.Members.members) {
|
||||
member := s.Members.members[im]
|
||||
|
||||
for ic < len(s.Children.members) {
|
||||
d := member.Compare(s.Children.members[ic].pathElement)
|
||||
if d == 0 {
|
||||
ic++
|
||||
im++
|
||||
continue outer
|
||||
} else if d < 0 {
|
||||
break
|
||||
} else /* if d > 0 */ {
|
||||
ic++
|
||||
}
|
||||
}
|
||||
leaves.members = append(leaves.members, member)
|
||||
im++
|
||||
}
|
||||
|
||||
return &Set{
|
||||
Members: leaves,
|
||||
Children: *s.Children.Leaves(),
|
||||
}
|
||||
}
|
||||
|
||||
// setNode is a pair of PathElement / Set, for the purpose of expressing
|
||||
// nested set membership.
|
||||
type setNode struct {
|
||||
@@ -455,3 +489,17 @@ func (s *SetNodeMap) iteratePrefix(prefix Path, f func(Path)) {
|
||||
n.set.iteratePrefix(append(prefix, pe), f)
|
||||
}
|
||||
}
|
||||
|
||||
// Leaves returns a SetNodeMap containing
|
||||
// only setNodes with leaf PathElements.
|
||||
func (s *SetNodeMap) Leaves() *SetNodeMap {
|
||||
out := &SetNodeMap{}
|
||||
out.members = make(sortedSetNode, len(s.members))
|
||||
for i, n := range s.members {
|
||||
out.members[i] = setNode{
|
||||
pathElement: n.pathElement,
|
||||
set: n.set.Leaves(),
|
||||
}
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
54
vendor/sigs.k8s.io/structured-merge-diff/v4/typed/remove.go
generated
vendored
54
vendor/sigs.k8s.io/structured-merge-diff/v4/typed/remove.go
generated
vendored
@@ -20,19 +20,26 @@ import (
|
||||
)
|
||||
|
||||
type removingWalker struct {
|
||||
value value.Value
|
||||
out interface{}
|
||||
schema *schema.Schema
|
||||
toRemove *fieldpath.Set
|
||||
allocator value.Allocator
|
||||
value value.Value
|
||||
out interface{}
|
||||
schema *schema.Schema
|
||||
toRemove *fieldpath.Set
|
||||
allocator value.Allocator
|
||||
shouldExtract bool
|
||||
}
|
||||
|
||||
func removeItemsWithSchema(val value.Value, toRemove *fieldpath.Set, schema *schema.Schema, typeRef schema.TypeRef) value.Value {
|
||||
// removeItemsWithSchema will walk the given value and look for items from the toRemove set.
|
||||
// Depending on whether shouldExtract is set true or false, it will return a modified version
|
||||
// of the input value with either:
|
||||
// 1. only the items in the toRemove set (when shouldExtract is true) or
|
||||
// 2. the items from the toRemove set removed from the value (when shouldExtract is false).
|
||||
func removeItemsWithSchema(val value.Value, toRemove *fieldpath.Set, schema *schema.Schema, typeRef schema.TypeRef, shouldExtract bool) value.Value {
|
||||
w := &removingWalker{
|
||||
value: val,
|
||||
schema: schema,
|
||||
toRemove: toRemove,
|
||||
allocator: value.NewFreelistAllocator(),
|
||||
value: val,
|
||||
schema: schema,
|
||||
toRemove: toRemove,
|
||||
allocator: value.NewFreelistAllocator(),
|
||||
shouldExtract: shouldExtract,
|
||||
}
|
||||
resolveSchema(schema, typeRef, val, w)
|
||||
return value.NewValueInterface(w.out)
|
||||
@@ -59,11 +66,22 @@ func (w *removingWalker) doList(t *schema.List) (errs ValidationErrors) {
|
||||
// Ignore error because we have already validated this list
|
||||
pe, _ := listItemToPathElement(w.allocator, w.schema, t, i, item)
|
||||
path, _ := fieldpath.MakePath(pe)
|
||||
// save items on the path when we shouldExtract
|
||||
// but ignore them when we are removing (i.e. !w.shouldExtract)
|
||||
if w.toRemove.Has(path) {
|
||||
continue
|
||||
if w.shouldExtract {
|
||||
newItems = append(newItems, item.Unstructured())
|
||||
} else {
|
||||
continue
|
||||
}
|
||||
}
|
||||
if subset := w.toRemove.WithPrefix(pe); !subset.Empty() {
|
||||
item = removeItemsWithSchema(item, subset, w.schema, t.ElementType)
|
||||
item = removeItemsWithSchema(item, subset, w.schema, t.ElementType, w.shouldExtract)
|
||||
} else {
|
||||
// don't save items not on the path when we shouldExtract.
|
||||
if w.shouldExtract {
|
||||
continue
|
||||
}
|
||||
}
|
||||
newItems = append(newItems, item.Unstructured())
|
||||
}
|
||||
@@ -96,11 +114,21 @@ func (w *removingWalker) doMap(t *schema.Map) ValidationErrors {
|
||||
if ft, ok := fieldTypes[k]; ok {
|
||||
fieldType = ft
|
||||
}
|
||||
// save values on the path when we shouldExtract
|
||||
// but ignore them when we are removing (i.e. !w.shouldExtract)
|
||||
if w.toRemove.Has(path) {
|
||||
if w.shouldExtract {
|
||||
newMap[k] = val.Unstructured()
|
||||
}
|
||||
return true
|
||||
}
|
||||
if subset := w.toRemove.WithPrefix(pe); !subset.Empty() {
|
||||
val = removeItemsWithSchema(val, subset, w.schema, fieldType)
|
||||
val = removeItemsWithSchema(val, subset, w.schema, fieldType, w.shouldExtract)
|
||||
} else {
|
||||
// don't save values not on the path when we shouldExtract.
|
||||
if w.shouldExtract {
|
||||
return true
|
||||
}
|
||||
}
|
||||
newMap[k] = val.Unstructured()
|
||||
return true
|
||||
|
8
vendor/sigs.k8s.io/structured-merge-diff/v4/typed/typed.go
generated
vendored
8
vendor/sigs.k8s.io/structured-merge-diff/v4/typed/typed.go
generated
vendored
@@ -150,7 +150,13 @@ func (tv TypedValue) Compare(rhs *TypedValue) (c *Comparison, err error) {
|
||||
|
||||
// RemoveItems removes each provided list or map item from the value.
|
||||
func (tv TypedValue) RemoveItems(items *fieldpath.Set) *TypedValue {
|
||||
tv.value = removeItemsWithSchema(tv.value, items, tv.schema, tv.typeRef)
|
||||
tv.value = removeItemsWithSchema(tv.value, items, tv.schema, tv.typeRef, false)
|
||||
return &tv
|
||||
}
|
||||
|
||||
// ExtractItems returns a value with only the provided list or map items extracted from the value.
|
||||
func (tv TypedValue) ExtractItems(items *fieldpath.Set) *TypedValue {
|
||||
tv.value = removeItemsWithSchema(tv.value, items, tv.schema, tv.typeRef, true)
|
||||
return &tv
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user