spf13--cobra/cobra/cmd/project.go

106 lines
2.3 KiB
Go
Raw Normal View History

2017-04-29 10:02:02 +00:00
package cmd
import (
"fmt"
2017-04-29 10:02:02 +00:00
"os"
"text/template"
"github.com/spf13/cobra"
"github.com/spf13/cobra/cobra/tpl"
2017-04-29 10:02:02 +00:00
)
2017-04-29 12:53:52 +00:00
// Project contains name, license and paths to projects.
2017-04-29 10:02:02 +00:00
type Project struct {
// v2
PkgName string
Copyright string
AbsolutePath string
Legal License
2019-01-29 09:19:08 +00:00
Viper bool
AppName string
2017-04-29 10:02:02 +00:00
}
type Command struct {
CmdName string
CmdParent string
*Project
}
func (p *Project) Create() error {
// check if AbsolutePath exists
if _, err := os.Stat(p.AbsolutePath); os.IsNotExist(err) {
// create directory
if err := os.Mkdir(p.AbsolutePath, 0754); err != nil {
return err
}
}
// create main.go
mainFile, err := os.Create(fmt.Sprintf("%s/main.go", p.AbsolutePath))
if err != nil {
return err
}
defer mainFile.Close()
mainTemplate := template.Must(template.New("main").Parse(string(tpl.MainTemplate())))
err = mainTemplate.Execute(mainFile, p)
if err != nil {
return err
}
// create cmd/root.go
if _, err = os.Stat(fmt.Sprintf("%s/cmd", p.AbsolutePath)); os.IsNotExist(err) {
cobra.CheckErr(os.Mkdir(fmt.Sprintf("%s/cmd", p.AbsolutePath), 0751))
}
rootFile, err := os.Create(fmt.Sprintf("%s/cmd/root.go", p.AbsolutePath))
if err != nil {
return err
}
defer rootFile.Close()
rootTemplate := template.Must(template.New("root").Parse(string(tpl.RootTemplate())))
err = rootTemplate.Execute(rootFile, p)
if err != nil {
return err
}
// create license
2019-01-30 04:28:47 +00:00
return p.createLicenseFile()
}
2019-01-30 04:25:38 +00:00
func (p *Project) createLicenseFile() error {
data := map[string]interface{}{
"copyright": copyrightLine(),
}
licenseFile, err := os.Create(fmt.Sprintf("%s/LICENSE", p.AbsolutePath))
if err != nil {
return err
}
defer licenseFile.Close()
2019-01-30 04:25:38 +00:00
licenseTemplate := template.Must(template.New("license").Parse(p.Legal.Text))
return licenseTemplate.Execute(licenseFile, data)
}
func (c *Command) Create() error {
fileName := fmt.Sprintf("%s/cmd/%s.go", c.AbsolutePath, c.CmdName)
// check if Command exists
if _, err := os.Stat(fileName); err == nil {
return fmt.Errorf("command '%s' already exists", c.CmdName)
}
cmdFile, err := os.Create(fileName)
if err != nil {
return err
}
defer cmdFile.Close()
commandTemplate := template.Must(template.New("sub").Parse(string(tpl.AddCommandTemplate())))
2019-01-30 09:44:39 +00:00
err = commandTemplate.Execute(cmdFile, c)
if err != nil {
return err
}
2019-01-30 09:44:39 +00:00
return nil
}