alpm.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package db
  2. import (
  3. alpm "github.com/Jguer/go-alpm"
  4. )
  5. type AlpmExecutor struct {
  6. Handle *alpm.Handle
  7. LocalDB *alpm.DB
  8. SyncDB alpm.DBList
  9. }
  10. func NewExecutor(handle *alpm.Handle) (*AlpmExecutor, error) {
  11. localDB, err := handle.LocalDB()
  12. if err != nil {
  13. return nil, err
  14. }
  15. syncDB, err := handle.SyncDBs()
  16. if err != nil {
  17. return nil, err
  18. }
  19. return &AlpmExecutor{Handle: handle, LocalDB: localDB, SyncDB: syncDB}, nil
  20. }
  21. func (ae *AlpmExecutor) LocalSatisfierExists(pkgName string) bool {
  22. if _, err := ae.LocalDB.PkgCache().FindSatisfier(pkgName); err != nil {
  23. return false
  24. }
  25. return true
  26. }
  27. func (ae *AlpmExecutor) IsCorrectVersionInstalled(pkgName, versionRequired string) bool {
  28. alpmPackage := ae.LocalDB.Pkg(pkgName)
  29. if alpmPackage == nil {
  30. return false
  31. }
  32. return alpmPackage.Version() == versionRequired
  33. }
  34. func (ae *AlpmExecutor) SyncSatisfier(pkgName string) RepoPackage {
  35. foundPkg, err := ae.SyncDB.FindSatisfier(pkgName)
  36. if err != nil {
  37. return nil
  38. }
  39. return foundPkg
  40. }
  41. func (ae *AlpmExecutor) PackagesFromGroup(groupName string) []RepoPackage {
  42. groupPackages := []RepoPackage{}
  43. _ = ae.SyncDB.FindGroupPkgs(groupName).ForEach(func(pkg alpm.Package) error {
  44. groupPackages = append(groupPackages, &pkg)
  45. return nil
  46. })
  47. return groupPackages
  48. }
  49. func (ae *AlpmExecutor) LocalPackages() []RepoPackage {
  50. localPackages := []RepoPackage{}
  51. _ = ae.LocalDB.PkgCache().ForEach(func(pkg alpm.Package) error {
  52. localPackages = append(localPackages, RepoPackage(&pkg))
  53. return nil
  54. })
  55. return localPackages
  56. }
  57. func (ae *AlpmExecutor) PackageFromDB(pkgName, dbName string) RepoPackage {
  58. singleDB, err := ae.Handle.SyncDBByName(dbName)
  59. if err != nil {
  60. return nil
  61. }
  62. foundPkg, err := singleDB.PkgCache().FindSatisfier(pkgName)
  63. if err != nil {
  64. return nil
  65. }
  66. return foundPkg
  67. }
  68. func (ae *AlpmExecutor) PackageDepends(pkg RepoPackage) []alpm.Depend {
  69. alpmPackage := pkg.(*alpm.Package)
  70. return alpmPackage.Depends().Slice()
  71. }
  72. func (ae *AlpmExecutor) PackageProvides(pkg RepoPackage) []alpm.Depend {
  73. alpmPackage := pkg.(*alpm.Package)
  74. return alpmPackage.Provides().Slice()
  75. }
  76. func (ae *AlpmExecutor) PackageConflicts(pkg RepoPackage) []alpm.Depend {
  77. alpmPackage := pkg.(*alpm.Package)
  78. return alpmPackage.Conflicts().Slice()
  79. }