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:
parent
968b61ac57
commit
36730a41e3
@ -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 {
|
||||
|
||||
12
clean.go
12
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)
|
||||
|
||||
72
cmd.go
72
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-- {
|
||||
|
||||
@ -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
|
||||
|
||||
10
depPool.go
10
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
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
22
install.go
22
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"
|
||||
|
||||
41
main.go
41
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))
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
|
||||
@ -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) {
|
||||
|
||||
22
print.go
22
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
|
||||
|
||||
24
query.go
24
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
|
||||
|
||||
@ -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
4
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
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user