diff --git a/diff/diff.go b/diff/diff.go index fcb16752..1a6d6bc6 100644 --- a/diff/diff.go +++ b/diff/diff.go @@ -138,11 +138,15 @@ func doSuppress(report Report, suppressedOutputLineRegex []string) (Report, erro } } - if containsDiff { - filteredReport.addEntry(entry.key, entry.suppressedKinds, entry.kind, entry.context, diffs, entry.changeType) - } else { - filteredReport.addEntry(entry.key, entry.suppressedKinds, entry.kind, entry.context, []difflib.DiffRecord{}, entry.changeType) + diffRecords := []difflib.DiffRecord{} + switch { + case containsDiff: + diffRecords = diffs + case entry.changeType == "MODIFY": + entry.changeType = "MODIFY_SUPPRESSED" } + + filteredReport.addEntry(entry.key, entry.suppressedKinds, entry.kind, entry.context, diffRecords, entry.changeType) } return filteredReport, nil diff --git a/diff/diff_test.go b/diff/diff_test.go index 65b1c35d..f2c832e7 100644 --- a/diff/diff_test.go +++ b/diff/diff_test.go @@ -298,11 +298,30 @@ annotations: var buf1 bytes.Buffer diffOptions := Options{"diff", 10, false, true, []string{}, 0.0, []string{"apiVersion"}} - if changesSeen := Manifests(specBeta, specRelease, &diffOptions, &buf1); !changesSeen { + if changesSeen := Manifests(specBeta, specReleaseSpec, &diffOptions, &buf1); !changesSeen { t.Error("Unexpected return value from Manifests: Expected the return value to be `true` to indicate that it has seen any change(s), but was `false`") } require.Equal(t, `default, nginx, Deployment (apps) has changed: + + kind: Deployment + metadata: + name: nginx ++ spec: ++ replicas: 3 + +`, buf1.String()) + }) + + t.Run("OnChangeWithSuppressAll", func(t *testing.T) { + var buf1 bytes.Buffer + diffOptions := Options{"diff", 10, false, true, []string{}, 0.0, []string{"apiVersion"}} + + if changesSeen := Manifests(specBeta, specRelease, &diffOptions, &buf1); !changesSeen { + t.Error("Unexpected return value from Manifests: Expected the return value to be `true` to indicate that it has seen any change(s), but was `false`") + } + + require.Equal(t, `default, nginx, Deployment (apps) has changed, but diff is empty after suppression. `, buf1.String()) }) diff --git a/diff/report.go b/diff/report.go index 256a5c7d..d3f79f8d 100644 --- a/diff/report.go +++ b/diff/report.go @@ -144,12 +144,18 @@ func setupDiffReport(r *Report) { r.format.changestyles["REMOVE"] = ChangeStyle{color: "red", message: "has been removed:"} r.format.changestyles["MODIFY"] = ChangeStyle{color: "yellow", message: "has changed:"} r.format.changestyles["OWNERSHIP"] = ChangeStyle{color: "magenta", message: "changed ownership:"} + r.format.changestyles["MODIFY_SUPPRESSED"] = ChangeStyle{color: "blue+h", message: "has changed, but diff is empty after suppression."} } // print report for default output: diff func printDiffReport(r *Report, to io.Writer) { for _, entry := range r.entries { - _, _ = fmt.Fprintf(to, ansi.Color("%s %s", "yellow")+"\n", entry.key, r.format.changestyles[entry.changeType].message) + _, _ = fmt.Fprintf( + to, + ansi.Color("%s %s", r.format.changestyles[entry.changeType].color)+"\n", + entry.key, + r.format.changestyles[entry.changeType].message, + ) printDiffRecords(entry.suppressedKinds, entry.kind, entry.context, entry.diffs, to) } } @@ -162,15 +168,17 @@ func setupSimpleReport(r *Report) { r.format.changestyles["REMOVE"] = ChangeStyle{color: "red", message: "to be removed."} r.format.changestyles["MODIFY"] = ChangeStyle{color: "yellow", message: "to be changed."} r.format.changestyles["OWNERSHIP"] = ChangeStyle{color: "magenta", message: "to change ownership."} + r.format.changestyles["MODIFY_SUPPRESSED"] = ChangeStyle{color: "blue+h", message: "has changed, but diff is empty after suppression."} } // print report for simple output func printSimpleReport(r *Report, to io.Writer) { var summary = map[string]int{ - "ADD": 0, - "REMOVE": 0, - "MODIFY": 0, - "OWNERSHIP": 0, + "ADD": 0, + "REMOVE": 0, + "MODIFY": 0, + "OWNERSHIP": 0, + "MODIFY_SUPPRESSED": 0, } for _, entry := range r.entries { _, _ = fmt.Fprintf(to, ansi.Color("%s %s", r.format.changestyles[entry.changeType].color)+"\n", @@ -206,6 +214,7 @@ func setupJSONReport(r *Report) { r.format.changestyles["REMOVE"] = ChangeStyle{color: "red", message: ""} r.format.changestyles["MODIFY"] = ChangeStyle{color: "yellow", message: ""} r.format.changestyles["OWNERSHIP"] = ChangeStyle{color: "magenta", message: ""} + r.format.changestyles["MODIFY_SUPPRESSED"] = ChangeStyle{color: "blue+h", message: ""} } // setup report for template output @@ -237,6 +246,7 @@ func setupTemplateReport(r *Report) { r.format.changestyles["REMOVE"] = ChangeStyle{color: "red", message: ""} r.format.changestyles["MODIFY"] = ChangeStyle{color: "yellow", message: ""} r.format.changestyles["OWNERSHIP"] = ChangeStyle{color: "magenta", message: ""} + r.format.changestyles["MODIFY_SUPPRESSED"] = ChangeStyle{color: "blue+h", message: ""} } // report with template output will only have access to ReportTemplateSpec.