update
This commit is contained in:
parent
d80dfa6ef4
commit
cd302c790d
16
cmd/build.go
16
cmd/build.go
@ -25,7 +25,6 @@ import (
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/qiniu/goc/pkg/build"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
@ -51,8 +50,12 @@ goc build -- -o /to/this/path
|
||||
goc build -- -ldflags "-extldflags -static" -tags="embed kodo"
|
||||
`,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
newgopath, newwd, tmpdir, pkgs := build.MvProjectsToTmp(target, args)
|
||||
doCover(cmd, args, newgopath, tmpdir)
|
||||
|
||||
return
|
||||
/*
|
||||
gocbuild := build.NewInstall(buildFlags, packages)
|
||||
newgopath, newwd, tmpdir, _ := gocbuild.MvProjectsToTmp()
|
||||
doCover("args", newgopath, tmpdir)
|
||||
newArgs, modified := modifyOutputArg(args)
|
||||
doBuild(newArgs, newgopath, newwd)
|
||||
|
||||
@ -60,14 +63,15 @@ goc build -- -ldflags "-extldflags -static" -tags="embed kodo"
|
||||
// find the binary in temp build dir
|
||||
// and copy them into original dir
|
||||
if false == modified {
|
||||
build.MvBinaryToOri(pkgs, tmpdir)
|
||||
// build.MvBinaryToOri(pkgs, tmpdir)
|
||||
}
|
||||
|
||||
*/
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
buildCmd.Flags().StringVarP(¢er, "center", "", "http://127.0.0.1:7777", "cover profile host center")
|
||||
|
||||
addBuildFlags(buildCmd.Flags())
|
||||
rootCmd.AddCommand(buildCmd)
|
||||
}
|
||||
|
||||
|
@ -46,6 +46,6 @@ goc clear --center=http://192.168.1.1:8080
|
||||
}
|
||||
|
||||
func init() {
|
||||
clearCmd.Flags().StringVarP(¢er, "center", "", "http://127.0.0.1:7777", "cover profile host center")
|
||||
addBasicFlags(clearCmd.Flags())
|
||||
rootCmd.AddCommand(clearCmd)
|
||||
}
|
||||
|
49
cmd/commonflags.go
Normal file
49
cmd/commonflags.go
Normal file
@ -0,0 +1,49 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"github.com/spf13/pflag"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
var (
|
||||
target string
|
||||
center string
|
||||
mode string
|
||||
debugGoc bool
|
||||
buildFlags string
|
||||
packages string
|
||||
appArgs string
|
||||
)
|
||||
|
||||
// addBasicFlags adds a
|
||||
func addBasicFlags(cmdset *pflag.FlagSet) *pflag.FlagSet {
|
||||
cmdset.StringVar(¢er, "center", "http://127.0.0.1:7777", "cover profile host center")
|
||||
// bind to viper
|
||||
viper.BindPFlags(cmdset)
|
||||
return cmdset
|
||||
}
|
||||
|
||||
func addCommonFlags(cmdset *pflag.FlagSet) *pflag.FlagSet {
|
||||
addBasicFlags(cmdset)
|
||||
cmdset.StringVar(&mode, "mode", "count", "coverage mode: set, count, atomic")
|
||||
cmdset.StringVar(&buildFlags, "buildflags", "", "specify the build flags")
|
||||
// bind to viper
|
||||
viper.BindPFlags(cmdset)
|
||||
return cmdset
|
||||
}
|
||||
|
||||
func addBuildFlags(cmdset *pflag.FlagSet) *pflag.FlagSet {
|
||||
addCommonFlags(cmdset)
|
||||
cmdset.StringVar(&packages, "packages", ".", "specify the package name, only . and ./... are supported")
|
||||
// bind to viper
|
||||
viper.BindPFlags(cmdset)
|
||||
return cmdset
|
||||
}
|
||||
|
||||
func addRunFlags(cmdset *pflag.FlagSet) {
|
||||
addBuildFlags(cmdset)
|
||||
cmdset.Lookup("packages").Usage = "specify the package name, only ., ./... and *.go are supported"
|
||||
cmdset.StringVar(&appArgs, "appargs", "", "specify the application's arguments")
|
||||
// bind to viper
|
||||
viper.BindPFlags(cmdset)
|
||||
}
|
30
cmd/cover.go
30
cmd/cover.go
@ -18,6 +18,7 @@ package cmd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/spf13/viper"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
@ -40,7 +41,10 @@ goc cover --center=http://127.0.0.1:7777
|
||||
# Do cover for the target path, cover mode: atomic.
|
||||
goc cover --center=http://127.0.0.1:7777 --target=/path/to/target --mode=atomic
|
||||
`,
|
||||
Hidden: true,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
var buildFlags string
|
||||
buildFlags = viper.GetString("buildflags")
|
||||
if mode == "" {
|
||||
log.Fatalf("Error: flag needs an argument: -mode %v", mode)
|
||||
}
|
||||
@ -48,39 +52,27 @@ goc cover --center=http://127.0.0.1:7777 --target=/path/to/target --mode=atomic
|
||||
log.Fatalf("unknown -mode %v", mode)
|
||||
}
|
||||
|
||||
doCover(cmd, args, "", "")
|
||||
doCover(buildFlags, "", target)
|
||||
},
|
||||
}
|
||||
|
||||
var (
|
||||
target string
|
||||
center string
|
||||
mode string
|
||||
)
|
||||
|
||||
func init() {
|
||||
coverCmd.Flags().StringVarP(¢er, "center", "", "http://127.0.0.1:7777", "cover profile host center")
|
||||
coverCmd.Flags().StringVarP(&target, "target", "", ".", "target folder to cover")
|
||||
coverCmd.Flags().StringVarP(&mode, "mode", "", "count", "coverage mode: set, count, atomic")
|
||||
|
||||
coverCmd.Flags().StringVar(&target, "target", ".", "target folder to cover")
|
||||
addCommonFlags(coverCmd.Flags())
|
||||
rootCmd.AddCommand(coverCmd)
|
||||
log.SetFlags(log.LstdFlags | log.Lshortfile)
|
||||
}
|
||||
|
||||
func doCover(cmd *cobra.Command, args []string, newgopath string, newtarget string) {
|
||||
if newtarget != "" {
|
||||
target = newtarget
|
||||
}
|
||||
func doCover(args string, newgopath string, target string) {
|
||||
if !isDirExist(target) {
|
||||
log.Fatalf("target directory %s not exist", target)
|
||||
}
|
||||
|
||||
listArgs := []string{"list", "-json"}
|
||||
listArgs := []string{"-json"}
|
||||
if len(args) != 0 {
|
||||
listArgs = append(listArgs, args...)
|
||||
listArgs = append(listArgs, args)
|
||||
}
|
||||
listArgs = append(listArgs, "./...")
|
||||
pkgs := cover.ListPackages(target, listArgs, newgopath)
|
||||
pkgs := cover.ListPackages(target, strings.Join(listArgs, " "), newgopath)
|
||||
|
||||
var seen = make(map[string]*cover.PackageCover)
|
||||
var seenCache = make(map[string]*cover.PackageCover)
|
||||
|
@ -34,6 +34,6 @@ var initCmd = &cobra.Command{
|
||||
}
|
||||
|
||||
func init() {
|
||||
initCmd.Flags().StringVarP(¢er, "center", "", "http://127.0.0.1:7777", "cover profile host center")
|
||||
addBasicFlags(initCmd.Flags())
|
||||
rootCmd.AddCommand(initCmd)
|
||||
}
|
||||
|
@ -17,14 +17,7 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strings"
|
||||
|
||||
"github.com/qiniu/goc/pkg/build"
|
||||
"github.com/qiniu/goc/pkg/cover"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
@ -38,44 +31,26 @@ To pass origial go build flags to goc command, place them after "--", see exampl
|
||||
`,
|
||||
Example: `
|
||||
# Install all binaries with cover variables injected. The binary will be installed in $GOPATH/bin or $HOME/go/bin if directory existed.
|
||||
goc install -- ./...
|
||||
goc install --packages="./..."
|
||||
|
||||
# Install the current binary with cover variables injected, and set the registry center to http://127.0.0.1:7777.
|
||||
goc install --center=http://127.0.0.1:7777
|
||||
|
||||
# Install the current binary with cover variables injected, and set necessary build flags: -ldflags "-extldflags -static" -tags="embed kodo".
|
||||
goc build -- -ldflags "-extldflags -static" -tags="embed kodo"
|
||||
goc build --buildflags="-ldflags '-extldflags -static' -tags='embed kodo'"
|
||||
`,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
newgopath, newwd, tmpdir, pkgs := build.MvProjectsToTmp(target, args)
|
||||
doCover(cmd, args, newgopath, tmpdir)
|
||||
doInstall(args, newgopath, newwd, pkgs)
|
||||
gocbuild := build.NewInstall(buildFlags, packages)
|
||||
gocbuild.MvProjectsToTmp()
|
||||
// doCover with original buildFlags, with new GOPATH( tmp:original )
|
||||
// in the tmp directory
|
||||
doCover(buildFlags, gocbuild.NewGOPATH, gocbuild.TmpDir)
|
||||
//
|
||||
gocbuild.Install()
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
installCmd.Flags().StringVarP(¢er, "center", "", "http://127.0.0.1:7777", "cover profile host center")
|
||||
|
||||
addBuildFlags(installCmd.Flags())
|
||||
rootCmd.AddCommand(installCmd)
|
||||
}
|
||||
|
||||
func doInstall(args []string, newgopath string, newworkingdir string, pkgs map[string]*cover.Package) {
|
||||
log.Println("Go building in temp...")
|
||||
newArgs := []string{"install"}
|
||||
newArgs = append(newArgs, args...)
|
||||
cmd := exec.Command("go", newArgs...)
|
||||
cmd.Dir = newworkingdir
|
||||
|
||||
// Change the temp GOBIN, to force binary install to original place
|
||||
cmd.Env = append(os.Environ(), fmt.Sprintf("GOBIN=%v", build.FindWhereToInstall(pkgs)))
|
||||
if newgopath != "" {
|
||||
// Change to temp GOPATH for go install command
|
||||
cmd.Env = append(cmd.Env, fmt.Sprintf("GOPATH=%v", newgopath))
|
||||
}
|
||||
|
||||
out, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
log.Fatalf("Fail to execute: go install %v. The error is: %v, the stdout/stderr is: %v", strings.Join(args, " "), err, string(out))
|
||||
}
|
||||
log.Printf("Go install successful. Binary installed in: %v", build.FindWhereToInstall(pkgs))
|
||||
}
|
||||
|
@ -70,6 +70,6 @@ var output string
|
||||
|
||||
func init() {
|
||||
profileCmd.Flags().StringVarP(&output, "output", "o", "", "download cover profile")
|
||||
profileCmd.Flags().StringVarP(¢er, "center", "", "http://127.0.0.1:7777", "cover profile host center")
|
||||
addBasicFlags(profileCmd.Flags())
|
||||
rootCmd.AddCommand(profileCmd)
|
||||
}
|
||||
|
15
cmd/root.go
15
cmd/root.go
@ -17,6 +17,7 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"log"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
@ -28,8 +29,20 @@ var rootCmd = &cobra.Command{
|
||||
Long: `goc is a comprehensive coverage testing tool for go language.
|
||||
|
||||
Find more information at:
|
||||
https://github.com/qbox/goc
|
||||
https://github.com/qiniu/goc
|
||||
`,
|
||||
PersistentPreRun: func(cmd *cobra.Command, args []string) {
|
||||
log.SetFlags(log.LstdFlags | log.Lshortfile)
|
||||
if debugGoc == false {
|
||||
// we only need log in debug mode
|
||||
log.SetOutput(ioutil.Discard)
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
rootCmd.PersistentFlags().BoolVar(&debugGoc, "debuggoc", false, "turn goc into debug mode")
|
||||
rootCmd.PersistentFlags().MarkHidden("debuggoc")
|
||||
}
|
||||
|
||||
// Execute the goc tool
|
||||
|
2
go.mod
2
go.mod
@ -16,6 +16,8 @@ require (
|
||||
github.com/qiniu/api.v7/v7 v7.5.0
|
||||
github.com/sirupsen/logrus v1.4.2
|
||||
github.com/spf13/cobra v1.0.0
|
||||
github.com/spf13/pflag v1.0.5
|
||||
github.com/spf13/viper v1.6.2
|
||||
github.com/stretchr/testify v1.5.1
|
||||
golang.org/x/net v0.0.0-20200301022130-244492dfa37a
|
||||
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d
|
||||
|
9
go.sum
9
go.sum
@ -410,6 +410,7 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ
|
||||
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||
github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
|
||||
github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
|
||||
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
||||
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
||||
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
|
||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||
@ -512,6 +513,7 @@ github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFW
|
||||
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||
github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo=
|
||||
github.com/mitchellh/ioprogress v0.0.0-20180201004757-6a23b12fa88e/go.mod h1:waEya8ee1Ro/lgxpVhkJI4BVASzkm3UZqkx/cFJiYHM=
|
||||
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
|
||||
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||
github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A=
|
||||
github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
|
||||
@ -576,6 +578,7 @@ github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT9
|
||||
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
|
||||
github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo=
|
||||
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
||||
github.com/pelletier/go-toml v1.6.0 h1:aetoXYr0Tv7xRU/V4B4IZJ2QcbtMUFoNb3ORp7TzIK4=
|
||||
github.com/pelletier/go-toml v1.6.0/go.mod h1:5N711Q9dKgbdkxHL+MEfF31hpT7l0S0s/t2kKREewys=
|
||||
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
|
||||
github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE=
|
||||
@ -656,8 +659,10 @@ github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9
|
||||
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
|
||||
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
|
||||
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
|
||||
github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc=
|
||||
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
|
||||
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
||||
github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng=
|
||||
github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
||||
github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
|
||||
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
|
||||
@ -666,6 +671,7 @@ github.com/spf13/cobra v0.0.6/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHN
|
||||
github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8=
|
||||
github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
|
||||
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
|
||||
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
|
||||
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
|
||||
github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||
github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||
@ -676,6 +682,7 @@ github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
|
||||
github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
|
||||
github.com/spf13/viper v1.6.2 h1:7aKfF+e8/k68gda3LOjo5RxiUqddoFxVq4BKBPrxk5E=
|
||||
github.com/spf13/viper v1.6.2/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k=
|
||||
github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI=
|
||||
github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
|
||||
@ -688,6 +695,7 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
|
||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||
github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
|
||||
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
|
||||
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
|
||||
github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
|
||||
github.com/tektoncd/pipeline v0.11.0/go.mod h1:hlkH32S92+/UODROH0dmxzyuMxfRFp/Nc3e29MewLn8=
|
||||
@ -1009,6 +1017,7 @@ gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
|
||||
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
|
||||
gopkg.in/ini.v1 v1.46.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||
gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||
gopkg.in/ini.v1 v1.52.0 h1:j+Lt/M1oPPejkniCg1TkWE2J3Eh1oZTsHSXzMTzUXn4=
|
||||
gopkg.in/ini.v1 v1.52.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||
gopkg.in/jcmturner/aescts.v1 v1.0.1/go.mod h1:nsR8qBOg+OucoIW+WMhB3GspUQXq9XorLnQb9XtvcOo=
|
||||
gopkg.in/jcmturner/dnsutils.v1 v1.0.1/go.mod h1:m3v+5svpVOhtFAP/wSz+yzh4Mc0Fg7eRhxkJMWSIz9Q=
|
||||
|
@ -25,12 +25,12 @@ import (
|
||||
"github.com/qiniu/goc/pkg/cover"
|
||||
)
|
||||
|
||||
func MvBinaryToOri(pkgs map[string]*cover.Package, newgopath string) {
|
||||
for _, pkg := range pkgs {
|
||||
func (b *Build) MvBinaryToOri(pkgs map[string]*cover.Package) {
|
||||
for _, pkg := range b.Pkgs {
|
||||
if pkg.Name == "main" {
|
||||
_, binaryTarget := filepath.Split(pkg.Target)
|
||||
|
||||
binaryTmpPath := filepath.Join(getTmpwd(newgopath, pkgs, !checkIfLegacyProject(pkgs)), binaryTarget)
|
||||
binaryTmpPath := filepath.Join(b.TmpWorkingDir)
|
||||
|
||||
if false == checkIfFileExist(binaryTmpPath) {
|
||||
continue
|
||||
|
40
pkg/build/build.go
Normal file
40
pkg/build/build.go
Normal file
@ -0,0 +1,40 @@
|
||||
/*
|
||||
Copyright 2020 Qiniu Cloud (qiniu.com)
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package build
|
||||
|
||||
import "github.com/qiniu/goc/pkg/cover"
|
||||
|
||||
// Build is to describe the building/installing process of a goc build/install
|
||||
type Build struct {
|
||||
Pkgs map[string]*cover.Package //
|
||||
NewGOPATH string
|
||||
OriGOPATH string
|
||||
TmpDir string
|
||||
TmpWorkingDir string
|
||||
IsMod bool
|
||||
BuildFlags string
|
||||
Packages string
|
||||
Root string // Project Root
|
||||
}
|
||||
|
||||
func NewInstall(buildflags string, packages string) *Build {
|
||||
return &Build{
|
||||
BuildFlags: buildflags,
|
||||
Packages: packages,
|
||||
}
|
||||
}
|
||||
|
@ -20,13 +20,12 @@ import (
|
||||
"log"
|
||||
|
||||
"github.com/otiai10/copy"
|
||||
"github.com/qiniu/goc/pkg/cover"
|
||||
)
|
||||
|
||||
func cpGoModulesProject(tmpBuildDir string, pkgs map[string]*cover.Package) {
|
||||
for _, v := range pkgs {
|
||||
func (b *Build) cpGoModulesProject() {
|
||||
for _, v := range b.Pkgs {
|
||||
if v.Name == "main" {
|
||||
dst := tmpBuildDir
|
||||
dst := b.TmpDir
|
||||
src := v.Module.Dir
|
||||
|
||||
if err := copy.Copy(src, dst); err != nil {
|
||||
|
44
pkg/build/install.go
Normal file
44
pkg/build/install.go
Normal file
@ -0,0 +1,44 @@
|
||||
/*
|
||||
Copyright 2020 Qiniu Cloud (qiniu.com)
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package build
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
)
|
||||
|
||||
func (b *Build) Install() {
|
||||
log.Println("Go building in temp...")
|
||||
cmd := exec.Command("/bin/bash", "-c", "go install " + b.BuildFlags + " " + b.Packages)
|
||||
cmd.Dir = b.TmpWorkingDir
|
||||
|
||||
// Change the temp GOBIN, to force binary install to original place
|
||||
cmd.Env = append(os.Environ(), fmt.Sprintf("GOBIN=%v", b.findWhereToInstall()))
|
||||
if b.NewGOPATH != "" {
|
||||
// Change to temp GOPATH for go install command
|
||||
cmd.Env = append(cmd.Env, fmt.Sprintf("GOPATH=%v", b.NewGOPATH))
|
||||
}
|
||||
|
||||
log.Printf("go install cmd is: %v", cmd.Args)
|
||||
out, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
log.Fatalf("Fail to execute: %v. The error is: %v, the stdout/stderr is: %v", cmd.Args, err, string(out))
|
||||
}
|
||||
log.Printf("Go install successful. Binary installed in: %v", b.findWhereToInstall())
|
||||
}
|
@ -25,10 +25,10 @@ import (
|
||||
"github.com/qiniu/goc/pkg/cover"
|
||||
)
|
||||
|
||||
func cpLegacyProject(tmpBuildDir string, pkgs map[string]*cover.Package) {
|
||||
func (b *Build) cpLegacyProject() {
|
||||
visited := make(map[string]bool)
|
||||
for k, v := range pkgs {
|
||||
dst := filepath.Join(tmpBuildDir, "src", k)
|
||||
for k, v := range b.Pkgs {
|
||||
dst := filepath.Join(b.TmpDir, "src", k)
|
||||
src := v.Dir
|
||||
|
||||
if _, ok := visited[src]; ok {
|
||||
@ -42,13 +42,13 @@ func cpLegacyProject(tmpBuildDir string, pkgs map[string]*cover.Package) {
|
||||
|
||||
visited[src] = true
|
||||
|
||||
cpDepPackages(tmpBuildDir, v, visited)
|
||||
b.cpDepPackages(v, visited)
|
||||
}
|
||||
}
|
||||
|
||||
// only cp dependency in root(current gopath),
|
||||
// skip deps in other GOPATHs
|
||||
func cpDepPackages(tmpBuildDir string, pkg *cover.Package, visited map[string]bool) {
|
||||
func (b *Build) cpDepPackages( pkg *cover.Package, visited map[string]bool) {
|
||||
/*
|
||||
oriGOPATH := os.Getenv("GOPATH")
|
||||
if oriGOPATH == "" {
|
||||
@ -70,7 +70,7 @@ func cpDepPackages(tmpBuildDir string, pkg *cover.Package, visited map[string]bo
|
||||
continue
|
||||
}
|
||||
|
||||
dst := filepath.Join(tmpBuildDir, "src", dep)
|
||||
dst := filepath.Join(b.TmpDir, "src", dep)
|
||||
|
||||
if err := copy.Copy(src, dst); err != nil {
|
||||
log.Printf("Failed to Copy the folder from %v to %v, the error is: %v ", src, dst, err)
|
||||
|
@ -27,56 +27,53 @@ import (
|
||||
"github.com/qiniu/goc/pkg/cover"
|
||||
)
|
||||
|
||||
func MvProjectsToTmp(target string, args []string) (newGopath string, newWorkingDir string, tmpBuildDir string, pkgs map[string]*cover.Package) {
|
||||
listArgs := []string{"list", "-json"}
|
||||
if len(args) != 0 {
|
||||
listArgs = append(listArgs, args...)
|
||||
func (b *Build) MvProjectsToTmp() (newGopath string, newWorkingDir string, tmpBuildDir string, pkgs map[string]*cover.Package) {
|
||||
listArgs := []string{"-json"}
|
||||
if len(b.BuildFlags) != 0 {
|
||||
listArgs = append(listArgs, b.BuildFlags)
|
||||
}
|
||||
listArgs = append(listArgs, "./...")
|
||||
pkgs = cover.ListPackages(target, listArgs, "")
|
||||
b.Pkgs = cover.ListPackages(".", strings.Join(listArgs, " "), "")
|
||||
|
||||
tmpBuildDir, newWorkingDir, isMod := mvProjectsToTmp(pkgs)
|
||||
b.mvProjectsToTmp()
|
||||
oriGopath := os.Getenv("GOPATH")
|
||||
if isMod == true {
|
||||
newGopath = ""
|
||||
if b.IsMod == true {
|
||||
b.NewGOPATH = ""
|
||||
} else if oriGopath == "" {
|
||||
newGopath = tmpBuildDir
|
||||
b.NewGOPATH = b.TmpDir
|
||||
} else {
|
||||
newGopath = fmt.Sprintf("%v:%v", tmpBuildDir, oriGopath)
|
||||
b.NewGOPATH = fmt.Sprintf("%v:%v", b.TmpDir, oriGopath)
|
||||
}
|
||||
log.Printf("New GOPATH: %v", newGopath)
|
||||
log.Printf("New GOPATH: %v", b.NewGOPATH)
|
||||
return
|
||||
}
|
||||
|
||||
func mvProjectsToTmp(pkgs map[string]*cover.Package) (string, string, bool) {
|
||||
func (b *Build) mvProjectsToTmp() {
|
||||
path, err := os.Getwd()
|
||||
if err != nil {
|
||||
log.Fatalf("Cannot get current working directoy, the error is: %v", err)
|
||||
}
|
||||
tmpBuildDir := filepath.Join(os.TempDir(), TmpFolderName(path))
|
||||
b.TmpDir = filepath.Join(os.TempDir(), TmpFolderName(path))
|
||||
|
||||
// Delete previous tmp folder and its content
|
||||
os.RemoveAll(tmpBuildDir)
|
||||
os.RemoveAll(b.TmpDir)
|
||||
// Create a new tmp folder
|
||||
err = os.MkdirAll(filepath.Join(tmpBuildDir, "src"), os.ModePerm)
|
||||
err = os.MkdirAll(filepath.Join(b.TmpDir, "src"), os.ModePerm)
|
||||
if err != nil {
|
||||
log.Fatalf("Fail to create the temporary build directory. The err is: %v", err)
|
||||
}
|
||||
log.Printf("Temp project generated in: %v", tmpBuildDir)
|
||||
log.Printf("Tmp project generated in: %v", b.TmpDir)
|
||||
|
||||
isMod := false
|
||||
var tmpWorkingDir string
|
||||
if checkIfLegacyProject(pkgs) {
|
||||
cpLegacyProject(tmpBuildDir, pkgs)
|
||||
tmpWorkingDir = getTmpwd(tmpBuildDir, pkgs, false)
|
||||
// set Build.IsMod flag, so we dont have to call checkIfLegacyProject another time
|
||||
if b.checkIfLegacyProject() {
|
||||
b.cpLegacyProject()
|
||||
} else {
|
||||
cpGoModulesProject(tmpBuildDir, pkgs)
|
||||
tmpWorkingDir = getTmpwd(tmpBuildDir, pkgs, true)
|
||||
isMod = true
|
||||
b.IsMod = true
|
||||
b.cpGoModulesProject()
|
||||
}
|
||||
b.getTmpwd()
|
||||
|
||||
log.Printf("New working/building directory in: %v", tmpWorkingDir)
|
||||
return tmpBuildDir, tmpWorkingDir, isMod
|
||||
log.Printf("New workingdir in tmp directory in: %v", b.TmpWorkingDir)
|
||||
}
|
||||
|
||||
func TmpFolderName(path string) string {
|
||||
@ -86,11 +83,11 @@ func TmpFolderName(path string) string {
|
||||
return "goc-" + h
|
||||
}
|
||||
|
||||
// Check if it is go module project
|
||||
// checkIfLegacyProject Check if it is go module project
|
||||
// true legacy
|
||||
// false go mod
|
||||
func checkIfLegacyProject(pkgs map[string]*cover.Package) bool {
|
||||
for _, v := range pkgs {
|
||||
func (b *Build) checkIfLegacyProject() bool {
|
||||
for _, v := range b.Pkgs {
|
||||
if v.Module == nil {
|
||||
return true
|
||||
}
|
||||
@ -100,8 +97,10 @@ func checkIfLegacyProject(pkgs map[string]*cover.Package) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func getTmpwd(tmpBuildDir string, pkgs map[string]*cover.Package, isMod bool) string {
|
||||
for _, pkg := range pkgs {
|
||||
// getTmpwd get the corresponding working directory in the temporary working directory
|
||||
// and store it in the Build.tmpWorkdingDir
|
||||
func (b *Build) getTmpwd() {
|
||||
for _, pkg := range b.Pkgs {
|
||||
path, err := os.Getwd()
|
||||
if err != nil {
|
||||
log.Fatalf("Cannot get current working directory, the error is: %v", err)
|
||||
@ -109,7 +108,7 @@ func getTmpwd(tmpBuildDir string, pkgs map[string]*cover.Package, isMod bool) st
|
||||
|
||||
index := -1
|
||||
var parentPath string
|
||||
if isMod == false {
|
||||
if b.IsMod == false {
|
||||
index = strings.Index(path, pkg.Root)
|
||||
parentPath = pkg.Root
|
||||
} else {
|
||||
@ -120,24 +119,24 @@ func getTmpwd(tmpBuildDir string, pkgs map[string]*cover.Package, isMod bool) st
|
||||
if index == -1 {
|
||||
log.Fatalf("goc install not executed in project directory.")
|
||||
}
|
||||
tmpwd := filepath.Join(tmpBuildDir, path[len(parentPath):])
|
||||
b.TmpWorkingDir = filepath.Join(b.TmpDir, path[len(parentPath):])
|
||||
// log.Printf("New building directory in: %v", tmpwd)
|
||||
return tmpwd
|
||||
return
|
||||
}
|
||||
|
||||
log.Fatalln("Should never be reached....")
|
||||
return ""
|
||||
return
|
||||
}
|
||||
|
||||
func FindWhereToInstall(pkgs map[string]*cover.Package) string {
|
||||
func (b *Build) findWhereToInstall() string {
|
||||
if GOBIN := os.Getenv("GOBIN"); GOBIN != "" {
|
||||
return GOBIN
|
||||
}
|
||||
|
||||
// old GOPATH dir
|
||||
GOPATH := os.Getenv("GOPATH")
|
||||
if true == checkIfLegacyProject(pkgs) {
|
||||
for _, v := range pkgs {
|
||||
if false == b.IsMod {
|
||||
for _, v := range b.Pkgs {
|
||||
return filepath.Join(v.Root, "bin")
|
||||
}
|
||||
}
|
||||
|
@ -1,133 +0,0 @@
|
||||
/*
|
||||
Copyright 2020 Qiniu Cloud (qiniu.com)
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package build
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/qiniu/goc/pkg/cover"
|
||||
)
|
||||
|
||||
const TEST_GO_LIST_LEGACY = `{
|
||||
"Dir": "/Users/lyyyuna/gitup/linking/src/qiniu.com/linking/api/linking.v1",
|
||||
"ImportPath": "qiniu.com/linking/api/linking.v1",
|
||||
"Name": "linking",
|
||||
"Target": "/Users/lyyyuna/gitup/linking/pkg/darwin_amd64/qiniu.com/linking/api/linking.v1.a",
|
||||
"Root": "/Users/lyyyuna/gitup/linking",
|
||||
"Match": [
|
||||
"./..."
|
||||
],
|
||||
"Stale": true,
|
||||
"StaleReason": "stale dependency: vendor/github.com/modern-go/concurrent",
|
||||
"GoFiles": [
|
||||
"client.go"
|
||||
],
|
||||
"Imports": [
|
||||
"vendor/github.com/json-iterator/go",
|
||||
"github.com/qiniu/rpc.v2",
|
||||
"vendor/github.com/qiniu/xlog.v1",
|
||||
"vendor/qiniu.com/auth/qiniumac.v1"
|
||||
],
|
||||
"ImportMap": {
|
||||
"github.com/json-iterator/go": "vendor/github.com/json-iterator/go",
|
||||
"github.com/qiniu/xlog.v1": "vendor/github.com/qiniu/xlog.v1",
|
||||
"qiniu.com/auth/qiniumac.v1": "vendor/qiniu.com/auth/qiniumac.v1"
|
||||
},
|
||||
"Deps": [
|
||||
"bufio"
|
||||
]
|
||||
}`
|
||||
|
||||
const TEST_GO_LIST_MOD = `{
|
||||
"Dir": "/Users/lyyyuna/gitup/tonghu-chat",
|
||||
"ImportPath": "github.com/lyyyuna/tonghu-chat",
|
||||
"Name": "main",
|
||||
"Target": "/Users/lyyyuna/go/bin/tonghu-chat",
|
||||
"Root": "/Users/lyyyuna/gitup/tonghu-chat",
|
||||
"Module": {
|
||||
"Path": "github.com/lyyyuna/tonghu-chat",
|
||||
"Main": true,
|
||||
"Dir": "/Users/lyyyuna/gitup/tonghu-chat",
|
||||
"GoMod": "/Users/lyyyuna/gitup/tonghu-chat/go.mod",
|
||||
"GoVersion": "1.14"
|
||||
},
|
||||
"Match": [
|
||||
"./..."
|
||||
],
|
||||
"Stale": true,
|
||||
"StaleReason": "not installed but available in build cache",
|
||||
"GoFiles": [
|
||||
"main.go"
|
||||
],
|
||||
"Imports": [
|
||||
"github.com/gin-gonic/gin",
|
||||
"github.com/gorilla/websocket"
|
||||
],
|
||||
"Deps": [
|
||||
"bufio"
|
||||
]
|
||||
}`
|
||||
|
||||
func constructPkg(raw string) *cover.Package {
|
||||
var pkg cover.Package
|
||||
if err := json.Unmarshal([]byte(raw), &pkg); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return &pkg
|
||||
}
|
||||
|
||||
func TestLegacyProjectJudgement(t *testing.T) {
|
||||
pkgs := make(map[string]*cover.Package)
|
||||
pkg := constructPkg(TEST_GO_LIST_LEGACY)
|
||||
pkgs[pkg.ImportPath] = pkg
|
||||
if expect, got := true, checkIfLegacyProject(pkgs); expect != got {
|
||||
t.Fatalf("Expected %v, but got %v.", expect, got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestModProjectJudgement(t *testing.T) {
|
||||
pkgs := make(map[string]*cover.Package)
|
||||
pkg := constructPkg(TEST_GO_LIST_MOD)
|
||||
pkgs[pkg.ImportPath] = pkg
|
||||
if expect, got := false, checkIfLegacyProject(pkgs); expect != got {
|
||||
t.Fatalf("Expected %v, but got %v.", expect, got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewDirParseInLegacyProject(t *testing.T) {
|
||||
workingDir := "../../tests/samples/simple_gopath_project/src/qiniu.com/simple_gopath_project"
|
||||
gopath, _ := filepath.Abs("../../tests/samples/simple_gopath_project")
|
||||
|
||||
os.Chdir(workingDir)
|
||||
fmt.Println(gopath)
|
||||
os.Setenv("GOPATH", gopath)
|
||||
os.Setenv("GO111MODULE", "off")
|
||||
|
||||
newgopath, newwd, tmpdir, _ := MvProjectsToTmp(".", nil)
|
||||
if -1 == strings.Index(newwd, tmpdir) {
|
||||
t.Fatalf("Directory parse error. newwd: %v, tmpdir: %v", newwd, tmpdir)
|
||||
}
|
||||
|
||||
if -1 == strings.Index(newgopath, ":") || -1 == strings.Index(newgopath, tmpdir) {
|
||||
t.Fatalf("The New GOPATH is wrong. newgopath: %v, tmpdir: %v", newgopath, tmpdir)
|
||||
}
|
||||
}
|
@ -113,17 +113,18 @@ type PackageError struct {
|
||||
}
|
||||
|
||||
// ListPackages list all packages under specific via go list command
|
||||
func ListPackages(dir string, args []string, newgopath string) map[string]*Package {
|
||||
cmd := exec.Command("go", args...)
|
||||
// The argument newgopath is if you need to go list in a different GOPATH
|
||||
func ListPackages(dir string, args string, newgopath string) map[string]*Package {
|
||||
cmd := exec.Command("/bin/bash", "-c", "go list " + args)
|
||||
log.Printf("go list cmd is: %v", cmd.Args)
|
||||
cmd.Dir = dir
|
||||
if newgopath != "" {
|
||||
cmd.Env = append(os.Environ(), fmt.Sprintf("GOPATH=%v", newgopath))
|
||||
}
|
||||
out, _ := cmd.Output()
|
||||
// if err != nil {
|
||||
// log.Fatalf("excute `go list -json ./...` command failed, err: %v, out: %v", err, string(out))
|
||||
// }
|
||||
out, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
log.Fatalf("excute `go list -json ./...` command failed, err: %v, out: %v", err, string(out))
|
||||
}
|
||||
|
||||
dec := json.NewDecoder(bytes.NewReader(out))
|
||||
pkgs := make(map[string]*Package, 0)
|
||||
|
@ -63,7 +63,7 @@ var _ = Describe("E2E", func() {
|
||||
|
||||
By("goc install")
|
||||
testProjDir = filepath.Join(TESTS_ROOT, "samples/simple_project")
|
||||
cmd = exec.Command("goc", "install", "./...")
|
||||
cmd = exec.Command("goc", "install", "--debuggoc")
|
||||
cmd.Dir = testProjDir
|
||||
|
||||
out, err = cmd.CombinedOutput()
|
||||
@ -124,7 +124,7 @@ var _ = Describe("E2E", func() {
|
||||
|
||||
By("goc install")
|
||||
testProjDir = filepath.Join(TESTS_ROOT, "samples/simple_gopath_project")
|
||||
cmd = exec.Command("goc", "install", "./...")
|
||||
cmd = exec.Command("goc", "install", "--debuggoc")
|
||||
cmd.Dir = filepath.Join(testProjDir, "src/qiniu.com/simple_gopath_project")
|
||||
// use GOPATH mode to compile project
|
||||
cmd.Env = append(os.Environ(), fmt.Sprintf("GOPATH=%v", testProjDir), "GO111MODULE=off")
|
||||
|
Loading…
Reference in New Issue
Block a user