Skip to content

Commit 41af3c7

Browse files
erikvargacopybara-github
authored andcommitted
Remove ToPURL from the Extractor interface and use Package.PURL() instead.
PiperOrigin-RevId: 761983007
1 parent 852b909 commit 41af3c7

File tree

7 files changed

+39
-19
lines changed

7 files changed

+39
-19
lines changed

artifact/image/layerscanning/testing/fakelayerbuilder/extractor.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ func (e FakeTestLayersExtractor) Extract(_ context.Context, input *filesystem.Sc
5959
pkgs = append(pkgs, &extractor.Package{
6060
Name: pkg,
6161
Version: version,
62+
PURLType: purl.TypeGeneric,
6263
Locations: []string{input.Path},
6364
})
6465
}

artifact/image/layerscanning/trace/trace.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,8 @@ func PopulateLayerDetails(ctx context.Context, inventory inventory.Inventory, ch
113113
}
114114

115115
var pkgPURL string
116-
if pkg.Extractor != nil {
117-
pkgPURL = pkg.Extractor.ToPURL(pkg).String()
116+
if pkg.PURL() != nil {
117+
pkgPURL = pkg.PURL().String()
118118
}
119119

120120
var foundOrigin bool
@@ -165,13 +165,9 @@ func PopulateLayerDetails(ctx context.Context, inventory inventory.Inventory, ch
165165

166166
foundPackage := false
167167
for _, oldPKG := range oldPackages {
168-
if oldPKG.Extractor == nil {
169-
continue
170-
}
171-
172168
// PURLs are being used as a package key, so if they are different, skip this package.
173-
oldPKGPURL := oldPKG.Extractor.ToPURL(oldPKG).String()
174-
if oldPKGPURL != pkgPURL {
169+
oldPKGPURL := oldPKG.PURL()
170+
if oldPKGPURL == nil || oldPKGPURL.String() != pkgPURL {
175171
continue
176172
}
177173

artifact/image/layerscanning/trace/trace_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"github.com/google/osv-scalibr/extractor"
2828
"github.com/google/osv-scalibr/extractor/filesystem"
2929
"github.com/google/osv-scalibr/inventory"
30+
"github.com/google/osv-scalibr/purl"
3031
"github.com/google/osv-scalibr/stats"
3132
"github.com/opencontainers/go-digest"
3233
)
@@ -66,6 +67,7 @@ func TestPopulateLayerDetails(t *testing.T) {
6667
pkgs: []*extractor.Package{
6768
{
6869
Name: fooPackage,
70+
PURLType: purl.TypeGeneric,
6971
Locations: []string{fooFile},
7072
Extractor: fakeLayerExtractor,
7173
},
@@ -74,6 +76,7 @@ func TestPopulateLayerDetails(t *testing.T) {
7476
wantPackages: []*extractor.Package{
7577
{
7678
Name: fooPackage,
79+
PURLType: purl.TypeGeneric,
7780
Locations: []string{fooFile},
7881
Extractor: fakeLayerExtractor,
7982
},
@@ -84,6 +87,7 @@ func TestPopulateLayerDetails(t *testing.T) {
8487
pkgs: []*extractor.Package{
8588
{
8689
Name: fooPackage,
90+
PURLType: purl.TypeGeneric,
8791
Locations: []string{fooFile},
8892
},
8993
},
@@ -93,6 +97,7 @@ func TestPopulateLayerDetails(t *testing.T) {
9397
wantPackages: []*extractor.Package{
9498
{
9599
Name: fooPackage,
100+
PURLType: purl.TypeGeneric,
96101
Locations: []string{fooFile},
97102
},
98103
},
@@ -102,11 +107,13 @@ func TestPopulateLayerDetails(t *testing.T) {
102107
pkgs: []*extractor.Package{
103108
{
104109
Name: fooPackage,
110+
PURLType: purl.TypeGeneric,
105111
Locations: []string{fooFile},
106112
Extractor: fakeLayerExtractor,
107113
},
108114
{
109115
Name: barPackage,
116+
PURLType: purl.TypeGeneric,
110117
Locations: []string{barFile},
111118
Extractor: fakeLayerExtractor,
112119
},
@@ -118,6 +125,7 @@ func TestPopulateLayerDetails(t *testing.T) {
118125
wantPackages: []*extractor.Package{
119126
{
120127
Name: fooPackage,
128+
PURLType: purl.TypeGeneric,
121129
Locations: []string{fooFile},
122130
Extractor: fakeLayerExtractor,
123131
LayerDetails: &extractor.LayerDetails{
@@ -129,6 +137,7 @@ func TestPopulateLayerDetails(t *testing.T) {
129137
},
130138
{
131139
Name: barPackage,
140+
PURLType: purl.TypeGeneric,
132141
Locations: []string{barFile},
133142
Extractor: fakeLayerExtractor,
134143
LayerDetails: &extractor.LayerDetails{
@@ -145,6 +154,7 @@ func TestPopulateLayerDetails(t *testing.T) {
145154
pkgs: []*extractor.Package{
146155
{
147156
Name: "foo",
157+
PURLType: purl.TypeGeneric,
148158
Locations: []string{fooFile},
149159
Extractor: fakeLayerExtractor,
150160
},
@@ -157,6 +167,7 @@ func TestPopulateLayerDetails(t *testing.T) {
157167
wantPackages: []*extractor.Package{
158168
{
159169
Name: fooPackage,
170+
PURLType: purl.TypeGeneric,
160171
Locations: []string{fooFile},
161172
Extractor: fakeLayerExtractor,
162173
LayerDetails: &extractor.LayerDetails{
@@ -173,11 +184,13 @@ func TestPopulateLayerDetails(t *testing.T) {
173184
pkgs: []*extractor.Package{
174185
{
175186
Name: "foo",
187+
PURLType: purl.TypeGeneric,
176188
Locations: []string{fooFile},
177189
Extractor: fakeLayerExtractor,
178190
},
179191
{
180192
Name: "baz",
193+
PURLType: purl.TypeGeneric,
181194
Locations: []string{bazFile},
182195
Extractor: fakeLayerExtractor,
183196
},
@@ -191,6 +204,7 @@ func TestPopulateLayerDetails(t *testing.T) {
191204
wantPackages: []*extractor.Package{
192205
{
193206
Name: fooPackage,
207+
PURLType: purl.TypeGeneric,
194208
Locations: []string{fooFile},
195209
Extractor: fakeLayerExtractor,
196210
LayerDetails: &extractor.LayerDetails{
@@ -202,6 +216,7 @@ func TestPopulateLayerDetails(t *testing.T) {
202216
},
203217
{
204218
Name: bazPackage,
219+
PURLType: purl.TypeGeneric,
205220
Locations: []string{bazFile},
206221
Extractor: fakeLayerExtractor,
207222
LayerDetails: &extractor.LayerDetails{
@@ -218,16 +233,19 @@ func TestPopulateLayerDetails(t *testing.T) {
218233
pkgs: []*extractor.Package{
219234
{
220235
Name: fooPackage,
236+
PURLType: purl.TypeGeneric,
221237
Locations: []string{fooFile},
222238
Extractor: fakeLayerExtractor,
223239
},
224240
{
225241
Name: barPackage,
242+
PURLType: purl.TypeGeneric,
226243
Locations: []string{barFile},
227244
Extractor: fakeLayerExtractor,
228245
},
229246
{
230247
Name: bazPackage,
248+
PURLType: purl.TypeGeneric,
231249
Locations: []string{bazFile},
232250
Extractor: fakeLayerExtractor,
233251
},
@@ -242,6 +260,7 @@ func TestPopulateLayerDetails(t *testing.T) {
242260
wantPackages: []*extractor.Package{
243261
{
244262
Name: fooPackage,
263+
PURLType: purl.TypeGeneric,
245264
Locations: []string{fooFile},
246265
Extractor: fakeLayerExtractor,
247266
LayerDetails: &extractor.LayerDetails{
@@ -253,6 +272,7 @@ func TestPopulateLayerDetails(t *testing.T) {
253272
},
254273
{
255274
Name: barPackage,
275+
PURLType: purl.TypeGeneric,
256276
Locations: []string{barFile},
257277
Extractor: fakeLayerExtractor,
258278
LayerDetails: &extractor.LayerDetails{
@@ -264,6 +284,7 @@ func TestPopulateLayerDetails(t *testing.T) {
264284
},
265285
{
266286
Name: bazPackage,
287+
PURLType: purl.TypeGeneric,
267288
Locations: []string{bazFile},
268289
Extractor: fakeLayerExtractor,
269290
LayerDetails: &extractor.LayerDetails{
@@ -280,21 +301,25 @@ func TestPopulateLayerDetails(t *testing.T) {
280301
pkgs: []*extractor.Package{
281302
{
282303
Name: fooPackage,
304+
PURLType: purl.TypeGeneric,
283305
Locations: []string{fooFile},
284306
Extractor: fakeLayerExtractor,
285307
},
286308
{
287309
Name: foo2Package,
310+
PURLType: purl.TypeGeneric,
288311
Locations: []string{fooFile},
289312
Extractor: fakeLayerExtractor,
290313
},
291314
{
292315
Name: barPackage,
316+
PURLType: purl.TypeGeneric,
293317
Locations: []string{barFile},
294318
Extractor: fakeLayerExtractor,
295319
},
296320
{
297321
Name: bazPackage,
322+
PURLType: purl.TypeGeneric,
298323
Locations: []string{bazFile},
299324
Extractor: fakeLayerExtractor,
300325
},
@@ -310,6 +335,7 @@ func TestPopulateLayerDetails(t *testing.T) {
310335
wantPackages: []*extractor.Package{
311336
{
312337
Name: fooPackage,
338+
PURLType: purl.TypeGeneric,
313339
Locations: []string{fooFile},
314340
Extractor: fakeLayerExtractor,
315341
LayerDetails: &extractor.LayerDetails{
@@ -321,6 +347,7 @@ func TestPopulateLayerDetails(t *testing.T) {
321347
},
322348
{
323349
Name: foo2Package,
350+
PURLType: purl.TypeGeneric,
324351
Locations: []string{fooFile},
325352
Extractor: fakeLayerExtractor,
326353
LayerDetails: &extractor.LayerDetails{
@@ -332,6 +359,7 @@ func TestPopulateLayerDetails(t *testing.T) {
332359
},
333360
{
334361
Name: barPackage,
362+
PURLType: purl.TypeGeneric,
335363
Locations: []string{barFile},
336364
Extractor: fakeLayerExtractor,
337365
LayerDetails: &extractor.LayerDetails{
@@ -343,6 +371,7 @@ func TestPopulateLayerDetails(t *testing.T) {
343371
},
344372
{
345373
Name: bazPackage,
374+
PURLType: purl.TypeGeneric,
346375
Locations: []string{bazFile},
347376
Extractor: fakeLayerExtractor,
348377
LayerDetails: &extractor.LayerDetails{
@@ -359,6 +388,7 @@ func TestPopulateLayerDetails(t *testing.T) {
359388
pkgs: []*extractor.Package{
360389
{
361390
Name: fooPackage,
391+
PURLType: purl.TypeGeneric,
362392
Locations: []string{fooFile},
363393
Extractor: fakeLayerExtractor,
364394
},
@@ -389,6 +419,7 @@ func TestPopulateLayerDetails(t *testing.T) {
389419
wantPackages: []*extractor.Package{
390420
{
391421
Name: fooPackage,
422+
PURLType: purl.TypeGeneric,
392423
Locations: []string{fooFile},
393424
Extractor: fakeLayerExtractor,
394425
LayerDetails: &extractor.LayerDetails{

converter/converter.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ var spdxIDInvalidCharRe = regexp.MustCompile(`[^a-zA-Z0-9.-]`)
4747

4848
// ToPURL converts a SCALIBR package structure into a package URL.
4949
func ToPURL(p *extractor.Package) *purl.PackageURL {
50-
return p.Extractor.ToPURL(p)
50+
return p.PURL()
5151
}
5252

5353
// SPDXConfig describes custom settings that should be applied to the generated SPDX file.

extractor/extractor.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ import (
2323
// Extractor is the common interface of inventory extraction plugins.
2424
type Extractor interface {
2525
plugin.Plugin
26-
// ToPURL converts a package created by this extractor into a PURL.
27-
ToPURL(p *Package) *purl.PackageURL
2826
// Ecosystem returns the Ecosystem of the given package created by this extractor.
2927
// For software packages this corresponds to an OSV ecosystem value, e.g. PyPI.
3028
Ecosystem(p *Package) string
@@ -98,7 +96,6 @@ const (
9896
)
9997

10098
// PURL returns the Package URL of this package.
101-
// TODO(b/400910349): Implement for all package types.
10299
func (p *Package) PURL() *purl.PackageURL {
103100
return toPURL(p)
104101
}

extractor/filesystem/os/homebrew/homebrew_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ func TestToPURL(t *testing.T) {
207207

208208
for _, tt := range tests {
209209
t.Run(tt.name, func(t *testing.T) {
210-
var e filesystem.Extractor = homebrew.Extractor{}
210+
e := homebrew.Extractor{}
211211
for _, p := range tt.pkgs {
212212
got := e.ToPURL(p)
213213
if diff := cmp.Diff(tt.want, got); diff != "" {

packageindex/package_index.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ package packageindex
1818

1919
import (
2020
"github.com/google/osv-scalibr/extractor"
21-
"github.com/google/osv-scalibr/purl"
2221
)
2322

2423
// PackageIndex allows you to query the package result.
@@ -31,7 +30,7 @@ type PackageIndex struct {
3130
func New(pkgs []*extractor.Package) (*PackageIndex, error) {
3231
pkgMap := make(map[string]map[string][]*extractor.Package)
3332
for _, pkg := range pkgs {
34-
p := toPURL(pkg)
33+
p := pkg.PURL()
3534
if p == nil {
3635
continue
3736
}
@@ -81,7 +80,3 @@ func (px *PackageIndex) GetSpecific(name string, pkgType string) []*extractor.Pa
8180
}
8281
return p
8382
}
84-
85-
func toPURL(p *extractor.Package) *purl.PackageURL {
86-
return p.Extractor.ToPURL(p)
87-
}

0 commit comments

Comments
 (0)