From ee788dbae0fc8e074fc66fc76f0597200b443950 Mon Sep 17 00:00:00 2001 From: Kirill Che Date: Fri, 8 Sep 2023 07:45:12 +0000 Subject: [PATCH] cmd/go/internal/generate: error if failed to find a package Add check for package loader to print error and fail `go generate` command, if package can not be found. Fixes #60079 Change-Id: Ib9e730c2b69df6e5ac307c7bdfea0ee993ab6ed8 GitHub-Last-Rev: d93332425a980d0298c74f33f1d154e0afbf5373 GitHub-Pull-Request: golang/go#60178 Reviewed-on: https://go-review.googlesource.com/c/go/+/494836 Auto-Submit: Bryan Mills Reviewed-by: Matthew Dempsky Reviewed-by: Bryan Mills Run-TryBot: Bryan Mills TryBot-Result: Gopher Robot --- src/cmd/go/internal/generate/generate.go | 8 ++++++++ src/cmd/go/testdata/script/generate_invalid.txt | 7 ++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/cmd/go/internal/generate/generate.go b/src/cmd/go/internal/generate/generate.go index f1f4a6cf30..486de1862d 100644 --- a/src/cmd/go/internal/generate/generate.go +++ b/src/cmd/go/internal/generate/generate.go @@ -210,6 +210,13 @@ func runGenerate(ctx context.Context, cmd *base.Command, args []string) { continue } + if pkg.Error != nil && len(pkg.InternalAllGoFiles()) == 0 { + // A directory only contains a Go package if it has at least + // one .go source file, so the fact that there are no files + // implies that the package couldn't be found. + base.Errorf("%v", pkg.Error) + } + for _, file := range pkg.InternalGoFiles() { if !generate(file) { break @@ -222,6 +229,7 @@ func runGenerate(ctx context.Context, cmd *base.Command, args []string) { } } } + base.ExitIfErrors() } // generate runs the generation directives for a single file. diff --git a/src/cmd/go/testdata/script/generate_invalid.txt b/src/cmd/go/testdata/script/generate_invalid.txt index e18e62ccf3..3bede321a9 100644 --- a/src/cmd/go/testdata/script/generate_invalid.txt +++ b/src/cmd/go/testdata/script/generate_invalid.txt @@ -6,8 +6,13 @@ go install echo.go env PATH=$GOBIN${:}$PATH # Test go generate for directory with no go files -go generate ./nogo +! go generate ./nogo ! stdout 'Fail' +stderr 'no Go files' + +# Test go generate for module which doesn't exist should fail +! go generate foo.bar/nothing +stderr 'no required module provides package foo.bar/nothing' # Test go generate for package where all .go files are excluded by build # constraints -- 2.50.0