diff --git a/cmd/internal/pkgsite-cli/main_test.go b/cmd/internal/pkgsite-cli/main_test.go
index 0f75b50..ab82473 100644
--- a/cmd/internal/pkgsite-cli/main_test.go
+++ b/cmd/internal/pkgsite-cli/main_test.go
@@ -284,7 +284,7 @@
}
for _, imp := range f.Imports {
path := strings.Trim(imp.Path.Value, `"`)
- if strings.Contains(path, ".") && !strings.HasPrefix(path, "golang.org/x/pkgsite") {
+ if strings.Contains(path, ".") && !strings.HasPrefix(path, "golang.org/x/pkgsite") && path != "golang.org/x/sync/errgroup" {
t.Errorf("%s imports third-party package %q", e.Name(), path)
}
}
diff --git a/cmd/internal/pkgsite-cli/module.go b/cmd/internal/pkgsite-cli/module.go
index dd8ce55..1c7f2b8 100644
--- a/cmd/internal/pkgsite-cli/module.go
+++ b/cmd/internal/pkgsite-cli/module.go
@@ -11,6 +11,7 @@
"time"
"golang.org/x/pkgsite/cmd/internal/pkgsite-cli/client"
+ "golang.org/x/sync/errgroup"
)
func runModule(fs *flag.FlagSet, m *moduleFlags, stdout, stderr io.Writer) int {
@@ -33,38 +34,53 @@
}
result := moduleResult{Module: mod}
- // TODO: run concurrently ?
+ var (
+ vers *client.PaginatedResponse[client.VersionResponse]
+ vulns *client.PaginatedResponse[client.Vulnerability]
+ pkgs *client.PaginatedResponse[client.ModulePackageResponse]
+ )
+
+ g, gctx := errgroup.WithContext(ctx)
+
if m.versions {
- vers, err := c.GetVersions(ctx, path, client.PaginationOptions{
- Limit: m.effectiveLimit(),
- Token: m.token,
+ g.Go(func() error {
+ var err error
+ vers, err = c.GetVersions(gctx, path, client.PaginationOptions{
+ Limit: m.effectiveLimit(),
+ Token: m.token,
+ })
+ return err
})
- if err != nil {
- return handleErr(stdout, stderr, err, m.jsonOut)
- }
- result.Versions = vers
}
if m.vulns {
- vulns, err := c.GetVulns(ctx, path, version, client.PaginationOptions{
- Limit: m.effectiveLimit(),
- Token: m.token,
+ g.Go(func() error {
+ var err error
+ vulns, err = c.GetVulns(gctx, path, version, client.PaginationOptions{
+ Limit: m.effectiveLimit(),
+ Token: m.token,
+ })
+ return err
})
- if err != nil {
- return handleErr(stdout, stderr, err, m.jsonOut)
- }
- result.Vulns = vulns
}
if m.packages {
- pkgs, err := c.GetPackages(ctx, path, version, client.PaginationOptions{
- Limit: m.effectiveLimit(),
- Token: m.token,
+ g.Go(func() error {
+ var err error
+ pkgs, err = c.GetPackages(gctx, path, version, client.PaginationOptions{
+ Limit: m.effectiveLimit(),
+ Token: m.token,
+ })
+ return err
})
- if err != nil {
- return handleErr(stdout, stderr, err, m.jsonOut)
- }
- result.Packages = pkgs
}
+ if err := g.Wait(); err != nil {
+ return handleErr(stdout, stderr, err, m.jsonOut)
+ }
+
+ result.Versions = vers
+ result.Vulns = vulns
+ result.Packages = pkgs
+
if m.jsonOut {
return writeJSON(stdout, stderr, result)
}