From 64504ae67bbd1bd630793026fd556baae0b469e9 Mon Sep 17 00:00:00 2001 From: lyyyuna Date: Wed, 23 Jun 2021 12:51:25 +0800 Subject: [PATCH] goc install cmd --- cmd/install.go | 22 ++++++++++++++++ pkg/build/install.go | 62 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 cmd/install.go create mode 100644 pkg/build/install.go diff --git a/cmd/install.go b/cmd/install.go new file mode 100644 index 0000000..24715fa --- /dev/null +++ b/cmd/install.go @@ -0,0 +1,22 @@ +package cmd + +import ( + "github.com/qiniu/goc/v2/pkg/build" + "github.com/spf13/cobra" +) + +var installCmd = &cobra.Command{ + Use: "install", + Run: installAction, + + DisableFlagParsing: true, // install 命令需要用原生 go 的方式处理 flags +} + +func init() { + rootCmd.AddCommand(installCmd) +} + +func installAction(cmd *cobra.Command, args []string) { + b := build.NewInstall(cmd, args) + b.Install() +} diff --git a/pkg/build/install.go b/pkg/build/install.go new file mode 100644 index 0000000..96bc3a7 --- /dev/null +++ b/pkg/build/install.go @@ -0,0 +1,62 @@ +package build + +import ( + "os" + "os/exec" + + "github.com/qiniu/goc/v2/pkg/config" + "github.com/qiniu/goc/v2/pkg/cover" + "github.com/qiniu/goc/v2/pkg/log" + "github.com/spf13/cobra" +) + +func NewInstall(cmd *cobra.Command, args []string) *Build { + return NewBuild(cmd, args) +} + +// Install starts go install +// +// 1. copy project to temp, +// 2. inject cover variables and functions into the project, +// 3. install the project in temp. +func (b *Build) Install() { + // 1. 拷贝至临时目录 + b.copyProjectToTmp() + defer b.clean() + + log.Donef("project copied to temporary directory") + // 2. inject cover vars + cover.Inject() + // 3. install in the temp project + b.doInstallInTemp() +} + +func (b *Build) doInstallInTemp() { + log.StartWait("installing the injected project") + + goflags := config.GocConfig.Goflags + + pacakges := config.GocConfig.Packages + + goflags = append(goflags, pacakges...) + + args := []string{"install"} + args = append(args, goflags...) + // go 命令行由 go install [build flags] [packages] 组成 + cmd := exec.Command("go", args...) + cmd.Dir = config.GocConfig.TmpWd + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + + log.Infof("go install cmd is: %v, in path [%v]", cmd.Args, cmd.Dir) + if err := cmd.Start(); err != nil { + log.Fatalf("fail to execute go install: %v", err) + } + if err := cmd.Wait(); err != nil { + log.Fatalf("fail to execute go install: %v", err) + } + + // done + log.StopWait() + log.Donef("go install done") +}