filter.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. // FilterPackages filters packages based on source and type from local repository.
  9. func FilterPackages(alpmHandle *alpm.Handle) (
  10. local, remote []alpm.Package,
  11. localNames, remoteNames []string,
  12. err error) {
  13. localDB, err := alpmHandle.LocalDB()
  14. if err != nil {
  15. return
  16. }
  17. dbList, err := alpmHandle.SyncDBs()
  18. if err != nil {
  19. return
  20. }
  21. f := func(k alpm.Package) error {
  22. found := false
  23. // For each DB search for our secret package.
  24. _ = dbList.ForEach(func(d alpm.DB) error {
  25. if found {
  26. return nil
  27. }
  28. if d.Pkg(k.Name()) != nil {
  29. found = true
  30. local = append(local, k)
  31. localNames = append(localNames, k.Name())
  32. }
  33. return nil
  34. })
  35. if !found {
  36. remote = append(remote, k)
  37. remoteNames = append(remoteNames, k.Name())
  38. }
  39. return nil
  40. }
  41. err = localDB.PkgCache().ForEach(f)
  42. return local, remote, localNames, remoteNames, err
  43. }
  44. func RemoveInvalidTargets(targets []string, mode settings.TargetMode) []string {
  45. filteredTargets := make([]string, 0)
  46. for _, target := range targets {
  47. db, _ := text.SplitDBFromName(target)
  48. if db == "aur" && mode == settings.ModeRepo {
  49. text.Warnln(gotext.Get("%s: can't use target with option --repo -- skipping", text.Cyan(target)))
  50. continue
  51. }
  52. if db != "aur" && db != "" && mode == settings.ModeAUR {
  53. text.Warnln(gotext.Get("%s: can't use target with option --aur -- skipping", text.Cyan(target)))
  54. continue
  55. }
  56. filteredTargets = append(filteredTargets, target)
  57. }
  58. return filteredTargets
  59. }