From 36730a41e3df583efc8cb2f227c14179afd42220 Mon Sep 17 00:00:00 2001 From: jguer Date: Sun, 5 Jul 2020 16:58:35 +0200 Subject: [PATCH] fix(config): package alpmHandle into runtimeSettings --- callbacks.go | 4 +-- clean.go | 12 ++++--- cmd.go | 72 ++++++++++++++++++++--------------------- config.go | 4 +-- depPool.go | 10 +++--- download.go | 8 ++--- install.go | 22 +++++++------ main.go | 41 +++++++++++------------ main_test.go | 2 +- pkg/settings/runtime.go | 2 ++ print.go | 22 +++++++------ query.go | 24 +++++++------- upgrade.go | 8 ++--- vcs.go | 4 ++- 14 files changed, 123 insertions(+), 112 deletions(-) diff --git a/callbacks.go b/callbacks.go index 72932e54..8414b7bc 100644 --- a/callbacks.go +++ b/callbacks.go @@ -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 { diff --git a/clean.go b/clean.go index c5d222c4..aa443d98 100644 --- a/clean.go +++ b/clean.go @@ -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) diff --git a/cmd.go b/cmd.go index 89c495ae..14f3d244 100644 --- a/cmd.go +++ b/cmd.go @@ -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-- { diff --git a/config.go b/config.go index 2cfc65a8..c700455c 100644 --- a/config.go +++ b/config.go @@ -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 diff --git a/depPool.go b/depPool.go index 1c3ccab6..ffb3d3d0 100644 --- a/depPool.go +++ b/depPool.go @@ -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 } diff --git a/download.go b/download.go index 2251b940..7bf2dda7 100644 --- a/download.go +++ b/download.go @@ -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 diff --git a/install.go b/install.go index 0a47325c..08201aac 100644 --- a/install.go +++ b/install.go @@ -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" diff --git a/main.go b/main.go index b92a1306..671a003a 100644 --- a/main.go +++ b/main.go @@ -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)) } diff --git a/main_test.go b/main_test.go index 906e83ee..39f4244a 100644 --- a/main_test.go +++ b/main_test.go @@ -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) diff --git a/pkg/settings/runtime.go b/pkg/settings/runtime.go index 26f80ced..6327f0a3 100644 --- a/pkg/settings/runtime.go +++ b/pkg/settings/runtime.go @@ -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) { diff --git a/print.go b/print.go index d0d7abdd..d09a02e0 100644 --- a/print.go +++ b/print.go @@ -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 diff --git a/query.go b/query.go index 2acc8e63..ae85a40e 100644 --- a/query.go +++ b/query.go @@ -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 diff --git a/upgrade.go b/upgrade.go index e23d6645..ba999f59 100644 --- a/upgrade.go +++ b/upgrade.go @@ -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() diff --git a/vcs.go b/vcs.go index 6c44b011..af45b327 100644 --- a/vcs.go +++ b/vcs.go @@ -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