Files
stash/vendor/github.com/gobuffalo/gogen/gomods/init.go
2019-05-27 12:34:26 -07:00

67 lines
1.2 KiB
Go

package gomods
import (
"go/build"
"os"
"os/exec"
"strings"
"github.com/gobuffalo/genny"
"github.com/pkg/errors"
)
func New(name string, path string) (*genny.Group, error) {
g := &genny.Group{}
init, err := Init(name, path)
if err != nil {
return g, errors.WithStack(err)
}
g.Add(init)
tidy, err := Tidy(path, false)
if err != nil {
return g, errors.WithStack(err)
}
g.Add(tidy)
return g, nil
}
func Init(name string, path string) (*genny.Generator, error) {
if len(name) == 0 && len(path) == 0 {
pwd, err := os.Getwd()
if err != nil {
return nil, errors.WithStack(err)
}
path = pwd
}
if len(name) == 0 && path != "." {
name = path
c := build.Default
for _, s := range c.SrcDirs() {
name = strings.TrimPrefix(name, s)
}
}
name = strings.Replace(name, "\\", "/", -1)
name = strings.TrimPrefix(name, "/")
g := genny.New()
g.StepName = "go:mod:init:" + name
g.RunFn(func(r *genny.Runner) error {
if !On() {
return nil
}
return r.Chdir(path, func() error {
args := []string{"mod", "init"}
if len(name) > 0 {
args = append(args, name)
}
cmd := exec.Command(genny.GoBin(), args...)
return r.Exec(cmd)
})
})
return g, nil
}