filter.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package query
  2. import (
  3. alpm "github.com/Jguer/go-alpm"
  4. "github.com/leonelquinteros/gotext"
  5. "github.com/Jguer/yay/v10/pkg/settings"
  6. "github.com/Jguer/yay/v10/pkg/text"
  7. )
  8. // GetPackageNamesBySource returns package names with and without correspondence in SyncDBS respectively
  9. func GetPackageNamesBySource(alpmHandle *alpm.Handle) (local, remote []string, err error) {
  10. localDB, err := alpmHandle.LocalDB()
  11. if err != nil {
  12. return nil, nil, err
  13. }
  14. dbList, err := alpmHandle.SyncDBs()
  15. if err != nil {
  16. return nil, nil, err
  17. }
  18. err = localDB.PkgCache().ForEach(func(k alpm.Package) error {
  19. found := false
  20. // For each DB search for our secret package.
  21. _ = dbList.ForEach(func(d alpm.DB) error {
  22. if found {
  23. return nil
  24. }
  25. if d.Pkg(k.Name()) != nil {
  26. found = true
  27. local = append(local, k.Name())
  28. }
  29. return nil
  30. })
  31. if !found {
  32. remote = append(remote, k.Name())
  33. }
  34. return nil
  35. })
  36. return local, remote, err
  37. }
  38. // GetRemotePackages returns packages with no correspondence in SyncDBS.
  39. func GetRemotePackages(alpmHandle *alpm.Handle) (
  40. remote []alpm.Package,
  41. remoteNames []string,
  42. err error) {
  43. localDB, err := alpmHandle.LocalDB()
  44. if err != nil {
  45. return
  46. }
  47. dbList, err := alpmHandle.SyncDBs()
  48. if err != nil {
  49. return
  50. }
  51. f := func(k alpm.Package) error {
  52. found := false
  53. // For each DB search for our secret package.
  54. _ = dbList.ForEach(func(d alpm.DB) error {
  55. if found {
  56. return nil
  57. }
  58. if d.Pkg(k.Name()) != nil {
  59. found = true
  60. }
  61. return nil
  62. })
  63. if !found {
  64. remote = append(remote, k)
  65. remoteNames = append(remoteNames, k.Name())
  66. }
  67. return nil
  68. }
  69. err = localDB.PkgCache().ForEach(f)
  70. return remote, remoteNames, err
  71. }
  72. func RemoveInvalidTargets(targets []string, mode settings.TargetMode) []string {
  73. filteredTargets := make([]string, 0)
  74. for _, target := range targets {
  75. db, _ := text.SplitDBFromName(target)
  76. if db == "aur" && mode == settings.ModeRepo {
  77. text.Warnln(gotext.Get("%s: can't use target with option --repo -- skipping", text.Cyan(target)))
  78. continue
  79. }
  80. if db != "aur" && db != "" && mode == settings.ModeAUR {
  81. text.Warnln(gotext.Get("%s: can't use target with option --aur -- skipping", text.Cyan(target)))
  82. continue
  83. }
  84. filteredTargets = append(filteredTargets, target)
  85. }
  86. return filteredTargets
  87. }