gddo-server: handle trailing slash in godoc.org redirect Fixes golang/go#43979 Change-Id: I3d02cdbfbf9ad7e76ae143b2d78aa9a7dde2097d Reviewed-on: https://go-review.googlesource.com/c/gddo/+/287794 Trust: Julie Qiu <julie@golang.org> Run-TryBot: Julie Qiu <julie@golang.org> Reviewed-by: Jonathan Amsterdam <jba@google.com>
diff --git a/gddo-server/pkgsite.go b/gddo-server/pkgsite.go index bf683a0..9ac53a3 100644 --- a/gddo-server/pkgsite.go +++ b/gddo-server/pkgsite.go
@@ -358,6 +358,7 @@ q.Set("q", "golang.org/x") default: { + godocURL.Path = strings.TrimSuffix(godocURL.Path, "/") // If the import path is invalid, redirect to // https://golang.org/issue/43036, so that the users has more context // on why this path does not work on pkg.go.dev.
diff --git a/gddo-server/pkgsite_test.go b/gddo-server/pkgsite_test.go index 1acfee8..061a6cd 100644 --- a/gddo-server/pkgsite_test.go +++ b/gddo-server/pkgsite_test.go
@@ -171,18 +171,23 @@ from: "https://godoc.org/cryptoscope.co/go/specialκ", to: "https://golang.org/issue/43036", }, + { + from: "https://godoc.org/github.com/google/go-containerregistry/", + to: "https://pkg.go.dev/github.com/google/go-containerregistry?utm_source=godoc", + }, } for _, tc := range testCases { - u, err := url.Parse(tc.from) - if err != nil { - t.Errorf("url.Parse(%q): %v", tc.from, err) - continue - } - to := pkgGoDevURL(u) - if got, want := to.String(), tc.to; got != want { - t.Errorf("pkgGoDevURL(%q) = %q; want %q", u, got, want) - } + t.Run(strings.ReplaceAll(tc.from, "/", " "), func(t *testing.T) { + u, err := url.Parse(tc.from) + if err != nil { + t.Fatalf("url.Parse(%q): %v", tc.from, err) + } + to := pkgGoDevURL(u) + if got, want := to.String(), tc.to; got != want { + t.Errorf("pkgGoDevURL(%q) = %q; want %q", u, got, want) + } + }) } }