abs.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package download
  2. import (
  3. "errors"
  4. "io/ioutil"
  5. "net/http"
  6. "net/url"
  7. )
  8. var ErrInvalidRepository = errors.New("invalid repository")
  9. var ErrABSPackageNotFound = errors.New("package not found in repos")
  10. const MaxConcurrentFetch = 20
  11. const ABSPackageURL = "https://git.archlinux.org/svntogit/packages.git/plain/trunk/PKGBUILD?"
  12. const ABSCommunityURL = "https://git.archlinux.org/svntogit/community.git/plain/trunk/PKGBUILD?"
  13. func getPackageURL(db, pkgName string) (string, error) {
  14. values := url.Values{}
  15. values.Set("h", "packages/"+pkgName)
  16. nameEncoded := values.Encode()
  17. switch db {
  18. case "core", "extra", "testing":
  19. return ABSPackageURL + nameEncoded, nil
  20. case "community", "multilib", "community-testing", "multilib-testing":
  21. return ABSCommunityURL + nameEncoded, nil
  22. }
  23. return "", ErrInvalidRepository
  24. }
  25. func GetABSPkgbuild(dbName, pkgName string) ([]byte, error) {
  26. packageURL, err := getPackageURL(dbName, pkgName)
  27. if err != nil {
  28. return nil, err
  29. }
  30. resp, err := http.Get(packageURL)
  31. if err != nil {
  32. return nil, err
  33. }
  34. defer resp.Body.Close()
  35. pkgBuild, err := ioutil.ReadAll(resp.Body)
  36. if err != nil {
  37. return nil, err
  38. }
  39. return pkgBuild, nil
  40. }