mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-11 00:52:55 +00:00
196 lines
3.7 KiB
Go
196 lines
3.7 KiB
Go
package arguments
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"sigs.k8s.io/kustomize/cmd/gorepomod/internal/misc"
|
|
"sigs.k8s.io/kustomize/cmd/gorepomod/internal/semver"
|
|
"sigs.k8s.io/kustomize/cmd/gorepomod/internal/utils"
|
|
)
|
|
|
|
const (
|
|
doItFlag = "--doIt"
|
|
cmdPin = "pin"
|
|
cmdUnPin = "unpin"
|
|
cmdTidy = "tidy"
|
|
cmdList = "list"
|
|
cmdRelease = "release"
|
|
cmdUnRelease = "unrelease"
|
|
cmdDebug = "debug"
|
|
)
|
|
|
|
var (
|
|
commands = []string{
|
|
cmdPin, cmdUnPin, cmdTidy, cmdList, cmdRelease, cmdUnRelease, cmdDebug}
|
|
|
|
// TODO: make this a PATH-like flag
|
|
// e.g.: --excludes ".git:.idea:site:docs"
|
|
excSlice = []string{
|
|
".git",
|
|
".github",
|
|
".idea",
|
|
"docs",
|
|
"examples",
|
|
"hack",
|
|
"site",
|
|
"releasing",
|
|
}
|
|
)
|
|
|
|
type Command int
|
|
|
|
const (
|
|
Tidy Command = iota
|
|
UnPin
|
|
Pin
|
|
List
|
|
Release
|
|
UnRelease
|
|
Debug
|
|
)
|
|
|
|
type Args struct {
|
|
cmd Command
|
|
moduleName misc.ModuleShortName
|
|
version semver.SemVer
|
|
bump semver.SvBump
|
|
doIt bool
|
|
}
|
|
|
|
func (a *Args) GetCommand() Command {
|
|
return a.cmd
|
|
}
|
|
|
|
func (a *Args) Bump() semver.SvBump {
|
|
return a.bump
|
|
}
|
|
|
|
func (a *Args) Version() semver.SemVer {
|
|
return a.version
|
|
}
|
|
|
|
func (a *Args) ModuleName() misc.ModuleShortName {
|
|
return a.moduleName
|
|
}
|
|
|
|
func (a *Args) Exclusions() (result []string) {
|
|
// Make sure the list has no repeats.
|
|
for k := range utils.SliceToSet(excSlice) {
|
|
result = append(result, k)
|
|
}
|
|
return
|
|
}
|
|
|
|
func (a *Args) DoIt() bool {
|
|
return a.doIt
|
|
}
|
|
|
|
type myArgs struct {
|
|
args []string
|
|
doIt bool
|
|
}
|
|
|
|
func (a *myArgs) next() (result string) {
|
|
if !a.more() {
|
|
panic("no args left")
|
|
}
|
|
result = a.args[0]
|
|
a.args = a.args[1:]
|
|
return
|
|
}
|
|
|
|
func (a *myArgs) more() bool {
|
|
return len(a.args) > 0
|
|
}
|
|
|
|
func newArgs() *myArgs {
|
|
result := &myArgs{}
|
|
for _, a := range os.Args[1:] {
|
|
if a == doItFlag {
|
|
result.doIt = true
|
|
} else {
|
|
result.args = append(result.args, a)
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
func Parse() (result *Args, err error) {
|
|
result = &Args{}
|
|
clArgs := newArgs()
|
|
result.doIt = clArgs.doIt
|
|
|
|
result.moduleName = misc.ModuleUnknown
|
|
if !clArgs.more() {
|
|
return nil, fmt.Errorf("command needs at least one arg")
|
|
}
|
|
command := clArgs.next()
|
|
switch command {
|
|
case cmdPin:
|
|
if !clArgs.more() {
|
|
return nil, fmt.Errorf("pin needs a moduleName to pin")
|
|
}
|
|
result.moduleName = misc.ModuleShortName(clArgs.next())
|
|
if clArgs.more() {
|
|
result.version, err = semver.Parse(clArgs.next())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
} else {
|
|
result.version = semver.Zero()
|
|
}
|
|
result.cmd = Pin
|
|
case cmdUnPin:
|
|
if !clArgs.more() {
|
|
return nil, fmt.Errorf("unpin needs a moduleName to unpin")
|
|
}
|
|
result.moduleName = misc.ModuleShortName(clArgs.next())
|
|
result.cmd = UnPin
|
|
case cmdTidy:
|
|
result.cmd = Tidy
|
|
case cmdList:
|
|
result.cmd = List
|
|
case cmdRelease:
|
|
if !clArgs.more() {
|
|
return nil, fmt.Errorf("specify {module} to release")
|
|
}
|
|
result.moduleName = misc.ModuleShortName(clArgs.next())
|
|
bump := "patch"
|
|
if clArgs.more() {
|
|
bump = clArgs.next()
|
|
}
|
|
switch bump {
|
|
case "major":
|
|
result.bump = semver.Major
|
|
case "minor":
|
|
result.bump = semver.Minor
|
|
case "patch":
|
|
result.bump = semver.Patch
|
|
default:
|
|
return nil, fmt.Errorf(
|
|
"unknown bump %s; specify one of 'major', 'minor' or 'patch'", bump)
|
|
}
|
|
result.cmd = Release
|
|
case cmdUnRelease:
|
|
if !clArgs.more() {
|
|
return nil, fmt.Errorf("specify {module} to unrelease")
|
|
}
|
|
result.moduleName = misc.ModuleShortName(clArgs.next())
|
|
result.cmd = UnRelease
|
|
case cmdDebug:
|
|
if !clArgs.more() {
|
|
return nil, fmt.Errorf("specify {module} to debug")
|
|
}
|
|
result.moduleName = misc.ModuleShortName(clArgs.next())
|
|
result.cmd = Debug
|
|
default:
|
|
return nil, fmt.Errorf(
|
|
"unknown command %q; must be one of %v", command, commands)
|
|
}
|
|
if clArgs.more() {
|
|
return nil, fmt.Errorf("unknown extra args: %v", clArgs.args)
|
|
}
|
|
return
|
|
}
|