feat(install): use download package for PKGBUILD repo download

This commit is contained in:
jguer 2021-08-06 09:40:17 +02:00 committed by J Guerreiro
parent 4a515c4462
commit 522247dca2

View file

@ -17,6 +17,7 @@ import (
"github.com/Jguer/yay/v10/pkg/completion" "github.com/Jguer/yay/v10/pkg/completion"
"github.com/Jguer/yay/v10/pkg/db" "github.com/Jguer/yay/v10/pkg/db"
"github.com/Jguer/yay/v10/pkg/dep" "github.com/Jguer/yay/v10/pkg/dep"
"github.com/Jguer/yay/v10/pkg/download"
"github.com/Jguer/yay/v10/pkg/intrange" "github.com/Jguer/yay/v10/pkg/intrange"
"github.com/Jguer/yay/v10/pkg/multierror" "github.com/Jguer/yay/v10/pkg/multierror"
"github.com/Jguer/yay/v10/pkg/pgp" "github.com/Jguer/yay/v10/pkg/pgp"
@ -232,8 +233,23 @@ func install(cmdArgs *settings.Arguments, dbExecutor db.Executor, ignoreProvider
} }
toSkip := pkgbuildsToSkip(do.Aur, targets) toSkip := pkgbuildsToSkip(do.Aur, targets)
cloned, err := downloadPkgbuilds(do.Aur, toSkip, config.BuildDir) toClone := make([]string, 0, len(do.Aur))
if err != nil { for _, base := range do.Aur {
if !toSkip.Get(base.Pkgbase()) {
toClone = append(toClone, base.Pkgbase())
}
}
toSkipSlice := toSkip.ToSlice()
if len(toSkipSlice) != 0 {
text.OperationInfoln(
gotext.Get("PKGBUILD up to date, Skipping (%d/%d): %s",
len(toSkipSlice), len(toClone), text.Cyan(strings.Join(toSkipSlice, ", "))))
}
cloned, errA := download.AURPKGBUILDRepos(config.Runtime.CmdRunner,
config.Runtime.CmdBuilder, toClone, config.AURURL, config.BuildDir, false)
if errA != nil {
return err return err
} }
@ -729,48 +745,6 @@ func updatePkgbuildSeenRef(bases []dep.Base) error {
return errMulti.Return() return errMulti.Return()
} }
func showPkgbuildDiffs(bases []dep.Base, cloned stringset.StringSet) error {
var errMulti multierror.MultiError
for _, base := range bases {
pkg := base.Pkgbase()
dir := filepath.Join(config.BuildDir, pkg)
start, err := getLastSeenHash(config.BuildDir, pkg)
if err != nil {
errMulti.Add(err)
continue
}
if cloned.Get(pkg) {
start = gitEmptyTree
} else {
hasDiff, err := gitHasDiff(config.BuildDir, pkg)
if err != nil {
errMulti.Add(err)
continue
}
if !hasDiff {
text.Warnln(gotext.Get("%s: No changes -- skipping", text.Cyan(base.String())))
continue
}
}
args := []string{
"diff",
start + "..HEAD@{upstream}", "--src-prefix",
dir + "/", "--dst-prefix", dir + "/", "--", ".", ":(exclude).SRCINFO",
}
if text.UseColor {
args = append(args, "--color=always")
} else {
args = append(args, "--color=never")
}
_ = config.Runtime.CmdRunner.Show(config.Runtime.CmdBuilder.BuildGitCmd(dir, args...))
}
return errMulti.Return()
}
func editPkgbuilds(bases []dep.Base, srcinfos map[string]*gosrc.Srcinfo) error { func editPkgbuilds(bases []dep.Base, srcinfos map[string]*gosrc.Srcinfo) error {
pkgbuilds := make([]string, 0, len(bases)) pkgbuilds := make([]string, 0, len(bases))
for _, base := range bases { for _, base := range bases {
@ -859,59 +833,6 @@ func mergePkgbuilds(bases []dep.Base) error {
return nil return nil
} }
func downloadPkgbuilds(bases []dep.Base, toSkip stringset.StringSet, buildDir string) (stringset.StringSet, error) {
cloned := make(stringset.StringSet)
downloaded := 0
var wg sync.WaitGroup
var mux sync.Mutex
var errs multierror.MultiError
download := func(base dep.Base) {
defer wg.Done()
pkg := base.Pkgbase()
if toSkip.Get(pkg) {
mux.Lock()
downloaded++
text.OperationInfoln(
gotext.Get("PKGBUILD up to date, Skipping (%d/%d): %s",
downloaded, len(bases), text.Cyan(base.String())))
mux.Unlock()
return
}
clone, err := gitDownload(config.AURURL+"/"+pkg+".git", buildDir, pkg)
if err != nil {
errs.Add(err)
return
}
if clone {
mux.Lock()
cloned.Set(pkg)
mux.Unlock()
}
mux.Lock()
downloaded++
text.OperationInfoln(gotext.Get("Downloaded PKGBUILD (%d/%d): %s", downloaded, len(bases), text.Cyan(base.String())))
mux.Unlock()
}
count := 0
for _, base := range bases {
wg.Add(1)
go download(base)
count++
if count%25 == 0 {
wg.Wait()
}
}
wg.Wait()
return cloned, errs.Return()
}
func downloadPkgbuildsSources(bases []dep.Base, incompatible stringset.StringSet) (err error) { func downloadPkgbuildsSources(bases []dep.Base, incompatible stringset.StringSet) (err error) {
for _, base := range bases { for _, base := range bases {
pkg := base.Pkgbase() pkg := base.Pkgbase()
@ -958,7 +879,7 @@ func buildInstallPkgbuilds(
oldConfirm := settings.NoConfirm oldConfirm := settings.NoConfirm
settings.NoConfirm = true settings.NoConfirm = true
//remotenames: names of all non repo packages on the system // remotenames: names of all non repo packages on the system
localNames, remoteNames, err := query.GetPackageNamesBySource(dbExecutor) localNames, remoteNames, err := query.GetPackageNamesBySource(dbExecutor)
if err != nil { if err != nil {
return err return err