cmd/go: fix error for go run with files in different directories
Fixes #9853.
Change-Id: Ic4803aa499ca20215085a87bad649014984d84c8
Reviewed-on: https://go-review.googlesource.com/12149
Reviewed-by: Rob Pike <r@golang.org>
diff --git a/src/cmd/go/build.go b/src/cmd/go/build.go
index c3afa5a..68fdb98 100644
--- a/src/cmd/go/build.go
+++ b/src/cmd/go/build.go
@@ -712,6 +712,9 @@
fatalf("%s is a directory, should be a Go file", file)
}
dir1, _ := filepath.Split(file)
+ if dir1 == "" {
+ dir1 = "."
+ }
if dir == "" {
dir = dir1
} else if dir != dir1 {
diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go
index bb22076..768cf02 100644
--- a/src/cmd/go/go_test.go
+++ b/src/cmd/go/go_test.go
@@ -2055,3 +2055,13 @@
tg.runFail("get", "code.google.com/p/rsc-svn")
tg.grepStderr("is shutting down", "missed warning about code.google.com")
}
+
+func TestGoRunDirs(t *testing.T) {
+ tg := testgo(t)
+ defer tg.cleanup()
+ tg.cd("testdata/rundir")
+ tg.runFail("run", "x.go", "sub/sub.go")
+ tg.grepStderr("named files must all be in one directory; have . and sub/", "wrong output")
+ tg.runFail("run", "sub/sub.go", "x.go")
+ tg.grepStderr("named files must all be in one directory; have sub/ and .", "wrong output")
+}
diff --git a/src/cmd/go/testdata/rundir/sub/sub.go b/src/cmd/go/testdata/rundir/sub/sub.go
new file mode 100644
index 0000000..06ab7d0
--- /dev/null
+++ b/src/cmd/go/testdata/rundir/sub/sub.go
@@ -0,0 +1 @@
+package main
diff --git a/src/cmd/go/testdata/rundir/x.go b/src/cmd/go/testdata/rundir/x.go
new file mode 100644
index 0000000..06ab7d0
--- /dev/null
+++ b/src/cmd/go/testdata/rundir/x.go
@@ -0,0 +1 @@
+package main