mirror of
https://github.com/argoproj/argo-cd.git
synced 2026-03-06 16:38:46 +01:00
55 lines
1.2 KiB
Go
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
|
|
}
|