Skip to content

Commit

Permalink
refactor flags
Browse files Browse the repository at this point in the history
  • Loading branch information
Reuven committed Feb 3, 2024
1 parent c9b460d commit 85e052b
Show file tree
Hide file tree
Showing 11 changed files with 264 additions and 77 deletions.
23 changes: 2 additions & 21 deletions internal/breaking_changes.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ import (

"github.com/spf13/cobra"
"github.com/tufin/oasdiff/checker"
"github.com/tufin/oasdiff/checker/localizations"
"github.com/tufin/oasdiff/diff"
"github.com/tufin/oasdiff/formatters"
)

Expand All @@ -23,27 +21,10 @@ func getBreakingChangesCmd() *cobra.Command {
RunE: getRun(&flags, runBreakingChanges),
}

cmd.PersistentFlags().BoolVarP(&flags.composed, "composed", "c", false, "work in 'composed' mode, compare paths in all specs matching base and revision globs")
addCommonDiffFlags(&cmd, &flags)
addCommonBreakingFlags(&cmd, &flags)
enumWithOptions(&cmd, newEnumValue(formatters.SupportedFormatsByContentType(formatters.OutputBreaking), string(formatters.FormatText), &flags.format), "format", "f", "output format")
enumWithOptions(&cmd, newEnumSliceValue(diff.ExcludeDiffOptions, nil, &flags.excludeElements), "exclude-elements", "e", "comma-separated list of elements to exclude")
cmd.PersistentFlags().StringVarP(&flags.matchPath, "match-path", "p", "", "include only paths that match this regular expression")
cmd.PersistentFlags().StringVarP(&flags.filterExtension, "filter-extension", "", "", "exclude paths and operations with an OpenAPI Extension matching this regular expression")
cmd.PersistentFlags().IntVarP(&flags.circularReferenceCounter, "max-circular-dep", "", 5, "maximum allowed number of circular dependencies between objects in OpenAPI specs")
cmd.PersistentFlags().StringVarP(&flags.prefixBase, "prefix-base", "", "", "add this prefix to paths in base-spec before comparison")
cmd.PersistentFlags().StringVarP(&flags.prefixRevision, "prefix-revision", "", "", "add this prefix to paths in revised-spec before comparison")
cmd.PersistentFlags().StringVarP(&flags.stripPrefixBase, "strip-prefix-base", "", "", "strip this prefix from paths in base-spec before comparison")
cmd.PersistentFlags().StringVarP(&flags.stripPrefixRevision, "strip-prefix-revision", "", "", "strip this prefix from paths in revised-spec before comparison")
cmd.PersistentFlags().BoolVarP(&flags.includePathParams, "include-path-params", "", false, "include path parameter names in endpoint matching")
cmd.PersistentFlags().BoolVarP(&flags.flattenAllOf, "flatten", "", false, "merge subschemas under allOf before diff")
cmd.PersistentFlags().BoolVarP(&flags.flattenParams, "flatten-params", "", false, "merge path parameters with operation parameters")
enumWithOptions(&cmd, newEnumValue([]string{LevelErr, LevelWarn}, "", &flags.failOn), "fail-on", "o", "exit with return code 1 when output includes errors with this level or higher")
enumWithOptions(&cmd, newEnumValue(localizations.GetSupportedLanguages(), localizations.LangDefault, &flags.lang), "lang", "l", "language for localized output")
cmd.PersistentFlags().StringVarP(&flags.errIgnoreFile, "err-ignore", "", "", "configuration file for ignoring errors")
cmd.PersistentFlags().StringVarP(&flags.warnIgnoreFile, "warn-ignore", "", "", "configuration file for ignoring warnings")
cmd.PersistentFlags().VarP(newEnumSliceValue(checker.GetOptionalChecks(), nil, &flags.includeChecks), "include-checks", "i", "comma-separated list of optional checks (run 'oasdiff checks --required false' to see options)")
cmd.PersistentFlags().IntVarP(&flags.deprecationDaysBeta, "deprecation-days-beta", "", checker.BetaDeprecationDays, "min days required between deprecating a beta resource and removing it")
cmd.PersistentFlags().IntVarP(&flags.deprecationDaysStable, "deprecation-days-stable", "", checker.StableDeprecationDays, "min days required between deprecating a stable resource and removing it")
enumWithOptions(&cmd, newEnumValue([]string{"auto", "always", "never"}, "auto", &flags.color), "color", "", "when to colorize textual output")

