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