aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/go/internal/modcmd/vendor.go
diff options
context:
space:
mode:
authorBryan C. Mills <bcmills@google.com>2020-11-17 22:13:35 -0500
committerBryan C. Mills <bcmills@google.com>2020-11-19 04:02:42 +0000
commitff2824d4b3391c644b264273f98a47302e2d4ab6 (patch)
tree6db2177c585df0a551c35d37984365996f099531 /src/cmd/go/internal/modcmd/vendor.go
parent0bb6115dd6246c047335a75ce4b01a07c291befd (diff)
downloadgo-ff2824d4b3391c644b264273f98a47302e2d4ab6.tar.gz
go-ff2824d4b3391c644b264273f98a47302e2d4ab6.zip
cmd/go/internal/modcmd: eliminate a call to modload.LoadedModules
modload.LoadedModules reveals more information than necessary about whether modules have been loaded lazily. The 'vendor' subcommand doesn't actually need that much information: it has all of the information that it needs from prior calls to LoadPackages and ModFile. For #36460 Change-Id: If08733cca930b2b80616b037b63985ecfd6a320b Reviewed-on: https://go-review.googlesource.com/c/go/+/270979 Trust: Bryan C. Mills <bcmills@google.com> Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Jay Conrod <jayconrod@google.com>
Diffstat (limited to 'src/cmd/go/internal/modcmd/vendor.go')
-rw-r--r--src/cmd/go/internal/modcmd/vendor.go48
1 files changed, 29 insertions, 19 deletions
diff --git a/src/cmd/go/internal/modcmd/vendor.go b/src/cmd/go/internal/modcmd/vendor.go
index 1b9ce60529..4e73960e80 100644
--- a/src/cmd/go/internal/modcmd/vendor.go
+++ b/src/cmd/go/internal/modcmd/vendor.go
@@ -73,7 +73,7 @@ func runVendor(ctx context.Context, cmd *base.Command, args []string) {
modpkgs := make(map[module.Version][]string)
for _, pkg := range pkgs {
m := modload.PackageModule(pkg)
- if m == modload.Target {
+ if m.Path == "" || m == modload.Target {
continue
}
modpkgs[m] = append(modpkgs[m], pkg)
@@ -91,28 +91,38 @@ func runVendor(ctx context.Context, cmd *base.Command, args []string) {
includeAllReplacements = true
}
+ var vendorMods []module.Version
+ for m := range isExplicit {
+ vendorMods = append(vendorMods, m)
+ }
+ for m := range modpkgs {
+ if !isExplicit[m] {
+ vendorMods = append(vendorMods, m)
+ }
+ }
+ module.Sort(vendorMods)
+
var buf bytes.Buffer
- for _, m := range modload.LoadedModules()[1:] {
- if pkgs := modpkgs[m]; len(pkgs) > 0 || isExplicit[m] {
- line := moduleLine(m, modload.Replacement(m))
- buf.WriteString(line)
+ for _, m := range vendorMods {
+ line := moduleLine(m, modload.Replacement(m))
+ buf.WriteString(line)
+ if cfg.BuildV {
+ os.Stderr.WriteString(line)
+ }
+ if isExplicit[m] {
+ buf.WriteString("## explicit\n")
if cfg.BuildV {
- os.Stderr.WriteString(line)
- }
- if isExplicit[m] {
- buf.WriteString("## explicit\n")
- if cfg.BuildV {
- os.Stderr.WriteString("## explicit\n")
- }
+ os.Stderr.WriteString("## explicit\n")
}
- sort.Strings(pkgs)
- for _, pkg := range pkgs {
- fmt.Fprintf(&buf, "%s\n", pkg)
- if cfg.BuildV {
- fmt.Fprintf(os.Stderr, "%s\n", pkg)
- }
- vendorPkg(vdir, pkg)
+ }
+ 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)
}
+ vendorPkg(vdir, pkg)
}
}