internal/postgres: delete other packages from search during reconciliation
When reconciling search to match the latest good version, delete from
search_documents any packages in the module that are not in the good
version.
Change-Id: I654eda3d3066bb82963fc98ca537d4b3761ad6eb
Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/343189
Trust: Jonathan Amsterdam <jba@google.com>
Run-TryBot: Jonathan Amsterdam <jba@google.com>
TryBot-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Julie Qiu <julie@golang.org>
diff --git a/internal/postgres/delete.go b/internal/postgres/delete.go
index e447076..ed25317 100644
--- a/internal/postgres/delete.go
+++ b/internal/postgres/delete.go
@@ -10,7 +10,6 @@
"github.com/Masterminds/squirrel"
"github.com/lib/pq"
- "golang.org/x/pkgsite/internal"
"golang.org/x/pkgsite/internal/database"
"golang.org/x/pkgsite/internal/derrors"
"golang.org/x/pkgsite/internal/log"
@@ -50,16 +49,16 @@
// deleteOtherModulePackagesFromSearchDocuments deletes all packages from search
// documents with the given module that are not in m.
-func deleteOtherModulePackagesFromSearchDocuments(ctx context.Context, tx *database.DB, m *internal.Module) error {
+func deleteOtherModulePackagesFromSearchDocuments(ctx context.Context, tx *database.DB, modulePath string, pkgPaths []string) error {
dbPkgs, err := tx.CollectStrings(ctx, `
SELECT package_path FROM search_documents WHERE module_path = $1
- `, m.ModulePath)
+ `, modulePath)
if err != nil {
return err
}
pkgInModule := map[string]bool{}
- for _, u := range m.Packages() {
- pkgInModule[u.Path] = true
+ for _, p := range pkgPaths {
+ pkgInModule[p] = true
}
var otherPkgs []string
for _, p := range dbPkgs {
diff --git a/internal/postgres/insert_module.go b/internal/postgres/insert_module.go
index 542354f..c253e99 100644
--- a/internal/postgres/insert_module.go
+++ b/internal/postgres/insert_module.go
@@ -144,12 +144,15 @@
}
// Here, this module is the latest good version.
-
if err := insertImportsUnique(ctx, tx, m); err != nil {
return err
}
- if err := deleteOtherModulePackagesFromSearchDocuments(ctx, tx, m); err != nil {
+ var pkgPaths []string
+ for _, u := range m.Packages() {
+ pkgPaths = append(pkgPaths, u.Path)
+ }
+ if err := deleteOtherModulePackagesFromSearchDocuments(ctx, tx, m.ModulePath, pkgPaths); err != nil {
return err
}
@@ -718,6 +721,15 @@
return err
}
+ // Delete packages not in this version.
+ var pkgPaths []string
+ for _, pkg := range pkgMetas {
+ pkgPaths = append(pkgPaths, pkg.Path)
+ }
+ if err := deleteOtherModulePackagesFromSearchDocuments(ctx, tx, modulePath, pkgPaths); err != nil {
+ return err
+ }
+
// Insert into search_documents.
for _, pkg := range pkgMetas {
if isInternalPackage(pkg.Path) {