return &cmd
}
Expand Down
23 changes: 2 additions & 21 deletions internal/changelog.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@ import (
"github.com/getkin/kin-openapi/openapi3"
"github.com/spf13/cobra"
"github.com/tufin/oasdiff/checker"
"github.com/tufin/oasdiff/checker/localizations"
"github.com/tufin/oasdiff/diff"
"github.com/tufin/oasdiff/formatters"
"github.com/tufin/oasdiff/load"
)
Expand All @@ -25,26 +23,9 @@ func getChangelogCmd() *cobra.Command {
RunE: getRun(&flags, runChangelog),
}

cmd.PersistentFlags().BoolVarP(&flags.composed, "composed", "c", false, "work in 'composed' mode, compare paths in all specs matching base and revision globs")
addCommonDiffFlags(&cmd, &flags)
addCommonBreakingFlags(&cmd, &flags)
enumWithOptions(&cmd, newEnumValue(formatters.SupportedFormatsByContentType(formatters.OutputChangelog), string(formatters.FormatText), &flags.format), "format", "f", "output format")
enumWithOptions(&cmd, newEnumSliceValue(diff.ExcludeDiffOptions, nil, &flags.excludeElements), "exclude-elements", "e", "comma-separated list of elements to exclude")
cmd.PersistentFlags().StringVarP(&flags.matchPath, "match-path", "p", "", "include only paths that match this regular expression")
cmd.PersistentFlags().StringVarP(&flags.filterExtension, "filter-extension", "", "", "exclude paths and operations with an OpenAPI Extension matching this regular expression")
cmd.PersistentFlags().IntVarP(&flags.circularReferenceCounter, "max-circular-dep", "", 5, "maximum allowed number of circular dependencies between objects in OpenAPI specs")
cmd.PersistentFlags().StringVarP(&flags.prefixBase, "prefix-base", "", "", "add this prefix to paths in base-spec before comparison")
cmd.PersistentFlags().StringVarP(&flags.prefixRevision, "prefix-revision", "", "", "add this prefix to paths in revised-spec before comparison")
cmd.PersistentFlags().StringVarP(&flags.stripPrefixBase, "strip-prefix-base", "", "", "strip this prefix from paths in base-spec before comparison")
cmd.PersistentFlags().StringVarP(&flags.stripPrefixRevision, "strip-prefix-revision", "", "", "strip this prefix from paths in revised-spec before comparison")
cmd.PersistentFlags().BoolVarP(&flags.includePathParams, "include-path-params", "", false, "include path parameter names in endpoint matching")
cmd.PersistentFlags().BoolVarP(&flags.flattenAllOf, "flatten", "", false, "merge subschemas under allOf before diff")
cmd.PersistentFlags().BoolVarP(&flags.flattenParams, "flatten-params", "", false, "merge path parameters with operation parameters")
enumWithOptions(&cmd, newEnumValue(localizations.GetSupportedLanguages(), localizations.LangDefault, &flags.lang), "lang", "l", "language for localized output")
cmd.PersistentFlags().StringVarP(&flags.errIgnoreFile, "err-ignore", "", "", "configuration file for ignoring errors")
cmd.PersistentFlags().StringVarP(&flags.warnIgnoreFile, "warn-ignore", "", "", "configuration file for ignoring warnings")
cmd.PersistentFlags().VarP(newEnumSliceValue(checker.GetOptionalChecks(), nil, &flags.includeChecks), "include-checks", "i", "comma-separated list of optional checks (run 'oasdiff checks --required false' to see options)")
cmd.PersistentFlags().IntVarP(&flags.deprecationDaysBeta, "deprecation-days-beta", "", checker.BetaDeprecationDays, "min days required between deprecating a beta resource and removing it")
cmd.PersistentFlags().IntVarP(&flags.deprecationDaysStable, "deprecation-days-stable", "", checker.StableDeprecationDays, "min days required between deprecating a stable resource and removing it")
enumWithOptions(&cmd, newEnumValue([]string{"auto", "always", "never"}, "auto", &flags.color), "color", "", "when to colorize textual output")

