mirror of
https://github.com/spf13/cobra
synced 2024-12-27 14:57:06 +00:00
vgo-support - re-working code generator
This commit is contained in:
parent
d658160bdd
commit
80ea2901b6
4 changed files with 90 additions and 31 deletions
|
@ -15,19 +15,24 @@ package cmd
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/spf13/cobra/cobra/tpl"
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"text/template"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
var initCmd = &cobra.Command{
|
||||
Use: "init [name]",
|
||||
Aliases: []string{"initialize", "initialise", "create"},
|
||||
Short: "Initialize a Cobra Application",
|
||||
Long: `Initialize (cobra init) will create a new application, with a license
|
||||
var (
|
||||
pkgName string
|
||||
|
||||
initCmd = &cobra.Command{
|
||||
Use: "init [name]",
|
||||
Aliases: []string{"initialize", "initialise", "create"},
|
||||
Short: "Initialize a Cobra Application",
|
||||
Long: `Initialize (cobra init) will create a new application, with a license
|
||||
and the appropriate structure for a Cobra-based CLI application.
|
||||
|
||||
* If a name is provided, it will be created in the current directory;
|
||||
|
@ -39,37 +44,66 @@ 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)
|
||||
}
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
|
||||
var project *Project
|
||||
if len(args) == 0 {
|
||||
project = NewProjectFromPath(wd)
|
||||
} else if len(args) == 1 {
|
||||
arg := args[0]
|
||||
if arg[0] == '.' {
|
||||
arg = filepath.Join(wd, arg)
|
||||
wd, err := os.Getwd()
|
||||
if err != nil {
|
||||
er(err)
|
||||
}
|
||||
if filepath.IsAbs(arg) {
|
||||
project = NewProjectFromPath(arg)
|
||||
} else {
|
||||
project = NewProject(arg)
|
||||
|
||||
project := &Project{
|
||||
AbsolutePath: wd,
|
||||
PkgName: pkgName,
|
||||
Legal: getLicense(),
|
||||
Copyright: copyrightLine(),
|
||||
}
|
||||
} else {
|
||||
er("please provide only one argument")
|
||||
}
|
||||
|
||||
initializeProject(project)
|
||||
// open file for writing
|
||||
f, err := os.Create(fmt.Sprintf("%s/main.go", project.AbsolutePath))
|
||||
if err != nil {
|
||||
er(err)
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
fmt.Fprintln(cmd.OutOrStdout(), `Your Cobra application is ready at
|
||||
`+project.AbsPath()+`
|
||||
t := template.Must(template.New("init").Parse(string(tpl.MainTemplate())))
|
||||
err = t.Execute(f, project)
|
||||
if err != nil {
|
||||
er(err)
|
||||
}
|
||||
/*
|
||||
wd, err := os.Getwd()
|
||||
if err != nil {
|
||||
er(err)
|
||||
}
|
||||
|
||||
Give it a try by going there and running `+"`go run main.go`."+`
|
||||
Add commands to it by running `+"`cobra add [cmdname]`.")
|
||||
},
|
||||
var project *Project
|
||||
if len(args) == 0 {
|
||||
project = NewProjectFromPath(wd)
|
||||
} else if len(args) == 1 {
|
||||
arg := args[0]
|
||||
if arg[0] == '.' {
|
||||
arg = filepath.Join(wd, arg)
|
||||
}
|
||||
if filepath.IsAbs(arg) {
|
||||
project = NewProjectFromPath(arg)
|
||||
} else {
|
||||
project = NewProject(arg)
|
||||
}
|
||||
} else {
|
||||
er("please provide only one argument")
|
||||
}
|
||||
|
||||
initializeProject(project)
|
||||
*/
|
||||
|
||||
fmt.Printf("Your Cobra applicaton is ready at\n%s\n", project.AbsolutePath)
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
func init() {
|
||||
initCmd.Flags().StringVar(&pkgName, "pkg-name", "", "fully qualified pkg name")
|
||||
initCmd.MarkFlagRequired("pkg-name")
|
||||
}
|
||||
|
||||
func initializeProject(project *Project) {
|
||||
|
|
|
@ -9,6 +9,13 @@ import (
|
|||
|
||||
// Project contains name, license and paths to projects.
|
||||
type Project struct {
|
||||
// v2
|
||||
PkgName string
|
||||
Copyright string
|
||||
AbsolutePath string
|
||||
Legal License
|
||||
|
||||
// v1
|
||||
absPath string
|
||||
cmdPath string
|
||||
srcPath string
|
||||
|
|
|
@ -23,7 +23,8 @@ import (
|
|||
|
||||
var (
|
||||
// Used for flags.
|
||||
cfgFile, userLicense string
|
||||
cfgFile string
|
||||
userLicense string
|
||||
|
||||
rootCmd = &cobra.Command{
|
||||
Use: "cobra",
|
||||
|
|
17
cobra/tpl/main.go
Normal file
17
cobra/tpl/main.go
Normal file
|
@ -0,0 +1,17 @@
|
|||
package tpl
|
||||
|
||||
func MainTemplate() []byte {
|
||||
return []byte(`
|
||||
/*
|
||||
{{ .Copyright }}
|
||||
{{if .Legal.Header}}{{ .Legal.Header }}{{end}}
|
||||
*/
|
||||
package main
|
||||
|
||||
import "{{ .PkgName }}/cmd"
|
||||
|
||||
func main() {
|
||||
cmd.Execute()
|
||||
}
|
||||
`)
|
||||
}
|
Loading…
Reference in a new issue