From 9413a6f660738708a321d2806236143e5e189901 Mon Sep 17 00:00:00 2001 From: Andrew Gerrand Date: Wed, 23 Jan 2013 11:28:32 +1100 Subject: [PATCH] go/build: ImportDir reject directories that don't exist Fixes #3428. R=dave, remyoudompheng, rsc CC=golang-dev https://golang.org/cl/7129048 --- src/pkg/go/build/build.go | 6 +++++- src/pkg/go/build/build_test.go | 11 +++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/pkg/go/build/build.go b/src/pkg/go/build/build.go index e2a47a556a..6c65b3da63 100644 --- a/src/pkg/go/build/build.go +++ b/src/pkg/go/build/build.go @@ -321,7 +321,11 @@ func (p *Package) IsCommand() bool { // ImportDir is like Import but processes the Go package found in // the named directory. func (ctxt *Context) ImportDir(dir string, mode ImportMode) (*Package, error) { - return ctxt.Import(".", dir, mode) + p, err := ctxt.Import(".", dir, mode) + if err == nil && !ctxt.isDir(p.Dir) { + err = fmt.Errorf("%q is not a directory", p.Dir) + } + return p, err } // NoGoError is the error used by Import to describe a directory diff --git a/src/pkg/go/build/build_test.go b/src/pkg/go/build/build_test.go index d8cf98840d..77f55ad409 100644 --- a/src/pkg/go/build/build_test.go +++ b/src/pkg/go/build/build_test.go @@ -5,6 +5,7 @@ package build import ( + "fmt" "os" "path/filepath" "runtime" @@ -89,6 +90,16 @@ func TestLocalDirectory(t *testing.T) { } } +// golang.org/issue/3248 +func TestBogusDirectory(t *testing.T) { + const dir = "/foo/bar/baz/gopher" + _, err := ImportDir(dir, FindOnly) + want := fmt.Sprintf("%q is not a directory", dir) + if err == nil || err.Error() != want { + t.Error("got error %q, want %q", err, want) + } +} + func TestShouldBuild(t *testing.T) { const file1 = "// +build tag1\n\n" + "package main\n" -- 2.48.1