aboutsummaryrefslogtreecommitdiff
path: root/internal/postgres/unit.go
diff options
context:
space:
mode:
authorJulie Qiu <julie@golang.org>2020-09-30 10:43:47 -0400
committerJulie Qiu <julie@golang.org>2020-09-30 16:44:53 +0000
commit6cce679a76cb91b02426bd4d37689a6e4958d017 (patch)
tree4d767e52e8eb25d147cf942138c2917e54d2deb7 /internal/postgres/unit.go
parent183e9ae7f1cda25a9277aa82fba0db41363611d6 (diff)
downloadgo-x-pkgsite-6cce679a76cb91b02426bd4d37689a6e4958d017.tar.xz
internal/postgres: support README in subdirectories
When the unit-page experiment is on, GetUnit will return the README for that path, instead of the one that the module root. For golang/go#38513 For golang/go#39629 Change-Id: I7a7bcb5762c614e5abb828b3d530207d24562339 Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/258314 Run-TryBot: Julie Qiu <julie@golang.org> Reviewed-by: Jonathan Amsterdam <jba@google.com> Trust: Julie Qiu <julie@golang.org>
Diffstat (limited to 'internal/postgres/unit.go')
-rw-r--r--internal/postgres/unit.go35
1 files changed, 28 insertions, 7 deletions
diff --git a/internal/postgres/unit.go b/internal/postgres/unit.go
index 84a588c0..2e95e852 100644
--- a/internal/postgres/unit.go
+++ b/internal/postgres/unit.go
@@ -15,6 +15,7 @@ import (
"golang.org/x/pkgsite/internal"
"golang.org/x/pkgsite/internal/database"
"golang.org/x/pkgsite/internal/derrors"
+ "golang.org/x/pkgsite/internal/experiment"
"golang.org/x/pkgsite/internal/stdlib"
)
@@ -30,8 +31,13 @@ func (db *DB) GetUnit(ctx context.Context, um *internal.UnitMeta, fields interna
u := &internal.Unit{UnitMeta: *um}
if fields&internal.WithReadme != 0 {
- readme, err := db.getReadme(ctx, u.ModulePath, u.Version)
- if err != nil && !errors.Is(err, derrors.NotFound) {
+ var readme *internal.Readme
+ if experiment.IsActive(ctx, internal.ExperimentUnitPage) {
+ readme, err = db.getReadme(ctx, pathID)
+ } else {
+ readme, err = db.getModuleReadme(ctx, u.ModulePath, u.Version)
+ }
+ if err != nil && !errors.Is(err, derrors.NotFound) {
return nil, err
}
u.Readme = readme
@@ -131,11 +137,26 @@ func (db *DB) getDocumentation(ctx context.Context, pathID int) (_ *internal.Doc
}
// getReadme returns the README corresponding to the modulePath and version.
-func (db *DB) getReadme(ctx context.Context, modulePath, resolvedVersion string) (_ *internal.Readme, err error) {
- defer derrors.Wrap(&err, "getReadme(ctx, %q, %q)", modulePath, resolvedVersion)
- // TODO(golang/go#38513): update to query on PathID and query the readmes
- // table directly once we start displaying READMEs for directories instead
- // of the top-level module.
+func (db *DB) getReadme(ctx context.Context, pathID int) (_ *internal.Readme, err error) {
+ defer derrors.Wrap(&err, "getReadme(ctx, %d)", pathID)
+ var readme internal.Readme
+ err = db.db.QueryRow(ctx, `
+ SELECT file_path, contents
+ FROM readmes
+ WHERE path_id=$1;`, pathID).Scan(&readme.Filepath, &readme.Contents)
+ switch err {
+ case sql.ErrNoRows:
+ return nil, derrors.NotFound
+ case nil:
+ return &readme, nil
+ default:
+ return nil, err
+ }
+}
+
+// getModuleReadme returns the README corresponding to the modulePath and version.
+func (db *DB) getModuleReadme(ctx context.Context, modulePath, resolvedVersion string) (_ *internal.Readme, err error) {
+ defer derrors.Wrap(&err, "getModuleReadme(ctx, %q, %q)", modulePath, resolvedVersion)
var readme internal.Readme
err = db.db.QueryRow(ctx, `
SELECT file_path, contents