Skip to content

Commit 0cb3320

Browse files
authored
Merge pull request #84 from apelisse/cache-comparison-result
Cache Comparison result rather than versioned objects
2 parents 15d366b + d122f6d commit 0cb3320

File tree

1 file changed

+14
-16
lines changed

1 file changed

+14
-16
lines changed

merge/update.go

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -36,45 +36,43 @@ type Updater struct {
3636
func (s *Updater) update(oldObject, newObject *typed.TypedValue, version fieldpath.APIVersion, managers fieldpath.ManagedFields, workflow string, force bool) (fieldpath.ManagedFields, error) {
3737
conflicts := fieldpath.ManagedFields{}
3838
removed := fieldpath.ManagedFields{}
39-
type Versioned struct {
40-
oldObject *typed.TypedValue
41-
newObject *typed.TypedValue
39+
compare, err := oldObject.Compare(newObject)
40+
if err != nil {
41+
return nil, fmt.Errorf("failed to compare objects: %v", err)
4242
}
43-
versions := map[fieldpath.APIVersion]Versioned{
44-
version: {
45-
oldObject: oldObject,
46-
newObject: newObject,
47-
},
43+
44+
versions := map[fieldpath.APIVersion]*typed.Comparison{
45+
version: compare,
4846
}
4947

5048
for manager, managerSet := range managers {
5149
if manager == workflow {
5250
continue
5351
}
54-
versioned, ok := versions[managerSet.APIVersion]
52+
compare, ok := versions[managerSet.APIVersion]
5553
if !ok {
5654
var err error
57-
versioned.oldObject, err = s.Converter.Convert(oldObject, managerSet.APIVersion)
55+
versionedOldObject, err := s.Converter.Convert(oldObject, managerSet.APIVersion)
5856
if err != nil {
5957
if s.Converter.IsMissingVersionError(err) {
6058
delete(managers, manager)
6159
continue
6260
}
6361
return nil, fmt.Errorf("failed to convert old object: %v", err)
6462
}
65-
versioned.newObject, err = s.Converter.Convert(newObject, managerSet.APIVersion)
63+
versionedNewObject, err := s.Converter.Convert(newObject, managerSet.APIVersion)
6664
if err != nil {
6765
if s.Converter.IsMissingVersionError(err) {
6866
delete(managers, manager)
6967
continue
7068
}
7169
return nil, fmt.Errorf("failed to convert new object: %v", err)
7270
}
73-
versions[managerSet.APIVersion] = versioned
74-
}
75-
compare, err := versioned.oldObject.Compare(versioned.newObject)
76-
if err != nil {
77-
return nil, fmt.Errorf("failed to compare objects: %v", err)
71+
compare, err = versionedOldObject.Compare(versionedNewObject)
72+
if err != nil {
73+
return nil, fmt.Errorf("failed to compare objects: %v", err)
74+
}
75+
versions[managerSet.APIVersion] = compare
7876
}
7977

8078
conflictSet := managerSet.Intersection(compare.Modified.Union(compare.Added))

0 commit comments

Comments
 (0)