Skip to content

Commit

Permalink
cmd/go: report a helpful error when there are no modules in workspace
Browse files Browse the repository at this point in the history
The current error message that no go.mod files were found is not
helpful, especially when a go.mod file exists in the current directory.

Fixes #49594

Change-Id: I750475ce8654eeb3e0a2857d5a2de1a9c6ede415
Reviewed-on: https://go-review.googlesource.com/c/go/+/365319
Trust: Michael Matloob <matloob@golang.org>
Run-TryBot: Michael Matloob <matloob@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
  • Loading branch information
matloob committed Nov 22, 2021
1 parent 6275b54 commit cd0bf38
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 2 deletions.
12 changes: 11 additions & 1 deletion src/cmd/go/alldocs.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions src/cmd/go/internal/modload/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -525,6 +525,9 @@ func die() {
if cfg.Getenv("GO111MODULE") == "off" {
base.Fatalf("go: modules disabled by GO111MODULE=off; see 'go help modules'")
}
if inWorkspaceMode() {
base.Fatalf("go: no modules were found in the current workspace; see 'go help work'")
}
if dir, name := findAltConfig(base.Cwd()); dir != "" {
rel, err := filepath.Rel(base.Cwd(), dir)
if err != nil {
Expand Down
12 changes: 11 additions & 1 deletion src/cmd/go/internal/workcmd/work.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,23 @@ import (
var CmdWork = &base.Command{
UsageLine: "go work",
Short: "workspace maintenance",
Long: `Go workspace provides access to operations on worskpaces.
Long: `Go workspace provides access to operations on workspaces.
Note that support for workspaces is built into many other commands,
not just 'go work'.
See 'go help modules' for information about Go's module system of
which workspaces are a part.
A workspace is specified by a go.work file that specifies a set of
module directories with the "use" directive. These modules are used
as root modules by the go command for builds and related operations.
A workspace that does not specify modules to be used cannot be used
to do builds from local code.
To determine whether the go command is operating in workspace mode,
use the "go env GOWORK" command. This will specify the workspace
file being used.
`,

Commands: []*base.Command{
Expand Down
13 changes: 13 additions & 0 deletions src/cmd/go/testdata/script/work_build_no_modules.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
! go build .
stderr 'go: no modules were found in the current workspace; see ''go help work'''

-- go.work --
go 1.18
-- go.mod --
go 1.18

module foo
-- foo.go --
package main

func main() {}

0 comments on commit cd0bf38

Please sign in to comment.