mirror of
https://github.com/turbot/steampipe.git
synced 2025-12-19 18:12:43 -05:00
104 lines
3.1 KiB
Go
104 lines
3.1 KiB
Go
package versionmap
|
|
|
|
import (
|
|
"github.com/Masterminds/semver/v3"
|
|
"github.com/turbot/steampipe/pkg/steampipeconfig/modconfig"
|
|
"github.com/xlab/treeprint"
|
|
)
|
|
|
|
type DependencyVersionMap map[string]ResolvedVersionMap
|
|
|
|
// Add adds a dependency to the list of items installed for the given parent
|
|
func (m DependencyVersionMap) Add(dependencyName, alias string, dependencyVersion *semver.Version, constraintString string, parentName string) {
|
|
// get the map for this parent
|
|
parentItems := m[parentName]
|
|
// create if needed
|
|
if parentItems == nil {
|
|
parentItems = make(ResolvedVersionMap)
|
|
}
|
|
// add the dependency
|
|
parentItems.Add(dependencyName, NewResolvedVersionConstraint(dependencyName, alias, dependencyVersion, constraintString))
|
|
// save
|
|
m[parentName] = parentItems
|
|
}
|
|
|
|
// FlatMap converts the DependencyVersionMap into a ResolvedVersionMap, keyed by mod dependency path
|
|
func (m DependencyVersionMap) FlatMap() ResolvedVersionMap {
|
|
res := make(ResolvedVersionMap)
|
|
for _, deps := range m {
|
|
for _, dep := range deps {
|
|
res[modconfig.BuildModDependencyPath(dep.Name, dep.Version)] = dep
|
|
}
|
|
}
|
|
return res
|
|
}
|
|
|
|
func (m DependencyVersionMap) GetDependencyTree(rootName string) treeprint.Tree {
|
|
tree := treeprint.NewWithRoot(rootName)
|
|
m.buildTree(rootName, tree)
|
|
return tree
|
|
}
|
|
|
|
func (m DependencyVersionMap) buildTree(name string, tree treeprint.Tree) {
|
|
deps := m[name]
|
|
for name, version := range deps {
|
|
fullName := modconfig.BuildModDependencyPath(name, version.Version)
|
|
child := tree.AddBranch(fullName)
|
|
// if there are children add them
|
|
m.buildTree(fullName, child)
|
|
}
|
|
}
|
|
|
|
// GetMissingFromOther returns a map of dependencies which exit in this map but not 'other'
|
|
func (m DependencyVersionMap) GetMissingFromOther(other DependencyVersionMap) DependencyVersionMap {
|
|
res := make(DependencyVersionMap)
|
|
for parent, deps := range m {
|
|
otherDeps := other[parent]
|
|
if otherDeps == nil {
|
|
otherDeps = make(ResolvedVersionMap)
|
|
}
|
|
for name, dep := range deps {
|
|
if _, ok := otherDeps[name]; !ok {
|
|
res.Add(dep.Name, dep.Alias, dep.Version, dep.Constraint, parent)
|
|
}
|
|
}
|
|
}
|
|
return res
|
|
}
|
|
|
|
func (m DependencyVersionMap) GetUpgradedInOther(other DependencyVersionMap) DependencyVersionMap {
|
|
res := make(DependencyVersionMap)
|
|
for parent, deps := range m {
|
|
otherDeps := other[parent]
|
|
if otherDeps == nil {
|
|
otherDeps = make(ResolvedVersionMap)
|
|
}
|
|
for name, dep := range deps {
|
|
if otherDep, ok := otherDeps[name]; ok {
|
|
if otherDep.Version.GreaterThan(dep.Version) {
|
|
res.Add(otherDep.Name, dep.Alias, otherDep.Version, otherDep.Constraint, parent)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return res
|
|
}
|
|
|
|
func (m DependencyVersionMap) GetDowngradedInOther(other DependencyVersionMap) DependencyVersionMap {
|
|
res := make(DependencyVersionMap)
|
|
for parent, deps := range m {
|
|
otherDeps := other[parent]
|
|
if otherDeps == nil {
|
|
otherDeps = make(ResolvedVersionMap)
|
|
}
|
|
for name, dep := range deps {
|
|
if otherDep, ok := otherDeps[name]; ok {
|
|
if otherDep.Version.LessThan(dep.Version) {
|
|
res.Add(otherDep.Name, dep.Alias, otherDep.Version, otherDep.Constraint, parent)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return res
|
|
}
|