internal/fetch: clarify loadPackage error handling
Improve the control flow when loadPackageWithBuildContext
returns an error. List the cases clearly.
For golang/go#37232
Change-Id: I09d7b1abfc4e933c540e5f7df8b715219db12457
Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/289672
Trust: Jonathan Amsterdam <jba@google.com>
Run-TryBot: Jonathan Amsterdam <jba@google.com>
Reviewed-by: Julie Qiu <julie@golang.org>
diff --git a/internal/fetch/load.go b/internal/fetch/load.go
index 0f7edbc..eea5463 100644
--- a/internal/fetch/load.go
+++ b/internal/fetch/load.go
@@ -70,11 +70,23 @@
for _, bc := range internal.BuildContexts {
pkg, err := loadPackageWithBuildContext(ctx, bc.GOOS, bc.GOARCH, files, innerPath, sourceInfo, modInfo)
- if err != nil && !errors.Is(err, godoc.ErrTooLarge) && !errors.Is(err, derrors.NotFound) {
- return nil, err
- }
- if pkg != nil {
+ switch {
+ case errors.Is(err, derrors.NotFound):
+ // No package for this build context.
+ continue
+ case errors.Is(err, godoc.ErrTooLarge):
+ // pkg should be non-nil. Remember the error and return the package
+ // for this build context; ignore the others.
+ if pkg == nil {
+ return nil, errors.New("unexpected nil package")
+ }
pkg.err = err
+ return pkg, nil
+ case err != nil:
+ // Serious error. Fail.
+ return nil, err
+ default:
+ // No error. Remember the package.
pkgs = append(pkgs, pkg)
}
}