1
0
mirror of https://github.com/Jguer/yay synced 2024-07-05 18:01:50 +00:00

Make aurInfo concurrent

This commit is contained in:
morganamilo 2018-02-19 04:25:36 +00:00
parent 2856a7276c
commit 3f7c731f99
No known key found for this signature in database
GPG Key ID: 6FE9E7996B0B082E

View File

@ -4,6 +4,7 @@ import (
"fmt"
"sort"
"strings"
"sync"
alpm "github.com/jguer/go-alpm"
rpc "github.com/mikkeloscar/aur"
@ -368,14 +369,36 @@ func min(a, b int) int {
func aurInfo(names []string) ([]rpc.Pkg, error) {
info := make([]rpc.Pkg, 0, len(names))
seen := make(map[string]int)
var mux sync.Mutex
var wg sync.WaitGroup
var err error
makeRequest := func(n, max int) {
tempInfo, requestErr := rpc.Info(names[n:max])
if err != nil {
return
}
if requestErr != nil {
//return info, err
err = requestErr
return
}
mux.Lock()
info = append(info, tempInfo...)
mux.Unlock()
wg.Done()
}
for n := 0; n < len(names); n += config.RequestSplitN {
max := min(len(names), n + config.RequestSplitN)
tempInfo, err := rpc.Info(names[n:max])
if err != nil {
return info, err
}
info = append(info, tempInfo...)
wg.Add(1)
go makeRequest(n, max)
}
wg.Wait()
if err != nil {
return info, err
}
for k, pkg := range info {