mirror of
https://github.com/Jguer/yay.git
synced 2024-11-07 01:27:21 +01:00
95 lines
2.2 KiB
Go
95 lines
2.2 KiB
Go
package download
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"net/http"
|
|
|
|
"github.com/leonelquinteros/gotext"
|
|
|
|
"github.com/Jguer/yay/v10/pkg/settings/exe"
|
|
)
|
|
|
|
const (
|
|
MaxConcurrentFetch = 20
|
|
_urlPackagePath = "%s/raw/packages/%s/trunk/PKGBUILD"
|
|
)
|
|
|
|
var (
|
|
ErrInvalidRepository = errors.New(gotext.Get("invalid repository"))
|
|
ErrABSPackageNotFound = errors.New(gotext.Get("package not found in repos"))
|
|
ABSPackageURL = "https://github.com/archlinux/svntogit-packages"
|
|
ABSCommunityURL = "https://github.com/archlinux/svntogit-community"
|
|
)
|
|
|
|
func getRepoURL(db string) (string, error) {
|
|
switch db {
|
|
case "core", "extra", "testing":
|
|
return ABSPackageURL, nil
|
|
case "community", "multilib", "community-testing", "multilib-testing":
|
|
return ABSCommunityURL, nil
|
|
}
|
|
|
|
return "", ErrInvalidRepository
|
|
}
|
|
|
|
// Return format for pkgbuild
|
|
// https://github.com/archlinux/svntogit-community/raw/packages/neovim/trunk/PKGBUILD
|
|
func getPackageURL(db, pkgName string) (string, error) {
|
|
repoURL, err := getRepoURL(db)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return fmt.Sprintf(_urlPackagePath, repoURL, pkgName), err
|
|
}
|
|
|
|
// Return format for pkgbuild repo
|
|
// https://github.com/archlinux/svntogit-community.git
|
|
func getPackageRepoURL(db string) (string, error) {
|
|
repoURL, err := getRepoURL(db)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return repoURL + ".git", err
|
|
}
|
|
|
|
// ABSPKGBUILD retrieves the PKGBUILD file to a dest directory.
|
|
func ABSPKGBUILD(httpClient *http.Client, dbName, pkgName string) ([]byte, error) {
|
|
packageURL, err := getPackageURL(dbName, pkgName)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
resp, err := httpClient.Get(packageURL)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if resp.StatusCode != http.StatusOK {
|
|
return nil, ErrABSPackageNotFound
|
|
}
|
|
|
|
defer resp.Body.Close()
|
|
|
|
pkgBuild, err := ioutil.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return pkgBuild, nil
|
|
}
|
|
|
|
// ABSPKGBUILDRepo retrieves the PKGBUILD repository to a dest directory
|
|
func ABSPKGBUILDRepo(cmdRunner exe.Runner, cmdBuilder exe.GitCmdBuilder, dbName, pkgName, dest string, force bool) error {
|
|
pkgURL, err := getPackageRepoURL(dbName)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return downloadGitRepo(cmdRunner, cmdBuilder, pkgURL,
|
|
pkgName, dest, force, "--single-branch", "-b", "packages/"+pkgName)
|
|
}
|