in pkg/dubboctl/internal/kube/object.go [169:224]
func CompareObjects(objsA, objsB Objects) (string, string, string) {
var diffRes strings.Builder
var addRes strings.Builder
var errRes strings.Builder
sep := "\n------\n"
mapA, keysA := objsA.SortMap()
mapB, keysB := objsB.SortMap()
for _, hashA := range keysA {
objA := mapA[hashA]
if objB, ok := mapB[hashA]; ok {
diff, err := util.DiffYAML(objA.YAML(), objB.YAML())
if err != nil {
errRes.WriteString(fmt.Sprintf("%s%s parse failed, err:\n%s", hashPrompt, hashA, err))
errRes.WriteString(sep)
continue
}
if diff != "" {
diffRes.WriteString(fmt.Sprintf("%s%s diff:\n", hashPrompt, hashA))
diffRes.WriteString(diff)
diffRes.WriteString(sep)
}
} else {
add, err := util.DiffYAML(objA.YAML(), "")
if err != nil {
errRes.WriteString(fmt.Sprintf("%s%s in previous section parse failed, err:\n%s", hashPrompt, hashA, err))
errRes.WriteString(sep)
continue
}
if add != "" {
addRes.WriteString(fmt.Sprintf("%s%s in previous addition:\n", hashPrompt, hashA))
addRes.WriteString(add)
addRes.WriteString(sep)
}
}
}
for _, hashB := range keysB {
objB := mapB[hashB]
if _, ok := mapA[hashB]; !ok {
add, err := util.DiffYAML(objB.YAML(), "")
if err != nil {
errRes.WriteString(fmt.Sprintf("%s%s in next section parse failed, err:\n%s", hashPrompt, hashB, err))
errRes.WriteString(sep)
continue
}
if add != "" {
addRes.WriteString(fmt.Sprintf("%s%s in next addition:\n", hashPrompt, hashB))
addRes.WriteString(add)
addRes.WriteString(sep)
}
}
}
return diffRes.String(), addRes.String(), errRes.String()
}