Commit 7af2ce3f authored by Emmanuel Odeke's avatar Emmanuel Odeke Committed by Andrew Gerrand

cmd/build: reject non-existant directories in ImportDir

Re-apply @adg's CL https://golang.org/cl/7129048 that was
previously disabled in https://golang.org/cl/7235052 because
it broke `godoc net/http` for go1.1.

Currently `godoc net/http` seems to work fine with this CL.

Fixes #3428.

Change-Id: I7df06df02fd62dededac6ec60bea62561be59cf1
Reviewed-on: https://go-review.googlesource.com/23013
Run-TryBot: Andrew Gerrand <adg@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: 's avatarAndrew Gerrand <adg@golang.org>
parent 7ae27392
......@@ -403,7 +403,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
......
......@@ -5,6 +5,7 @@
package build
import (
"fmt"
"internal/testenv"
"io"
"os"
......@@ -345,3 +346,13 @@ func TestImportVendorParentFailure(t *testing.T) {
t.Fatalf("error on failed import does not mention GOROOT/src/vendor directory:\n%s", e)
}
}
// 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", filepath.FromSlash(dir))
if err == nil || err.Error() != want {
t.Errorf("got error %q, want %q", err, want)
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment