func CompareObjects()

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()
}