diff --git a/cmd/gorepomod/internal/arguments/args.go b/cmd/gorepomod/internal/arguments/args.go index 81074cd41..4ec9077b2 100644 --- a/cmd/gorepomod/internal/arguments/args.go +++ b/cmd/gorepomod/internal/arguments/args.go @@ -38,7 +38,7 @@ var ( "site", } // TODO: make this a PATH-like flag - allowedReplacements = []string { + allowedReplacements = []string{ "gopkg.in/yaml.v3", } ) diff --git a/cmd/gorepomod/internal/misc/interfaces.go b/cmd/gorepomod/internal/misc/interfaces.go index b5074c6fc..939231a00 100644 --- a/cmd/gorepomod/internal/misc/interfaces.go +++ b/cmd/gorepomod/internal/misc/interfaces.go @@ -50,6 +50,9 @@ type LaModule interface { // GetReplacements returns a list of replacements. GetReplacements() []string + + // GetDisallowedReplacements returns a list of disallowed replacements. + GetDisallowedReplacements([]string) []string } // VersionMap holds the versions associated with modules. diff --git a/cmd/gorepomod/internal/mod/module.go b/cmd/gorepomod/internal/mod/module.go index e51b454cb..d86b44b63 100644 --- a/cmd/gorepomod/internal/mod/module.go +++ b/cmd/gorepomod/internal/mod/module.go @@ -7,6 +7,7 @@ import ( "golang.org/x/mod/modfile" "sigs.k8s.io/kustomize/cmd/gorepomod/internal/misc" "sigs.k8s.io/kustomize/cmd/gorepomod/internal/semver" + "sigs.k8s.io/kustomize/cmd/gorepomod/internal/utils" ) // Module is an immutable representation of a Go module. @@ -77,3 +78,14 @@ func (m *Module) GetReplacements() (result []string) { } return } + +func (m *Module) GetDisallowedReplacements( + allowedReplacements []string) (badReps []string) { + for _, r := range m.GetReplacements() { + m := utils.ExtractModule(r) + if !utils.SliceContains(allowedReplacements, m) { + badReps = append(badReps, r) + } + } + return badReps +} diff --git a/cmd/gorepomod/internal/repo/manager.go b/cmd/gorepomod/internal/repo/manager.go index 7d09d82dc..5d162765c 100644 --- a/cmd/gorepomod/internal/repo/manager.go +++ b/cmd/gorepomod/internal/repo/manager.go @@ -8,7 +8,6 @@ import ( "sigs.k8s.io/kustomize/cmd/gorepomod/internal/git" "sigs.k8s.io/kustomize/cmd/gorepomod/internal/misc" "sigs.k8s.io/kustomize/cmd/gorepomod/internal/semver" - "sigs.k8s.io/kustomize/cmd/gorepomod/internal/utils" ) // Manager manages a git repo. @@ -23,6 +22,9 @@ type Manager struct { // The list of known Go modules in the repo. modules misc.LesModules + + // List of globally allowed module replacements. + allowedReplacements []string } func (mgr *Manager) AbsPath() string { @@ -67,8 +69,8 @@ func (mgr *Manager) UnPin( }) } -func hasUnPinnedDeps(m misc.LaModule) string { - if len(m.GetReplacements()) > 0 { +func (mgr *Manager) hasUnPinnedDeps(m misc.LaModule) string { + if len(m.GetDisallowedReplacements(mgr.allowedReplacements)) > 0 { return "yes" } return "" @@ -92,7 +94,7 @@ func (mgr *Manager) List() error { format, m.ShortName(), m.VersionLocal().Pretty(), m.VersionRemote().Pretty(), - hasUnPinnedDeps(m), + mgr.hasUnPinnedDeps(m), mgr.modules.InternalDeps(m)) return nil }) @@ -119,16 +121,13 @@ func (mgr *Manager) Debug(_ misc.LaModule, doIt bool) error { // * Each minor release gets its own branch. // func (mgr *Manager) Release( - target misc.LaModule, bump semver.SvBump, - allowedReplacements []string, doIt bool) error { + target misc.LaModule, bump semver.SvBump, doIt bool) error { - if reps := target.GetReplacements(); len(reps) > 0 { - badReps := findDisallowedReplacements(reps, allowedReplacements) - if len(badReps) > 0 { - return fmt.Errorf( - "to release %q, first pin these replacements: %v", - target.ShortName(), badReps) - } + if reps := target.GetDisallowedReplacements( + mgr.allowedReplacements); len(reps) > 0 { + return fmt.Errorf( + "to release %q, first pin these replacements: %v", + target.ShortName(), reps) } newVersion := target.VersionLocal().Bump(bump) @@ -187,18 +186,6 @@ func (mgr *Manager) Release( return nil } -func findDisallowedReplacements( - reps []string, allowedReplacements []string) []string { - var badReps []string - for _, r := range reps { - km := utils.ExtractModule(r) - if !utils.SliceContains(allowedReplacements, km) { - badReps = append(badReps, r) - } - } - return badReps -} - func (mgr *Manager) UnRelease(target misc.LaModule, doIt bool) error { fmt.Printf( "Unreleasing %s/%s\n", diff --git a/cmd/gorepomod/internal/repo/managerfactory.go b/cmd/gorepomod/internal/repo/managerfactory.go index d2ede87a8..37763ef31 100644 --- a/cmd/gorepomod/internal/repo/managerfactory.go +++ b/cmd/gorepomod/internal/repo/managerfactory.go @@ -15,7 +15,7 @@ type ManagerFactory struct { versionMapRemote misc.VersionMap } -func (mf *ManagerFactory) NewRepoManager() *Manager { +func (mf *ManagerFactory) NewRepoManager(allowedReplacements []string) *Manager { result := &Manager{ dg: mf.dg, remoteName: mf.remoteName, @@ -31,5 +31,6 @@ func (mf *ManagerFactory) NewRepoManager() *Manager { mf.versionMapRemote.Latest(shortName))) } result.modules = modules + result.allowedReplacements = allowedReplacements return result } diff --git a/cmd/gorepomod/main.go b/cmd/gorepomod/main.go index ae6641e39..856cdf1d4 100644 --- a/cmd/gorepomod/main.go +++ b/cmd/gorepomod/main.go @@ -24,7 +24,7 @@ func loadRepoManager(args *arguments.Args) (*repo.Manager, error) { if err != nil { return nil, err } - return pr.NewRepoManager(), nil + return pr.NewRepoManager(args.AllowedReplacements()), nil } func findModule( @@ -71,8 +71,7 @@ func actualMain() error { case arguments.UnPin: return mgr.UnPin(args.DoIt(), targetModule, conditionalModule) case arguments.Release: - return mgr.Release( - targetModule, args.Bump(), args.AllowedReplacements(), args.DoIt()) + return mgr.Release(targetModule, args.Bump(), args.DoIt()) case arguments.UnRelease: return mgr.UnRelease(targetModule, args.DoIt()) case arguments.Debug: