cmd/go: do not fix, fmt, or generate in dependency modules
diff --git a/vendor/cmd/go/internal/fix/fix.go b/vendor/cmd/go/internal/fix/fix.go index 99c7ca5..56f8832 100644 --- a/vendor/cmd/go/internal/fix/fix.go +++ b/vendor/cmd/go/internal/fix/fix.go
@@ -10,6 +10,9 @@ "cmd/go/internal/cfg" "cmd/go/internal/load" "cmd/go/internal/str" + "cmd/go/internal/vgo" + "fmt" + "os" ) var CmdFix = &base.Command{ @@ -29,7 +32,15 @@ } func runFix(cmd *base.Command, args []string) { + printed := false for _, pkg := range load.Packages(args) { + if vgo.Enabled() && !pkg.Module.Top { + if !printed { + fmt.Fprintf(os.Stderr, "vgo: not fixing packages in dependency modules\n") + printed = true + } + continue + } // Use pkg.gofiles instead of pkg.Dir so that // the command only applies to this package, // not to packages in subdirectories.
diff --git a/vendor/cmd/go/internal/fmtcmd/fmt.go b/vendor/cmd/go/internal/fmtcmd/fmt.go index eb96823..c3a90d0 100644 --- a/vendor/cmd/go/internal/fmtcmd/fmt.go +++ b/vendor/cmd/go/internal/fmtcmd/fmt.go
@@ -6,6 +6,7 @@ package fmtcmd import ( + "fmt" "os" "path/filepath" "runtime" @@ -16,6 +17,7 @@ "cmd/go/internal/cfg" "cmd/go/internal/load" "cmd/go/internal/str" + "cmd/go/internal/vgo" ) func init() { @@ -43,6 +45,7 @@ } func runFmt(cmd *base.Command, args []string) { + printed := false gofmt := gofmtPath() procs := runtime.GOMAXPROCS(0) var wg sync.WaitGroup @@ -57,6 +60,13 @@ }() } for _, pkg := range load.PackagesAndErrors(args) { + if vgo.Enabled() && !pkg.Module.Top { + if !printed { + fmt.Fprintf(os.Stderr, "vgo: not formatting packages in dependency modules\n") + printed = true + } + continue + } if pkg.Error != nil { if strings.HasPrefix(pkg.Error.Err, "build constraints exclude all Go files") { // Skip this error, as we will format
diff --git a/vendor/cmd/go/internal/generate/generate.go b/vendor/cmd/go/internal/generate/generate.go index 75c0d3b..e839f0b 100644 --- a/vendor/cmd/go/internal/generate/generate.go +++ b/vendor/cmd/go/internal/generate/generate.go
@@ -21,6 +21,7 @@ "cmd/go/internal/base" "cmd/go/internal/cfg" "cmd/go/internal/load" + "cmd/go/internal/vgo" "cmd/go/internal/work" ) @@ -152,7 +153,15 @@ } } // Even if the arguments are .go files, this loop suffices. + printed := false for _, pkg := range load.Packages(args) { + if vgo.Enabled() && !pkg.Module.Top { + if !printed { + fmt.Fprintf(os.Stderr, "vgo: not generating in packages in dependency modules\n") + printed = true + } + continue + } for _, file := range pkg.InternalGoFiles() { if !generate(pkg.Name, file) { break
diff --git a/vendor/cmd/go/internal/load/pkg.go b/vendor/cmd/go/internal/load/pkg.go index f49dfdb..124e42e 100644 --- a/vendor/cmd/go/internal/load/pkg.go +++ b/vendor/cmd/go/internal/load/pkg.go
@@ -20,6 +20,7 @@ "cmd/go/internal/base" "cmd/go/internal/cfg" + "cmd/go/internal/modinfo" "cmd/go/internal/search" "cmd/go/internal/str" "cmd/go/internal/vgo" @@ -96,6 +97,8 @@ TestImports []string `json:",omitempty"` // imports from TestGoFiles XTestGoFiles []string `json:",omitempty"` // _test.go files outside package XTestImports []string `json:",omitempty"` // imports from XTestGoFiles + + Module modinfo.ModulePublic } // AllFiles returns the names of all the files considered for the package. @@ -138,7 +141,7 @@ OmitDebug bool // tell linker not to write debug information GobinSubdir bool // install target would be subdir of GOBIN - ModuleInfo string // add this ModuleInfo to package main + BuildInfo string // add this info to package main Asmflags []string // -asmflags for this package Gcflags []string // -gcflags for this package @@ -1198,8 +1201,9 @@ return } + p.Module = vgo.PackageModuleInfo(p.ImportPath) if p.Name == "main" { - p.Internal.ModuleInfo = vgo.PackageModuleInfo(p.ImportPath, p.Deps) + p.Internal.BuildInfo = vgo.PackageBuildInfo(p.ImportPath, p.Deps) } }
diff --git a/vendor/cmd/go/internal/modinfo/info.go b/vendor/cmd/go/internal/modinfo/info.go new file mode 100644 index 0000000..6dff2d2 --- /dev/null +++ b/vendor/cmd/go/internal/modinfo/info.go
@@ -0,0 +1,11 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package modinfo + +type ModulePublic struct { + Top bool + Path string + Version string +}
diff --git a/vendor/cmd/go/internal/vgo/build.go b/vendor/cmd/go/internal/vgo/build.go index 37d14f3..46c0618 100644 --- a/vendor/cmd/go/internal/vgo/build.go +++ b/vendor/cmd/go/internal/vgo/build.go
@@ -7,6 +7,7 @@ import ( "bytes" "cmd/go/internal/base" + "cmd/go/internal/modinfo" "cmd/go/internal/module" "cmd/go/internal/search" "encoding/hex" @@ -18,7 +19,19 @@ infoEnd, _ = hex.DecodeString("f932433186182072008242104116d8f2") ) -func PackageModuleInfo(path string, deps []string) string { +func PackageModuleInfo(path string) modinfo.ModulePublic { + var info modinfo.ModulePublic + if search.IsStandardImportPath(path) { + return info + } + target := findModule(path, path) + info.Top = target.Path == buildList[0].Path + info.Path = target.Path + info.Version = target.Version + return info +} + +func PackageBuildInfo(path string, deps []string) string { if search.IsStandardImportPath(path) { return "" } @@ -49,6 +62,7 @@ mv = "(devel)" } fmt.Fprintf(&buf, "dep\t%s\t%s\t%s\n", mod.Path, mod.Version, findModHash(mod)) + // TODO: replacements } return buf.String() }
diff --git a/vendor/cmd/go/internal/work/build.go b/vendor/cmd/go/internal/work/build.go index c6ab084..a9274db 100644 --- a/vendor/cmd/go/internal/work/build.go +++ b/vendor/cmd/go/internal/work/build.go
@@ -5,9 +5,11 @@ package work import ( + "bytes" "errors" "fmt" "go/build" + "io/ioutil" "os" "os/exec" "path" @@ -271,7 +273,24 @@ var pkgsFilter = func(pkgs []*load.Package) []*load.Package { return pkgs } -var runtimeVersion = runtime.Version() +var runtimeVersion = getRuntimeVersion() + +func getRuntimeVersion() string { + data, err := ioutil.ReadFile(filepath.Join(cfg.GOROOT, "src/runtime/internal/sys/zversion.go")) + if err != nil { + base.Fatalf("vgo: %v", err) + } + i := bytes.Index(data, []byte("TheVersion = `")) + if i < 0 { + base.Fatalf("vgo: cannot find TheVersion") + } + data = data[i+len("TheVersion = `"):] + j := bytes.IndexByte(data, '`') + if j < 0 { + base.Fatalf("vgo: cannot find TheVersion") + } + return string(data[:j]) +} func runBuild(cmd *base.Command, args []string) { BuildInit()
diff --git a/vendor/cmd/go/internal/work/exec.go b/vendor/cmd/go/internal/work/exec.go index 1c47bfd..a1d68d2 100644 --- a/vendor/cmd/go/internal/work/exec.go +++ b/vendor/cmd/go/internal/work/exec.go
@@ -299,7 +299,7 @@ } } - fmt.Fprintf(h, "moduleinfo %q\n", p.Internal.ModuleInfo) + fmt.Fprintf(h, "buildinfo %q\n", p.Internal.BuildInfo) return h.Sum() } @@ -579,8 +579,8 @@ } // TODO(vgo): If have module info, write file to objdir, add to gofiles. - if p.Internal.ModuleInfo != "" { - if err := b.writeFile(objdir+"_gomod_.go", vgo.ModInfoProg(p.Internal.ModuleInfo)); err != nil { + if p.Internal.BuildInfo != "" { + if err := b.writeFile(objdir+"_gomod_.go", vgo.ModInfoProg(p.Internal.BuildInfo)); err != nil { return err } gofiles = append(gofiles, objdir+"_gomod_.go")