diff options
| author | Julie Qiu <julie@golang.org> | 2020-09-30 10:43:47 -0400 |
|---|---|---|
| committer | Julie Qiu <julie@golang.org> | 2020-09-30 16:44:53 +0000 |
| commit | 6cce679a76cb91b02426bd4d37689a6e4958d017 (patch) | |
| tree | 4d767e52e8eb25d147cf942138c2917e54d2deb7 /internal/postgres/unit.go | |
| parent | 183e9ae7f1cda25a9277aa82fba0db41363611d6 (diff) | |
| download | go-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.go | 35 |
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 |
