aboutsummaryrefslogtreecommitdiff
path: root/src/cmd
diff options
context:
space:
mode:
authorqmuntal <quimmuntal@gmail.com>2025-06-27 12:45:22 +0200
committerQuim Muntal <quimmuntal@gmail.com>2025-06-29 07:01:25 -0700
commitacb914f2c2a3ec3dd227812ba6b119480d6400cd (patch)
tree6018c6e80afa0830ee306608e4a2377f8f9739dc /src/cmd
parentb51f1cdb8752c2fdd6a2bf06224aab0b5c07caac (diff)
downloadgo-acb914f2c2a3ec3dd227812ba6b119480d6400cd.tar.xz
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 <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Michael Matloob <matloob@golang.org> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Reviewed-by: Michael Matloob <matloob@google.com>
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/go/alldocs.go44
-rw-r--r--src/cmd/go/internal/doc/doc.go4
-rw-r--r--src/cmd/internal/doc/main.go12
3 files changed, 38 insertions, 22 deletions
diff --git a/src/cmd/go/alldocs.go b/src/cmd/go/alldocs.go
index e8034bf5d1..7403b92cd1 100644
--- a/src/cmd/go/alldocs.go
+++ b/src/cmd/go/alldocs.go
@@ -405,6 +405,8 @@
//
// go doc
// Show documentation for current package.
+// go doc -http
+// Serve HTML documentation over HTTP for the current package.
// go doc Foo
// Show documentation for Foo in the current package.
// (Foo starts with a capital letter so it cannot match
@@ -439,26 +441,28 @@
//
// Flags:
//
-// -all
-// Show all the documentation for the package.
-// -c
-// Respect case when matching symbols.
-// -cmd
-// Treat a command (package main) like a regular package.
-// Otherwise package main's exported symbols are hidden
-// when showing the package's top-level documentation.
-// -short
-// One-line representation for each symbol.
-// -src
-// Show the full source code for the symbol. This will
-// display the full Go source of its declaration and
-// definition, such as a function definition (including
-// the body), type declaration or enclosing const
-// block. The output may therefore include unexported
-// details.
-// -u
-// Show documentation for unexported as well as exported
-// symbols, methods, and fields.
+// -all
+// Show all the documentation for the package.
+// -c
+// Respect case when matching symbols.
+// -cmd
+// Treat a command (package main) like a regular package.
+// Otherwise package main's exported symbols are hidden
+// when showing the package's top-level documentation.
+// -http
+// Serve HTML docs over HTTP.
+// -short
+// One-line representation for each symbol.
+// -src
+// Show the full source code for the symbol. This will
+// display the full Go source of its declaration and
+// definition, such as a function definition (including
+// the body), type declaration or enclosing const
+// block. The output may therefore include unexported
+// details.
+// -u
+// Show documentation for unexported as well as exported
+// symbols, methods, and fields.
//
// # Print Go environment information
//
diff --git a/src/cmd/go/internal/doc/doc.go b/src/cmd/go/internal/doc/doc.go
index 131da81495..74c70e2c7a 100644
--- a/src/cmd/go/internal/doc/doc.go
+++ b/src/cmd/go/internal/doc/doc.go
@@ -75,6 +75,8 @@ different cases. If this occurs, documentation for all matches is printed.
Examples:
go doc
Show documentation for current package.
+ go doc -http
+ Serve HTML documentation over HTTP for the current package.
go doc Foo
Show documentation for Foo in the current package.
(Foo starts with a capital letter so it cannot match
@@ -116,6 +118,8 @@ Flags:
Treat a command (package main) like a regular package.
Otherwise package main's exported symbols are hidden
when showing the package's top-level documentation.
+ -http
+ Serve HTML docs over HTTP.
-short
One-line representation for each symbol.
-src
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"