actual version and dependency parsing

This commit is contained in:
Paul Fey 2025-07-26 15:10:29 +02:00
parent 9ac93995bd
commit 65937d2299
3 changed files with 98 additions and 8 deletions

View file

@ -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 {

View file

@ -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
}

View file

@ -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
}