Bump sigs.k8s.io/structured-merge-diff to v3

This commit is contained in:
Antoine Pelisse
2020-03-05 13:09:50 -08:00
parent 7120abe698
commit df41fd932b
30 changed files with 92 additions and 50 deletions

View File

@@ -58,6 +58,37 @@ func (v versionedSet) Applied() bool {
// what version).
type ManagedFields map[string]VersionedSet
// Equals returns true if the two managedfields are the same, false
// otherwise.
func (lhs ManagedFields) Equals(rhs ManagedFields) bool {
if len(lhs) != len(rhs) {
return false
}
for manager, left := range lhs {
right, ok := rhs[manager]
if !ok {
return false
}
if left.APIVersion() != right.APIVersion() || left.Applied() != right.Applied() {
return false
}
if !left.Set().Equals(right.Set()) {
return false
}
}
return true
}
// Copy the list, this is mostly a shallow copy.
func (lhs ManagedFields) Copy() ManagedFields {
copy := ManagedFields{}
for manager, set := range lhs {
copy[manager] = set
}
return copy
}
// Difference returns a symmetric difference between two Managers. If a
// given user's entry has version X in lhs and version Y in rhs, then
// the return value for that user will be from rhs. If the difference for

View File

@@ -148,7 +148,8 @@ func (s *Updater) Update(liveObject, newObject *typed.TypedValue, version fieldp
// Apply should be called when Apply is run, given the current object as
// well as the configuration that is applied. This will merge the object
// and return it.
// and return it. If the object hasn't changed, nil is returned (the
// managers can still have changed though).
func (s *Updater) Apply(liveObject, configObject *typed.TypedValue, version fieldpath.APIVersion, managers fieldpath.ManagedFields, manager string, force bool) (*typed.TypedValue, fieldpath.ManagedFields, error) {
managers = shallowCopyManagers(managers)
var err error
@@ -178,10 +179,13 @@ func (s *Updater) Apply(liveObject, configObject *typed.TypedValue, version fiel
if err != nil {
return nil, fieldpath.ManagedFields{}, fmt.Errorf("failed to prune fields: %v", err)
}
managers, _, err = s.update(liveObject, newObject, version, managers, manager, force)
managers, compare, err := s.update(liveObject, newObject, version, managers, manager, force)
if err != nil {
return nil, fieldpath.ManagedFields{}, err
}
if compare.IsSame() {
newObject = nil
}
return newObject, managers, nil
}