代码拉取完成,页面将自动刷新
package main
import (
"errors"
"fmt"
"go/build"
"io/ioutil"
"log"
"os"
"os/exec"
"path"
"path/filepath"
"runtime"
"strings"
"github.com/urfave/cli/v2"
)
var (
withENUM bool
withBM bool
withGRPC bool
withSwagger bool
withEcode bool
dirGen string
)
func protocAction(ctx *cli.Context) (err error) {
if err = checkProtoc(); err != nil {
return err
}
files := ctx.Args().Slice()
if len(files) == 0 {
files, _ = filepath.Glob("*.proto")
}
//if !withGRPC && !withBM && !withSwagger && !withEcode {
// withBM = true
// withGRPC = true
// withSwagger = true
// withEcode = true
//}
if !withGRPC && !withENUM {
withGRPC = true
withENUM = true
}
//if withBM {
// if err = installBMGen(); err != nil {
// return
// }
// if err = genBM(files); err != nil {
// return
// }
//}
if withGRPC {
if err = installGRPCGen(); err != nil {
return err
}
if err = genGRPC(files, dirGen); err != nil {
return
}
}
if withENUM {
if err = installEnumGen(); err != nil {
return err
}
if err = genEnum(files, dirGen); err != nil {
return
}
}
//if withSwagger {
// if err = installSwaggerGen(); err != nil {
// return
// }
// if err = genSwagger(files); err != nil {
// return
// }
//}
//if withEcode {
// if err = installEcodeGen(); err != nil {
// return
// }
// if err = genEcode(files); err != nil {
// return
// }
//}
log.Printf("generate %s success.\n", strings.Join(files, " "))
return nil
}
func checkProtoc() error {
if _, err := exec.LookPath("protoc"); err != nil {
switch runtime.GOOS {
case "darwin":
fmt.Println("brew install protobuf")
cmd := exec.Command("brew", "install", "protobuf")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err = cmd.Run(); err != nil {
return err
}
case "linux":
fmt.Println("snap install --classic protobuf")
cmd := exec.Command("snap", "install", "--classic", "protobuf")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err = cmd.Run(); err != nil {
return err
}
default:
return errors.New("您还没安装protobuf,请进行手动安装:https://github.com/protocolbuffers/protobuf/releases")
}
}
return nil
}
func generate(protoc string, files []string) error {
pwd, _ := os.Getwd()
gosrc := path.Join(gopath(), "src")
ext, err := latestTools()
if err != nil {
return err
}
line := fmt.Sprintf(protoc, gosrc, ext, pwd)
log.Println(line, strings.Join(files, " "))
args := strings.Split(line, " ")
args = append(args, files...)
cmd := exec.Command(args[0], args[1:]...)
cmd.Dir = pwd
cmd.Env = os.Environ()
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
}
func goget(url string) error {
args := strings.Split(url, " ")
cmd := exec.Command(args[0], args[1:]...)
cmd.Env = os.Environ()
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
log.Println(url)
return cmd.Run()
}
func latestTools() (string, error) {
gopath := gopath()
ext := path.Join(gopath, "src/gitee.com/surongzhen1213/tools/third_party")
if _, err := os.Stat(ext); !os.IsNotExist(err) {
return ext, nil
}
ext = path.Join(gopath, "src/kratos/third_party")
if _, err := os.Stat(ext); !os.IsNotExist(err) {
return ext, nil
}
baseMod := path.Join(gopath, "pkg/mod/gitee.com/surongzhen1213")
files, err := ioutil.ReadDir(baseMod)
if err != nil {
return "", err
}
for i := len(files) - 1; i >= 0; i-- {
if strings.HasPrefix(files[i].Name(), "tools@") {
return path.Join(baseMod, files[i].Name(), "third_party"), nil
}
}
return "", errors.New("not found kratos package")
}
func gopath() (gp string) {
gopaths := strings.Split(os.Getenv("GOPATH"), string(filepath.ListSeparator))
if len(gopaths) == 1 && gopaths[0] != "" {
return gopaths[0]
}
pwd, err := os.Getwd()
if err != nil {
return
}
abspwd, err := filepath.Abs(pwd)
if err != nil {
return
}
for _, gopath := range gopaths {
if gopath == "" {
continue
}
absgp, err := filepath.Abs(gopath)
if err != nil {
return
}
if strings.HasPrefix(abspwd, absgp) {
return absgp
}
}
return build.Default.GOPATH
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。