Skip to content

Commit

Permalink
cmd/go: note when some Go files were ignored on no-Go-files errors
Browse files Browse the repository at this point in the history
It is pretty confusing when there are Go files ignored for mismatching
build tags and similar and we output "no buildable Go files" without
giving any other information about some Go files have been ignored.

Fixes golang#17008.

Change-Id: I1766ee86a9a7a72f6694deae3f73b47bfc9d0be5
Reviewed-on: https://go-review.googlesource.com/29113
Run-TryBot: Jaana Burcu Dogan <jbd@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
  • Loading branch information
rakyll authored and bradfitz committed Oct 6, 2016
1 parent 6abc4a7 commit eee727d
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 3 deletions.
11 changes: 8 additions & 3 deletions src/go/build/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -410,11 +410,16 @@ func (ctxt *Context) ImportDir(dir string, mode ImportMode) (*Package, error) {
// containing no buildable Go source files. (It may still contain
// test files, files hidden by build tags, and so on.)
type NoGoError struct {
Dir string
Dir string
Ignored bool // whether any Go files were ignored due to build tags
}

func (e *NoGoError) Error() string {
return "no buildable Go source files in " + e.Dir
msg := "no buildable Go source files in " + e.Dir
if e.Ignored {
msg += " (.go files ignored due to build tags)"
}
return msg
}

// MultiplePackageError describes a directory containing
Expand Down Expand Up @@ -846,7 +851,7 @@ Found:
return p, badGoError
}
if len(p.GoFiles)+len(p.CgoFiles)+len(p.TestGoFiles)+len(p.XTestGoFiles) == 0 {
return p, &NoGoError{p.Dir}
return p, &NoGoError{Dir: p.Dir, Ignored: len(p.IgnoredGoFiles) > 0}
}

for tag := range allTags {
Expand Down
11 changes: 11 additions & 0 deletions src/go/build/build_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,17 @@ func TestEmptyFolderImport(t *testing.T) {
}
}

func TestIgnoredGoFilesImport(t *testing.T) {
_, err := Import(".", "testdata/ignored", 0)
e, ok := err.(*NoGoError)
if !ok {
t.Fatal(`Import("testdata/ignored") did not return NoGoError.`)
}
if !e.Ignored {
t.Fatal(`Import("testdata/ignored") should have ignored Go files.`)
}
}

func TestMultiplePackageImport(t *testing.T) {
_, err := Import(".", "testdata/multi", 0)
mpe, ok := err.(*MultiplePackageError)
Expand Down
3 changes: 3 additions & 0 deletions src/go/build/testdata/ignored/ignored.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
// +build alwaysignore

package ignored

0 comments on commit eee727d

Please sign in to comment.