mirror of
https://github.com/Jguer/yay
synced 2024-10-05 23:59:13 +00:00
Parallelize pkgbuild download
This commit is contained in:
parent
8c2adaddb3
commit
ff5ed12181
45
install.go
45
install.go
|
@ -7,6 +7,7 @@ import (
|
|||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
gosrc "github.com/Morganamilo/go-srcinfo"
|
||||
alpm "github.com/jguer/go-alpm"
|
||||
|
@ -770,7 +771,7 @@ func pkgBuildsToSkip(pkgs []*rpc.Pkg, targets stringSet) stringSet {
|
|||
pkgbuild, err := gosrc.ParseFile(dir)
|
||||
|
||||
if err == nil {
|
||||
if alpm.VerCmp(pkgbuild.Version(), pkg.Version) > 0 {
|
||||
if alpm.VerCmp(pkgbuild.Version(), pkg.Version) >= 0 {
|
||||
toSkip.set(pkg.PackageBase)
|
||||
}
|
||||
}
|
||||
|
@ -795,35 +796,57 @@ func mergePkgBuilds(pkgs []*rpc.Pkg) error {
|
|||
|
||||
func downloadPkgBuilds(pkgs []*rpc.Pkg, bases map[string][]*rpc.Pkg, toSkip stringSet) (stringSet, error) {
|
||||
cloned := make(stringSet)
|
||||
downloaded := 0
|
||||
var wg sync.WaitGroup
|
||||
var mux sync.Mutex
|
||||
var errs MultiError
|
||||
|
||||
download := func(k int, pkg *rpc.Pkg) {
|
||||
defer wg.Done()
|
||||
|
||||
for k, pkg := range pkgs {
|
||||
if toSkip.get(pkg.PackageBase) {
|
||||
mux.Lock()
|
||||
downloaded++
|
||||
str := bold(cyan("::") + " PKGBUILD up to date, Skipping (%d/%d): %s\n")
|
||||
fmt.Printf(str, k+1, len(pkgs), cyan(formatPkgbase(pkg, bases)))
|
||||
continue
|
||||
fmt.Printf(str, downloaded, len(pkgs), cyan(formatPkgbase(pkg, bases)))
|
||||
mux.Unlock()
|
||||
return
|
||||
}
|
||||
|
||||
str := bold(cyan("::") + " Downloading PKGBUILD (%d/%d): %s\n")
|
||||
|
||||
fmt.Printf(str, k+1, len(pkgs), cyan(formatPkgbase(pkg, bases)))
|
||||
|
||||
if shouldUseGit(filepath.Join(config.BuildDir, pkg.PackageBase)) {
|
||||
clone, err := gitDownload(baseURL+"/"+pkg.PackageBase+".git", config.BuildDir, pkg.PackageBase)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
errs.Add(err)
|
||||
return
|
||||
}
|
||||
if clone {
|
||||
mux.Lock()
|
||||
cloned.set(pkg.PackageBase)
|
||||
mux.Unlock()
|
||||
}
|
||||
} else {
|
||||
err := downloadAndUnpack(baseURL+pkg.URLPath, config.BuildDir)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
errs.Add(err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
mux.Lock()
|
||||
downloaded++
|
||||
str := bold(cyan("::") + " Downloaded PKGBUILD (%d/%d): %s\n")
|
||||
fmt.Printf(str, downloaded, len(pkgs), cyan(formatPkgbase(pkg, bases)))
|
||||
mux.Unlock()
|
||||
}
|
||||
|
||||
return cloned, nil
|
||||
for k, pkg := range pkgs {
|
||||
wg.Add(1)
|
||||
go download(k, pkg)
|
||||
}
|
||||
|
||||
wg.Wait()
|
||||
|
||||
return cloned, errs.Return()
|
||||
}
|
||||
|
||||
func downloadPkgBuildsSources(pkgs []*rpc.Pkg, bases map[string][]*rpc.Pkg, incompatible stringSet) (err error) {
|
||||
|
|
Loading…
Reference in a new issue