summaryrefslogtreecommitdiff
path: root/src/cmd
diff options
context:
space:
mode:
authorAlex Brainman <alex.brainman@gmail.com>2014-09-26 14:36:49 -0400
committerAlex Brainman <alex.brainman@gmail.com>2014-09-26 14:36:49 -0400
commit70667bf508fb3864fc72bc791d5949ff81d9cc7f (patch)
treeb497445eaca60cc9ca43a7c3440e21d831fdf917 /src/cmd
parent8756f605b8e890a155eb7bd4046c3f2330dde0d8 (diff)
downloadgo-70667bf508fb3864fc72bc791d5949ff81d9cc7f.tar.gz
cmd/go: handle paths like \x.go on windows
Fixes issue 8130. LGTM=rsc R=golang-codereviews, rsc CC=golang-codereviews https://codereview.appspot.com/143200043 Committer: Russ Cox <rsc@golang.org>
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/go/build.go9
-rw-r--r--src/cmd/go/go_windows_test.go55
2 files changed, 62 insertions, 2 deletions
diff --git a/src/cmd/go/build.go b/src/cmd/go/build.go
index e2e17fd03..23ad765ba 100644
--- a/src/cmd/go/build.go
+++ b/src/cmd/go/build.go
@@ -505,8 +505,13 @@ func goFilesPackage(gofiles []string) *Package {
}
ctxt.ReadDir = func(string) ([]os.FileInfo, error) { return dirent, nil }
- if !filepath.IsAbs(dir) {
- dir = filepath.Join(cwd, dir)
+ var err error
+ if dir == "" {
+ dir = cwd
+ }
+ dir, err = filepath.Abs(dir)
+ if err != nil {
+ fatalf("%s", err)
}
bp, err := ctxt.ImportDir(dir, 0)
diff --git a/src/cmd/go/go_windows_test.go b/src/cmd/go/go_windows_test.go
new file mode 100644
index 000000000..53d695ccc
--- /dev/null
+++ b/src/cmd/go/go_windows_test.go
@@ -0,0 +1,55 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import (
+ "io/ioutil"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "strings"
+ "testing"
+)
+
+func TestAbsolutePath(t *testing.T) {
+ tmp, err := ioutil.TempDir("", "TestAbsolutePath")
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer os.RemoveAll(tmp)
+
+ file := filepath.Join(tmp, "a.go")
+ err = ioutil.WriteFile(file, []byte{}, 0644)
+ if err != nil {
+ t.Fatal(err)
+ }
+ dir := filepath.Join(tmp, "dir")
+ err = os.Mkdir(dir, 0777)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ wd, err := os.Getwd()
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer os.Chdir(wd)
+
+ // Chdir so current directory and a.go reside on the same drive.
+ err = os.Chdir(dir)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ noVolume := file[len(filepath.VolumeName(file)):]
+ wrongPath := filepath.Join(dir, noVolume)
+ output, err := exec.Command("go", "build", noVolume).CombinedOutput()
+ if err == nil {
+ t.Fatal("build should fail")
+ }
+ if strings.Contains(string(output), wrongPath) {
+ t.Fatalf("wrong output found: %v %v", err, string(output))
+ }
+}