mirror of
https://github.com/golang/go
synced 2024-11-23 20:50:04 -07:00
cmd/go: allow -mod=vendor to be set outside of a module
It will behave as if teh command-line-arguments module was vendored, with zero dependencies, much as -mod=readonly works. Fixes #56536 Change-Id: Ia02dda2f90d006b5917c3ae002ccb714987f27a3 Reviewed-on: https://go-review.googlesource.com/c/go/+/448019 Reviewed-by: Michael Matloob <matloob@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Bryan Mills <bcmills@google.com> Run-TryBot: Michael Matloob <matloob@golang.org>
This commit is contained in:
parent
e87e799767
commit
f57ebed351
@ -316,18 +316,22 @@ func importFromModules(ctx context.Context, path string, rs *Requirements, mg *M
|
||||
if cfg.BuildMod == "vendor" {
|
||||
mainModule := MainModules.mustGetSingleMainModule()
|
||||
modRoot := MainModules.ModRoot(mainModule)
|
||||
mainDir, mainOK, mainErr := dirInModule(path, MainModules.PathPrefix(mainModule), modRoot, true)
|
||||
if mainOK {
|
||||
mods = append(mods, mainModule)
|
||||
dirs = append(dirs, mainDir)
|
||||
roots = append(roots, modRoot)
|
||||
}
|
||||
vendorDir, vendorOK, _ := dirInModule(path, "", filepath.Join(modRoot, "vendor"), false)
|
||||
if vendorOK {
|
||||
readVendorList(mainModule)
|
||||
mods = append(mods, vendorPkgModule[path])
|
||||
dirs = append(dirs, vendorDir)
|
||||
roots = append(roots, modRoot)
|
||||
var mainErr error
|
||||
if modRoot != "" {
|
||||
mainDir, mainOK, err := dirInModule(path, MainModules.PathPrefix(mainModule), modRoot, true)
|
||||
mainErr = err
|
||||
if mainOK {
|
||||
mods = append(mods, mainModule)
|
||||
dirs = append(dirs, mainDir)
|
||||
roots = append(roots, modRoot)
|
||||
}
|
||||
vendorDir, vendorOK, _ := dirInModule(path, "", filepath.Join(modRoot, "vendor"), false)
|
||||
if vendorOK {
|
||||
readVendorList(mainModule)
|
||||
mods = append(mods, vendorPkgModule[path])
|
||||
dirs = append(dirs, vendorDir)
|
||||
roots = append(roots, modRoot)
|
||||
}
|
||||
}
|
||||
|
||||
if len(dirs) > 1 {
|
||||
|
@ -673,7 +673,7 @@ func LoadModFile(ctx context.Context) *Requirements {
|
||||
modfetch.WorkspaceGoSumFiles = append(modfetch.WorkspaceGoSumFiles, sumFile)
|
||||
}
|
||||
modfetch.GoSumFile = workFilePath + ".sum"
|
||||
} else if modRoots == nil {
|
||||
} else if len(modRoots) == 0 {
|
||||
// We're in module mode, but not inside a module.
|
||||
//
|
||||
// Commands like 'go build', 'go run', 'go list' have no go.mod file to
|
||||
@ -707,6 +707,12 @@ func LoadModFile(ctx context.Context) *Requirements {
|
||||
pruning = workspace
|
||||
}
|
||||
requirements = newRequirements(pruning, nil, nil)
|
||||
if cfg.BuildMod == "vendor" {
|
||||
// For issue 56536: Some users may have GOFLAGS=-mod=vendor set.
|
||||
// Make sure it behaves as though the fake module is vendored
|
||||
// with no dependencies.
|
||||
requirements.initVendor(nil)
|
||||
}
|
||||
return requirements
|
||||
}
|
||||
|
||||
|
36
src/cmd/go/testdata/script/vendor_outside_module.txt
vendored
Normal file
36
src/cmd/go/testdata/script/vendor_outside_module.txt
vendored
Normal file
@ -0,0 +1,36 @@
|
||||
# baz.go (importing just fmt) works with -mod=mod, -mod=vendor.
|
||||
go build -x -mod=mod my-module/vendor/example.com/another-module/foo/bar/baz.go
|
||||
go build -x -mod=readonly my-module/vendor/example.com/another-module/foo/bar/baz.go
|
||||
go build -x -mod=vendor my-module/vendor/example.com/another-module/foo/bar/baz.go
|
||||
|
||||
# baz_with_outside_dep.go (with a non-std dependency) works with -mod=mod
|
||||
# but not with -mod=readonly and -mod=vendor.
|
||||
go build -x -mod=mod my-module/vendor/example.com/another-module/foo/bar/baz_with_outside_dep.go
|
||||
! go build -x -mod=readonly my-module/vendor/example.com/another-module/foo/bar/baz_with_outside_dep.go
|
||||
stderr 'no required module provides package rsc.io/quote'
|
||||
! go build -x -mod=vendor my-module/vendor/example.com/another-module/foo/bar/baz_with_outside_dep.go
|
||||
stderr 'no required module provides package rsc.io/quote'
|
||||
|
||||
-- my-module/go.mod --
|
||||
module example.com/my-module
|
||||
|
||||
go 1.20
|
||||
-- my-module/vendor/example.com/another-module/foo/bar/baz.go --
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
fmt.Println("hello, world.")
|
||||
}
|
||||
-- my-module/vendor/example.com/another-module/foo/bar/baz_with_outside_dep.go --
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"rsc.io/quote"
|
||||
)
|
||||
|
||||
func main() {
|
||||
fmt.Println(quote.Hello())
|
||||
}
|
Loading…
Reference in New Issue
Block a user