From acb914f2c2a3ec3dd227812ba6b119480d6400cd Mon Sep 17 00:00:00 2001 From: qmuntal Date: Fri, 27 Jun 2025 12:45:22 +0200 Subject: cmd/doc: fix -http on Windows On Windows, GOMODCACHE almost never starts with a slash, and "go doc -http" constructs a GOPROXY URL by doing "file://" + GOMODCACHE, resulting in an invalid file URI. For example, if GOMODCACHE is "C:\foo", then the file URI should be "file:///C:/foo", but it becomes "file://C:/foo" instead, where "C:" is understood as a host name, not a drive letter. Fixes #74137. Change-Id: I23e776e0f649a0062e01d1a4a6ea8268ba467331 Reviewed-on: https://go-review.googlesource.com/c/go/+/684575 LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Matloob Reviewed-by: Dmitri Shuralyov Reviewed-by: Michael Matloob --- src/cmd/internal/doc/main.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/cmd/internal/doc') diff --git a/src/cmd/internal/doc/main.go b/src/cmd/internal/doc/main.go index fe99ee70bd..c51fbef517 100644 --- a/src/cmd/internal/doc/main.go +++ b/src/cmd/internal/doc/main.go @@ -227,8 +227,16 @@ func doPkgsite(urlPath string) error { fields := strings.Fields(vars) if err == nil && len(fields) == 2 { goproxy, gomodcache := fields[0], fields[1] - goproxy = "file://" + filepath.Join(gomodcache, "cache", "download") + "," + goproxy - env = append(env, "GOPROXY="+goproxy) + gomodcache = filepath.Join(gomodcache, "cache", "download") + // Convert absolute path to file URL. pkgsite will not accept + // Windows absolute paths because they look like a host:path remote. + // TODO(golang.org/issue/32456): use url.FromFilePath when implemented. + if strings.HasPrefix(gomodcache, "/") { + gomodcache = "file://" + gomodcache + } else { + gomodcache = "file:///" + filepath.ToSlash(gomodcache) + } + env = append(env, "GOPROXY="+gomodcache+","+goproxy) } const version = "v0.0.0-20250608123103-82c52f1754cd" -- cgit v1.3