forked from golang/go
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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 golang#38608. Fixes golang#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>
- Loading branch information
1 parent
741d4ba
commit f86d3ae
Showing
2 changed files
with
76 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
} | ||
} |