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  }