aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/go/internal/modcmd/vendor.go
diff options
context:
space:
mode:
authorBryan C. Mills <bcmills@google.com>2021-04-30 00:04:19 -0400
committerBryan C. Mills <bcmills@google.com>2021-04-30 18:07:24 +0000
commitc3365ad5f25043d6293f5cec1e71d1526678ac62 (patch)
tree3d3e4243e6595adde788b64769dff5891d3d2a11 /src/cmd/go/internal/modcmd/vendor.go
parent7dedc237c528fa268934a8ed81c01fc65db5f800 (diff)
downloadgo-c3365ad5f25043d6293f5cec1e71d1526678ac62.tar.gz
go-c3365ad5f25043d6293f5cec1e71d1526678ac62.zip
cmd/go: annotate versions in vendor/modules.txt
In order to prevent edit wars with previous cmd/go releases, the new version annotations are only included if the main module specifies 'go 1.17' or higher. Fixes #36876 Change-Id: Iba15e47dd1ac2c16d754679a9b501db4069fa250 Reviewed-on: https://go-review.googlesource.com/c/go/+/315409 Trust: Bryan C. Mills <bcmills@google.com> Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Michael Matloob <matloob@golang.org>
Diffstat (limited to 'src/cmd/go/internal/modcmd/vendor.go')
-rw-r--r--src/cmd/go/internal/modcmd/vendor.go57
1 files changed, 37 insertions, 20 deletions
diff --git a/src/cmd/go/internal/modcmd/vendor.go b/src/cmd/go/internal/modcmd/vendor.go
index 6ebc18dcd8..86eab89065 100644
--- a/src/cmd/go/internal/modcmd/vendor.go
+++ b/src/cmd/go/internal/modcmd/vendor.go
@@ -88,15 +88,23 @@ func runVendor(ctx context.Context, cmd *base.Command, args []string) {
}
includeAllReplacements := false
+ includeGoVersions := false
isExplicit := map[module.Version]bool{}
- if gv := modload.ModFile().Go; gv != nil && semver.Compare("v"+gv.Version, "v1.14") >= 0 {
- // If the Go version is at least 1.14, annotate all explicit 'require' and
- // 'replace' targets found in the go.mod file so that we can perform a
- // stronger consistency check when -mod=vendor is set.
- for _, r := range modload.ModFile().Require {
- isExplicit[r.Mod] = true
+ if gv := modload.ModFile().Go; gv != nil {
+ if semver.Compare("v"+gv.Version, "v1.14") >= 0 {
+ // If the Go version is at least 1.14, annotate all explicit 'require' and
+ // 'replace' targets found in the go.mod file so that we can perform a
+ // stronger consistency check when -mod=vendor is set.
+ for _, r := range modload.ModFile().Require {
+ isExplicit[r.Mod] = true
+ }
+ includeAllReplacements = true
+ }
+ if semver.Compare("v"+gv.Version, "v1.17") >= 0 {
+ // If the Go version is at least 1.17, annotate all modules with their
+ // 'go' version directives.
+ includeGoVersions = true
}
- includeAllReplacements = true
}
var vendorMods []module.Version
@@ -110,26 +118,35 @@ func runVendor(ctx context.Context, cmd *base.Command, args []string) {
}
module.Sort(vendorMods)
- var buf bytes.Buffer
+ var (
+ buf bytes.Buffer
+ w io.Writer = &buf
+ )
+ if cfg.BuildV {
+ w = io.MultiWriter(&buf, os.Stderr)
+ }
+
for _, m := range vendorMods {
line := moduleLine(m, modload.Replacement(m))
- buf.WriteString(line)
- if cfg.BuildV {
- os.Stderr.WriteString(line)
+ io.WriteString(w, line)
+
+ goVersion := ""
+ if includeGoVersions {
+ goVersion = modload.ModuleInfo(ctx, m.Path).GoVersion
}
- if isExplicit[m] {
- buf.WriteString("## explicit\n")
- if cfg.BuildV {
- os.Stderr.WriteString("## explicit\n")
- }
+ switch {
+ case isExplicit[m] && goVersion != "":
+ fmt.Fprintf(w, "## explicit; go %s\n", goVersion)
+ case isExplicit[m]:
+ io.WriteString(w, "## explicit\n")
+ case goVersion != "":
+ fmt.Fprintf(w, "## go %s\n", goVersion)
}
+
pkgs := modpkgs[m]
sort.Strings(pkgs)
for _, pkg := range pkgs {
- fmt.Fprintf(&buf, "%s\n", pkg)
- if cfg.BuildV {
- fmt.Fprintf(os.Stderr, "%s\n", pkg)
- }
+ fmt.Fprintf(w, "%s\n", pkg)
vendorPkg(vdir, pkg)
}
}