actual version and dependency parsing
This commit is contained in:
parent
9ac93995bd
commit
65937d2299
3 changed files with 98 additions and 8 deletions
25
add/add.go
25
add/add.go
|
@ -16,12 +16,35 @@ func AddFromCli(arguments []string) {
|
|||
if arguments[0] == "-h" || arguments[0] == "--help" {
|
||||
printHelp()
|
||||
}
|
||||
|
||||
newestPackageVersions := []string{}
|
||||
|
||||
for _, arg := range arguments {
|
||||
versions, err := resolver.GetAllPackagesVersion(arg)
|
||||
if err != nil {
|
||||
fail(err.Error())
|
||||
}
|
||||
|
||||
availableVersions := []string{}
|
||||
|
||||
for _, packagesVersion := range versions {
|
||||
availableVersions = append(availableVersions, packagesVersion.Version)
|
||||
}
|
||||
|
||||
bestVersion, err := resolver.GetBest(availableVersions, "*")
|
||||
if err != nil {
|
||||
fail(err.Error())
|
||||
}
|
||||
|
||||
newestPackageVersions = append(newestPackageVersions, arg+"@"+bestVersion.String())
|
||||
}
|
||||
|
||||
currentOverlays, err := resolver.GetCurrentOverlays()
|
||||
if err != nil {
|
||||
fail(err.Error())
|
||||
}
|
||||
|
||||
currentOverlays = append(arguments, currentOverlays...)
|
||||
currentOverlays = append(newestPackageVersions, currentOverlays...)
|
||||
|
||||
resultingPackageList, err := resolver.GetOverlayList(currentOverlays...)
|
||||
if err != nil {
|
||||
|
|
|
@ -33,7 +33,24 @@ func GetDependencyList(sourcePackage Package) ([]Package, error) {
|
|||
finalList := []Package{}
|
||||
|
||||
for _, dependantPackageStruct := range sourcePackage.Dependencies {
|
||||
dependantPackage, err := GetPackage(dependantPackageStruct.Name + "@" + dependantPackageStruct.Version)
|
||||
|
||||
versions, err := GetAllPackagesVersion(dependantPackageStruct.Name)
|
||||
if err != nil {
|
||||
return finalList, err
|
||||
}
|
||||
|
||||
availableVersions := []string{}
|
||||
|
||||
for _, packagesVersion := range versions {
|
||||
availableVersions = append(availableVersions, packagesVersion.Version)
|
||||
}
|
||||
|
||||
bestVersion, err := GetBest(availableVersions, dependantPackageStruct.Version)
|
||||
if err != nil {
|
||||
return finalList, err
|
||||
}
|
||||
|
||||
dependantPackage, err := GetPackage(dependantPackageStruct.Name + "@" + bestVersion.String())
|
||||
if err != nil {
|
||||
return finalList, err
|
||||
}
|
||||
|
|
|
@ -1,16 +1,32 @@
|
|||
package resolver
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
"github.com/apparentlymart/go-versions/versions"
|
||||
)
|
||||
|
||||
func GetBest(allVersions []string, requirement string) (string, error) {
|
||||
func GetBest(allVersions []string, requirement string) (versions.Version, error) {
|
||||
|
||||
candidates, err := GetPossible(allVersions, requirement)
|
||||
if err != nil {
|
||||
return versions.Version{}, err
|
||||
}
|
||||
|
||||
chosen := candidates.Newest()
|
||||
|
||||
return chosen, nil
|
||||
|
||||
}
|
||||
|
||||
func GetPossible(allVersions []string, requirement string) (versions.List, error) {
|
||||
|
||||
available := versions.List{}
|
||||
|
||||
for _, versionString := range allVersions {
|
||||
versionObject, err := versions.ParseVersion(versionString)
|
||||
if err != nil {
|
||||
return "", err
|
||||
return nil, err
|
||||
}
|
||||
|
||||
available = append(available, versionObject)
|
||||
|
@ -18,14 +34,48 @@ func GetBest(allVersions []string, requirement string) (string, error) {
|
|||
|
||||
allowed, err := versions.MeetingConstraintsString(requirement)
|
||||
if err != nil {
|
||||
return "", err
|
||||
return nil, err
|
||||
}
|
||||
|
||||
candidates := available.Filter(allowed)
|
||||
chosen := candidates.Newest()
|
||||
|
||||
best := string(chosen)
|
||||
return candidates, nil
|
||||
}
|
||||
|
||||
return best, nil
|
||||
func GetAllPackagesVersion(packageName string) ([]Package, error) {
|
||||
|
||||
matchingPackages := []Package{}
|
||||
|
||||
entries, err := os.ReadDir("/rodeo/overlays")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, entry := range entries {
|
||||
if !entry.IsDir() {
|
||||
continue
|
||||
}
|
||||
|
||||
overlayInfo, err := os.ReadFile("/rodeo/overlays/" + entry.Name() + "/rodeo-package.json")
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
packageObject, err := ParsePackageJson(overlayInfo)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
if packageObject.Name != packageName {
|
||||
continue
|
||||
}
|
||||
|
||||
packageObject.OverlayName = entry.Name()
|
||||
|
||||
matchingPackages = append(matchingPackages, packageObject)
|
||||
|
||||
}
|
||||
|
||||
return matchingPackages, nil
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue