can now also merge resources and do a symmetric diff.
This commit is contained in:
parent
f52507aa8f
commit
56844a3c24
@ -4,19 +4,50 @@ import (
|
||||
"github.com/goccy/go-yaml"
|
||||
"github.com/spf13/cobra"
|
||||
"os"
|
||||
"reflect"
|
||||
)
|
||||
|
||||
type MyMap yaml.MapSlice
|
||||
|
||||
func (m *MyMap) Set(key any, value any) {
|
||||
for i := range len(*m) {
|
||||
if (*m)[i].Key == key {
|
||||
(*m)[i].Value = value
|
||||
return
|
||||
}
|
||||
}
|
||||
*m = append(*m, yaml.MapItem{Key: key, Value: value})
|
||||
}
|
||||
|
||||
func (m MyMap) Get(key any) any {
|
||||
for _, item := range m {
|
||||
if item.Key == key {
|
||||
return item.Value
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func mergeMap(yaml1 yaml.MapSlice, yaml2 yaml.MapSlice) yaml.MapSlice {
|
||||
res := yaml1
|
||||
res := MyMap(yaml1)
|
||||
|
||||
//for key, item := range yaml2 {
|
||||
// switch {
|
||||
// case res.ToMap()[key] != nil && type
|
||||
//
|
||||
// }
|
||||
//}
|
||||
|
||||
return res
|
||||
for _, item := range yaml2 {
|
||||
initialValue := res.Get(item.Key)
|
||||
value := item.Value
|
||||
switch {
|
||||
case initialValue != nil:
|
||||
if reflect.TypeOf(initialValue) == reflect.TypeOf(yaml.MapSlice{}) &&
|
||||
reflect.TypeOf(value) == reflect.TypeOf(yaml.MapSlice{}) {
|
||||
mergedMap := mergeMap(initialValue.(yaml.MapSlice), value.(yaml.MapSlice))
|
||||
res.Set(item.Key, mergedMap)
|
||||
} else {
|
||||
res.Set(item.Key, item.Value)
|
||||
}
|
||||
default:
|
||||
res.Set(item.Key, item.Value)
|
||||
}
|
||||
}
|
||||
return yaml.MapSlice(res)
|
||||
}
|
||||
|
||||
func merge(cmd *cobra.Command, args []string) error {
|
||||
|
@ -57,7 +57,7 @@ Shows the additions and modifications in <file2> compared to <file1>`,
|
||||
}
|
||||
cmd.AddCommand(merge)
|
||||
|
||||
cmd.PersistentFlags().IntVarP(&VERBOSITY, "array-output-level",
|
||||
diff.PersistentFlags().IntVarP(&VERBOSITY, "array-output-level",
|
||||
"v", 3, `Array output level: ,
|
||||
0: no output, only exit status,
|
||||
1: only show changed/added values,
|
||||
|
Loading…
Reference in New Issue
Block a user