1
0
mirror of https://github.com/Jguer/yay.git synced 2026-05-05 12:26:10 +02:00

fix(config): package alpmHandle into runtimeSettings

This commit is contained in:
jguer 2020-07-05 16:58:35 +02:00
parent 968b61ac57
commit 36730a41e3
No known key found for this signature in database
GPG Key ID: 6D6CC9BEA8556B35
14 changed files with 123 additions and 112 deletions

View File

@ -28,7 +28,7 @@ func questionCallback(question alpm.QuestionAny) {
size := 0
_ = qp.Providers(alpmHandle).ForEach(func(pkg alpm.Package) error {
_ = qp.Providers(config.Runtime.AlpmHandle).ForEach(func(pkg alpm.Package) error {
size++
return nil
})
@ -38,7 +38,7 @@ func questionCallback(question alpm.QuestionAny) {
size = 1
var db string
_ = qp.Providers(alpmHandle).ForEach(func(pkg alpm.Package) error {
_ = qp.Providers(config.Runtime.AlpmHandle).ForEach(func(pkg alpm.Package) error {
thisDB := pkg.DB().Name()
if db != thisDB {

View File

@ -8,6 +8,8 @@ import (
"github.com/leonelquinteros/gotext"
"github.com/Jguer/go-alpm"
"github.com/Jguer/yay/v10/pkg/query"
"github.com/Jguer/yay/v10/pkg/settings"
"github.com/Jguer/yay/v10/pkg/stringset"
@ -36,8 +38,8 @@ func removeVCSPackage(pkgs []string) {
}
// CleanDependencies removes all dangling dependencies in system
func cleanDependencies(removeOptional bool) error {
hanging, err := hangingPackages(removeOptional)
func cleanDependencies(removeOptional bool, alpmHandle *alpm.Handle) error {
hanging, err := hangingPackages(removeOptional, alpmHandle)
if err != nil {
return err
}
@ -62,7 +64,7 @@ func cleanRemove(pkgNames []string) error {
return show(passToPacman(arguments))
}
func syncClean(parser *settings.Arguments) error {
func syncClean(parser *settings.Arguments, alpmHandle *alpm.Handle) error {
keepInstalled := false
keepCurrent := false
@ -96,7 +98,7 @@ func syncClean(parser *settings.Arguments) error {
fmt.Println(gotext.Get("\nBuild directory:"), config.BuildDir)
if continueTask(question, true) {
if err := cleanAUR(keepInstalled, keepCurrent, removeAll); err != nil {
if err := cleanAUR(keepInstalled, keepCurrent, removeAll, alpmHandle); err != nil {
return err
}
}
@ -112,7 +114,7 @@ func syncClean(parser *settings.Arguments) error {
return nil
}
func cleanAUR(keepInstalled, keepCurrent, removeAll bool) error {
func cleanAUR(keepInstalled, keepCurrent, removeAll bool, alpmHandle *alpm.Handle) error {
fmt.Println(gotext.Get("removing AUR packages from cache..."))
installedBases := make(stringset.StringSet)

72
cmd.go
View File

@ -139,7 +139,7 @@ getpkgbuild specific options:
-f --force Force download for existing ABS packages`)
}
func handleCmd() error {
func handleCmd(alpmHandle *alpm.Handle) error {
if cmdArgs.ExistsArg("h", "help") {
return handleHelp()
}
@ -157,29 +157,29 @@ func handleCmd() error {
case "F", "files":
return show(passToPacman(cmdArgs))
case "Q", "query":
return handleQuery()
return handleQuery(alpmHandle)
case "R", "remove":
return handleRemove()
case "S", "sync":
return handleSync()
return handleSync(alpmHandle)
case "T", "deptest":
return show(passToPacman(cmdArgs))
case "U", "upgrade":
return show(passToPacman(cmdArgs))
case "G", "getpkgbuild":
return handleGetpkgbuild()
return handleGetpkgbuild(alpmHandle)
case "P", "show":
return handlePrint()
return handlePrint(alpmHandle)
case "Y", "--yay":
return handleYay()
return handleYay(alpmHandle)
}
return fmt.Errorf(gotext.Get("unhandled operation"))
}
func handleQuery() error {
func handleQuery(alpmHandle *alpm.Handle) error {
if cmdArgs.ExistsArg("u", "upgrades") {
return printUpdateList(cmdArgs)
return printUpdateList(cmdArgs, alpmHandle)
}
return show(passToPacman(cmdArgs))
}
@ -196,7 +196,7 @@ func handleVersion() {
fmt.Printf("yay v%s - libalpm v%s\n", yayVersion, alpm.Version())
}
func handlePrint() (err error) {
func handlePrint(alpmHandle *alpm.Handle) (err error) {
switch {
case cmdArgs.ExistsArg("d", "defaultconfig"):
tmpConfig := settings.MakeConfig()
@ -205,9 +205,9 @@ func handlePrint() (err error) {
case cmdArgs.ExistsArg("g", "currentconfig"):
fmt.Printf("%v", config)
case cmdArgs.ExistsArg("n", "numberupgrades"):
err = printNumberOfUpdates()
err = printNumberOfUpdates(alpmHandle)
case cmdArgs.ExistsArg("u", "upgrades"):
err = printUpdateList(cmdArgs)
err = printUpdateList(cmdArgs, alpmHandle)
case cmdArgs.ExistsArg("w", "news"):
double := cmdArgs.ExistsDouble("w", "news")
quiet := cmdArgs.ExistsArg("q", "quiet")
@ -217,39 +217,39 @@ func handlePrint() (err error) {
case cmdArgs.ExistsArg("c", "complete"):
err = completion.Show(alpmHandle, config.AURURL, config.Runtime.CompletionPath, config.CompletionInterval, false)
case cmdArgs.ExistsArg("s", "stats"):
err = localStatistics()
err = localStatistics(alpmHandle)
default:
err = nil
}
return err
}
func handleYay() error {
func handleYay(alpmHandle *alpm.Handle) error {
if cmdArgs.ExistsArg("gendb") {
return createDevelDB(config.Runtime.VCSPath)
return createDevelDB(config.Runtime.VCSPath, alpmHandle)
}
if cmdArgs.ExistsDouble("c") {
return cleanDependencies(true)
return cleanDependencies(true, alpmHandle)
}
if cmdArgs.ExistsArg("c", "clean") {
return cleanDependencies(false)
return cleanDependencies(false, alpmHandle)
}
if len(cmdArgs.Targets) > 0 {
return handleYogurt()
return handleYogurt(alpmHandle)
}
return nil
}
func handleGetpkgbuild() error {
return getPkgbuilds(cmdArgs.Targets)
func handleGetpkgbuild(alpmHandle *alpm.Handle) error {
return getPkgbuilds(cmdArgs.Targets, alpmHandle)
}
func handleYogurt() error {
func handleYogurt(alpmHandle *alpm.Handle) error {
config.SearchMode = numberMenu
return displayNumberMenu(cmdArgs.Targets)
return displayNumberMenu(cmdArgs.Targets, alpmHandle)
}
func handleSync() error {
func handleSync(alpmHandle *alpm.Handle) error {
targets := cmdArgs.Targets
if cmdArgs.ExistsArg("s", "search") {
@ -258,28 +258,28 @@ func handleSync() error {
} else {
config.SearchMode = detailed
}
return syncSearch(targets)
return syncSearch(targets, alpmHandle)
}
if cmdArgs.ExistsArg("p", "print", "print-format") {
return show(passToPacman(cmdArgs))
}
if cmdArgs.ExistsArg("c", "clean") {
return syncClean(cmdArgs)
return syncClean(cmdArgs, alpmHandle)
}
if cmdArgs.ExistsArg("l", "list") {
return syncList(cmdArgs)
return syncList(cmdArgs, alpmHandle)
}
if cmdArgs.ExistsArg("g", "groups") {
return show(passToPacman(cmdArgs))
}
if cmdArgs.ExistsArg("i", "info") {
return syncInfo(targets)
return syncInfo(targets, alpmHandle)
}
if cmdArgs.ExistsArg("u", "sysupgrade") {
return install(cmdArgs)
return install(cmdArgs, alpmHandle)
}
if len(cmdArgs.Targets) > 0 {
return install(cmdArgs)
return install(cmdArgs, alpmHandle)
}
if cmdArgs.ExistsArg("y", "refresh") {
return show(passToPacman(cmdArgs))
@ -297,7 +297,7 @@ func handleRemove() error {
}
// NumberMenu presents a CLI for selecting packages to install.
func displayNumberMenu(pkgS []string) error {
func displayNumberMenu(pkgS []string, alpmHandle *alpm.Handle) error {
var (
aurErr, repoErr error
aq aurQuery
@ -312,7 +312,7 @@ func displayNumberMenu(pkgS []string) error {
lenaq = len(aq)
}
if config.Runtime.Mode == settings.ModeRepo || config.Runtime.Mode == settings.ModeAny {
pq, repoErr = queryRepo(pkgS)
pq, repoErr = queryRepo(pkgS, alpmHandle)
lenpq = len(pq)
if repoErr != nil {
return repoErr
@ -326,17 +326,17 @@ func displayNumberMenu(pkgS []string) error {
switch config.SortMode {
case settings.TopDown:
if config.Runtime.Mode == settings.ModeRepo || config.Runtime.Mode == settings.ModeAny {
pq.printSearch()
pq.printSearch(alpmHandle)
}
if config.Runtime.Mode == settings.ModeAUR || config.Runtime.Mode == settings.ModeAny {
aq.printSearch(lenpq + 1)
aq.printSearch(lenpq+1, alpmHandle)
}
case settings.BottomUp:
if config.Runtime.Mode == settings.ModeAUR || config.Runtime.Mode == settings.ModeAny {
aq.printSearch(lenpq + 1)
aq.printSearch(lenpq+1, alpmHandle)
}
if config.Runtime.Mode == settings.ModeRepo || config.Runtime.Mode == settings.ModeAny {
pq.printSearch()
pq.printSearch(alpmHandle)
}
default:
return fmt.Errorf(gotext.Get("invalid sort mode. Fix with yay -Y --bottomup --save"))
@ -407,10 +407,10 @@ func displayNumberMenu(pkgS []string) error {
sudoLoopBackground()
}
return install(arguments)
return install(arguments, alpmHandle)
}
func syncList(parser *settings.Arguments) error {
func syncList(parser *settings.Arguments, alpmHandle *alpm.Handle) error {
aur := false
for i := len(parser.Targets) - 1; i >= 0; i-- {

View File

@ -33,7 +33,7 @@ var savedInfo vcsInfo
var config *settings.Configuration
// AlpmHandle is the alpm handle used by yay.
var alpmHandle *alpm.Handle
// var alpmHandle *alpm.Handle
var hideMenus = false
@ -171,7 +171,7 @@ func toUsage(usages []string) alpm.Usage {
return ret
}
func configureAlpm(pacmanConf *pacmanconf.Config) error {
func configureAlpm(pacmanConf *pacmanconf.Config, alpmHandle *alpm.Handle) error {
// TODO: set SigLevel
// sigLevel := alpm.SigPackage | alpm.SigPackageOptional | alpm.SigDatabase | alpm.SigDatabaseOptional
// localFileSigLevel := alpm.SigUseDefault

View File

@ -55,7 +55,7 @@ type depPool struct {
Warnings *aurWarnings
}
func makeDepPool() (*depPool, error) {
func makeDepPool(alpmHandle *alpm.Handle) (*depPool, error) {
localDB, err := alpmHandle.LocalDB()
if err != nil {
return nil, err
@ -81,7 +81,7 @@ func makeDepPool() (*depPool, error) {
}
// Includes db/ prefixes and group installs
func (dp *depPool) ResolveTargets(pkgs []string) error {
func (dp *depPool) ResolveTargets(pkgs []string, alpmHandle *alpm.Handle) error {
// RPC requests are slow
// Combine as many AUR package requests as possible into a single RPC
// call
@ -358,14 +358,14 @@ func (dp *depPool) ResolveRepoDependency(pkg *alpm.Package) {
})
}
func getDepPool(pkgs []string, warnings *aurWarnings) (*depPool, error) {
dp, err := makeDepPool()
func getDepPool(pkgs []string, warnings *aurWarnings, alpmHandle *alpm.Handle) (*depPool, error) {
dp, err := makeDepPool(alpmHandle)
if err != nil {
return nil, err
}
dp.Warnings = warnings
err = dp.ResolveTargets(pkgs)
err = dp.ResolveTargets(pkgs, alpmHandle)
return dp, err
}

View File

@ -138,7 +138,7 @@ func gitMerge(path, name string) error {
return nil
}
func getPkgbuilds(pkgs []string) error {
func getPkgbuilds(pkgs []string, alpmHandle *alpm.Handle) error {
missing := false
wd, err := os.Getwd()
if err != nil {
@ -146,7 +146,7 @@ func getPkgbuilds(pkgs []string) error {
}
pkgs = removeInvalidTargets(pkgs)
aur, repo, err := packageSlices(pkgs)
aur, repo, err := packageSlices(pkgs, alpmHandle)
if err != nil {
return err
@ -163,7 +163,7 @@ func getPkgbuilds(pkgs []string) error {
}
if len(repo) > 0 {
missing, err = getPkgbuildsfromABS(repo, wd)
missing, err = getPkgbuildsfromABS(repo, wd, alpmHandle)
if err != nil {
return err
}
@ -211,7 +211,7 @@ func getPkgbuilds(pkgs []string) error {
}
// GetPkgbuild downloads pkgbuild from the ABS.
func getPkgbuildsfromABS(pkgs []string, path string) (bool, error) {
func getPkgbuildsfromABS(pkgs []string, path string, alpmHandle *alpm.Handle) (bool, error) {
var wg sync.WaitGroup
var mux sync.Mutex
var errs multierror.MultiError

View File

@ -56,7 +56,7 @@ func asexp(parser *settings.Arguments, pkgs []string) error {
}
// Install handles package installs
func install(parser *settings.Arguments) (err error) {
func install(parser *settings.Arguments, alpmHandle *alpm.Handle) (err error) {
var incompatible stringset.StringSet
var do *depOrder
@ -76,7 +76,7 @@ func install(parser *settings.Arguments) (err error) {
}
}
} else if parser.ExistsArg("y", "refresh") || parser.ExistsArg("u", "sysupgrade") || len(parser.Targets) > 0 {
err = earlyPacmanCall(parser)
err = earlyPacmanCall(parser, alpmHandle)
if err != nil {
return err
}
@ -85,10 +85,11 @@ func install(parser *settings.Arguments) (err error) {
// we may have done -Sy, our handle now has an old
// database.
err = initAlpmHandle(config.Runtime.PacmanConf)
alpmHandle, err = initAlpmHandle(config.Runtime.PacmanConf, alpmHandle)
if err != nil {
return err
}
config.Runtime.AlpmHandle = alpmHandle
_, _, localNames, remoteNames, err := query.FilterPackages(alpmHandle)
if err != nil {
@ -113,7 +114,7 @@ func install(parser *settings.Arguments) (err error) {
// if we are doing -u also request all packages needing update
if parser.ExistsArg("u", "sysupgrade") {
aurUp, repoUp, err = upList(warnings)
aurUp, repoUp, err = upList(warnings, alpmHandle)
if err != nil {
return err
}
@ -150,7 +151,7 @@ func install(parser *settings.Arguments) (err error) {
targets := stringset.FromSlice(parser.Targets)
dp, err := getDepPool(requestTargets, warnings)
dp, err := getDepPool(requestTargets, warnings, alpmHandle)
if err != nil {
return err
}
@ -312,7 +313,7 @@ func install(parser *settings.Arguments) (err error) {
config.NoConfirm = oldValue
}
incompatible, err = getIncompatible(do.Aur, srcinfos)
incompatible, err = getIncompatible(do.Aur, srcinfos, alpmHandle)
if err != nil {
return err
}
@ -364,7 +365,7 @@ func install(parser *settings.Arguments) (err error) {
return err
}
err = buildInstallPkgbuilds(dp, do, srcinfos, parser, incompatible, conflicts)
err = buildInstallPkgbuilds(dp, do, srcinfos, parser, incompatible, conflicts, alpmHandle)
if err != nil {
return err
}
@ -411,7 +412,7 @@ func inRepos(syncDB alpm.DBList, pkg string) bool {
return !syncDB.FindGroupPkgs(target.Name).Empty()
}
func earlyPacmanCall(parser *settings.Arguments) error {
func earlyPacmanCall(parser *settings.Arguments, alpmHandle *alpm.Handle) error {
arguments := parser.Copy()
arguments.Op = "S"
targets := parser.Targets
@ -457,7 +458,7 @@ func earlyRefresh(parser *settings.Arguments) error {
return show(passToPacman(arguments))
}
func getIncompatible(bases []Base, srcinfos map[string]*gosrc.Srcinfo) (stringset.StringSet, error) {
func getIncompatible(bases []Base, srcinfos map[string]*gosrc.Srcinfo, alpmHandle *alpm.Handle) (stringset.StringSet, error) {
incompatible := make(stringset.StringSet)
basesMap := make(map[string]Base)
alpmArch, err := alpmHandle.Arch()
@ -934,7 +935,8 @@ func buildInstallPkgbuilds(
srcinfos map[string]*gosrc.Srcinfo,
parser *settings.Arguments,
incompatible stringset.StringSet,
conflicts stringset.MapStringSet) error {
conflicts stringset.MapStringSet,
alpmHandle *alpm.Handle) error {
arguments := parser.Copy()
arguments.ClearTargets()
arguments.Op = "U"

41
main.go
View File

@ -74,7 +74,7 @@ func initBuildDir() error {
return nil
}
func initAlpm(pacmanConfigPath string) (*pacmanconf.Config, error) {
func initAlpm(pacmanConfigPath string) (*alpm.Handle, *pacmanconf.Config, error) {
root := "/"
if value, _, exists := cmdArgs.GetArg("root", "r"); exists {
root = value
@ -82,7 +82,7 @@ func initAlpm(pacmanConfigPath string) (*pacmanconf.Config, error) {
pacmanConf, stderr, err := pacmanconf.PacmanConf("--config", pacmanConfigPath, "--root", root)
if err != nil {
return nil, fmt.Errorf("%s", stderr)
return nil, nil, fmt.Errorf("%s", stderr)
}
if value, _, exists := cmdArgs.GetArg("dbpath", "b"); exists {
@ -113,8 +113,9 @@ func initAlpm(pacmanConfigPath string) (*pacmanconf.Config, error) {
pacmanConf.GPGDir = value
}
if err := initAlpmHandle(pacmanConf); err != nil {
return nil, err
alpmHandle, err := initAlpmHandle(pacmanConf, nil)
if err != nil {
return nil, nil, err
}
switch value, _, _ := cmdArgs.GetArg("color"); value {
@ -128,28 +129,28 @@ func initAlpm(pacmanConfigPath string) (*pacmanconf.Config, error) {
text.UseColor = pacmanConf.Color && isTty()
}
return pacmanConf, nil
return alpmHandle, pacmanConf, nil
}
func initAlpmHandle(pacmanConf *pacmanconf.Config) error {
if alpmHandle != nil {
if errRelease := alpmHandle.Release(); errRelease != nil {
return errRelease
func initAlpmHandle(pacmanConf *pacmanconf.Config, oldAlpmHandle *alpm.Handle) (*alpm.Handle, error) {
if oldAlpmHandle != nil {
if errRelease := oldAlpmHandle.Release(); errRelease != nil {
return nil, errRelease
}
}
var err error
if alpmHandle, err = alpm.Initialize(pacmanConf.RootDir, pacmanConf.DBPath); err != nil {
return errors.New(gotext.Get("unable to CreateHandle: %s", err))
alpmHandle, err := alpm.Initialize(pacmanConf.RootDir, pacmanConf.DBPath)
if err != nil {
return nil, errors.New(gotext.Get("unable to CreateHandle: %s", err))
}
if err := configureAlpm(pacmanConf); err != nil {
return err
if err := configureAlpm(pacmanConf, alpmHandle); err != nil {
return nil, err
}
alpmHandle.SetQuestionCallback(questionCallback)
alpmHandle.SetLogCallback(logCallback)
return nil
return alpmHandle, nil
}
func exitOnError(err error) {
@ -157,12 +158,12 @@ func exitOnError(err error) {
if str := err.Error(); str != "" {
fmt.Fprintln(os.Stderr, str)
}
cleanup()
cleanup(config.Runtime.AlpmHandle)
os.Exit(1)
}
}
func cleanup() int {
func cleanup(alpmHandle *alpm.Handle) int {
if alpmHandle != nil {
if err := alpmHandle.Release(); err != nil {
fmt.Fprintln(os.Stderr, err)
@ -194,8 +195,8 @@ func main() {
config.ExpandEnv()
exitOnError(initBuildDir())
exitOnError(initVCS(runtime.VCSPath))
config.Runtime.PacmanConf, err = initAlpm(config.PacmanConf)
config.Runtime.AlpmHandle, config.Runtime.PacmanConf, err = initAlpm(config.PacmanConf)
exitOnError(err)
exitOnError(handleCmd())
os.Exit(cleanup())
exitOnError(handleCmd(config.Runtime.AlpmHandle))
os.Exit(cleanup(config.Runtime.AlpmHandle))
}

View File

@ -16,7 +16,7 @@ func expect(t *testing.T, field string, a interface{}, b interface{}, err error)
}
func TestInitAlpm(t *testing.T) {
pacmanConf, err := initAlpm("testdata/pacman.conf")
alpmHandle, pacmanConf, err := initAlpm("testdata/pacman.conf")
assert.Nil(t, err)
assert.NotNil(t, pacmanConf)

View File

@ -4,6 +4,7 @@ import (
"os"
"path/filepath"
"github.com/Jguer/go-alpm"
"github.com/Morganamilo/go-pacmanconf"
"github.com/leonelquinteros/gotext"
"github.com/pkg/errors"
@ -32,6 +33,7 @@ type Runtime struct {
ConfigPath string
VCSPath string
PacmanConf *pacmanconf.Config
AlpmHandle *alpm.Handle
}
func MakeRuntime() (*Runtime, error) {

View File

@ -10,6 +10,8 @@ import (
"github.com/leonelquinteros/gotext"
rpc "github.com/mikkeloscar/aur"
"github.com/Jguer/go-alpm"
"github.com/Jguer/yay/v10/pkg/intrange"
"github.com/Jguer/yay/v10/pkg/query"
"github.com/Jguer/yay/v10/pkg/settings"
@ -47,7 +49,7 @@ func (warnings *aurWarnings) print() {
}
// PrintSearch handles printing search results in a given format
func (q aurQuery) printSearch(start int) {
func (q aurQuery) printSearch(start int, alpmHandle *alpm.Handle) {
localDB, _ := alpmHandle.LocalDB()
for i := range q {
@ -92,7 +94,7 @@ func (q aurQuery) printSearch(start int) {
}
// PrintSearch receives a RepoSearch type and outputs pretty text.
func (s repoQuery) printSearch() {
func (s repoQuery) printSearch(alpmHandle *alpm.Handle) {
for i, res := range s {
var toprint string
if config.SearchMode == numberMenu {
@ -304,7 +306,7 @@ func PrintInfo(a *rpc.Pkg) {
}
// BiggestPackages prints the name of the ten biggest packages in the system.
func biggestPackages() {
func biggestPackages(alpmHandle *alpm.Handle) {
localDB, err := alpmHandle.LocalDB()
if err != nil {
return
@ -324,8 +326,8 @@ func biggestPackages() {
}
// localStatistics prints installed packages statistics.
func localStatistics() error {
info, err := statistics()
func localStatistics(alpmHandle *alpm.Handle) error {
info, err := statistics(alpmHandle)
if err != nil {
return err
}
@ -343,7 +345,7 @@ func localStatistics() error {
text.Infoln(gotext.Get("Total Size occupied by packages: %s", cyan(text.Human(info.TotalSize))))
fmt.Println(bold(cyan("===========================================")))
text.Infoln(gotext.Get("Ten biggest packages:"))
biggestPackages()
biggestPackages(alpmHandle)
fmt.Println(bold(cyan("===========================================")))
aurInfoPrint(remoteNames)
@ -352,11 +354,11 @@ func localStatistics() error {
}
//TODO: Make it less hacky
func printNumberOfUpdates() error {
func printNumberOfUpdates(alpmHandle *alpm.Handle) error {
warnings := makeWarnings()
old := os.Stdout // keep backup of the real stdout
os.Stdout = nil
aurUp, repoUp, err := upList(warnings)
aurUp, repoUp, err := upList(warnings, alpmHandle)
os.Stdout = old // restoring the real stdout
if err != nil {
return err
@ -367,7 +369,7 @@ func printNumberOfUpdates() error {
}
//TODO: Make it less hacky
func printUpdateList(parser *settings.Arguments) error {
func printUpdateList(parser *settings.Arguments, alpmHandle *alpm.Handle) error {
targets := stringset.FromSlice(parser.Targets)
warnings := makeWarnings()
old := os.Stdout // keep backup of the real stdout
@ -377,7 +379,7 @@ func printUpdateList(parser *settings.Arguments) error {
return err
}
aurUp, repoUp, err := upList(warnings)
aurUp, repoUp, err := upList(warnings, alpmHandle)
os.Stdout = old // restoring the real stdout
if err != nil {
return err

View File

@ -153,7 +153,7 @@ func narrowSearch(pkgS []string, sortS bool) (aurQuery, error) {
}
// SyncSearch presents a query to the local repos and to the AUR.
func syncSearch(pkgS []string) (err error) {
func syncSearch(pkgS []string, alpmHandle *alpm.Handle) (err error) {
pkgS = removeInvalidTargets(pkgS)
var aurErr error
var repoErr error
@ -164,7 +164,7 @@ func syncSearch(pkgS []string) (err error) {
aq, aurErr = narrowSearch(pkgS, true)
}
if config.Runtime.Mode == settings.ModeRepo || config.Runtime.Mode == settings.ModeAny {
pq, repoErr = queryRepo(pkgS)
pq, repoErr = queryRepo(pkgS, alpmHandle)
if repoErr != nil {
return err
}
@ -173,17 +173,17 @@ func syncSearch(pkgS []string) (err error) {
switch config.SortMode {
case settings.TopDown:
if config.Runtime.Mode == settings.ModeRepo || config.Runtime.Mode == settings.ModeAny {
pq.printSearch()
pq.printSearch(alpmHandle)
}
if config.Runtime.Mode == settings.ModeAUR || config.Runtime.Mode == settings.ModeAny {
aq.printSearch(1)
aq.printSearch(1, alpmHandle)
}
case settings.BottomUp:
if config.Runtime.Mode == settings.ModeAUR || config.Runtime.Mode == settings.ModeAny {
aq.printSearch(1)
aq.printSearch(1, alpmHandle)
}
if config.Runtime.Mode == settings.ModeRepo || config.Runtime.Mode == settings.ModeAny {
pq.printSearch()
pq.printSearch(alpmHandle)
}
default:
return errors.New(gotext.Get("invalid sort mode. Fix with yay -Y --bottomup --save"))
@ -198,11 +198,11 @@ func syncSearch(pkgS []string) (err error) {
}
// SyncInfo serves as a pacman -Si for repo packages and AUR packages.
func syncInfo(pkgS []string) error {
func syncInfo(pkgS []string, alpmHandle *alpm.Handle) error {
var info []*rpc.Pkg
missing := false
pkgS = removeInvalidTargets(pkgS)
aurS, repoS, err := packageSlices(pkgS)
aurS, repoS, err := packageSlices(pkgS, alpmHandle)
if err != nil {
return err
}
@ -252,7 +252,7 @@ func syncInfo(pkgS []string) error {
}
// Search handles repo searches. Creates a RepoSearch struct.
func queryRepo(pkgInputN []string) (s repoQuery, err error) {
func queryRepo(pkgInputN []string, alpmHandle *alpm.Handle) (s repoQuery, err error) {
dbList, err := alpmHandle.SyncDBs()
if err != nil {
return
@ -279,7 +279,7 @@ func queryRepo(pkgInputN []string) (s repoQuery, err error) {
}
// PackageSlices separates an input slice into aur and repo slices
func packageSlices(toCheck []string) (aur, repo []string, err error) {
func packageSlices(toCheck []string, alpmHandle *alpm.Handle) (aur, repo []string, err error) {
dbList, err := alpmHandle.SyncDBs()
if err != nil {
return nil, nil, err
@ -322,7 +322,7 @@ func packageSlices(toCheck []string) (aur, repo []string, err error) {
// HangingPackages returns a list of packages installed as deps
// and unneeded by the system
// removeOptional decides whether optional dependencies are counted or not
func hangingPackages(removeOptional bool) (hanging []string, err error) {
func hangingPackages(removeOptional bool, alpmHandle *alpm.Handle) (hanging []string, err error) {
localDB, err := alpmHandle.LocalDB()
if err != nil {
return
@ -410,7 +410,7 @@ func hangingPackages(removeOptional bool) (hanging []string, err error) {
}
// Statistics returns statistics about packages installed in system
func statistics() (*struct {
func statistics(alpmHandle *alpm.Handle) (*struct {
Totaln int
Expln int
TotalSize int64

View File

@ -41,7 +41,7 @@ func (u upSlice) Less(i, j int) bool {
return LessRunes(iRunes, jRunes)
}
syncDB, err := alpmHandle.SyncDBs()
syncDB, err := config.Runtime.AlpmHandle.SyncDBs()
if err != nil {
iRunes := []rune(u[i].Repository)
jRunes := []rune(u[j].Repository)
@ -118,7 +118,7 @@ func getVersionDiff(oldVersion, newVersion string) (left, right string) {
}
// upList returns lists of packages to upgrade from each source.
func upList(warnings *aurWarnings) (aurUp, repoUp upSlice, err error) {
func upList(warnings *aurWarnings, alpmHandle *alpm.Handle) (aurUp, repoUp upSlice, err error) {
_, remote, _, remoteNames, err := query.FilterPackages(alpmHandle)
if err != nil {
return nil, nil, err
@ -140,7 +140,7 @@ func upList(warnings *aurWarnings) (aurUp, repoUp upSlice, err error) {
text.OperationInfoln(gotext.Get("Searching databases for updates..."))
wg.Add(1)
go func() {
repoUp, err = upRepo()
repoUp, err = upRepo(alpmHandle)
errs.Add(err)
wg.Done()
}()
@ -298,7 +298,7 @@ func printLocalNewerThanAUR(
// upRepo gathers local packages and checks if they have new versions.
// Output: Upgrade type package list.
func upRepo() (upSlice, error) {
func upRepo(alpmHandle *alpm.Handle) (upSlice, error) {
slice := upSlice{}
localDB, err := alpmHandle.LocalDB()

4
vcs.go
View File

@ -12,6 +12,8 @@ import (
gosrc "github.com/Morganamilo/go-srcinfo"
"github.com/leonelquinteros/gotext"
"github.com/Jguer/go-alpm"
"github.com/Jguer/yay/v10/pkg/query"
"github.com/Jguer/yay/v10/pkg/stringset"
"github.com/Jguer/yay/v10/pkg/text"
@ -27,7 +29,7 @@ type shaInfo struct {
}
// createDevelDB forces yay to create a DB of the existing development packages
func createDevelDB(vcsFilePath string) error {
func createDevelDB(vcsFilePath string, alpmHandle *alpm.Handle) error {
var mux sync.Mutex
var wg sync.WaitGroup