mirror of
https://github.com/EnumeratedDev/bpm.git
synced 2026-09-16 02:26:12 +00:00
Improve local package querying
This commit is contained in:
+2
-4
@@ -207,7 +207,6 @@ func showPackageInfo() {
|
|||||||
|
|
||||||
var info *bpmlib.PackageInfo
|
var info *bpmlib.PackageInfo
|
||||||
isFile := false
|
isFile := false
|
||||||
showInstallationReason := false
|
|
||||||
if stat, err := os.Stat(pkg); err == nil && !stat.IsDir() {
|
if stat, err := os.Stat(pkg); err == nil && !stat.IsDir() {
|
||||||
bpmpkg, err := bpmlib.ReadPackage(pkg)
|
bpmpkg, err := bpmlib.ReadPackage(pkg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -223,7 +222,6 @@ func showPackageInfo() {
|
|||||||
} else {
|
} else {
|
||||||
info = bpmlib.GetPackageInfo(pkg, rootDir)
|
info = bpmlib.GetPackageInfo(pkg, rootDir)
|
||||||
}
|
}
|
||||||
showInstallationReason = true
|
|
||||||
}
|
}
|
||||||
if info == nil {
|
if info == nil {
|
||||||
log.Printf("Error: package (%s) is not installed\n", pkg)
|
log.Printf("Error: package (%s) is not installed\n", pkg)
|
||||||
@@ -242,7 +240,7 @@ func showPackageInfo() {
|
|||||||
}
|
}
|
||||||
fmt.Println("File: " + abs)
|
fmt.Println("File: " + abs)
|
||||||
}
|
}
|
||||||
fmt.Println(bpmlib.CreateReadableInfo(true, true, true, showInstallationReason, info, rootDir))
|
fmt.Println(info.CreateReadableInfo(rootDir))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,7 +284,7 @@ func showPackageList() {
|
|||||||
if n != 0 {
|
if n != 0 {
|
||||||
fmt.Println()
|
fmt.Println()
|
||||||
}
|
}
|
||||||
fmt.Println(bpmlib.CreateReadableInfo(true, true, true, true, info, rootDir))
|
fmt.Println(info.CreateReadableInfo(rootDir))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package bpmlib
|
package bpmlib
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"slices"
|
"slices"
|
||||||
)
|
)
|
||||||
@@ -170,19 +169,11 @@ func resolvePackageDependenciesFromDatabase(resolved *[]pkgInstallationReason, u
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetPackageDependants(pkgName string, rootDir string) ([]string, error) {
|
func (pkgInfo *PackageInfo) GetPackageDependants(rootDir string) (dependants []string) {
|
||||||
ret := make([]string, 0)
|
|
||||||
|
|
||||||
// Get BPM package
|
|
||||||
pkg := GetPackage(pkgName, rootDir)
|
|
||||||
if pkg == nil {
|
|
||||||
return nil, errors.New("package not found: " + pkgName)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get installed package names
|
// Get installed package names
|
||||||
pkgs, err := GetInstalledPackages(rootDir)
|
pkgs, err := GetInstalledPackages(rootDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.New("could not get installed packages")
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Loop through all installed packages
|
// Loop through all installed packages
|
||||||
@@ -190,33 +181,33 @@ func GetPackageDependants(pkgName string, rootDir string) ([]string, error) {
|
|||||||
// Get installed BPM package
|
// Get installed BPM package
|
||||||
installedPkg := GetPackage(installedPkgName, rootDir)
|
installedPkg := GetPackage(installedPkgName, rootDir)
|
||||||
if installedPkg == nil {
|
if installedPkg == nil {
|
||||||
return nil, errors.New("package not found: " + installedPkgName)
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Skip iteration if comparing the same packages
|
// Skip iteration if comparing the same packages
|
||||||
if installedPkg.PkgInfo.Name == pkgName {
|
if installedPkg.PkgInfo.Name == pkgInfo.Name {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add installed package to list if its dependencies include pkgName
|
// Add installed package to list if its dependencies include pkgName
|
||||||
if slices.ContainsFunc(installedPkg.PkgInfo.Depends, func(n string) bool {
|
if slices.ContainsFunc(installedPkg.PkgInfo.Depends, func(n string) bool {
|
||||||
return n == pkgName
|
return n == pkgInfo.Name
|
||||||
}) {
|
}) {
|
||||||
ret = append(ret, installedPkgName)
|
dependants = append(dependants, installedPkgName)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// Loop through each virtual package
|
// Loop through each virtual package
|
||||||
for _, vpkg := range pkg.PkgInfo.Provides {
|
for _, vpkg := range pkgInfo.Provides {
|
||||||
// Add installed package to list if its dependencies contain a provided virtual package
|
// Add installed package to list if its dependencies contain a provided virtual package
|
||||||
if slices.ContainsFunc(installedPkg.PkgInfo.Depends, func(n string) bool {
|
if slices.ContainsFunc(installedPkg.PkgInfo.Depends, func(n string) bool {
|
||||||
return n == vpkg
|
return n == vpkg
|
||||||
}) {
|
}) {
|
||||||
ret = append(ret, installedPkgName)
|
dependants = append(dependants, installedPkgName)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret, nil
|
return dependants
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -221,11 +221,7 @@ func RemovePackages(rootDir string, force, cleanupDependencies bool, packages ..
|
|||||||
// Get packages and their dependants
|
// Get packages and their dependants
|
||||||
packageDepndants := make(map[string][]string, 0)
|
packageDepndants := make(map[string][]string, 0)
|
||||||
for _, action := range operation.Actions {
|
for _, action := range operation.Actions {
|
||||||
dependants, err := GetPackageDependants(action.(*RemovePackageAction).BpmPackage.PkgInfo.Name, rootDir)
|
dependants := action.(*RemovePackageAction).BpmPackage.PkgInfo.GetPackageDependants(rootDir)
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("could not get package dependants: %s", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
packageDepndants[action.(*RemovePackageAction).BpmPackage.PkgInfo.Name] = dependants
|
packageDepndants[action.(*RemovePackageAction).BpmPackage.PkgInfo.Name] = dependants
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -176,10 +176,7 @@ func (operation *BPMOperation) RemoveNeededPackages() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for pkg, action := range removeActions {
|
for pkg, action := range removeActions {
|
||||||
dependants, err := GetPackageDependants(action.BpmPackage.PkgInfo.Name, operation.RootDir)
|
dependants := action.BpmPackage.PkgInfo.GetPackageDependants(operation.RootDir)
|
||||||
if err != nil {
|
|
||||||
return errors.New("could not get dependant packages for package (" + pkg + ")")
|
|
||||||
}
|
|
||||||
dependants = slices.DeleteFunc(dependants, func(d string) bool {
|
dependants = slices.DeleteFunc(dependants, func(d string) bool {
|
||||||
if _, ok := removeActions[d]; ok {
|
if _, ok := removeActions[d]; ok {
|
||||||
return true
|
return true
|
||||||
|
|||||||
+21
-20
@@ -507,39 +507,39 @@ func ReadPackageInfo(contents string) (*PackageInfo, error) {
|
|||||||
return pkgInfo, nil
|
return pkgInfo, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateReadableInfo(showArchitecture, showType, showPackageRelations, showInstallationReason bool, pkgInfo *PackageInfo, rootDir string) string {
|
func (pkgInfo *PackageInfo) CreateReadableInfo(rootDir string) string {
|
||||||
ret := make([]string, 0)
|
ret := make([]string, 0)
|
||||||
appendArray := func(label string, array []string) {
|
appendArray := func(label string, array []string) {
|
||||||
if len(array) == 0 {
|
if len(array) == 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sort array
|
||||||
|
slices.Sort(array)
|
||||||
|
|
||||||
ret = append(ret, fmt.Sprintf("%s: %s", label, strings.Join(array, ", ")))
|
ret = append(ret, fmt.Sprintf("%s: %s", label, strings.Join(array, ", ")))
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = append(ret, "Name: "+pkgInfo.Name)
|
ret = append(ret, "Name: "+pkgInfo.Name)
|
||||||
ret = append(ret, "Description: "+pkgInfo.Description)
|
ret = append(ret, "Description: "+pkgInfo.Description)
|
||||||
ret = append(ret, "Version: "+pkgInfo.GetFullVersion())
|
ret = append(ret, "Version: "+pkgInfo.GetFullVersion())
|
||||||
ret = append(ret, "URL: "+pkgInfo.Url)
|
ret = append(ret, "URL: "+pkgInfo.Url)
|
||||||
ret = append(ret, "License: "+pkgInfo.License)
|
ret = append(ret, "License: "+pkgInfo.License)
|
||||||
if showArchitecture {
|
ret = append(ret, "Architecture: "+pkgInfo.Arch)
|
||||||
ret = append(ret, "Architecture: "+pkgInfo.Arch)
|
ret = append(ret, "Type: "+pkgInfo.Type)
|
||||||
|
appendArray("Dependencies", pkgInfo.Depends)
|
||||||
|
if pkgInfo.Type == "source" {
|
||||||
|
appendArray("Make Dependencies", pkgInfo.MakeDepends)
|
||||||
}
|
}
|
||||||
if showType {
|
appendArray("Optional dependencies", pkgInfo.OptionalDepends)
|
||||||
ret = append(ret, "Type: "+pkgInfo.Type)
|
dependants := pkgInfo.GetPackageDependants(rootDir)
|
||||||
}
|
if len(dependants) > 0 {
|
||||||
if showPackageRelations {
|
appendArray("Dependant packages", dependants)
|
||||||
appendArray("Dependencies", pkgInfo.Depends)
|
|
||||||
if pkgInfo.Type == "source" {
|
|
||||||
appendArray("Make Dependencies", pkgInfo.MakeDepends)
|
|
||||||
}
|
|
||||||
appendArray("Optional dependencies", pkgInfo.OptionalDepends)
|
|
||||||
dependants, err := GetPackageDependants(pkgInfo.Name, rootDir)
|
|
||||||
if err == nil {
|
|
||||||
appendArray("Dependant packages", dependants)
|
|
||||||
}
|
|
||||||
appendArray("Conflicting packages", pkgInfo.Conflicts)
|
|
||||||
appendArray("Provided packages", pkgInfo.Provides)
|
|
||||||
appendArray("Replaces packages", pkgInfo.Replaces)
|
|
||||||
}
|
}
|
||||||
|
appendArray("Conflicting packages", pkgInfo.Conflicts)
|
||||||
|
appendArray("Provided packages", pkgInfo.Provides)
|
||||||
|
appendArray("Replaces packages", pkgInfo.Replaces)
|
||||||
|
|
||||||
if pkgInfo.Type == "source" && len(pkgInfo.SplitPackages) != 0 {
|
if pkgInfo.Type == "source" && len(pkgInfo.SplitPackages) != 0 {
|
||||||
splitPkgs := make([]string, len(pkgInfo.SplitPackages))
|
splitPkgs := make([]string, len(pkgInfo.SplitPackages))
|
||||||
for i, splitPkgInfo := range pkgInfo.SplitPackages {
|
for i, splitPkgInfo := range pkgInfo.SplitPackages {
|
||||||
@@ -547,7 +547,8 @@ func CreateReadableInfo(showArchitecture, showType, showPackageRelations, showIn
|
|||||||
}
|
}
|
||||||
appendArray("Split Packages", splitPkgs)
|
appendArray("Split Packages", splitPkgs)
|
||||||
}
|
}
|
||||||
if IsPackageInstalled(pkgInfo.Name, rootDir) && showInstallationReason {
|
|
||||||
|
if rootDir != "" && IsPackageInstalled(pkgInfo.Name, rootDir) {
|
||||||
installationReason := GetInstallationReason(pkgInfo.Name, rootDir)
|
installationReason := GetInstallationReason(pkgInfo.Name, rootDir)
|
||||||
var installationReasonString string
|
var installationReasonString string
|
||||||
switch installationReason {
|
switch installationReason {
|
||||||
|
|||||||
Reference in New Issue
Block a user