mirror of
https://github.com/golang/go
synced 2024-11-23 16:10:05 -07:00
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 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: Jay Conrod <jayconrod@google.com>
This commit is contained in:
parent
8f1e2d4ef7
commit
3726d91d68
@ -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.
|
||||||
}
|
}
|
||||||
|
33
src/cmd/go/testdata/script/mod_symlink.txt
vendored
33
src/cmd/go/testdata/script/mod_symlink.txt
vendored
@ -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
|
||||||
mkdir links
|
stdout golang.org/x/text
|
||||||
cd links
|
|
||||||
symlink go.mod -> ../go.mod
|
|
||||||
symlink issue.go -> ../issue.go
|
|
||||||
|
|
||||||
go list -deps -f '{{.Module}}'
|
# Create a copy of the module using symlinks in src/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
|
||||||
|
go env GOMOD
|
||||||
|
stdout links[/\\]go.mod
|
||||||
|
go list -m
|
||||||
|
stdout golang.org/issue/28107
|
||||||
|
|
||||||
|
# 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
|
|||||||
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"
|
||||||
|
Loading…
Reference in New Issue
Block a user