mirror of
https://github.com/golang/go
synced 2024-10-04 15:09:59 +00:00
cmd/cgo: retain original file paths in godefs generated comment
Don't rewrite relative file paths to absolute file paths in the godefs generated code comment. Fixes #52063 Change-Id: Ie9c5bd021b8f3954e827838930861622c7aa90b4 Reviewed-on: https://go-review.googlesource.com/c/go/+/396936 Trust: Tobias Klauser <tobias.klauser@gmail.com> Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
8e50298f12
commit
73a81d84b6
|
@ -9,6 +9,7 @@ import (
|
|||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
@ -58,9 +59,32 @@ func TestGoDefs(t *testing.T) {
|
|||
t.Fatalf("%s: %v\n%s", strings.Join(cmd.Args, " "), err, cmd.Stderr)
|
||||
}
|
||||
|
||||
if err := os.WriteFile(filepath.Join(dir, fp+"_defs.go"), out, 0644); err != nil {
|
||||
fn := fp + "_defs.go"
|
||||
if err := os.WriteFile(filepath.Join(dir, fn), out, 0644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// Verify that command line arguments are not rewritten in the generated comment,
|
||||
// see go.dev/issue/52063
|
||||
hasGeneratedByComment := false
|
||||
for _, line := range strings.Split(strings.TrimSpace(string(out)), "\n") {
|
||||
cgoExe := "cgo"
|
||||
if runtime.GOOS == "windows" {
|
||||
cgoExe = "cgo.exe"
|
||||
}
|
||||
if !strings.HasPrefix(line, "// "+cgoExe+" -godefs") {
|
||||
continue
|
||||
}
|
||||
if want := "// " + cgoExe + " " + strings.Join(cmd.Args[3:], " "); line != want {
|
||||
t.Errorf("%s: got generated comment %q, want %q", fn, line, want)
|
||||
}
|
||||
hasGeneratedByComment = true
|
||||
break
|
||||
}
|
||||
|
||||
if !hasGeneratedByComment {
|
||||
t.Errorf("%s: comment with generating cgo -godefs command not found", fn)
|
||||
}
|
||||
}
|
||||
|
||||
main, err := os.ReadFile(filepath.Join("testdata", "main.go"))
|
||||
|
|
|
@ -16,11 +16,11 @@ import (
|
|||
)
|
||||
|
||||
// godefs returns the output for -godefs mode.
|
||||
func (p *Package) godefs(f *File) string {
|
||||
func (p *Package) godefs(f *File, args []string) string {
|
||||
var buf bytes.Buffer
|
||||
|
||||
fmt.Fprintf(&buf, "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n")
|
||||
fmt.Fprintf(&buf, "// %s %s\n", filepath.Base(os.Args[0]), strings.Join(os.Args[1:], " "))
|
||||
fmt.Fprintf(&buf, "// %s %s\n", filepath.Base(args[0]), strings.Join(args[1:], " "))
|
||||
fmt.Fprintf(&buf, "\n")
|
||||
|
||||
override := make(map[string]string)
|
||||
|
|
|
@ -291,6 +291,10 @@ func main() {
|
|||
usage()
|
||||
}
|
||||
|
||||
// Save original command line arguments for the godefs generated comment. Relative file
|
||||
// paths in os.Args will be rewritten to absolute file paths in the loop below.
|
||||
osArgs := make([]string, len(os.Args))
|
||||
copy(osArgs, os.Args[:])
|
||||
goFiles := args[i:]
|
||||
|
||||
for _, arg := range args[:i] {
|
||||
|
@ -390,7 +394,7 @@ func main() {
|
|||
p.PackagePath = f.Package
|
||||
p.Record(f)
|
||||
if *godefs {
|
||||
os.Stdout.WriteString(p.godefs(f))
|
||||
os.Stdout.WriteString(p.godefs(f, osArgs))
|
||||
} else {
|
||||
p.writeOutput(f, input)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue