mirror of
https://github.com/anchore/syft.git
synced 2025-11-17 16:33:21 +01:00
* migrate pkg.ID and pkg.Relationship to artifact package Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * return relationships from tasks Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * fix more tests Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * add artifact.Identifiable by Identity() method Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * fix linting Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * remove catalog ID assignment Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * adjust spdx helpers to use copy of packages Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * stabilize package ID relative to encode-decode format cycles Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * rename Identity() to ID() Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * use zero value for nils in ID generation Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * enable source.Location to be identifiable Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * hoist up package relationship discovery to analysis stage Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * update ownership-by-file-overlap relationship description Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * add test reminders to put new relationships under test Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * adjust PHP composer.lock parser function to return relationships Signed-off-by: Alex Goodman <alex.goodman@anchore.com>
52 lines
1.2 KiB
Go
52 lines
1.2 KiB
Go
package spdxhelpers
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"fmt"
|
|
"path/filepath"
|
|
|
|
"github.com/anchore/syft/internal/formats/spdx22json/model"
|
|
"github.com/anchore/syft/syft/pkg"
|
|
)
|
|
|
|
func Files(packageSpdxID string, p pkg.Package) (files []model.File, fileIDs []string, relationships []model.Relationship) {
|
|
files = make([]model.File, 0)
|
|
fileIDs = make([]string, 0)
|
|
relationships = make([]model.Relationship, 0)
|
|
|
|
if !hasMetadata(p) {
|
|
return files, fileIDs, relationships
|
|
}
|
|
|
|
pkgFileOwner, ok := p.Metadata.(pkg.FileOwner)
|
|
if !ok {
|
|
return files, fileIDs, relationships
|
|
}
|
|
|
|
for _, ownedFilePath := range pkgFileOwner.OwnedFiles() {
|
|
baseFileName := filepath.Base(ownedFilePath)
|
|
pathHash := sha256.Sum256([]byte(ownedFilePath))
|
|
fileSpdxID := model.ElementID(fmt.Sprintf("File-%s-%x", p.Name, pathHash)).String()
|
|
|
|
fileIDs = append(fileIDs, fileSpdxID)
|
|
|
|
files = append(files, model.File{
|
|
FileName: ownedFilePath,
|
|
Item: model.Item{
|
|
Element: model.Element{
|
|
SPDXID: fileSpdxID,
|
|
Name: baseFileName,
|
|
},
|
|
},
|
|
})
|
|
|
|
relationships = append(relationships, model.Relationship{
|
|
SpdxElementID: packageSpdxID,
|
|
RelationshipType: model.ContainsRelationship,
|
|
RelatedSpdxElement: fileSpdxID,
|
|
})
|
|
}
|
|
|
|
return files, fileIDs, relationships
|
|
}
|