@@ -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 {
0 commit comments