yay/pkg/db/alpm.go
2020-08-16 23:41:55 +02:00

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()
}