return &cmd
}
Expand Down
76 changes: 76 additions & 0 deletions internal/changelog_flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,3 +123,79 @@ func (flags *ChangelogFlags) setRevision(source *load.Source) {
func (flags *ChangelogFlags) addExcludeElements(element string) {
flags.excludeElements = append(flags.excludeElements, element)
}

func (flags *ChangelogFlags) refComposed() *bool {
return &flags.composed
}

func (flags *ChangelogFlags) refExcludeElements() *[]string {
return &flags.excludeElements
}

func (flags *ChangelogFlags) refMatchPath() *string {
return &flags.matchPath
}

func (flags *ChangelogFlags) refFilterExtension() *string {
return &flags.filterExtension
}

func (flags *ChangelogFlags) refCircularReferenceCounter() *int {
return &flags.circularReferenceCounter
}

func (flags *ChangelogFlags) refPrefixBase() *string {
return &flags.prefixBase
}

func (flags *ChangelogFlags) refPrefixRevision() *string {
return &flags.prefixRevision
}

func (flags *ChangelogFlags) refStripPrefixBase() *string {
return &flags.stripPrefixBase
}

func (flags *ChangelogFlags) refStripPrefixRevision() *string {
return &flags.stripPrefixRevision
}

func (flags *ChangelogFlags) refIncludePathParams() *bool {
return &flags.includePathParams
}

func (flags *ChangelogFlags) refFlattenAllOf() *bool {
return &flags.flattenAllOf
}

func (flags *ChangelogFlags) refFlattenParams() *bool {
return &flags.flattenParams
}

func (flags *ChangelogFlags) refLang() *string {
return &flags.lang
}

func (flags *ChangelogFlags) refErrIgnoreFile() *string {
return &flags.errIgnoreFile
}

func (flags *ChangelogFlags) refWarnIgnoreFile() *string {
return &flags.warnIgnoreFile
}

func (flags *ChangelogFlags) refIncludeChecks() *[]string {
return &flags.includeChecks
}

func (flags *ChangelogFlags) refDeprecationDaysBeta() *int {
return &flags.deprecationDaysBeta
}

func (flags *ChangelogFlags) refDeprecationDaysStable() *int {
return &flags.deprecationDaysStable
}

func (flags *ChangelogFlags) refColor() *string {
return &flags.color
}
36 changes: 36 additions & 0 deletions internal/cmd_flags.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package internal

import (
"github.com/spf13/cobra"
"github.com/tufin/oasdiff/checker"
"github.com/tufin/oasdiff/checker/localizations"
"github.com/tufin/oasdiff/diff"
)

func addCommonDiffFlags(cmd *cobra.Command, flags Flags) {
cmd.PersistentFlags().BoolVarP(flags.refComposed(), "composed", "c", false, "work in 'composed' mode, compare paths in all specs matching base and revision globs")
enumWithOptions(cmd, newEnumSliceValue(diff.ExcludeDiffOptions, nil, flags.refExcludeElements()), "exclude-elements", "e", "comma-separated list of elements to exclude")
cmd.PersistentFlags().StringVarP(flags.refMatchPath(), "match-path", "p", "", "include only paths that match this regular expression")
cmd.PersistentFlags().StringVarP(flags.refFilterExtension(), "filter-extension", "", "", "exclude paths and operations with an OpenAPI Extension matching this regular expression")
cmd.PersistentFlags().IntVarP(flags.refCircularReferenceCounter(), "max-circular-dep", "", 5, "maximum allowed number of circular dependencies between objects in OpenAPI specs")
cmd.PersistentFlags().StringVarP(flags.refPrefixBase(), "prefix-base", "", "", "add this prefix to paths in base-spec before comparison")
cmd.PersistentFlags().StringVarP(flags.refPrefixRevision(), "prefix-revision", "", "", "add this prefix to paths in revised-spec before comparison")
cmd.PersistentFlags().StringVarP(flags.refStripPrefixBase(), "strip-prefix-base", "", "", "strip this prefix from paths in base-spec before comparison")
cmd.PersistentFlags().StringVarP(flags.refStripPrefixRevision(), "strip-prefix-revision", "", "", "strip this prefix from paths in revised-spec before comparison")
cmd.PersistentFlags().BoolVarP(flags.refIncludePathParams(), "include-path-params", "", false, "include path parameter names in endpoint matching")

cmd.PersistentFlags().BoolVarP(flags.refFlattenAllOf(), "flatten", "", false, "merge subschemas under allOf before diff")
cmd.PersistentFlags().MarkDeprecated("flatten", "use flatten-allof instead")

Check failure on line 23 in internal/cmd_flags.go

View workflow job for this annotation

GitHub Actions / lint

Error return value of `(*github.com/spf13/pflag.FlagSet).MarkDeprecated` is not checked (errcheck)

Check failure on line 23 in internal/cmd_flags.go

View workflow job for this annotation

GitHub Actions / lint

Error return value of `(*github.com/spf13/pflag.FlagSet).MarkDeprecated` is not checked (errcheck)
cmd.PersistentFlags().BoolVarP(flags.refFlattenAllOf(), "flatten-allof", "", false, "merge subschemas under allOf before diff")
cmd.PersistentFlags().BoolVarP(flags.refFlattenParams(), "flatten-params", "", false, "merge common parameters at path level with operation parameters")
}

func addCommonBreakingFlags(cmd *cobra.Command, flags Flags) {
enumWithOptions(cmd, newEnumValue(localizations.GetSupportedLanguages(), localizations.LangDefault, flags.refLang()), "lang", "l", "language for localized output")
cmd.PersistentFlags().StringVarP(flags.refErrIgnoreFile(), "err-ignore", "", "", "configuration file for ignoring errors")
cmd.PersistentFlags().StringVarP(flags.refWarnIgnoreFile(), "warn-ignore", "", "", "configuration file for ignoring warnings")
cmd.PersistentFlags().VarP(newEnumSliceValue(checker.GetOptionalChecks(), nil, flags.refIncludeChecks()), "include-checks", "i", "comma-separated list of optional checks (run 'oasdiff checks --required false' to see options)")
cmd.PersistentFlags().IntVarP(flags.refDeprecationDaysBeta(), "deprecation-days-beta", "", checker.BetaDeprecationDays, "min days required between deprecating a beta resource and removing it")
cmd.PersistentFlags().IntVarP(flags.refDeprecationDaysStable(), "deprecation-days-stable", "", checker.StableDeprecationDays, "min days required between deprecating a stable resource and removing it")
enumWithOptions(cmd, newEnumValue([]string{"auto", "always", "never"}, "auto", flags.refColor()), "color", "", "when to colorize textual output")
}
14 changes: 1 addition & 13 deletions internal/delta.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (
"github.com/getkin/kin-openapi/openapi3"
"github.com/spf13/cobra"
"github.com/tufin/oasdiff/delta"
"github.com/tufin/oasdiff/diff"
)

func getDeltaCmd() *cobra.Command {
Expand All @@ -22,18 +21,7 @@ func getDeltaCmd() *cobra.Command {
RunE: getRun(&flags, runDelta),
}

cmd.PersistentFlags().BoolVarP(&flags.composed, "composed", "c", false, "work in 'composed' mode, compare paths in all specs matching base and revision globs")
enumWithOptions(&cmd, newEnumSliceValue(diff.ExcludeDiffOptions, nil, &flags.excludeElements), "exclude-elements", "e", "comma-separated list of elements to exclude")
cmd.PersistentFlags().StringVarP(&flags.matchPath, "match-path", "p", "", "include only paths that match this regular expression")
cmd.PersistentFlags().StringVarP(&flags.filterExtension, "filter-extension", "", "", "exclude paths and operations with an OpenAPI Extension matching this regular expression")
cmd.PersistentFlags().IntVarP(&flags.circularReferenceCounter, "max-circular-dep", "", 5, "maximum allowed number of circular dependencies between objects in OpenAPI specs")
cmd.PersistentFlags().StringVarP(&flags.prefixBase, "prefix-base", "", "", "add this prefix to paths in base-spec before comparison")
cmd.PersistentFlags().StringVarP(&flags.prefixRevision, "prefix-revision", "", "", "add this prefix to paths in revised-spec before comparison")
cmd.PersistentFlags().StringVarP(&flags.stripPrefixBase, "strip-prefix-base", "", "", "strip this prefix from paths in base-spec before comparison")
cmd.PersistentFlags().StringVarP(&flags.stripPrefixRevision, "strip-prefix-revision", "", "", "strip this prefix from paths in revised-spec before comparison")
cmd.PersistentFlags().BoolVarP(&flags.includePathParams, "include-path-params", "", false, "include path parameter names in endpoint matching")
cmd.PersistentFlags().BoolVarP(&flags.flattenAllOf, "flatten", "", false, "merge subschemas under allOf before diff")
cmd.PersistentFlags().BoolVarP(&flags.flattenParams, "flatten-params", "", false, "merge path parameters with operation parameters")
addCommonDiffFlags(&cmd, &flags)
cmd.PersistentFlags().BoolVarP(&flags.asymmetric, "asymmetric", "", false, "perform asymmetric diff (only elements of base that are missing in revision)")

return &cmd
Expand Down
48 changes: 48 additions & 0 deletions internal/delta_flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,51 @@ type DeltaFlags struct {
func (flags *DeltaFlags) getAsymmetric() bool {
return flags.asymmetric
}

func (flags *DeltaFlags) refComposed() *bool {
return &flags.composed
}

func (flags *DeltaFlags) refExcludeElements() *[]string {
return &flags.excludeElements
}

func (flags *DeltaFlags) refMatchPath() *string {
return &flags.matchPath
}

func (flags *DeltaFlags) refFilterExtension() *string {
return &flags.filterExtension
}

func (flags *DeltaFlags) refCircularReferenceCounter() *int {
return &flags.circularReferenceCounter
}

func (flags *DeltaFlags) refPrefixBase() *string {
return &flags.prefixBase
}

func (flags *DeltaFlags) refPrefixRevision() *string {
return &flags.prefixRevision
}

func (flags *DeltaFlags) refStripPrefixBase() *string {
return &flags.stripPrefixBase
}

func (flags *DeltaFlags) refStripPrefixRevision() *string {
return &flags.stripPrefixRevision
}

func (flags *DeltaFlags) refIncludePathParams() *bool {
return &flags.includePathParams
}

func (flags *DeltaFlags) refFlattenAllOf() *bool {
return &flags.flattenAllOf
}

func (flags *DeltaFlags) refFlattenParams() *bool {
return &flags.flattenParams
}
13 changes: 1 addition & 12 deletions internal/diff.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,19 +23,8 @@ func getDiffCmd() *cobra.Command {
RunE: getRun(&flags, runDiff),
}

cmd.PersistentFlags().BoolVarP(&flags.composed, "composed", "c", false, "work in 'composed' mode, compare paths in all specs matching base and revision globs")
addCommonDiffFlags(&cmd, &flags)
enumWithOptions(&cmd, newEnumValue(formatters.SupportedFormatsByContentType(formatters.OutputDiff), string(formatters.FormatYAML), &flags.format), "format", "f", "output format")
enumWithOptions(&cmd, newEnumSliceValue(diff.ExcludeDiffOptions, nil, &flags.excludeElements), "exclude-elements", "e", "comma-separated list of elements to exclude")
cmd.PersistentFlags().StringVarP(&flags.matchPath, "match-path", "p", "", "include only paths that match this regular expression")
cmd.PersistentFlags().StringVarP(&flags.filterExtension, "filter-extension", "", "", "exclude paths and operations with an OpenAPI Extension matching this regular expression")
cmd.PersistentFlags().IntVarP(&flags.circularReferenceCounter, "max-circular-dep", "", 5, "maximum allowed number of circular dependencies between objects in OpenAPI specs")
cmd.PersistentFlags().StringVarP(&flags.prefixBase, "prefix-base", "", "", "add this prefix to paths in base-spec before comparison")
cmd.PersistentFlags().StringVarP(&flags.prefixRevision, "prefix-revision", "", "", "add this prefix to paths in revised-spec before comparison")
cmd.PersistentFlags().StringVarP(&flags.stripPrefixBase, "strip-prefix-base", "", "", "strip this prefix from paths in base-spec before comparison")
cmd.PersistentFlags().StringVarP(&flags.stripPrefixRevision, "strip-prefix-revision", "", "", "strip this prefix from paths in revised-spec before comparison")
cmd.PersistentFlags().BoolVarP(&flags.includePathParams, "include-path-params", "", false, "include path parameter names in endpoint matching")
cmd.PersistentFlags().BoolVarP(&flags.flattenAllOf, "flatten", "", false, "merge subschemas under allOf before diff")
cmd.PersistentFlags().BoolVarP(&flags.flattenParams, "flatten-params", "", false, "merge path parameters with operation parameters")
cmd.PersistentFlags().BoolVarP(&flags.failOnDiff, "fail-on-diff", "o", false, "exit with return code 1 when any change is found")

return &cmd
Expand Down
Loading

0 comments on commit 85e052b

Please sign in to comment.