abs.go 1.4 KB

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