-
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
cmd/go: suppress errors from 'go get -d' for packages that only condi…
…tionally exist Fixes golang#44106 Fixes golang#29268 Change-Id: Id113f2ced274d43fbf66cb804581448218996f81 Reviewed-on: https://go-review.googlesource.com/c/go/+/289769 TryBot-Result: Go Bot <[email protected]> Reviewed-by: Jay Conrod <[email protected]> Trust: Bryan C. Mills <[email protected]> Run-TryBot: Bryan C. Mills <[email protected]>
- Loading branch information
Bryan C. Mills
committed
Feb 9, 2021
1 parent
e0ac989
commit e9c9683
Showing
2 changed files
with
131 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
# https://golang.org/issue/44106 | ||
# 'go get' should fetch the transitive dependencies of packages regardless of | ||
# tags, but shouldn't error out if the package is missing tag-guarded | ||
# dependencies. | ||
|
||
# Control case: just adding the top-level module to the go.mod file does not | ||
# fetch its dependencies. | ||
|
||
go mod edit -require example.net/[email protected] | ||
! go list -deps example.net/cmd/tool | ||
stderr '^module example\.net/cmd provides package example\.net/cmd/tool and is replaced but not required; to add it:\n\tgo get example\.net/cmd@v0\.1\.0$' | ||
go mod edit -droprequire example.net/tools | ||
|
||
|
||
# 'go get -d' makes a best effort to fetch those dependencies, but shouldn't | ||
# error out if dependencies of tag-guarded files are missing. | ||
|
||
go get -d example.net/[email protected] | ||
|
||
! go list example.net/tools | ||
stderr '^package example.net/tools: build constraints exclude all Go files in .*[/\\]tools$' | ||
|
||
go list -tags=tools -e -deps example.net/tools | ||
stdout '^example.net/cmd/tool$' | ||
stdout '^example.net/missing$' | ||
|
||
go list -deps example.net/cmd/tool | ||
|
||
! go list example.net/missing | ||
stderr '^no required module provides package example.net/missing; to add it:\n\tgo get example.net/missing$' | ||
|
||
|
||
# https://golang.org/issue/29268 | ||
# 'go get' should fetch modules whose roots contain test-only packages, but | ||
# without the -t flag shouldn't error out if the test has missing dependencies. | ||
|
||
go get -d example.net/[email protected] | ||
|
||
# With the -t flag, the test dependencies must resolve successfully. | ||
! go get -d -t example.net/[email protected] | ||
stderr '^example.net/testonly tested by\n\texample.net/testonly\.test imports\n\texample.net/missing: cannot find module providing package example.net/missing$' | ||
|
||
|
||
# 'go get -d' should succeed for a module path that does not contain a package, | ||
# but fail for a non-package subdirectory of a module. | ||
|
||
! go get -d example.net/missing/[email protected] | ||
stderr '^go get: module example.net/[email protected] found \(replaced by ./missing\), but does not contain package example.net/missing/subdir$' | ||
|
||
go get -d example.net/[email protected] | ||
|
||
|
||
# Getting the subdirectory should continue to fail even if the corresponding | ||
# module is already present in the build list. | ||
|
||
! go get -d example.net/missing/[email protected] | ||
stderr '^go get: module example.net/[email protected] found \(replaced by ./missing\), but does not contain package example.net/missing/subdir$' | ||
|
||
|
||
-- go.mod -- | ||
module example.net/m | ||
|
||
go 1.15 | ||
|
||
replace ( | ||
example.net/tools v0.1.0 => ./tools | ||
example.net/cmd v0.1.0 => ./cmd | ||
example.net/testonly v0.1.0 => ./testonly | ||
example.net/missing v0.1.0 => ./missing | ||
) | ||
|
||
-- tools/go.mod -- | ||
module example.net/tools | ||
|
||
go 1.15 | ||
|
||
// Requirements intentionally omitted. | ||
|
||
-- tools/tools.go -- | ||
// +build tools | ||
|
||
package tools | ||
|
||
import ( | ||
_ "example.net/cmd/tool" | ||
_ "example.net/missing" | ||
) | ||
|
||
-- cmd/go.mod -- | ||
module example.net/cmd | ||
|
||
go 1.16 | ||
-- cmd/tool/tool.go -- | ||
package main | ||
|
||
func main() {} | ||
|
||
-- testonly/go.mod -- | ||
module example.net/testonly | ||
|
||
go 1.15 | ||
-- testonly/testonly_test.go -- | ||
package testonly_test | ||
|
||
import _ "example.net/missing" | ||
|
||
func Test(t *testing.T) {} | ||
|
||
-- missing/go.mod -- | ||
module example.net/missing | ||
|
||
go 1.15 | ||
-- missing/README.txt -- | ||
There are no Go source files here. | ||
-- missing/subdir/README.txt -- | ||
There are no Go source files here either. |