Skip to content

Commit f055e5d

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

File tree

2 files changed

+38
-5
lines changed

2 files changed

+38
-5
lines changed

merge/update.go

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,12 @@ 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)
83+
8484
versions[managerSet.APIVersion()] = compare
8585
}
8686

87+
compare.Remove(ignored)
88+
8789
conflictSet := managerSet.Set().Intersection(compare.Modified.Union(compare.Added))
8890
if !conflictSet.Empty() {
8991
conflicts[manager] = fieldpath.NewVersionedSet(conflictSet, managerSet.APIVersion(), false)
@@ -136,8 +138,11 @@ func (s *Updater) Update(liveObject, newObject *typed.TypedValue, version fieldp
136138
if _, ok := managers[manager]; !ok {
137139
managers[manager] = fieldpath.NewVersionedSet(fieldpath.NewSet(), version, false)
138140
}
141+
if ignored == nil {
142+
ignored = fieldpath.NewSet()
143+
}
139144
managers[manager] = fieldpath.NewVersionedSet(
140-
managers[manager].Set().Union(compare.Modified).Union(compare.Added).Difference(compare.Removed),
145+
managers[manager].Set().Union(compare.Modified).Union(compare.Added).Difference(compare.Removed).RecursiveDifference(ignored),
141146
version,
142147
false,
143148
)
@@ -172,12 +177,16 @@ func (s *Updater) Apply(liveObject, configObject *typed.TypedValue, version fiel
172177
}
173178
lastSet := managers[manager]
174179
set, err := configObject.ToFieldSet()
175-
if ignored != nil {
176-
set = set.RecursiveDifference(ignored)
177-
}
178180
if err != nil {
179181
return nil, fieldpath.ManagedFields{}, fmt.Errorf("failed to get field set: %v", err)
180182
}
183+
if ignored != nil {
184+
set = set.RecursiveDifference(ignored)
185+
// TODO: is this correct. If we don't remove from lastSet pruning might remove the fields?
186+
if lastSet != nil {
187+
lastSet.Set().RecursiveDifference(ignored)
188+
}
189+
}
181190
managers[manager] = fieldpath.NewVersionedSet(set, version, true)
182191
newObject, err = s.prune(newObject, managers, manager, lastSet)
183192
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)