diff --git a/internal/api/api.go b/internal/api/api.go
index bbc7c81..81dd24a 100644
--- a/internal/api/api.go
+++ b/internal/api/api.go
@@ -76,6 +76,9 @@
if params.Imports {
fs |= internal.WithImports
}
+ if params.Doc == "" {
+ fs |= internal.WithoutDocsSource
+ }
bc := internal.BuildContext{GOOS: params.GOOS, GOARCH: params.GOARCH}
var unit *internal.Unit
diff --git a/internal/postgres/unit.go b/internal/postgres/unit.go
index 2ead329..180ddd6 100644
--- a/internal/postgres/unit.go
+++ b/internal/postgres/unit.go
@@ -235,7 +235,7 @@
u := &internal.Unit{UnitMeta: *um}
if fields&internal.WithMain != 0 {
- u, err = db.getUnitWithAllFields(ctx, um, bc)
+ u, err = db.getUnitWithAllFields(ctx, um, fields, bc)
if err != nil {
return nil, err
}
@@ -413,7 +413,7 @@
return packages, nil
}
-func (db *DB) getUnitWithAllFields(ctx context.Context, um *internal.UnitMeta, bc internal.BuildContext) (_ *internal.Unit, err error) {
+func (db *DB) getUnitWithAllFields(ctx context.Context, um *internal.UnitMeta, fields internal.FieldSet, bc internal.BuildContext) (_ *internal.Unit, err error) {
defer derrors.WrapStack(&err, "getUnitWithAllFields(ctx, %q, %q, %q)", um.Path, um.ModulePath, um.Version)
defer stats.Elapsed(ctx, "getUnitWithAllFields")()
@@ -470,13 +470,17 @@
break
}
}
- // Get README, documentation and import counts.
- query := `
+ docSelect := "CAST(NULL AS bytea),"
+ if fields&internal.WithoutDocsSource == 0 {
+ docSelect = "d.source,"
+ }
+
+ query := fmt.Sprintf(`
SELECT
r.file_path,
r.contents,
d.synopsis,
- d.source,
+ %s
COALESCE((
SELECT COUNT(unit_id)
FROM imports
@@ -493,7 +497,7 @@
FROM units u
LEFT JOIN readmes r
ON r.unit_id = u.id
-
+
LEFT JOIN (
SELECT synopsis, source, goos, goarch, unit_id
FROM documentation d
@@ -501,7 +505,7 @@
) d
ON d.unit_id = u.id
WHERE u.id = $2
- `
+ `, docSelect)
var (
r internal.Readme
u internal.Unit
diff --git a/internal/postgres/unit_test.go b/internal/postgres/unit_test.go
index e8dc304..7f0db2b 100644
--- a/internal/postgres/unit_test.go
+++ b/internal/postgres/unit_test.go
@@ -672,7 +672,11 @@
cleanFields := func(u *internal.Unit, fields internal.FieldSet) {
// Add/remove fields based on the FieldSet specified.
if fields&internal.WithMain != 0 {
- u.Documentation = []*internal.Documentation{sample.Doc}
+ if fields&internal.WithoutDocsSource == 0 {
+ u.Documentation = []*internal.Documentation{sample.Doc}
+ } else {
+ u.Documentation = []*internal.Documentation{{GOOS: "all", GOARCH: "all", Synopsis: sample.Doc.Synopsis}}
+ }
u.BuildContexts = []internal.BuildContext{internal.BuildContextAll}
u.Readme = readme
u.NumImports = len(sample.Imports())
@@ -707,6 +711,11 @@
want: unit("a.com/m/dir/p", "a.com/m", "v1.2.3", "", readme, []string{}),
},
{
+ name: "WithMain|WithoutDocsSource",
+ fields: internal.WithMain | internal.WithoutDocsSource,
+ want: unit("a.com/m/dir/p", "a.com/m", "v1.2.3", "", readme, []string{}),
+ },
+ {
name: "WithImports",
fields: internal.WithImports,
want: unitNoLicenses("a.com/m/dir/p", "a.com/m", "v1.2.3", "", nil, []string{}),
diff --git a/internal/testing/fakedatasource/fakedatasource.go b/internal/testing/fakedatasource/fakedatasource.go
index 1f69519..0ccb01d 100644
--- a/internal/testing/fakedatasource/fakedatasource.go
+++ b/internal/testing/fakedatasource/fakedatasource.go
@@ -139,8 +139,18 @@
// Since we cache the module and its units, we have to copy this unit before we modify it.
// It can be a shallow copy, since we're only modifying the Unit.Documentation field.
u2 := *u
- if d := matchingDoc(u.Documentation, bc); d != nil {
- u2.Documentation = []*internal.Documentation{d}
+ if fields&internal.WithoutDocsSource == 0 {
+ if d := matchingDoc(u.Documentation, bc); d != nil {
+ u2.Documentation = []*internal.Documentation{d}
+ } else {
+ u2.Documentation = nil
+ }
+ } else if fields&internal.WithMain != 0 {
+ if d := matchingDoc(u.Documentation, bc); d != nil {
+ u2.Documentation = []*internal.Documentation{{GOOS: d.GOOS, GOARCH: d.GOARCH, Synopsis: d.Synopsis}}
+ } else {
+ u2.Documentation = nil
+ }
} else {
u2.Documentation = nil
}
diff --git a/internal/unit.go b/internal/unit.go
index 0a6b3cc..b75db89 100644
--- a/internal/unit.go
+++ b/internal/unit.go
@@ -113,4 +113,5 @@
WithMain FieldSet = 1 << iota
WithImports
WithLicenses
+ WithoutDocsSource
)