1 Star 0 Fork 0

民禧农机/tools

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
protoc.go 4.03 KB
一键复制 编辑 原始数据 按行查看 历史
surongzhen 提交于 2021-07-06 17:19 +08:00 . 增加生成enum中文map的命令行
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
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/surongzhen1213/tools.git
git@gitee.com:surongzhen1213/tools.git
surongzhen1213
tools
tools
v1.0.9

搜索帮助