mirror of
https://github.com/anchore/syft.git
synced 2025-11-17 16:33:21 +01:00
* add internal dependency resolver Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com> * refactor dependency relationship resolution to common object Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com> * replace cataloger decorator with generic processor Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com> * refactor resolver to be a single function Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com> * use common dependency specifier for debian Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com> * use common dependency specifier for arch Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com> * use common dependency specifier for alpine Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com> * allow for generic pkg and rel assertions in testpkg helper Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com> * do not allow for empty results Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com> * move stable deduplicate comment Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com> * remove relationship resolver type Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com> --------- Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com>
49 lines
1.1 KiB
Go
49 lines
1.1 KiB
Go
package arch
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/anchore/syft/internal/log"
|
|
"github.com/anchore/syft/syft/pkg"
|
|
"github.com/anchore/syft/syft/pkg/cataloger/internal/dependency"
|
|
)
|
|
|
|
var _ dependency.Specifier = dbEntryDependencySpecifier
|
|
|
|
func dbEntryDependencySpecifier(p pkg.Package) dependency.Specification {
|
|
meta, ok := p.Metadata.(pkg.AlpmDBEntry)
|
|
if !ok {
|
|
log.Tracef("cataloger failed to extract alpm metadata for package %+v", p.Name)
|
|
return dependency.Specification{}
|
|
}
|
|
|
|
provides := []string{p.Name}
|
|
for _, key := range meta.Provides {
|
|
if key == "" {
|
|
continue
|
|
}
|
|
provides = append(provides, key, stripVersionSpecifier(key))
|
|
}
|
|
|
|
var requires []string
|
|
for _, depSpecifier := range meta.Depends {
|
|
if depSpecifier == "" {
|
|
continue
|
|
}
|
|
requires = append(requires, depSpecifier)
|
|
}
|
|
|
|
return dependency.Specification{
|
|
Provides: provides,
|
|
Requires: requires,
|
|
}
|
|
}
|
|
|
|
func stripVersionSpecifier(s string) string {
|
|
// examples:
|
|
// gcc-libs --> gcc-libs
|
|
// libtree-sitter.so=0-64 --> libtree-sitter.so
|
|
|
|
return strings.TrimSpace(strings.Split(s, "=")[0])
|
|
}
|