unified.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package download
  2. import (
  3. "sync"
  4. "github.com/Jguer/go-alpm/v2"
  5. "github.com/Jguer/yay/v10/pkg/db"
  6. "github.com/Jguer/yay/v10/pkg/multierror"
  7. "github.com/Jguer/yay/v10/pkg/settings"
  8. "github.com/Jguer/yay/v10/pkg/text"
  9. )
  10. func getURLName(pkg alpm.IPackage) string {
  11. name := pkg.Base()
  12. if name == "" {
  13. name = pkg.Name()
  14. }
  15. return name
  16. }
  17. func GetPkgbuilds(dbExecutor db.Executor, targets []string, mode settings.TargetMode) (map[string][]byte, error) {
  18. pkgbuilds := make(map[string][]byte, len(targets))
  19. var mux sync.Mutex
  20. var errs multierror.MultiError
  21. var wg sync.WaitGroup
  22. sem := make(chan uint8, MaxConcurrentFetch)
  23. for _, target := range targets {
  24. aur := true
  25. dbName, name := text.SplitDBFromName(target)
  26. if dbName != "aur" && (mode == settings.ModeAny || mode == settings.ModeRepo) {
  27. pkg := dbExecutor.SyncPackage(name)
  28. if pkg != nil {
  29. aur = false
  30. name = getURLName(pkg)
  31. dbName = pkg.DB().Name()
  32. }
  33. }
  34. if aur && mode == settings.ModeRepo {
  35. // Mode does not allow AUR packages
  36. continue
  37. }
  38. sem <- 1
  39. wg.Add(1)
  40. go func(target, dbName, pkgName string, aur bool) {
  41. var err error
  42. var pkgbuild []byte
  43. if aur {
  44. pkgbuild, err = GetAURPkgbuild(pkgName)
  45. } else {
  46. pkgbuild, err = GetABSPkgbuild(dbName, pkgName)
  47. }
  48. if err == nil {
  49. mux.Lock()
  50. pkgbuilds[target] = pkgbuild
  51. mux.Unlock()
  52. } else {
  53. errs.Add(err)
  54. }
  55. <-sem
  56. wg.Done()
  57. }(target, dbName, name, aur)
  58. }
  59. wg.Wait()
  60. return pkgbuilds, errs.Return()
  61. }