You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
962 B
Go
42 lines
962 B
Go
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
|
|
}
|