Feature: Add goctl env (#1557)
This commit is contained in:
41
tools/goctl/pkg/goctl/goctl.go
Normal file
41
tools/goctl/pkg/goctl/goctl.go
Normal file
@@ -0,0 +1,41 @@
|
||||
package goctl
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
|
||||
"github.com/zeromicro/go-zero/tools/goctl/pkg/golang"
|
||||
"github.com/zeromicro/go-zero/tools/goctl/util/console"
|
||||
"github.com/zeromicro/go-zero/tools/goctl/util/pathx"
|
||||
"github.com/zeromicro/go-zero/tools/goctl/vars"
|
||||
)
|
||||
|
||||
func Install(cacheDir, name string, installFn func(dest string) (string, error)) (string, error) {
|
||||
goBin := golang.GoBin()
|
||||
cacheFile := filepath.Join(cacheDir, name)
|
||||
binFile := filepath.Join(goBin, name)
|
||||
|
||||
goos := runtime.GOOS
|
||||
if goos == vars.OsWindows {
|
||||
cacheFile = cacheFile + ".exe"
|
||||
binFile = binFile + ".exe"
|
||||
}
|
||||
// read cache.
|
||||
err := pathx.Copy(cacheFile, binFile)
|
||||
if err == nil {
|
||||
console.Info("%q installed from cache", name)
|
||||
return binFile, nil
|
||||
}
|
||||
|
||||
binFile, err = installFn(binFile)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
// write cache.
|
||||
err = pathx.Copy(binFile, cacheFile)
|
||||
if err != nil {
|
||||
console.Warning("write cache error: %+v", err)
|
||||
}
|
||||
return binFile, nil
|
||||
}
|
||||
Reference in New Issue
Block a user