github.com/noqcks/syft@v0.0.0-20230920222752-a9e2c4e288e5/syft/pkg/relationships.go (about) 1 package pkg 2 3 import ( 4 "sort" 5 6 "github.com/anchore/syft/syft/artifact" 7 ) 8 9 func NewRelationships(catalog *Collection) []artifact.Relationship { 10 rels := RelationshipsByFileOwnership(catalog) 11 rels = append(rels, RelationshipsEvidentBy(catalog)...) 12 return rels 13 } 14 15 func RelationshipLess(i, j artifact.Relationship) bool { 16 iFrom, ok1 := i.From.(Package) 17 iTo, ok2 := i.To.(Package) 18 jFrom, ok3 := j.From.(Package) 19 jTo, ok4 := j.To.(Package) 20 21 if !(ok1 && ok2 && ok3 && ok4) { 22 return false 23 } 24 25 if iFrom.Name != jFrom.Name { 26 return iFrom.Name < jFrom.Name 27 } 28 if iFrom.Version != jFrom.Version { 29 return iFrom.Version < jFrom.Version 30 } 31 if iTo.Name != jTo.Name { 32 return iTo.Name < jTo.Name 33 } 34 if iTo.Version != jTo.Version { 35 return iTo.Version < jTo.Version 36 } 37 return i.Type < j.Type 38 } 39 40 func SortRelationships(rels []artifact.Relationship) { 41 sort.SliceStable(rels, func(i, j int) bool { 42 return RelationshipLess(rels[i], rels[j]) 43 }) 44 }