Skip to content

Commit f1d2e49

Browse files
committed
Apply feedback
1 parent 90b911a commit f1d2e49

File tree

2 files changed

+43
-43
lines changed

2 files changed

+43
-43
lines changed

merge/update.go

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -155,35 +155,6 @@ func (s *Updater) Update(liveObject, newObject *typed.TypedValue, version fieldp
155155
return newObject, managers, nil
156156
}
157157

158-
// reconcileManagedFieldsWithSchemaChanges reconciles the managed fields with any changes to the
159-
// object's schema since the managed fields were written.
160-
//
161-
// Supports:
162-
// - changing types from atomic to granular
163-
// - changing types from granular to atomic
164-
func (s *Updater) reconcileManagedFieldsWithSchemaChanges(liveObject *typed.TypedValue, managers fieldpath.ManagedFields) (fieldpath.ManagedFields, error) {
165-
result := fieldpath.ManagedFields{}
166-
for manager, versionedSet := range managers {
167-
tv, err := s.Converter.Convert(liveObject, versionedSet.APIVersion())
168-
if s.Converter.IsMissingVersionError(err) { // okay to skip, obsolete versions will be deleted automatically anyway
169-
continue
170-
}
171-
if err != nil {
172-
return nil, err
173-
}
174-
reconciled, err := typed.ReconcileFieldSetWithSchema(versionedSet.Set(), tv)
175-
if err != nil {
176-
return nil, err
177-
}
178-
if reconciled != nil {
179-
result[manager] = fieldpath.NewVersionedSet(reconciled, versionedSet.APIVersion(), versionedSet.Applied())
180-
} else {
181-
result[manager] = versionedSet
182-
}
183-
}
184-
return result, nil
185-
}
186-
187158
// Apply should be called when Apply is run, given the current object as
188159
// well as the configuration that is applied. This will merge the object
189160
// and return it. If the object hasn't changed, nil is returned (the
@@ -327,3 +298,32 @@ func (s *Updater) addBackDanglingItems(merged, pruned *typed.TypedValue, lastSet
327298
}
328299
return merged.RemoveItems(mergedSet.Difference(prunedSet).Intersection(lastSet.Set())), nil
329300
}
301+
302+
// reconcileManagedFieldsWithSchemaChanges reconciles the managed fields with any changes to the
303+
// object's schema since the managed fields were written.
304+
//
305+
// Supports:
306+
// - changing types from atomic to granular
307+
// - changing types from granular to atomic
308+
func (s *Updater) reconcileManagedFieldsWithSchemaChanges(liveObject *typed.TypedValue, managers fieldpath.ManagedFields) (fieldpath.ManagedFields, error) {
309+
result := fieldpath.ManagedFields{}
310+
for manager, versionedSet := range managers {
311+
tv, err := s.Converter.Convert(liveObject, versionedSet.APIVersion())
312+
if s.Converter.IsMissingVersionError(err) { // okay to skip, obsolete versions will be deleted automatically anyway
313+
continue
314+
}
315+
if err != nil {
316+
return nil, err
317+
}
318+
reconciled, err := typed.ReconcileFieldSetWithSchema(versionedSet.Set(), tv)
319+
if err != nil {
320+
return nil, err
321+
}
322+
if reconciled != nil {
323+
result[manager] = fieldpath.NewVersionedSet(reconciled, versionedSet.APIVersion(), versionedSet.Applied())
324+
} else {
325+
result[manager] = versionedSet
326+
}
327+
}
328+
return result, nil
329+
}

typed/reconcile_schema.go

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ func (v *reconcileWithSchemaWalker) visitListItems(t *schema.List, element *fiel
183183
element.Members.Iterate(func(pe fieldpath.PathElement) {
184184
handleElement(pe, true)
185185
})
186-
return nil
186+
return errs
187187
}
188188

189189
func (v *reconcileWithSchemaWalker) doList(t *schema.List) (errs ValidationErrors) {
@@ -227,7 +227,7 @@ func (v *reconcileWithSchemaWalker) visitMapItems(t *schema.Map, element *fieldp
227227
handleElement(pe, true)
228228
})
229229

230-
return nil
230+
return errs
231231
}
232232

233233
func (v *reconcileWithSchemaWalker) doMap(t *schema.Map) (errs ValidationErrors) {
@@ -253,26 +253,19 @@ func (v *reconcileWithSchemaWalker) doMap(t *schema.Map) (errs ValidationErrors)
253253
}
254254

255255
func buildGranularFieldSet(path fieldpath.Path, value *TypedValue) (*fieldpath.Set, ValidationErrors) {
256-
result := fieldpath.NewSet(path)
256+
257257
valueFieldSet, err := value.ToFieldSet()
258258
if err != nil {
259259
return nil, errorf("toFieldSet: %v", err)
260260
}
261-
if listValueFieldSet, ok := fieldSetAtPath(valueFieldSet, path); ok {
262-
valueFieldSet = prefixWithPath(path, listValueFieldSet)
263-
result = result.Union(valueFieldSet)
261+
result := fieldpath.NewSet()
262+
resultAtPath := descendToPath(result, path)
263+
if valueFieldSetAtPath, ok := fieldSetAtPath(valueFieldSet, path); ok {
264+
*resultAtPath = *valueFieldSetAtPath
264265
}
265266
return result, nil
266267
}
267268

268-
func prefixWithPath(prefix fieldpath.Path, set *fieldpath.Set) *fieldpath.Set {
269-
result := fieldpath.NewSet()
270-
set.Iterate(func(path fieldpath.Path) {
271-
result.Insert(append(prefix.Copy(), path...))
272-
})
273-
return result
274-
}
275-
276269
func fieldSetAtPath(node *fieldpath.Set, path fieldpath.Path) (*fieldpath.Set, bool) {
277270
ok := true
278271
for _, pe := range path {
@@ -283,6 +276,13 @@ func fieldSetAtPath(node *fieldpath.Set, path fieldpath.Path) (*fieldpath.Set, b
283276
return node, ok
284277
}
285278

279+
func descendToPath(node *fieldpath.Set, path fieldpath.Path) *fieldpath.Set {
280+
for _, pe := range path {
281+
node = node.Children.Descend(pe)
282+
}
283+
return node
284+
}
285+
286286
func typeRefAtPath(t *schema.Map, pe fieldpath.PathElement) (tr schema.TypeRef, errs ValidationErrors) {
287287
tr = t.ElementType
288288
if pe.FieldName != nil {

0 commit comments

Comments
 (0)