Files
argo-cd/gitops-engine/pkg/utils/json/json.go
Leonardo Luz Almeida bcc0243f1e prepare repo for migration to ArgoCD repo
Signed-off-by: Leonardo Luz Almeida <leonardo_almeida@intuit.com>
2025-09-23 10:05:42 -04:00

55 lines
1.2 KiB
Go

package json
// https://github.com/ksonnet/ksonnet/blob/master/pkg/kubecfg/diff.go
func removeFields(config, live any) any {
switch c := config.(type) {
case map[string]any:
l, ok := live.(map[string]any)
if ok {
return RemoveMapFields(c, l)
}
return live
case []any:
l, ok := live.([]any)
if ok {
return RemoveListFields(c, l)
}
return live
default:
return live
}
}
// RemoveMapFields remove all non-existent fields in the live that don't exist in the config
func RemoveMapFields(config, live map[string]any) map[string]any {
result := map[string]any{}
for k, v1 := range config {
v2, ok := live[k]
if !ok {
continue
}
if v2 != nil {
v2 = removeFields(v1, v2)
}
result[k] = v2
}
return result
}
func RemoveListFields(config, live []any) []any {
// If live is longer than config, then the extra elements at the end of the
// list will be returned as-is so they appear in the diff.
result := make([]any, 0, len(live))
for i, v2 := range live {
if len(config) > i {
if v2 != nil {
v2 = removeFields(config[i], v2)
}
result = append(result, v2)
} else {
result = append(result, v2)
}
}
return result
}