In module lists, handle allowed replacements.

This commit is contained in:
monopole
2021-04-30 18:35:59 -07:00
parent accd71a105
commit 6c9bf58e7f
6 changed files with 32 additions and 30 deletions

View File

@@ -38,7 +38,7 @@ var (
"site", "site",
} }
// TODO: make this a PATH-like flag // TODO: make this a PATH-like flag
allowedReplacements = []string { allowedReplacements = []string{
"gopkg.in/yaml.v3", "gopkg.in/yaml.v3",
} }
) )

View File

@@ -50,6 +50,9 @@ type LaModule interface {
// GetReplacements returns a list of replacements. // GetReplacements returns a list of replacements.
GetReplacements() []string GetReplacements() []string
// GetDisallowedReplacements returns a list of disallowed replacements.
GetDisallowedReplacements([]string) []string
} }
// VersionMap holds the versions associated with modules. // VersionMap holds the versions associated with modules.

View File

@@ -7,6 +7,7 @@ import (
"golang.org/x/mod/modfile" "golang.org/x/mod/modfile"
"sigs.k8s.io/kustomize/cmd/gorepomod/internal/misc" "sigs.k8s.io/kustomize/cmd/gorepomod/internal/misc"
"sigs.k8s.io/kustomize/cmd/gorepomod/internal/semver" "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. // Module is an immutable representation of a Go module.
@@ -77,3 +78,14 @@ func (m *Module) GetReplacements() (result []string) {
} }
return 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
}

View File

@@ -8,7 +8,6 @@ import (
"sigs.k8s.io/kustomize/cmd/gorepomod/internal/git" "sigs.k8s.io/kustomize/cmd/gorepomod/internal/git"
"sigs.k8s.io/kustomize/cmd/gorepomod/internal/misc" "sigs.k8s.io/kustomize/cmd/gorepomod/internal/misc"
"sigs.k8s.io/kustomize/cmd/gorepomod/internal/semver" "sigs.k8s.io/kustomize/cmd/gorepomod/internal/semver"
"sigs.k8s.io/kustomize/cmd/gorepomod/internal/utils"
) )
// Manager manages a git repo. // Manager manages a git repo.
@@ -23,6 +22,9 @@ type Manager struct {
// The list of known Go modules in the repo. // The list of known Go modules in the repo.
modules misc.LesModules modules misc.LesModules
// List of globally allowed module replacements.
allowedReplacements []string
} }
func (mgr *Manager) AbsPath() string { func (mgr *Manager) AbsPath() string {
@@ -67,8 +69,8 @@ func (mgr *Manager) UnPin(
}) })
} }
func hasUnPinnedDeps(m misc.LaModule) string { func (mgr *Manager) hasUnPinnedDeps(m misc.LaModule) string {
if len(m.GetReplacements()) > 0 { if len(m.GetDisallowedReplacements(mgr.allowedReplacements)) > 0 {
return "yes" return "yes"
} }
return "" return ""
@@ -92,7 +94,7 @@ func (mgr *Manager) List() error {
format, m.ShortName(), format, m.ShortName(),
m.VersionLocal().Pretty(), m.VersionLocal().Pretty(),
m.VersionRemote().Pretty(), m.VersionRemote().Pretty(),
hasUnPinnedDeps(m), mgr.hasUnPinnedDeps(m),
mgr.modules.InternalDeps(m)) mgr.modules.InternalDeps(m))
return nil return nil
}) })
@@ -119,16 +121,13 @@ func (mgr *Manager) Debug(_ misc.LaModule, doIt bool) error {
// * Each minor release gets its own branch. // * Each minor release gets its own branch.
// //
func (mgr *Manager) Release( func (mgr *Manager) Release(
target misc.LaModule, bump semver.SvBump, target misc.LaModule, bump semver.SvBump, doIt bool) error {
allowedReplacements []string, doIt bool) error {
if reps := target.GetReplacements(); len(reps) > 0 { if reps := target.GetDisallowedReplacements(
badReps := findDisallowedReplacements(reps, allowedReplacements) mgr.allowedReplacements); len(reps) > 0 {
if len(badReps) > 0 { return fmt.Errorf(
return fmt.Errorf( "to release %q, first pin these replacements: %v",
"to release %q, first pin these replacements: %v", target.ShortName(), reps)
target.ShortName(), badReps)
}
} }
newVersion := target.VersionLocal().Bump(bump) newVersion := target.VersionLocal().Bump(bump)
@@ -187,18 +186,6 @@ func (mgr *Manager) Release(
return nil 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 { func (mgr *Manager) UnRelease(target misc.LaModule, doIt bool) error {
fmt.Printf( fmt.Printf(
"Unreleasing %s/%s\n", "Unreleasing %s/%s\n",

View File

@@ -15,7 +15,7 @@ type ManagerFactory struct {
versionMapRemote misc.VersionMap versionMapRemote misc.VersionMap
} }
func (mf *ManagerFactory) NewRepoManager() *Manager { func (mf *ManagerFactory) NewRepoManager(allowedReplacements []string) *Manager {
result := &Manager{ result := &Manager{
dg: mf.dg, dg: mf.dg,
remoteName: mf.remoteName, remoteName: mf.remoteName,
@@ -31,5 +31,6 @@ func (mf *ManagerFactory) NewRepoManager() *Manager {
mf.versionMapRemote.Latest(shortName))) mf.versionMapRemote.Latest(shortName)))
} }
result.modules = modules result.modules = modules
result.allowedReplacements = allowedReplacements
return result return result
} }

View File

@@ -24,7 +24,7 @@ func loadRepoManager(args *arguments.Args) (*repo.Manager, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
return pr.NewRepoManager(), nil return pr.NewRepoManager(args.AllowedReplacements()), nil
} }
func findModule( func findModule(
@@ -71,8 +71,7 @@ func actualMain() error {
case arguments.UnPin: case arguments.UnPin:
return mgr.UnPin(args.DoIt(), targetModule, conditionalModule) return mgr.UnPin(args.DoIt(), targetModule, conditionalModule)
case arguments.Release: case arguments.Release:
return mgr.Release( return mgr.Release(targetModule, args.Bump(), args.DoIt())
targetModule, args.Bump(), args.AllowedReplacements(), args.DoIt())
case arguments.UnRelease: case arguments.UnRelease:
return mgr.UnRelease(targetModule, args.DoIt()) return mgr.UnRelease(targetModule, args.DoIt())
case arguments.Debug: case arguments.Debug: