Skip to content

Commit eccbede

Browse files
author
Kevin Wiesmueller
committed
fix update and apply
1 parent fd0df01 commit eccbede

File tree

2 files changed

+37
-5
lines changed

2 files changed

+37
-5
lines changed

merge/update.go

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,11 @@ func (s *Updater) update(oldObject, newObject *typed.TypedValue, version fieldpa
8080
if err != nil {
8181
return nil, nil, fmt.Errorf("failed to compare objects: %v", err)
8282
}
83-
compare.Remove(ignored)
8483
versions[managerSet.APIVersion()] = compare
8584
}
8685

86+
compare.Remove(ignored)
87+
8788
conflictSet := managerSet.Set().Intersection(compare.Modified.Union(compare.Added))
8889
if !conflictSet.Empty() {
8990
conflicts[manager] = fieldpath.NewVersionedSet(conflictSet, managerSet.APIVersion(), false)
@@ -136,8 +137,11 @@ func (s *Updater) Update(liveObject, newObject *typed.TypedValue, version fieldp
136137
if _, ok := managers[manager]; !ok {
137138
managers[manager] = fieldpath.NewVersionedSet(fieldpath.NewSet(), version, false)
138139
}
140+
if ignored == nil {
141+
ignored = fieldpath.NewSet()
142+
}
139143
managers[manager] = fieldpath.NewVersionedSet(
140-
managers[manager].Set().Union(compare.Modified).Union(compare.Added).Difference(compare.Removed),
144+
managers[manager].Set().Union(compare.Modified).Union(compare.Added).Difference(compare.Removed).RecursiveDifference(ignored),
141145
version,
142146
false,
143147
)
@@ -172,12 +176,16 @@ func (s *Updater) Apply(liveObject, configObject *typed.TypedValue, version fiel
172176
}
173177
lastSet := managers[manager]
174178
set, err := configObject.ToFieldSet()
175-
if ignored != nil {
176-
set = set.RecursiveDifference(ignored)
177-
}
178179
if err != nil {
179180
return nil, fieldpath.ManagedFields{}, fmt.Errorf("failed to get field set: %v", err)
180181
}
182+
if ignored != nil {
183+
set = set.RecursiveDifference(ignored)
184+
// TODO: is this correct. If we don't remove from lastSet pruning might remove the fields?
185+
if lastSet != nil {
186+
lastSet.Set().RecursiveDifference(ignored)
187+
}
188+
}
181189
managers[manager] = fieldpath.NewVersionedSet(set, version, true)
182190
newObject, err = s.prune(newObject, managers, manager, lastSet)
183191
if err != nil {

typed/comparison_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,30 @@ func TestComparisonRemove(t *testing.T) {
146146
Removed: fieldpath.NewSet(),
147147
},
148148
},
149+
{
150+
name: "removes simple path",
151+
Comparison: &typed.Comparison{
152+
Added: fieldpath.NewSet(
153+
fieldpath.MakePathOrDie("a"),
154+
),
155+
Modified: fieldpath.NewSet(
156+
fieldpath.MakePathOrDie("b"),
157+
),
158+
Removed: fieldpath.NewSet(
159+
fieldpath.MakePathOrDie("c"),
160+
),
161+
},
162+
Remove: fieldpath.NewSet(
163+
fieldpath.MakePathOrDie("a"),
164+
fieldpath.MakePathOrDie("b"),
165+
fieldpath.MakePathOrDie("c"),
166+
),
167+
Expect: &typed.Comparison{
168+
Added: fieldpath.NewSet(),
169+
Modified: fieldpath.NewSet(),
170+
Removed: fieldpath.NewSet(),
171+
},
172+
},
149173
}
150174

151175
for _, c := range cases {

0 commit comments

Comments
 (0)