mirror of
https://github.com/spf13/cobra
synced 2025-05-06 05:17:21 +00:00
756-vgo-support - add vgo bool flag
756 - tweak vgo param to be string * vgo param represents package name of project 756-vgo-support - create in current working directory 756-vgo-support - init outside of GOPATH 756-vgo-support - work on init cmd formatting
This commit is contained in:
parent
d2d81d9a96
commit
e570cad58a
4 changed files with 62 additions and 29 deletions
|
@ -49,13 +49,13 @@ Example: cobra add server -> resulting in a new cmd/server.go`,
|
|||
|
||||
var project *Project
|
||||
if packageName != "" {
|
||||
project = NewProject(packageName)
|
||||
project = NewProject(packageName, vgo)
|
||||
} else {
|
||||
wd, err := os.Getwd()
|
||||
if err != nil {
|
||||
er(err)
|
||||
}
|
||||
project = NewProjectFromPath(wd)
|
||||
project = NewProjectFromPath(wd, vgo)
|
||||
}
|
||||
|
||||
cmdName := validateCmdName(args[0])
|
||||
|
|
|
@ -40,6 +40,7 @@ and the appropriate structure for a Cobra-based CLI application.
|
|||
Init will not use an existing directory with contents.`,
|
||||
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
|
||||
wd, err := os.Getwd()
|
||||
if err != nil {
|
||||
er(err)
|
||||
|
@ -47,16 +48,16 @@ Init will not use an existing directory with contents.`,
|
|||
|
||||
var project *Project
|
||||
if len(args) == 0 {
|
||||
project = NewProjectFromPath(wd)
|
||||
project = NewProjectFromPath(wd, vgo)
|
||||
} else if len(args) == 1 {
|
||||
arg := args[0]
|
||||
if arg[0] == '.' {
|
||||
arg = filepath.Join(wd, arg)
|
||||
}
|
||||
if filepath.IsAbs(arg) {
|
||||
project = NewProjectFromPath(arg)
|
||||
project = NewProjectFromPath(arg, vgo)
|
||||
} else {
|
||||
project = NewProject(arg)
|
||||
project = NewProject(arg, vgo) // testing this case
|
||||
}
|
||||
} else {
|
||||
er("please provide only one argument")
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package cmd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
|
@ -17,7 +18,7 @@ type Project struct {
|
|||
}
|
||||
|
||||
// NewProject returns Project with specified project name.
|
||||
func NewProject(projectName string) *Project {
|
||||
func NewProject(projectName string, vgo string) *Project {
|
||||
if projectName == "" {
|
||||
er("can't create project with blank name")
|
||||
}
|
||||
|
@ -25,16 +26,20 @@ func NewProject(projectName string) *Project {
|
|||
p := new(Project)
|
||||
p.name = projectName
|
||||
|
||||
wd, err := os.Getwd()
|
||||
if err != nil {
|
||||
er(err)
|
||||
}
|
||||
|
||||
/* add support for Go modules. ISSUE #756 */
|
||||
if vgo == "" {
|
||||
// vgo not set, business as usual
|
||||
// 1. Find already created protect.
|
||||
p.absPath = findPackage(projectName)
|
||||
|
||||
// 2. If there are no created project with this path, and user is in GOPATH,
|
||||
// then use GOPATH/src/projectName.
|
||||
if p.absPath == "" {
|
||||
wd, err := os.Getwd()
|
||||
if err != nil {
|
||||
er(err)
|
||||
}
|
||||
for _, srcPath := range srcPaths {
|
||||
goPath := filepath.Dir(srcPath)
|
||||
if filepathHasPrefix(wd, goPath) {
|
||||
|
@ -48,10 +53,29 @@ func NewProject(projectName string) *Project {
|
|||
if p.absPath == "" {
|
||||
p.absPath = filepath.Join(srcPaths[0], projectName)
|
||||
}
|
||||
} else {
|
||||
if wd != p.name {
|
||||
wd = fmt.Sprintf("%s/%s", wd, p.name)
|
||||
}
|
||||
p.name = vgo
|
||||
p = createWithModuleSupport(wd, p)
|
||||
}
|
||||
|
||||
return p
|
||||
}
|
||||
|
||||
/* add support for Go modules. ISSUE #756 */
|
||||
func createWithModuleSupport(workingDir string, project *Project) *Project {
|
||||
for _, srcPath := range srcPaths {
|
||||
goPath := filepath.Dir(srcPath)
|
||||
if filepathHasPrefix(workingDir, goPath) || workingDir == goPath {
|
||||
er("using modules, must be outside of GOPATH")
|
||||
}
|
||||
}
|
||||
project.absPath = workingDir
|
||||
return project
|
||||
}
|
||||
|
||||
// findPackage returns full path to existing go package in GOPATHs.
|
||||
func findPackage(packageName string) string {
|
||||
if packageName == "" {
|
||||
|
@ -70,7 +94,7 @@ func findPackage(packageName string) string {
|
|||
|
||||
// NewProjectFromPath returns Project with specified absolute path to
|
||||
// package.
|
||||
func NewProjectFromPath(absPath string) *Project {
|
||||
func NewProjectFromPath(absPath string, vgo string) *Project {
|
||||
if absPath == "" {
|
||||
er("can't create project: absPath can't be blank")
|
||||
}
|
||||
|
@ -92,8 +116,14 @@ func NewProjectFromPath(absPath string) *Project {
|
|||
}
|
||||
|
||||
p := new(Project)
|
||||
if vgo == "" {
|
||||
p.absPath = strings.TrimSuffix(absPath, findCmdDir(absPath))
|
||||
p.name = filepath.ToSlash(trimSrcPath(p.absPath, p.SrcPath()))
|
||||
} else {
|
||||
p.name = vgo
|
||||
p = createWithModuleSupport(absPath, p)
|
||||
}
|
||||
|
||||
return p
|
||||
}
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@ import (
|
|||
var (
|
||||
// Used for flags.
|
||||
cfgFile, userLicense string
|
||||
vgo string
|
||||
|
||||
rootCmd = &cobra.Command{
|
||||
Use: "cobra",
|
||||
|
@ -46,6 +47,7 @@ func init() {
|
|||
rootCmd.PersistentFlags().StringP("author", "a", "YOUR NAME", "author name for copyright attribution")
|
||||
rootCmd.PersistentFlags().StringVarP(&userLicense, "license", "l", "", "name of license for the project")
|
||||
rootCmd.PersistentFlags().Bool("viper", true, "use Viper for configuration")
|
||||
rootCmd.PersistentFlags().StringVar(&vgo, "vgo", "", "use vgo/modules available in Go >= 1.11")
|
||||
viper.BindPFlag("author", rootCmd.PersistentFlags().Lookup("author"))
|
||||
viper.BindPFlag("useViper", rootCmd.PersistentFlags().Lookup("viper"))
|
||||
viper.SetDefault("author", "NAME HERE <EMAIL ADDRESS>")
|
||||
|
|
Loading…
Add table
Reference in a new issue