abs.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package download
  2. import (
  3. "errors"
  4. "fmt"
  5. "io/ioutil"
  6. "net/http"
  7. "github.com/leonelquinteros/gotext"
  8. )
  9. const (
  10. MaxConcurrentFetch = 20
  11. _urlPackagePath = "%s/raw/packages/%s/trunk/PKGBUILD"
  12. )
  13. var (
  14. ErrInvalidRepository = errors.New(gotext.Get("invalid repository"))
  15. ErrABSPackageNotFound = errors.New(gotext.Get("package not found in repos"))
  16. ABSPackageURL = "https://github.com/archlinux/svntogit-packages"
  17. ABSCommunityURL = "https://github.com/archlinux/svntogit-community"
  18. )
  19. // Return format for pkgbuild
  20. // https://github.com/archlinux/svntogit-community/raw/packages/neovim/trunk/PKGBUILD
  21. func getPackageURL(db, pkgName string) (string, error) {
  22. repoURL := ""
  23. switch db {
  24. case "core", "extra", "testing":
  25. repoURL = ABSPackageURL
  26. case "community", "multilib", "community-testing", "multilib-testing":
  27. repoURL = ABSCommunityURL
  28. default:
  29. return "", ErrInvalidRepository
  30. }
  31. return fmt.Sprintf(_urlPackagePath, repoURL, pkgName), nil
  32. }
  33. func GetABSPkgbuild(httpClient *http.Client, dbName, pkgName string) ([]byte, error) {
  34. packageURL, err := getPackageURL(dbName, pkgName)
  35. if err != nil {
  36. return nil, err
  37. }
  38. resp, err := httpClient.Get(packageURL)
  39. if err != nil {
  40. return nil, err
  41. }
  42. if resp.StatusCode != 200 {
  43. return nil, ErrABSPackageNotFound
  44. }
  45. defer resp.Body.Close()
  46. pkgBuild, err := ioutil.ReadAll(resp.Body)
  47. if err != nil {
  48. return nil, err
  49. }
  50. return pkgBuild, nil
  51. }