in operatortrace-go/pkg/predicates/ignore_trace_annotation_update.go [63:79]
func hasSpecOrStatusOrDataChanged(oldObj, newObj runtime.Object) bool {
oldUnstructured := objToUnstructured(oldObj)
newUnstructured := objToUnstructured(newObj)
// Replace empty structs or slices with nil
replaceEmptyStructsAndSlicesWithNil(oldUnstructured)
replaceEmptyStructsAndSlicesWithNil(newUnstructured)
oldStatus := getFieldExcludingObservedGeneration(oldUnstructured, "status")
newStatus := getFieldExcludingObservedGeneration(newUnstructured, "status")
specChanged := hasFieldChanged(oldUnstructured, newUnstructured, "spec")
statusChanged := !equality.Semantic.DeepEqual(oldStatus, newStatus)
dataChanged := hasFieldChanged(oldUnstructured, newUnstructured, "data")
return specChanged || statusChanged || dataChanged
}