Commit 4a1d39bb authored by Bryan C. Mills's avatar Bryan C. Mills

[release-branch.go1.12] cmd/go/internal/imports: use the full path to resolve symlinks

info.Name returns a name relative to the directory, so we need to
prefix that directory in the Stat call.

(This was missed in CL 141097 due to the fact that the test only
happened to check symlinks in the current directory.)

This allows the misc/ tests to work in module mode on platforms that
support symlinks.

Updates #30228
Updates #28107
Fixes #31763

Change-Id: Ie31836382df0cbd7d203b7a8b637c4743d68b6f3
Reviewed-on: https://go-review.googlesource.com/c/163517
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarJay Conrod <jayconrod@google.com>
Reviewed-on: https://go-review.googlesource.com/c/go/+/175441Reviewed-by: default avatarAndrew Bonventre <andybons@golang.org>
Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
parent e02d8189
...@@ -26,7 +26,7 @@ func ScanDir(dir string, tags map[string]bool) ([]string, []string, error) { ...@@ -26,7 +26,7 @@ func ScanDir(dir string, tags map[string]bool) ([]string, []string, error) {
// If the directory entry is a symlink, stat it to obtain the info for the // If the directory entry is a symlink, stat it to obtain the info for the
// link target instead of the link itself. // link target instead of the link itself.
if info.Mode()&os.ModeSymlink != 0 { if info.Mode()&os.ModeSymlink != 0 {
info, err = os.Stat(name) info, err = os.Stat(filepath.Join(dir, name))
if err != nil { if err != nil {
continue // Ignore broken symlinks. continue // Ignore broken symlinks.
} }
......
...@@ -2,16 +2,31 @@ env GO111MODULE=on ...@@ -2,16 +2,31 @@ env GO111MODULE=on
[!symlink] skip [!symlink] skip
# 'go list' should resolve modules of imported packages. # 'go list' should resolve modules of imported packages.
go list -deps -f '{{.Module}}' go list -deps -f '{{.Module}}' .
stdout golang.org/x/text stdout golang.org/x/text
# They should continue to resolve if the importing file is a symlink. go list -deps -f '{{.Module}}' ./subpkg
stdout golang.org/x/text
# Create a copy of the module using symlinks in src/links.
mkdir links mkdir links
symlink links/go.mod -> $GOPATH/src/go.mod
symlink links/issue.go -> $GOPATH/src/issue.go
mkdir links/subpkg
symlink links/subpkg/issue.go -> $GOPATH/src/subpkg/issue.go
# We should see the copy as a valid module root.
cd links cd links
symlink go.mod -> ../go.mod go env GOMOD
symlink issue.go -> ../issue.go stdout links[/\\]go.mod
go list -m
stdout golang.org/issue/28107
go list -deps -f '{{.Module}}' # The symlink-based copy should contain the same packages
# and have the same dependencies as the original.
go list -deps -f '{{.Module}}' .
stdout golang.org/x/text
go list -deps -f '{{.Module}}' ./subpkg
stdout golang.org/x/text stdout golang.org/x/text
-- go.mod -- -- go.mod --
...@@ -21,3 +36,7 @@ module golang.org/issue/28107 ...@@ -21,3 +36,7 @@ module golang.org/issue/28107
package issue package issue
import _ "golang.org/x/text/language" import _ "golang.org/x/text/language"
-- subpkg/issue.go --
package issue
import _ "golang.org/x/text/language"
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment