diff --git a/internal/cmd/between.go b/internal/cmd/between.go index b1beb38..5c97e42 100644 --- a/internal/cmd/between.go +++ b/internal/cmd/between.go @@ -89,6 +89,7 @@ types are: YAML (http://yaml.org/) and JSON (http://json.org/). dyff.IgnoreWhitespaceChanges(reportOptions.ignoreWhitespaceChanges), dyff.KubernetesEntityDetection(reportOptions.kubernetesEntityDetection), dyff.AdditionalIdentifiers(reportOptions.additionalIdentifiers...), + dyff.DetectRenames(reportOptions.detectRenames), ) if err != nil { diff --git a/internal/cmd/common.go b/internal/cmd/common.go index 26563d8..85b5f89 100644 --- a/internal/cmd/common.go +++ b/internal/cmd/common.go @@ -48,6 +48,7 @@ type reportConfig struct { omitHeader bool useGoPatchPaths bool ignoreValueChanges bool + detectRenames bool minorChangeThreshold float64 multilineContextLines int additionalIdentifiers []string @@ -67,6 +68,8 @@ var defaults = reportConfig{ exitWithCode: false, omitHeader: false, useGoPatchPaths: false, + ignoreValueChanges: false, + detectRenames: true, minorChangeThreshold: 0.1, multilineContextLines: 4, additionalIdentifiers: nil, @@ -88,7 +91,9 @@ func applyReportOptionsFlags(cmd *cobra.Command) { cmd.Flags().StringSliceVar(&reportOptions.excludes, "exclude", defaults.excludes, "exclude reports from a set of differences based on supplied arguments") cmd.Flags().StringSliceVar(&reportOptions.filterRegexps, "filter-regexp", defaults.filterRegexps, "filter reports to a subset of differences based on supplied regular expressions") cmd.Flags().StringSliceVar(&reportOptions.excludeRegexps, "exclude-regexp", defaults.excludeRegexps, "exclude reports from a set of differences based on supplied regular expressions") - cmd.Flags().BoolVarP(&reportOptions.ignoreValueChanges, "ignore-value-changes", "v", false, "exclude changes in values") + cmd.Flags().BoolVarP(&reportOptions.ignoreValueChanges, "ignore-value-changes", "v", defaults.ignoreValueChanges, "exclude changes in values") + cmd.Flags().BoolVar(&reportOptions.detectRenames, "detect-renames", defaults.detectRenames, "enable detection for renames (document level for Kubernetes resources)") + // Main output preferences cmd.Flags().StringVarP(&reportOptions.style, "output", "o", defaults.style, "specify the output style, supported styles: human, brief, github, gitlab, gitea") cmd.Flags().BoolVarP(&reportOptions.omitHeader, "omit-header", "b", defaults.omitHeader, "omit the dyff summary header") diff --git a/pkg/dyff/core.go b/pkg/dyff/core.go index fab0bec..55d10b4 100644 --- a/pkg/dyff/core.go +++ b/pkg/dyff/core.go @@ -42,6 +42,7 @@ type compareSettings struct { IgnoreOrderChanges bool IgnoreWhitespaceChanges bool KubernetesEntityDetection bool + DetectRenames bool AdditionalIdentifiers []string } @@ -88,6 +89,13 @@ func KubernetesEntityDetection(value bool) CompareOption { } } +// DetectRenames enabled detection of renames so that it correlates two entries based on their identifier field +func DetectRenames(value bool) CompareOption { + return func(settings *compareSettings) { + settings.DetectRenames = value + } +} + // CompareInputFiles is one of the convenience main entry points for comparing // objects. In this case the representation of an input file, which might // contain multiple documents. It returns a report with the list of differences. @@ -339,8 +347,10 @@ func (compare *compare) documentNodes(from, to ytbx.InputFile) ([]Diff, error) { }), ) - if err := idem.DetectRenames(changes, nil); err != nil { - return nil, err + if compare.settings.DetectRenames { + if err := idem.DetectRenames(changes, nil); err != nil { + return nil, err + } } // Push rename detection results diff --git a/pkg/dyff/output_human_test.go b/pkg/dyff/output_human_test.go index e8def1e..abc0467 100644 --- a/pkg/dyff/output_human_test.go +++ b/pkg/dyff/output_human_test.go @@ -147,6 +147,7 @@ input: |+ assets("kubernetes/rename/to.yaml"), assets("kubernetes/rename/expected-dyff.human"), false, + dyff.DetectRenames(true), ) }) })