diff options
author | Emmanuel T Odeke <emmanuel@orijtech.com> | 2020-04-21 23:31:59 -0700 |
---|---|---|
committer | Emmanuel Odeke <emm.odeke@gmail.com> | 2020-04-30 01:17:47 +0000 |
commit | 4f7053c87f9ebf3acab7669d380f53bdfba0566b (patch) | |
tree | dd2c6110e506383e8017c3d778d0e4d62a47f9db /test | |
parent | 4e00b4c366f06036509201d3bf19ee2c8fd767c8 (diff) | |
download | go-4f7053c87f9ebf3acab7669d380f53bdfba0566b.tar.gz go-4f7053c87f9ebf3acab7669d380f53bdfba0566b.zip |
cmd/compile: omit file:pos for non-existent, permission errors
Omits printing the file:line:column when trying to open either
* non-existent files
* files without permission
Given:
go tool compile x.go
For either of x.go not existing, or if no read permissions:
* Before:
x.go:0: open x.go: no such file or directory
x.go:0: open x.go: permission denied
* After:
open x.go: no such file or directory
open x.go: permission denied
While here, noticed an oddity with the Linux builders, that appear
to always be running under root, hence the test for permission errors
with 0222 -W-*-W-*-W- can't pass on linux-amd64 builders.
The filed bug is #38608.
Fixes #36437
Change-Id: I9645ef73177c286c99547e3a0f3719fa07b35cb5
Reviewed-on: https://go-review.googlesource.com/c/go/+/229357
Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
Diffstat (limited to 'test')
-rw-r--r-- | test/fixedbugs/issue36437.go | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/test/fixedbugs/issue36437.go b/test/fixedbugs/issue36437.go new file mode 100644 index 00000000000..356d0160795 --- /dev/null +++ b/test/fixedbugs/issue36437.go @@ -0,0 +1,69 @@ +// run + +// +build !nacl,!js + +// Copyright 2020 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. + +// Tests that when non-existent files are passed to the +// compiler, such as in: +// go tool compile foo +// we don't print the beginning position: +// foo:0: open foo: no such file or directory +// but instead omit it and print out: +// open foo: no such file or directory + +package main + +import ( + "fmt" + "io/ioutil" + "os" + "os/exec" + "path/filepath" + "runtime" +) + +func main() { + tmpDir, err := ioutil.TempDir("", "issue36437") + if err != nil { + panic(err) + } + defer os.RemoveAll(tmpDir) + + msgOrErr := func(msg []byte, err error) string { + if len(msg) == 0 && err != nil { + return err.Error() + } + return string(msg) + } + + // 1. Pass in a non-existent file. + output, err := exec.Command("go", "tool", "compile", "x.go").CombinedOutput() + want := "open x.go: no such file or directory\n" + if got := msgOrErr(output, err); got != want { + fmt.Printf("Expected an error, but got:\n\t%q\nwant:\n\t%q", got, want) + return + } + + if runtime.GOOS == "linux" && runtime.GOARCH == "amd64" { + // The Go Linux builders seem to be running under root, thus + // linux-amd64 doesn't seem to be respecting 0222 file permissions, + // and reads files with -W-*-W-*-W- permissions. + // Filed bug: https://golang.org/issues/38608 + return + } + + // 2. Invoke the compiler with a file that we don't have read permissions to. + path := filepath.Join(tmpDir, "p.go") + if err := ioutil.WriteFile(path, []byte("package p"), 0222); err != nil { + panic(err) + } + output, err = exec.Command("go", "tool", "compile", path).CombinedOutput() + want = fmt.Sprintf("open %s: permission denied\n", path) + if got := msgOrErr(output, err); got != want { + fmt.Printf("Expected an error, but got:\n\t%q\nwant:\n\t%q", got, want) + return + } +} |