mirror of
https://github.com/Jguer/yay.git
synced 2025-12-09 00:03:52 -05:00
94 lines
2.2 KiB
Go
94 lines
2.2 KiB
Go
package db
|
|
|
|
import (
|
|
alpm "github.com/Jguer/go-alpm"
|
|
)
|
|
|
|
type AlpmExecutor struct {
|
|
Handle *alpm.Handle
|
|
LocalDB *alpm.DB
|
|
SyncDB alpm.DBList
|
|
}
|
|
|
|
func NewExecutor(handle *alpm.Handle) (*AlpmExecutor, error) {
|
|
localDB, err := handle.LocalDB()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
syncDB, err := handle.SyncDBs()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &AlpmExecutor{Handle: handle, LocalDB: localDB, SyncDB: syncDB}, nil
|
|
}
|
|
|
|
func (ae *AlpmExecutor) LocalSatisfierExists(pkgName string) bool {
|
|
if _, err := ae.LocalDB.PkgCache().FindSatisfier(pkgName); err != nil {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
func (ae *AlpmExecutor) IsCorrectVersionInstalled(pkgName, versionRequired string) bool {
|
|
alpmPackage := ae.LocalDB.Pkg(pkgName)
|
|
if alpmPackage == nil {
|
|
return false
|
|
}
|
|
|
|
return alpmPackage.Version() == versionRequired
|
|
}
|
|
|
|
func (ae *AlpmExecutor) SyncSatisfier(pkgName string) RepoPackage {
|
|
foundPkg, err := ae.SyncDB.FindSatisfier(pkgName)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
return foundPkg
|
|
}
|
|
|
|
func (ae *AlpmExecutor) PackagesFromGroup(groupName string) []RepoPackage {
|
|
groupPackages := []RepoPackage{}
|
|
_ = ae.SyncDB.FindGroupPkgs(groupName).ForEach(func(pkg alpm.Package) error {
|
|
groupPackages = append(groupPackages, &pkg)
|
|
return nil
|
|
})
|
|
return groupPackages
|
|
}
|
|
|
|
func (ae *AlpmExecutor) LocalPackages() []RepoPackage {
|
|
localPackages := []RepoPackage{}
|
|
_ = ae.LocalDB.PkgCache().ForEach(func(pkg alpm.Package) error {
|
|
localPackages = append(localPackages, RepoPackage(&pkg))
|
|
return nil
|
|
})
|
|
return localPackages
|
|
}
|
|
|
|
func (ae *AlpmExecutor) PackageFromDB(pkgName, dbName string) RepoPackage {
|
|
singleDB, err := ae.Handle.SyncDBByName(dbName)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
foundPkg, err := singleDB.PkgCache().FindSatisfier(pkgName)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
return foundPkg
|
|
}
|
|
|
|
func (ae *AlpmExecutor) PackageDepends(pkg RepoPackage) []alpm.Depend {
|
|
alpmPackage := pkg.(*alpm.Package)
|
|
return alpmPackage.Depends().Slice()
|
|
}
|
|
|
|
func (ae *AlpmExecutor) PackageProvides(pkg RepoPackage) []alpm.Depend {
|
|
alpmPackage := pkg.(*alpm.Package)
|
|
return alpmPackage.Provides().Slice()
|
|
}
|
|
|
|
func (ae *AlpmExecutor) PackageConflicts(pkg RepoPackage) []alpm.Depend {
|
|
alpmPackage := pkg.(*alpm.Package)
|
|
return alpmPackage.Conflicts().Slice()
|
|
}
|