mirror of
https://github.com/Jguer/yay
synced 2024-07-21 10:16:10 +00:00
fix(install): remove alpmHandle
This commit is contained in:
parent
9fd6917bc0
commit
005b29373d
5
clean.go
5
clean.go
|
@ -121,10 +121,7 @@ func cleanAUR(keepInstalled, keepCurrent, removeAll bool, alpmHandle *alpm.Handl
|
||||||
installedBases := make(stringset.StringSet)
|
installedBases := make(stringset.StringSet)
|
||||||
inAURBases := make(stringset.StringSet)
|
inAURBases := make(stringset.StringSet)
|
||||||
|
|
||||||
remotePackages, _, err := query.GetRemotePackages(alpmHandle)
|
remotePackages, _ := query.GetRemotePackages(config.Runtime.DBExecutor)
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
files, err := ioutil.ReadDir(config.BuildDir)
|
files, err := ioutil.ReadDir(config.BuildDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
15
cmd.go
15
cmd.go
|
@ -11,6 +11,7 @@ import (
|
||||||
"github.com/leonelquinteros/gotext"
|
"github.com/leonelquinteros/gotext"
|
||||||
|
|
||||||
"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/intrange"
|
"github.com/Jguer/yay/v10/pkg/intrange"
|
||||||
"github.com/Jguer/yay/v10/pkg/news"
|
"github.com/Jguer/yay/v10/pkg/news"
|
||||||
"github.com/Jguer/yay/v10/pkg/query"
|
"github.com/Jguer/yay/v10/pkg/query"
|
||||||
|
@ -169,7 +170,7 @@ func handleCmd(cmdArgs *settings.Arguments, alpmHandle *alpm.Handle) error {
|
||||||
case "G", "getpkgbuild":
|
case "G", "getpkgbuild":
|
||||||
return handleGetpkgbuild(cmdArgs, alpmHandle)
|
return handleGetpkgbuild(cmdArgs, alpmHandle)
|
||||||
case "P", "show":
|
case "P", "show":
|
||||||
return handlePrint(cmdArgs, alpmHandle)
|
return handlePrint(cmdArgs, alpmHandle, config.Runtime.DBExecutor)
|
||||||
case "Y", "--yay":
|
case "Y", "--yay":
|
||||||
return handleYay(cmdArgs, alpmHandle)
|
return handleYay(cmdArgs, alpmHandle)
|
||||||
}
|
}
|
||||||
|
@ -217,7 +218,7 @@ func lastBuildTime(alpmHandle *alpm.Handle) time.Time {
|
||||||
return lastTime
|
return lastTime
|
||||||
}
|
}
|
||||||
|
|
||||||
func handlePrint(cmdArgs *settings.Arguments, alpmHandle *alpm.Handle) (err error) {
|
func handlePrint(cmdArgs *settings.Arguments, alpmHandle *alpm.Handle, dbExecutor *db.AlpmExecutor) (err error) {
|
||||||
switch {
|
switch {
|
||||||
case cmdArgs.ExistsArg("d", "defaultconfig"):
|
case cmdArgs.ExistsArg("d", "defaultconfig"):
|
||||||
tmpConfig := settings.MakeConfig()
|
tmpConfig := settings.MakeConfig()
|
||||||
|
@ -232,9 +233,9 @@ func handlePrint(cmdArgs *settings.Arguments, alpmHandle *alpm.Handle) (err erro
|
||||||
quiet := cmdArgs.ExistsArg("q", "quiet")
|
quiet := cmdArgs.ExistsArg("q", "quiet")
|
||||||
err = news.PrintNewsFeed(lastBuildTime(alpmHandle), config.SortMode, double, quiet)
|
err = news.PrintNewsFeed(lastBuildTime(alpmHandle), config.SortMode, double, quiet)
|
||||||
case cmdArgs.ExistsDouble("c", "complete"):
|
case cmdArgs.ExistsDouble("c", "complete"):
|
||||||
err = completion.Show(alpmHandle, config.AURURL, config.Runtime.CompletionPath, config.CompletionInterval, true)
|
err = completion.Show(dbExecutor, config.AURURL, config.Runtime.CompletionPath, config.CompletionInterval, true)
|
||||||
case cmdArgs.ExistsArg("c", "complete"):
|
case cmdArgs.ExistsArg("c", "complete"):
|
||||||
err = completion.Show(alpmHandle, config.AURURL, config.Runtime.CompletionPath, config.CompletionInterval, false)
|
err = completion.Show(dbExecutor, config.AURURL, config.Runtime.CompletionPath, config.CompletionInterval, false)
|
||||||
case cmdArgs.ExistsArg("s", "stats"):
|
case cmdArgs.ExistsArg("s", "stats"):
|
||||||
err = localStatistics(alpmHandle)
|
err = localStatistics(alpmHandle)
|
||||||
default:
|
default:
|
||||||
|
@ -295,10 +296,10 @@ func handleSync(cmdArgs *settings.Arguments, alpmHandle *alpm.Handle) error {
|
||||||
return syncInfo(cmdArgs, targets, alpmHandle)
|
return syncInfo(cmdArgs, targets, alpmHandle)
|
||||||
}
|
}
|
||||||
if cmdArgs.ExistsArg("u", "sysupgrade") {
|
if cmdArgs.ExistsArg("u", "sysupgrade") {
|
||||||
return install(cmdArgs, alpmHandle, false)
|
return install(cmdArgs, config.Runtime.DBExecutor, false)
|
||||||
}
|
}
|
||||||
if len(cmdArgs.Targets) > 0 {
|
if len(cmdArgs.Targets) > 0 {
|
||||||
return install(cmdArgs, alpmHandle, false)
|
return install(cmdArgs, config.Runtime.DBExecutor, false)
|
||||||
}
|
}
|
||||||
if cmdArgs.ExistsArg("y", "refresh") {
|
if cmdArgs.ExistsArg("y", "refresh") {
|
||||||
return show(passToPacman(cmdArgs))
|
return show(passToPacman(cmdArgs))
|
||||||
|
@ -426,7 +427,7 @@ func displayNumberMenu(pkgS []string, alpmHandle *alpm.Handle, cmdArgs *settings
|
||||||
sudoLoopBackground()
|
sudoLoopBackground()
|
||||||
}
|
}
|
||||||
|
|
||||||
return install(arguments, alpmHandle, true)
|
return install(arguments, config.Runtime.DBExecutor, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
func syncList(cmdArgs *settings.Arguments, alpmHandle *alpm.Handle) error {
|
func syncList(cmdArgs *settings.Arguments, alpmHandle *alpm.Handle) error {
|
||||||
|
|
54
install.go
54
install.go
|
@ -15,6 +15,7 @@ import (
|
||||||
"github.com/leonelquinteros/gotext"
|
"github.com/leonelquinteros/gotext"
|
||||||
|
|
||||||
"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/dep"
|
"github.com/Jguer/yay/v10/pkg/dep"
|
||||||
"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"
|
||||||
|
@ -23,6 +24,7 @@ import (
|
||||||
"github.com/Jguer/yay/v10/pkg/settings"
|
"github.com/Jguer/yay/v10/pkg/settings"
|
||||||
"github.com/Jguer/yay/v10/pkg/stringset"
|
"github.com/Jguer/yay/v10/pkg/stringset"
|
||||||
"github.com/Jguer/yay/v10/pkg/text"
|
"github.com/Jguer/yay/v10/pkg/text"
|
||||||
|
"github.com/Jguer/yay/v10/pkg/upgrade"
|
||||||
)
|
)
|
||||||
|
|
||||||
const gitEmptyTree = "4b825dc642cb6eb9a060e54bf8d69288fbee4904"
|
const gitEmptyTree = "4b825dc642cb6eb9a060e54bf8d69288fbee4904"
|
||||||
|
@ -60,12 +62,12 @@ func asexp(cmdArgs *settings.Arguments, pkgs []string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Install handles package installs
|
// Install handles package installs
|
||||||
func install(cmdArgs *settings.Arguments, alpmHandle *alpm.Handle, ignoreProviders bool) (err error) {
|
func install(cmdArgs *settings.Arguments, dbExecutor *db.AlpmExecutor, ignoreProviders bool) (err error) {
|
||||||
var incompatible stringset.StringSet
|
var incompatible stringset.StringSet
|
||||||
var do *dep.Order
|
var do *dep.Order
|
||||||
|
|
||||||
var aurUp upSlice
|
var aurUp upgrade.UpSlice
|
||||||
var repoUp upSlice
|
var repoUp upgrade.UpSlice
|
||||||
|
|
||||||
var srcinfos map[string]*gosrc.Srcinfo
|
var srcinfos map[string]*gosrc.Srcinfo
|
||||||
|
|
||||||
|
@ -80,7 +82,7 @@ func install(cmdArgs *settings.Arguments, alpmHandle *alpm.Handle, ignoreProvide
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if cmdArgs.ExistsArg("y", "refresh") || cmdArgs.ExistsArg("u", "sysupgrade") || len(cmdArgs.Targets) > 0 {
|
} else if cmdArgs.ExistsArg("y", "refresh") || cmdArgs.ExistsArg("u", "sysupgrade") || len(cmdArgs.Targets) > 0 {
|
||||||
err = earlyPacmanCall(cmdArgs, alpmHandle)
|
err = earlyPacmanCall(cmdArgs, config.Runtime.DBExecutor)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -89,17 +91,12 @@ func install(cmdArgs *settings.Arguments, alpmHandle *alpm.Handle, ignoreProvide
|
||||||
|
|
||||||
// we may have done -Sy, our handle now has an old
|
// we may have done -Sy, our handle now has an old
|
||||||
// database.
|
// database.
|
||||||
alpmHandle, err = initAlpmHandle(config.Runtime.PacmanConf, alpmHandle)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
config.Runtime.AlpmHandle = alpmHandle
|
|
||||||
err = config.Runtime.DBExecutor.RefreshHandle()
|
err = config.Runtime.DBExecutor.RefreshHandle()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
localNames, remoteNames, err := query.GetPackageNamesBySource(alpmHandle)
|
localNames, remoteNames, err := query.GetPackageNamesBySource(dbExecutor)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -122,7 +119,7 @@ func install(cmdArgs *settings.Arguments, alpmHandle *alpm.Handle, ignoreProvide
|
||||||
|
|
||||||
// if we are doing -u also request all packages needing update
|
// if we are doing -u also request all packages needing update
|
||||||
if cmdArgs.ExistsArg("u", "sysupgrade") {
|
if cmdArgs.ExistsArg("u", "sysupgrade") {
|
||||||
aurUp, repoUp, err = upList(warnings, alpmHandle, cmdArgs.ExistsDouble("u", "sysupgrade"))
|
aurUp, repoUp, err = upList(warnings, dbExecutor, cmdArgs.ExistsDouble("u", "sysupgrade"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -324,7 +321,7 @@ func install(cmdArgs *settings.Arguments, alpmHandle *alpm.Handle, ignoreProvide
|
||||||
config.NoConfirm = oldValue
|
config.NoConfirm = oldValue
|
||||||
}
|
}
|
||||||
|
|
||||||
incompatible, err = getIncompatible(do.Aur, srcinfos, alpmHandle)
|
incompatible, err = getIncompatible(do.Aur, srcinfos, dbExecutor)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -369,14 +366,14 @@ func install(cmdArgs *settings.Arguments, alpmHandle *alpm.Handle, ignoreProvide
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
go exitOnError(completion.Update(alpmHandle, config.AURURL, config.Runtime.CompletionPath, config.CompletionInterval, false))
|
go exitOnError(completion.Update(dbExecutor, config.AURURL, config.Runtime.CompletionPath, config.CompletionInterval, false))
|
||||||
|
|
||||||
err = downloadPkgbuildsSources(do.Aur, incompatible)
|
err = downloadPkgbuildsSources(do.Aur, incompatible)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = buildInstallPkgbuilds(cmdArgs, alpmHandle, dp, do, srcinfos, incompatible, conflicts)
|
err = buildInstallPkgbuilds(cmdArgs, dbExecutor, dp, do, srcinfos, incompatible, conflicts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -403,7 +400,7 @@ func removeMake(do *dep.Order) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func inRepos(syncDB alpm.DBList, pkg string) bool {
|
func inRepos(dbExecutor *db.AlpmExecutor, pkg string) bool {
|
||||||
target := dep.ToTarget(pkg)
|
target := dep.ToTarget(pkg)
|
||||||
|
|
||||||
if target.DB == "aur" {
|
if target.DB == "aur" {
|
||||||
|
@ -414,33 +411,25 @@ func inRepos(syncDB alpm.DBList, pkg string) bool {
|
||||||
|
|
||||||
previousHideMenus := settings.HideMenus
|
previousHideMenus := settings.HideMenus
|
||||||
settings.HideMenus = false
|
settings.HideMenus = false
|
||||||
_, err := syncDB.FindSatisfier(target.DepString())
|
exists := dbExecutor.SyncSatisfierExists(target.DepString())
|
||||||
settings.HideMenus = previousHideMenus
|
settings.HideMenus = previousHideMenus
|
||||||
if err == nil {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
return !syncDB.FindGroupPkgs(target.Name).Empty()
|
return exists || len(dbExecutor.PackagesFromGroup(target.Name)) > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func earlyPacmanCall(cmdArgs *settings.Arguments, alpmHandle *alpm.Handle) error {
|
func earlyPacmanCall(cmdArgs *settings.Arguments, dbExecutor *db.AlpmExecutor) error {
|
||||||
arguments := cmdArgs.Copy()
|
arguments := cmdArgs.Copy()
|
||||||
arguments.Op = "S"
|
arguments.Op = "S"
|
||||||
targets := cmdArgs.Targets
|
targets := cmdArgs.Targets
|
||||||
cmdArgs.ClearTargets()
|
cmdArgs.ClearTargets()
|
||||||
arguments.ClearTargets()
|
arguments.ClearTargets()
|
||||||
|
|
||||||
syncDB, err := alpmHandle.SyncDBs()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if config.Runtime.Mode == settings.ModeRepo {
|
if config.Runtime.Mode == settings.ModeRepo {
|
||||||
arguments.Targets = targets
|
arguments.Targets = targets
|
||||||
} else {
|
} else {
|
||||||
// separate aur and repo targets
|
// separate aur and repo targets
|
||||||
for _, target := range targets {
|
for _, target := range targets {
|
||||||
if inRepos(syncDB, target) {
|
if inRepos(dbExecutor, target) {
|
||||||
arguments.AddTarget(target)
|
arguments.AddTarget(target)
|
||||||
} else {
|
} else {
|
||||||
cmdArgs.AddTarget(target)
|
cmdArgs.AddTarget(target)
|
||||||
|
@ -449,8 +438,7 @@ func earlyPacmanCall(cmdArgs *settings.Arguments, alpmHandle *alpm.Handle) error
|
||||||
}
|
}
|
||||||
|
|
||||||
if cmdArgs.ExistsArg("y", "refresh") || cmdArgs.ExistsArg("u", "sysupgrade") || len(arguments.Targets) > 0 {
|
if cmdArgs.ExistsArg("y", "refresh") || cmdArgs.ExistsArg("u", "sysupgrade") || len(arguments.Targets) > 0 {
|
||||||
err = show(passToPacman(arguments))
|
if err := show(passToPacman(arguments)); err != nil {
|
||||||
if err != nil {
|
|
||||||
return errors.New(gotext.Get("error installing repo packages"))
|
return errors.New(gotext.Get("error installing repo packages"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -469,10 +457,10 @@ func earlyRefresh(cmdArgs *settings.Arguments) error {
|
||||||
return show(passToPacman(arguments))
|
return show(passToPacman(arguments))
|
||||||
}
|
}
|
||||||
|
|
||||||
func getIncompatible(bases []dep.Base, srcinfos map[string]*gosrc.Srcinfo, alpmHandle *alpm.Handle) (stringset.StringSet, error) {
|
func getIncompatible(bases []dep.Base, srcinfos map[string]*gosrc.Srcinfo, dbExecutor *db.AlpmExecutor) (stringset.StringSet, error) {
|
||||||
incompatible := make(stringset.StringSet)
|
incompatible := make(stringset.StringSet)
|
||||||
basesMap := make(map[string]dep.Base)
|
basesMap := make(map[string]dep.Base)
|
||||||
alpmArch, err := alpmHandle.Arch()
|
alpmArch, err := dbExecutor.AlpmArch()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -943,7 +931,7 @@ func downloadPkgbuildsSources(bases []dep.Base, incompatible stringset.StringSet
|
||||||
|
|
||||||
func buildInstallPkgbuilds(
|
func buildInstallPkgbuilds(
|
||||||
cmdArgs *settings.Arguments,
|
cmdArgs *settings.Arguments,
|
||||||
alpmHandle *alpm.Handle,
|
dbExecutor *db.AlpmExecutor,
|
||||||
dp *dep.Pool,
|
dp *dep.Pool,
|
||||||
do *dep.Order,
|
do *dep.Order,
|
||||||
srcinfos map[string]*gosrc.Srcinfo,
|
srcinfos map[string]*gosrc.Srcinfo,
|
||||||
|
@ -968,7 +956,7 @@ func buildInstallPkgbuilds(
|
||||||
config.NoConfirm = true
|
config.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(alpmHandle)
|
localNames, remoteNames, err := query.GetPackageNamesBySource(dbExecutor)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,12 +12,12 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
alpm "github.com/Jguer/go-alpm"
|
"github.com/Jguer/yay/v10/pkg/db"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Show provides completion info for shells
|
// Show provides completion info for shells
|
||||||
func Show(alpmHandle *alpm.Handle, aurURL, completionPath string, interval int, force bool) error {
|
func Show(dbExecutor *db.AlpmExecutor, aurURL, completionPath string, interval int, force bool) error {
|
||||||
err := Update(alpmHandle, aurURL, completionPath, interval, force)
|
err := Update(dbExecutor, aurURL, completionPath, interval, force)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@ func Show(alpmHandle *alpm.Handle, aurURL, completionPath string, interval int,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update updates completion cache to be used by Complete
|
// Update updates completion cache to be used by Complete
|
||||||
func Update(alpmHandle *alpm.Handle, aurURL, completionPath string, interval int, force bool) error {
|
func Update(dbExecutor *db.AlpmExecutor, aurURL, completionPath string, interval int, force bool) error {
|
||||||
info, err := os.Stat(completionPath)
|
info, err := os.Stat(completionPath)
|
||||||
|
|
||||||
if os.IsNotExist(err) || (interval != -1 && time.Since(info.ModTime()).Hours() >= float64(interval*24)) || force {
|
if os.IsNotExist(err) || (interval != -1 && time.Since(info.ModTime()).Hours() >= float64(interval*24)) || force {
|
||||||
|
@ -50,11 +50,7 @@ func Update(alpmHandle *alpm.Handle, aurURL, completionPath string, interval int
|
||||||
defer os.Remove(completionPath)
|
defer os.Remove(completionPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
dbList, err := alpmHandle.SyncDBs()
|
erra := createRepoList(dbExecutor, out)
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
erra := createRepoList(&dbList, out)
|
|
||||||
|
|
||||||
out.Close()
|
out.Close()
|
||||||
return erra
|
return erra
|
||||||
|
@ -97,13 +93,12 @@ func createAURList(aurURL string, out io.Writer) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreatePackageList appends Repo packages to completion cache
|
// CreatePackageList appends Repo packages to completion cache
|
||||||
func createRepoList(dbList *alpm.DBList, out io.Writer) error {
|
func createRepoList(dbExecutor *db.AlpmExecutor, out io.Writer) error {
|
||||||
_ = dbList.ForEach(func(db alpm.DB) error {
|
for _, pkg := range dbExecutor.SyncPackages() {
|
||||||
_ = db.PkgCache().ForEach(func(pkg alpm.Package) error {
|
_, err := io.WriteString(out, pkg.Name()+"\t"+pkg.DB().Name()+"\n")
|
||||||
_, err := io.WriteString(out, pkg.Name()+"\t"+pkg.DB().Name()+"\n")
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
})
|
}
|
||||||
return nil
|
}
|
||||||
})
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ import (
|
||||||
"github.com/leonelquinteros/gotext"
|
"github.com/leonelquinteros/gotext"
|
||||||
|
|
||||||
"github.com/Jguer/yay/v10/pkg/text"
|
"github.com/Jguer/yay/v10/pkg/text"
|
||||||
|
"github.com/Jguer/yay/v10/pkg/upgrade"
|
||||||
)
|
)
|
||||||
|
|
||||||
type AlpmExecutor struct {
|
type AlpmExecutor struct {
|
||||||
|
@ -176,6 +177,13 @@ func (ae *AlpmExecutor) LocalSatisfierExists(pkgName string) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ae *AlpmExecutor) SyncSatisfierExists(pkgName string) bool {
|
||||||
|
if _, err := ae.syncDB.FindSatisfier(pkgName); err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func (ae *AlpmExecutor) IsCorrectVersionInstalled(pkgName, versionRequired string) bool {
|
func (ae *AlpmExecutor) IsCorrectVersionInstalled(pkgName, versionRequired string) bool {
|
||||||
alpmPackage := ae.localDB.Pkg(pkgName)
|
alpmPackage := ae.localDB.Pkg(pkgName)
|
||||||
if alpmPackage == nil {
|
if alpmPackage == nil {
|
||||||
|
@ -266,3 +274,49 @@ func (ae *AlpmExecutor) PackageGroups(pkg RepoPackage) []string {
|
||||||
alpmPackage := pkg.(*alpm.Package)
|
alpmPackage := pkg.(*alpm.Package)
|
||||||
return alpmPackage.Groups().Slice()
|
return alpmPackage.Groups().Slice()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// upRepo gathers local packages and checks if they have new versions.
|
||||||
|
// Output: Upgrade type package list.
|
||||||
|
func (ae *AlpmExecutor) RepoUpgrades(enableDowngrade bool) (upgrade.UpSlice, error) {
|
||||||
|
slice := upgrade.UpSlice{}
|
||||||
|
|
||||||
|
localDB, err := ae.handle.LocalDB()
|
||||||
|
if err != nil {
|
||||||
|
return slice, err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = ae.handle.TransInit(alpm.TransFlagNoLock)
|
||||||
|
if err != nil {
|
||||||
|
return slice, err
|
||||||
|
}
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
err = ae.handle.TransRelease()
|
||||||
|
}()
|
||||||
|
|
||||||
|
err = ae.handle.SyncSysupgrade(enableDowngrade)
|
||||||
|
if err != nil {
|
||||||
|
return slice, err
|
||||||
|
}
|
||||||
|
_ = ae.handle.TransGetAdd().ForEach(func(pkg alpm.Package) error {
|
||||||
|
localVer := "-"
|
||||||
|
|
||||||
|
if localPkg := localDB.Pkg(pkg.Name()); localPkg != nil {
|
||||||
|
localVer = localPkg.Version()
|
||||||
|
}
|
||||||
|
|
||||||
|
slice = append(slice, upgrade.Upgrade{
|
||||||
|
Name: pkg.Name(),
|
||||||
|
Repository: pkg.DB().Name(),
|
||||||
|
LocalVersion: localVer,
|
||||||
|
RemoteVersion: pkg.Version(),
|
||||||
|
})
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
return slice, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ae *AlpmExecutor) AlpmArch() (string, error) {
|
||||||
|
return ae.handle.Arch()
|
||||||
|
}
|
||||||
|
|
|
@ -1,13 +1,19 @@
|
||||||
package db
|
package db
|
||||||
|
|
||||||
import alpm "github.com/Jguer/go-alpm"
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
alpm "github.com/Jguer/go-alpm"
|
||||||
|
)
|
||||||
|
|
||||||
type RepoPackage interface {
|
type RepoPackage interface {
|
||||||
Base() string
|
Base() string
|
||||||
Name() string
|
BuildDate() time.Time
|
||||||
Version() string
|
|
||||||
DB() *alpm.DB
|
DB() *alpm.DB
|
||||||
ISize() int64
|
|
||||||
Size() int64
|
|
||||||
Description() string
|
Description() string
|
||||||
|
ISize() int64
|
||||||
|
Name() string
|
||||||
|
ShouldIgnore() bool
|
||||||
|
Size() int64
|
||||||
|
Version() string
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,83 +1,46 @@
|
||||||
package query
|
package query
|
||||||
|
|
||||||
import (
|
import (
|
||||||
alpm "github.com/Jguer/go-alpm"
|
|
||||||
"github.com/leonelquinteros/gotext"
|
"github.com/leonelquinteros/gotext"
|
||||||
|
|
||||||
|
"github.com/Jguer/yay/v10/pkg/db"
|
||||||
"github.com/Jguer/yay/v10/pkg/settings"
|
"github.com/Jguer/yay/v10/pkg/settings"
|
||||||
"github.com/Jguer/yay/v10/pkg/text"
|
"github.com/Jguer/yay/v10/pkg/text"
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetPackageNamesBySource returns package names with and without correspondence in SyncDBS respectively
|
// GetPackageNamesBySource returns package names with and without correspondence in SyncDBS respectively
|
||||||
func GetPackageNamesBySource(alpmHandle *alpm.Handle) (local, remote []string, err error) {
|
func GetPackageNamesBySource(dbExecutor *db.AlpmExecutor) (local, remote []string, err error) {
|
||||||
localDB, err := alpmHandle.LocalDB()
|
outer:
|
||||||
if err != nil {
|
for _, localpkg := range dbExecutor.LocalPackages() {
|
||||||
return nil, nil, err
|
for _, syncpkg := range dbExecutor.SyncPackages() {
|
||||||
}
|
if localpkg.Name() == syncpkg.Name() {
|
||||||
dbList, err := alpmHandle.SyncDBs()
|
local = append(local, localpkg.Name())
|
||||||
if err != nil {
|
continue outer
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
err = localDB.PkgCache().ForEach(func(k alpm.Package) error {
|
|
||||||
found := false
|
|
||||||
// For each DB search for our secret package.
|
|
||||||
_ = dbList.ForEach(func(d alpm.DB) error {
|
|
||||||
if found {
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if d.Pkg(k.Name()) != nil {
|
|
||||||
found = true
|
|
||||||
local = append(local, k.Name())
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
if !found {
|
|
||||||
remote = append(remote, k.Name())
|
|
||||||
}
|
}
|
||||||
return nil
|
remote = append(remote, localpkg.Name())
|
||||||
})
|
}
|
||||||
return local, remote, err
|
return local, remote, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetRemotePackages returns packages with no correspondence in SyncDBS.
|
// GetRemotePackages returns packages with no correspondence in SyncDBS.
|
||||||
func GetRemotePackages(alpmHandle *alpm.Handle) (
|
func GetRemotePackages(dbExecutor *db.AlpmExecutor) (
|
||||||
remote []alpm.Package,
|
[]db.RepoPackage,
|
||||||
remoteNames []string,
|
[]string) {
|
||||||
err error) {
|
remoteNames := []string{}
|
||||||
localDB, err := alpmHandle.LocalDB()
|
remote := []db.RepoPackage{}
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
dbList, err := alpmHandle.SyncDBs()
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
f := func(k alpm.Package) error {
|
outer:
|
||||||
found := false
|
for _, localpkg := range dbExecutor.LocalPackages() {
|
||||||
// For each DB search for our secret package.
|
for _, syncpkg := range dbExecutor.SyncPackages() {
|
||||||
_ = dbList.ForEach(func(d alpm.DB) error {
|
if localpkg.Name() == syncpkg.Name() {
|
||||||
if found {
|
continue outer
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if d.Pkg(k.Name()) != nil {
|
|
||||||
found = true
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
|
|
||||||
if !found {
|
|
||||||
remote = append(remote, k)
|
|
||||||
remoteNames = append(remoteNames, k.Name())
|
|
||||||
}
|
}
|
||||||
return nil
|
remote = append(remote, localpkg)
|
||||||
|
remoteNames = append(remoteNames, localpkg.Name())
|
||||||
}
|
}
|
||||||
|
return remote, remoteNames
|
||||||
err = localDB.PkgCache().ForEach(f)
|
|
||||||
return remote, remoteNames, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func RemoveInvalidTargets(targets []string, mode settings.TargetMode) []string {
|
func RemoveInvalidTargets(targets []string, mode settings.TargetMode) []string {
|
||||||
|
|
|
@ -29,7 +29,7 @@ func Red(in string) string {
|
||||||
return stylize(redCode, in)
|
return stylize(redCode, in)
|
||||||
}
|
}
|
||||||
|
|
||||||
func green(in string) string {
|
func Green(in string) string {
|
||||||
return stylize(greenCode, in)
|
return stylize(greenCode, in)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,11 +28,11 @@ func SprintOperationInfo(a ...interface{}) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func Info(a ...interface{}) {
|
func Info(a ...interface{}) {
|
||||||
fmt.Fprint(os.Stdout, append([]interface{}{Bold(green(arrow + " "))}, a...)...)
|
fmt.Fprint(os.Stdout, append([]interface{}{Bold(Green(arrow + " "))}, a...)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func Infoln(a ...interface{}) {
|
func Infoln(a ...interface{}) {
|
||||||
fmt.Fprintln(os.Stdout, append([]interface{}{Bold(green(arrow))}, a...)...)
|
fmt.Fprintln(os.Stdout, append([]interface{}{Bold(Green(arrow))}, a...)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func SprintWarn(a ...interface{}) string {
|
func SprintWarn(a ...interface{}) string {
|
||||||
|
|
111
pkg/upgrade/upgrade.go
Normal file
111
pkg/upgrade/upgrade.go
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
package upgrade
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"unicode"
|
||||||
|
|
||||||
|
"github.com/Jguer/yay/v10/pkg/intrange"
|
||||||
|
"github.com/Jguer/yay/v10/pkg/text"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Upgrade type describes a system upgrade.
|
||||||
|
type Upgrade struct {
|
||||||
|
Name string
|
||||||
|
Repository string
|
||||||
|
LocalVersion string
|
||||||
|
RemoteVersion string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *Upgrade) StylizedNameWithRepository() string {
|
||||||
|
return text.Bold(text.ColorHash(u.Repository)) + "/" + text.Bold(u.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
// upSlice is a slice of Upgrades
|
||||||
|
type UpSlice []Upgrade
|
||||||
|
|
||||||
|
func (u UpSlice) Len() int { return len(u) }
|
||||||
|
func (u UpSlice) Swap(i, j int) { u[i], u[j] = u[j], u[i] }
|
||||||
|
|
||||||
|
func (u UpSlice) Less(i, j int) bool {
|
||||||
|
if u[i].Repository == u[j].Repository {
|
||||||
|
iRunes := []rune(u[i].Name)
|
||||||
|
jRunes := []rune(u[j].Name)
|
||||||
|
return text.LessRunes(iRunes, jRunes)
|
||||||
|
}
|
||||||
|
|
||||||
|
iRunes := []rune(u[i].Repository)
|
||||||
|
jRunes := []rune(u[j].Repository)
|
||||||
|
return text.LessRunes(iRunes, jRunes)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetVersionDiff(oldVersion, newVersion string) (left, right string) {
|
||||||
|
if oldVersion == newVersion {
|
||||||
|
return oldVersion + text.Red(""), newVersion + text.Green("")
|
||||||
|
}
|
||||||
|
|
||||||
|
diffPosition := 0
|
||||||
|
|
||||||
|
checkWords := func(str string, index int, words ...string) bool {
|
||||||
|
for _, word := range words {
|
||||||
|
wordLength := len(word)
|
||||||
|
nextIndex := index + 1
|
||||||
|
if (index < len(str)-wordLength) &&
|
||||||
|
(str[nextIndex:(nextIndex+wordLength)] == word) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
for index, char := range oldVersion {
|
||||||
|
charIsSpecial := !(unicode.IsLetter(char) || unicode.IsNumber(char))
|
||||||
|
|
||||||
|
if (index >= len(newVersion)) || (char != rune(newVersion[index])) {
|
||||||
|
if charIsSpecial {
|
||||||
|
diffPosition = index
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
if charIsSpecial ||
|
||||||
|
(((index == len(oldVersion)-1) || (index == len(newVersion)-1)) &&
|
||||||
|
((len(oldVersion) != len(newVersion)) ||
|
||||||
|
(oldVersion[index] == newVersion[index]))) ||
|
||||||
|
checkWords(oldVersion, index, "rc", "pre", "alpha", "beta") {
|
||||||
|
diffPosition = index + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
samePart := oldVersion[0:diffPosition]
|
||||||
|
|
||||||
|
left = samePart + text.Red(oldVersion[diffPosition:])
|
||||||
|
right = samePart + text.Green(newVersion[diffPosition:])
|
||||||
|
|
||||||
|
return left, right
|
||||||
|
}
|
||||||
|
|
||||||
|
// Print prints the details of the packages to upgrade.
|
||||||
|
func (u UpSlice) Print() {
|
||||||
|
longestName, longestVersion := 0, 0
|
||||||
|
for _, pack := range u {
|
||||||
|
packNameLen := len(pack.StylizedNameWithRepository())
|
||||||
|
packVersion, _ := GetVersionDiff(pack.LocalVersion, pack.RemoteVersion)
|
||||||
|
packVersionLen := len(packVersion)
|
||||||
|
longestName = intrange.Max(packNameLen, longestName)
|
||||||
|
longestVersion = intrange.Max(packVersionLen, longestVersion)
|
||||||
|
}
|
||||||
|
|
||||||
|
namePadding := fmt.Sprintf("%%-%ds ", longestName)
|
||||||
|
versionPadding := fmt.Sprintf("%%-%ds", longestVersion)
|
||||||
|
numberPadding := fmt.Sprintf("%%%dd ", len(fmt.Sprintf("%v", len(u))))
|
||||||
|
|
||||||
|
for k, i := range u {
|
||||||
|
left, right := GetVersionDiff(i.LocalVersion, i.RemoteVersion)
|
||||||
|
|
||||||
|
fmt.Print(text.Magenta(fmt.Sprintf(numberPadding, len(u)-k)))
|
||||||
|
|
||||||
|
fmt.Printf(namePadding, i.StylizedNameWithRepository())
|
||||||
|
|
||||||
|
fmt.Printf("%s -> %s\n", fmt.Sprintf(versionPadding, left), right)
|
||||||
|
}
|
||||||
|
}
|
67
pkg/upgrade/upgrade_test.go
Normal file
67
pkg/upgrade/upgrade_test.go
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
package upgrade
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/Jguer/yay/v10/pkg/text"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestGetVersionDiff(t *testing.T) {
|
||||||
|
text.UseColor = true
|
||||||
|
|
||||||
|
type versionPair struct {
|
||||||
|
Old string
|
||||||
|
New string
|
||||||
|
}
|
||||||
|
|
||||||
|
in := []versionPair{
|
||||||
|
{"1-1", "1-1"},
|
||||||
|
{"1-1", "2-1"},
|
||||||
|
{"2-1", "1-1"},
|
||||||
|
{"1-1", "1-2"},
|
||||||
|
{"1-2", "1-1"},
|
||||||
|
{"1.2.3-1", "1.2.4-1"},
|
||||||
|
{"1.8rc1+6+g0f377f94-1", "1.8rc1+1+g7e949283-1"},
|
||||||
|
{"1.8rc1+6+g0f377f94-1", "1.8rc2+1+g7e949283-1"},
|
||||||
|
{"1.8rc2", "1.9rc1"},
|
||||||
|
{"2.99.917+812+g75795523-1", "2.99.917+823+gd9bf46e4-1"},
|
||||||
|
{"1.2.9-1", "1.2.10-1"},
|
||||||
|
{"1.2.10-1", "1.2.9-1"},
|
||||||
|
{"1.2-1", "1.2.1-1"},
|
||||||
|
{"1.2.1-1", "1.2-1"},
|
||||||
|
{"0.7-4", "0.7+4+gd8d8c67-1"},
|
||||||
|
{"1.0.2_r0-1", "1.0.2_r0-2"},
|
||||||
|
{"1.0.2_r0-1", "1.0.2_r1-1"},
|
||||||
|
{"1.0.2_r0-1", "1.0.3_r0-1"},
|
||||||
|
}
|
||||||
|
|
||||||
|
out := []versionPair{
|
||||||
|
{"1-1" + text.Red(""), "1-1" + text.Green("")},
|
||||||
|
{text.Red("1-1"), text.Green("2-1")},
|
||||||
|
{text.Red("2-1"), text.Green("1-1")},
|
||||||
|
{"1-" + text.Red("1"), "1-" + text.Green("2")},
|
||||||
|
{"1-" + text.Red("2"), "1-" + text.Green("1")},
|
||||||
|
{"1.2." + text.Red("3-1"), "1.2." + text.Green("4-1")},
|
||||||
|
{"1.8rc1+" + text.Red("6+g0f377f94-1"), "1.8rc1+" + text.Green("1+g7e949283-1")},
|
||||||
|
{"1.8" + text.Red("rc1+6+g0f377f94-1"), "1.8" + text.Green("rc2+1+g7e949283-1")},
|
||||||
|
{"1." + text.Red("8rc2"), "1." + text.Green("9rc1")},
|
||||||
|
{"2.99.917+" + text.Red("812+g75795523-1"), "2.99.917+" + text.Green("823+gd9bf46e4-1")},
|
||||||
|
{"1.2." + text.Red("9-1"), "1.2." + text.Green("10-1")},
|
||||||
|
{"1.2." + text.Red("10-1"), "1.2." + text.Green("9-1")},
|
||||||
|
{"1.2" + text.Red("-1"), "1.2" + text.Green(".1-1")},
|
||||||
|
{"1.2" + text.Red(".1-1"), "1.2" + text.Green("-1")},
|
||||||
|
{"0.7" + text.Red("-4"), "0.7" + text.Green("+4+gd8d8c67-1")},
|
||||||
|
{"1.0.2_r0-" + text.Red("1"), "1.0.2_r0-" + text.Green("2")},
|
||||||
|
{"1.0.2_" + text.Red("r0-1"), "1.0.2_" + text.Green("r1-1")},
|
||||||
|
{"1.0." + text.Red("2_r0-1"), "1.0." + text.Green("3_r0-1")},
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, pair := range in {
|
||||||
|
o, n := GetVersionDiff(pair.Old, pair.New)
|
||||||
|
|
||||||
|
if o != out[i].Old || n != out[i].New {
|
||||||
|
t.Errorf("Test %d failed for update: expected (%s => %s) got (%s => %s) %d %d %d %d",
|
||||||
|
i+1, in[i].Old, in[i].New, o, n, len(in[i].Old), len(in[i].New), len(o), len(n))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
39
print.go
39
print.go
|
@ -12,7 +12,6 @@ import (
|
||||||
"github.com/Jguer/go-alpm"
|
"github.com/Jguer/go-alpm"
|
||||||
|
|
||||||
"github.com/Jguer/yay/v10/pkg/db"
|
"github.com/Jguer/yay/v10/pkg/db"
|
||||||
"github.com/Jguer/yay/v10/pkg/intrange"
|
|
||||||
"github.com/Jguer/yay/v10/pkg/query"
|
"github.com/Jguer/yay/v10/pkg/query"
|
||||||
"github.com/Jguer/yay/v10/pkg/settings"
|
"github.com/Jguer/yay/v10/pkg/settings"
|
||||||
"github.com/Jguer/yay/v10/pkg/stringset"
|
"github.com/Jguer/yay/v10/pkg/stringset"
|
||||||
|
@ -105,36 +104,6 @@ func (s repoQuery) printSearch(dbExecutor *db.AlpmExecutor) {
|
||||||
|
|
||||||
// Pretty print a set of packages from the same package base.
|
// Pretty print a set of packages from the same package base.
|
||||||
|
|
||||||
func (u *upgrade) StylizedNameWithRepository() string {
|
|
||||||
return bold(text.ColorHash(u.Repository)) + "/" + bold(u.Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Print prints the details of the packages to upgrade.
|
|
||||||
func (u upSlice) print() {
|
|
||||||
longestName, longestVersion := 0, 0
|
|
||||||
for _, pack := range u {
|
|
||||||
packNameLen := len(pack.StylizedNameWithRepository())
|
|
||||||
packVersion, _ := getVersionDiff(pack.LocalVersion, pack.RemoteVersion)
|
|
||||||
packVersionLen := len(packVersion)
|
|
||||||
longestName = intrange.Max(packNameLen, longestName)
|
|
||||||
longestVersion = intrange.Max(packVersionLen, longestVersion)
|
|
||||||
}
|
|
||||||
|
|
||||||
namePadding := fmt.Sprintf("%%-%ds ", longestName)
|
|
||||||
versionPadding := fmt.Sprintf("%%-%ds", longestVersion)
|
|
||||||
numberPadding := fmt.Sprintf("%%%dd ", len(fmt.Sprintf("%v", len(u))))
|
|
||||||
|
|
||||||
for k, i := range u {
|
|
||||||
left, right := getVersionDiff(i.LocalVersion, i.RemoteVersion)
|
|
||||||
|
|
||||||
fmt.Print(magenta(fmt.Sprintf(numberPadding, len(u)-k)))
|
|
||||||
|
|
||||||
fmt.Printf(namePadding, i.StylizedNameWithRepository())
|
|
||||||
|
|
||||||
fmt.Printf("%s -> %s\n", fmt.Sprintf(versionPadding, left), right)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// PrintInfo prints package info like pacman -Si.
|
// PrintInfo prints package info like pacman -Si.
|
||||||
func PrintInfo(a *rpc.Pkg, extendedInfo bool) {
|
func PrintInfo(a *rpc.Pkg, extendedInfo bool) {
|
||||||
text.PrintInfoValue(gotext.Get("Repository"), "aur")
|
text.PrintInfoValue(gotext.Get("Repository"), "aur")
|
||||||
|
@ -201,7 +170,7 @@ func localStatistics(alpmHandle *alpm.Handle) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, remoteNames, err := query.GetPackageNamesBySource(alpmHandle)
|
_, remoteNames, err := query.GetPackageNamesBySource(config.Runtime.DBExecutor)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -227,7 +196,7 @@ func printNumberOfUpdates(alpmHandle *alpm.Handle, enableDowngrade bool) error {
|
||||||
warnings := query.NewWarnings()
|
warnings := query.NewWarnings()
|
||||||
old := os.Stdout // keep backup of the real stdout
|
old := os.Stdout // keep backup of the real stdout
|
||||||
os.Stdout = nil
|
os.Stdout = nil
|
||||||
aurUp, repoUp, err := upList(warnings, alpmHandle, enableDowngrade)
|
aurUp, repoUp, err := upList(warnings, config.Runtime.DBExecutor, enableDowngrade)
|
||||||
os.Stdout = old // restoring the real stdout
|
os.Stdout = old // restoring the real stdout
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -243,12 +212,12 @@ func printUpdateList(cmdArgs *settings.Arguments, alpmHandle *alpm.Handle, enabl
|
||||||
warnings := query.NewWarnings()
|
warnings := query.NewWarnings()
|
||||||
old := os.Stdout // keep backup of the real stdout
|
old := os.Stdout // keep backup of the real stdout
|
||||||
os.Stdout = nil
|
os.Stdout = nil
|
||||||
localNames, remoteNames, err := query.GetPackageNamesBySource(alpmHandle)
|
localNames, remoteNames, err := query.GetPackageNamesBySource(config.Runtime.DBExecutor)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
aurUp, repoUp, err := upList(warnings, alpmHandle, enableDowngrade)
|
aurUp, repoUp, err := upList(warnings, config.Runtime.DBExecutor, enableDowngrade)
|
||||||
os.Stdout = old // restoring the real stdout
|
os.Stdout = old // restoring the real stdout
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
199
upgrade.go
199
upgrade.go
|
@ -5,15 +5,16 @@ import (
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"unicode"
|
|
||||||
|
|
||||||
alpm "github.com/Jguer/go-alpm"
|
alpm "github.com/Jguer/go-alpm"
|
||||||
"github.com/leonelquinteros/gotext"
|
"github.com/leonelquinteros/gotext"
|
||||||
|
|
||||||
|
"github.com/Jguer/yay/v10/pkg/db"
|
||||||
"github.com/Jguer/yay/v10/pkg/intrange"
|
"github.com/Jguer/yay/v10/pkg/intrange"
|
||||||
"github.com/Jguer/yay/v10/pkg/query"
|
"github.com/Jguer/yay/v10/pkg/query"
|
||||||
"github.com/Jguer/yay/v10/pkg/settings"
|
"github.com/Jguer/yay/v10/pkg/settings"
|
||||||
"github.com/Jguer/yay/v10/pkg/text"
|
"github.com/Jguer/yay/v10/pkg/text"
|
||||||
|
"github.com/Jguer/yay/v10/pkg/upgrade"
|
||||||
|
|
||||||
rpc "github.com/mikkeloscar/aur"
|
rpc "github.com/mikkeloscar/aur"
|
||||||
|
|
||||||
|
@ -21,112 +22,12 @@ import (
|
||||||
"github.com/Jguer/yay/v10/pkg/stringset"
|
"github.com/Jguer/yay/v10/pkg/stringset"
|
||||||
)
|
)
|
||||||
|
|
||||||
// upgrade type describes a system upgrade.
|
|
||||||
type upgrade struct {
|
|
||||||
Name string
|
|
||||||
Repository string
|
|
||||||
LocalVersion string
|
|
||||||
RemoteVersion string
|
|
||||||
}
|
|
||||||
|
|
||||||
// upSlice is a slice of Upgrades
|
|
||||||
type upSlice []upgrade
|
|
||||||
|
|
||||||
func (u upSlice) Len() int { return len(u) }
|
|
||||||
func (u upSlice) Swap(i, j int) { u[i], u[j] = u[j], u[i] }
|
|
||||||
|
|
||||||
func (u upSlice) Less(i, j int) bool {
|
|
||||||
if u[i].Repository == u[j].Repository {
|
|
||||||
iRunes := []rune(u[i].Name)
|
|
||||||
jRunes := []rune(u[j].Name)
|
|
||||||
return text.LessRunes(iRunes, jRunes)
|
|
||||||
}
|
|
||||||
|
|
||||||
syncDB, err := config.Runtime.AlpmHandle.SyncDBs()
|
|
||||||
if err != nil {
|
|
||||||
iRunes := []rune(u[i].Repository)
|
|
||||||
jRunes := []rune(u[j].Repository)
|
|
||||||
return text.LessRunes(iRunes, jRunes)
|
|
||||||
}
|
|
||||||
|
|
||||||
less := false
|
|
||||||
found := syncDB.ForEach(func(db alpm.DB) error {
|
|
||||||
switch db.Name() {
|
|
||||||
case u[i].Repository:
|
|
||||||
less = true
|
|
||||||
case u[j].Repository:
|
|
||||||
less = false
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return fmt.Errorf("")
|
|
||||||
})
|
|
||||||
|
|
||||||
if found != nil {
|
|
||||||
return less
|
|
||||||
}
|
|
||||||
|
|
||||||
iRunes := []rune(u[i].Repository)
|
|
||||||
jRunes := []rune(u[j].Repository)
|
|
||||||
return text.LessRunes(iRunes, jRunes)
|
|
||||||
}
|
|
||||||
|
|
||||||
func getVersionDiff(oldVersion, newVersion string) (left, right string) {
|
|
||||||
if oldVersion == newVersion {
|
|
||||||
return oldVersion + red(""), newVersion + green("")
|
|
||||||
}
|
|
||||||
|
|
||||||
diffPosition := 0
|
|
||||||
|
|
||||||
checkWords := func(str string, index int, words ...string) bool {
|
|
||||||
for _, word := range words {
|
|
||||||
wordLength := len(word)
|
|
||||||
nextIndex := index + 1
|
|
||||||
if (index < len(str)-wordLength) &&
|
|
||||||
(str[nextIndex:(nextIndex+wordLength)] == word) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
for index, char := range oldVersion {
|
|
||||||
charIsSpecial := !(unicode.IsLetter(char) || unicode.IsNumber(char))
|
|
||||||
|
|
||||||
if (index >= len(newVersion)) || (char != rune(newVersion[index])) {
|
|
||||||
if charIsSpecial {
|
|
||||||
diffPosition = index
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
if charIsSpecial ||
|
|
||||||
(((index == len(oldVersion)-1) || (index == len(newVersion)-1)) &&
|
|
||||||
((len(oldVersion) != len(newVersion)) ||
|
|
||||||
(oldVersion[index] == newVersion[index]))) ||
|
|
||||||
checkWords(oldVersion, index, "rc", "pre", "alpha", "beta") {
|
|
||||||
diffPosition = index + 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
samePart := oldVersion[0:diffPosition]
|
|
||||||
|
|
||||||
left = samePart + red(oldVersion[diffPosition:])
|
|
||||||
right = samePart + green(newVersion[diffPosition:])
|
|
||||||
|
|
||||||
return left, right
|
|
||||||
}
|
|
||||||
|
|
||||||
// upList returns lists of packages to upgrade from each source.
|
// upList returns lists of packages to upgrade from each source.
|
||||||
func upList(warnings *query.AURWarnings, alpmHandle *alpm.Handle, enableDowngrade bool) (aurUp, repoUp upSlice, err error) {
|
func upList(warnings *query.AURWarnings, dbExecutor *db.AlpmExecutor, enableDowngrade bool) (aurUp, repoUp upgrade.UpSlice, err error) {
|
||||||
remote, remoteNames, err := query.GetRemotePackages(alpmHandle)
|
remote, remoteNames := query.GetRemotePackages(dbExecutor)
|
||||||
if err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
var develUp upSlice
|
var develUp upgrade.UpSlice
|
||||||
var errs multierror.MultiError
|
var errs multierror.MultiError
|
||||||
|
|
||||||
aurdata := make(map[string]*rpc.Pkg)
|
aurdata := make(map[string]*rpc.Pkg)
|
||||||
|
@ -141,7 +42,7 @@ func upList(warnings *query.AURWarnings, alpmHandle *alpm.Handle, enableDowngrad
|
||||||
text.OperationInfoln(gotext.Get("Searching databases for updates..."))
|
text.OperationInfoln(gotext.Get("Searching databases for updates..."))
|
||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
repoUp, err = upRepo(alpmHandle, enableDowngrade)
|
repoUp, err = dbExecutor.RepoUpgrades(enableDowngrade)
|
||||||
errs.Add(err)
|
errs.Add(err)
|
||||||
wg.Done()
|
wg.Done()
|
||||||
}()
|
}()
|
||||||
|
@ -196,8 +97,8 @@ func upList(warnings *query.AURWarnings, alpmHandle *alpm.Handle, enableDowngrad
|
||||||
return aurUp, repoUp, errs.Return()
|
return aurUp, repoUp, errs.Return()
|
||||||
}
|
}
|
||||||
|
|
||||||
func upDevel(remote []alpm.Package, aurdata map[string]*rpc.Pkg) upSlice {
|
func upDevel(remote []db.RepoPackage, aurdata map[string]*rpc.Pkg) upgrade.UpSlice {
|
||||||
toUpdate := make([]alpm.Package, 0)
|
toUpdate := make([]db.RepoPackage, 0)
|
||||||
toRemove := make([]string, 0)
|
toRemove := make([]string, 0)
|
||||||
|
|
||||||
var mux1 sync.Mutex
|
var mux1 sync.Mutex
|
||||||
|
@ -232,12 +133,16 @@ func upDevel(remote []alpm.Package, aurdata map[string]*rpc.Pkg) upSlice {
|
||||||
|
|
||||||
wg.Wait()
|
wg.Wait()
|
||||||
|
|
||||||
toUpgrade := make(upSlice, 0, len(toUpdate))
|
toUpgrade := make(upgrade.UpSlice, 0, len(toUpdate))
|
||||||
for _, pkg := range toUpdate {
|
for _, pkg := range toUpdate {
|
||||||
if pkg.ShouldIgnore() {
|
if pkg.ShouldIgnore() {
|
||||||
printIgnoringPackage(pkg, "latest-commit")
|
printIgnoringPackage(pkg, "latest-commit")
|
||||||
} else {
|
} else {
|
||||||
toUpgrade = append(toUpgrade, upgrade{pkg.Name(), "devel", pkg.Version(), "latest-commit"})
|
toUpgrade = append(toUpgrade,
|
||||||
|
upgrade.Upgrade{Name: pkg.Name(),
|
||||||
|
Repository: "devel",
|
||||||
|
LocalVersion: pkg.Version(),
|
||||||
|
RemoteVersion: "latest-commit"})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -245,10 +150,19 @@ func upDevel(remote []alpm.Package, aurdata map[string]*rpc.Pkg) upSlice {
|
||||||
return toUpgrade
|
return toUpgrade
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func printIgnoringPackage(pkg db.RepoPackage, newPkgVersion string) {
|
||||||
|
left, right := upgrade.GetVersionDiff(pkg.Version(), newPkgVersion)
|
||||||
|
|
||||||
|
text.Warnln(gotext.Get("%s: ignoring package upgrade (%s => %s)",
|
||||||
|
cyan(pkg.Name()),
|
||||||
|
left, right,
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
// upAUR gathers foreign packages and checks if they have new versions.
|
// upAUR gathers foreign packages and checks if they have new versions.
|
||||||
// Output: Upgrade type package list.
|
// Output: Upgrade type package list.
|
||||||
func upAUR(remote []alpm.Package, aurdata map[string]*rpc.Pkg) upSlice {
|
func upAUR(remote []db.RepoPackage, aurdata map[string]*rpc.Pkg) upgrade.UpSlice {
|
||||||
toUpgrade := make(upSlice, 0)
|
toUpgrade := make(upgrade.UpSlice, 0)
|
||||||
|
|
||||||
for _, pkg := range remote {
|
for _, pkg := range remote {
|
||||||
aurPkg, ok := aurdata[pkg.Name()]
|
aurPkg, ok := aurdata[pkg.Name()]
|
||||||
|
@ -261,7 +175,7 @@ func upAUR(remote []alpm.Package, aurdata map[string]*rpc.Pkg) upSlice {
|
||||||
if pkg.ShouldIgnore() {
|
if pkg.ShouldIgnore() {
|
||||||
printIgnoringPackage(pkg, aurPkg.Version)
|
printIgnoringPackage(pkg, aurPkg.Version)
|
||||||
} else {
|
} else {
|
||||||
toUpgrade = append(toUpgrade, upgrade{aurPkg.Name, "aur", pkg.Version(), aurPkg.Version})
|
toUpgrade = append(toUpgrade, upgrade.Upgrade{Name: aurPkg.Name, Repository: "aur", LocalVersion: pkg.Version(), RemoteVersion: aurPkg.Version})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -269,24 +183,15 @@ func upAUR(remote []alpm.Package, aurdata map[string]*rpc.Pkg) upSlice {
|
||||||
return toUpgrade
|
return toUpgrade
|
||||||
}
|
}
|
||||||
|
|
||||||
func printIgnoringPackage(pkg alpm.Package, newPkgVersion string) {
|
|
||||||
left, right := getVersionDiff(pkg.Version(), newPkgVersion)
|
|
||||||
|
|
||||||
text.Warnln(gotext.Get("%s: ignoring package upgrade (%s => %s)",
|
|
||||||
cyan(pkg.Name()),
|
|
||||||
left, right,
|
|
||||||
))
|
|
||||||
}
|
|
||||||
|
|
||||||
func printLocalNewerThanAUR(
|
func printLocalNewerThanAUR(
|
||||||
remote []alpm.Package, aurdata map[string]*rpc.Pkg) {
|
remote []db.RepoPackage, aurdata map[string]*rpc.Pkg) {
|
||||||
for _, pkg := range remote {
|
for _, pkg := range remote {
|
||||||
aurPkg, ok := aurdata[pkg.Name()]
|
aurPkg, ok := aurdata[pkg.Name()]
|
||||||
if !ok {
|
if !ok {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
left, right := getVersionDiff(pkg.Version(), aurPkg.Version)
|
left, right := upgrade.GetVersionDiff(pkg.Version(), aurPkg.Version)
|
||||||
|
|
||||||
if !isDevelPackage(pkg) && alpm.VerCmp(pkg.Version(), aurPkg.Version) > 0 {
|
if !isDevelPackage(pkg) && alpm.VerCmp(pkg.Version(), aurPkg.Version) > 0 {
|
||||||
text.Warnln(gotext.Get("%s: local (%s) is newer than AUR (%s)",
|
text.Warnln(gotext.Get("%s: local (%s) is newer than AUR (%s)",
|
||||||
|
@ -307,54 +212,12 @@ func isDevelName(name string) bool {
|
||||||
return strings.Contains(name, "-always-")
|
return strings.Contains(name, "-always-")
|
||||||
}
|
}
|
||||||
|
|
||||||
func isDevelPackage(pkg alpm.Package) bool {
|
func isDevelPackage(pkg db.RepoPackage) bool {
|
||||||
return isDevelName(pkg.Name()) || isDevelName(pkg.Base())
|
return isDevelName(pkg.Name()) || isDevelName(pkg.Base())
|
||||||
}
|
}
|
||||||
|
|
||||||
// upRepo gathers local packages and checks if they have new versions.
|
|
||||||
// Output: Upgrade type package list.
|
|
||||||
func upRepo(alpmHandle *alpm.Handle, enableDowngrade bool) (upSlice, error) {
|
|
||||||
slice := upSlice{}
|
|
||||||
|
|
||||||
localDB, err := alpmHandle.LocalDB()
|
|
||||||
if err != nil {
|
|
||||||
return slice, err
|
|
||||||
}
|
|
||||||
|
|
||||||
err = alpmHandle.TransInit(alpm.TransFlagNoLock)
|
|
||||||
if err != nil {
|
|
||||||
return slice, err
|
|
||||||
}
|
|
||||||
|
|
||||||
defer func() {
|
|
||||||
err = alpmHandle.TransRelease()
|
|
||||||
}()
|
|
||||||
|
|
||||||
err = alpmHandle.SyncSysupgrade(enableDowngrade)
|
|
||||||
if err != nil {
|
|
||||||
return slice, err
|
|
||||||
}
|
|
||||||
_ = alpmHandle.TransGetAdd().ForEach(func(pkg alpm.Package) error {
|
|
||||||
localVer := "-"
|
|
||||||
|
|
||||||
if localPkg := localDB.Pkg(pkg.Name()); localPkg != nil {
|
|
||||||
localVer = localPkg.Version()
|
|
||||||
}
|
|
||||||
|
|
||||||
slice = append(slice, upgrade{
|
|
||||||
pkg.Name(),
|
|
||||||
pkg.DB().Name(),
|
|
||||||
localVer,
|
|
||||||
pkg.Version(),
|
|
||||||
})
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
|
|
||||||
return slice, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// upgradePkgs handles updating the cache and installing updates.
|
// upgradePkgs handles updating the cache and installing updates.
|
||||||
func upgradePkgs(aurUp, repoUp upSlice) (ignore, aurNames stringset.StringSet, err error) {
|
func upgradePkgs(aurUp, repoUp upgrade.UpSlice) (ignore, aurNames stringset.StringSet, err error) {
|
||||||
ignore = make(stringset.StringSet)
|
ignore = make(stringset.StringSet)
|
||||||
aurNames = make(stringset.StringSet)
|
aurNames = make(stringset.StringSet)
|
||||||
|
|
||||||
|
@ -375,7 +238,7 @@ func upgradePkgs(aurUp, repoUp upSlice) (ignore, aurNames stringset.StringSet, e
|
||||||
sort.Sort(aurUp)
|
sort.Sort(aurUp)
|
||||||
allUp := append(repoUp, aurUp...)
|
allUp := append(repoUp, aurUp...)
|
||||||
fmt.Printf("%s"+bold(" %d ")+"%s\n", bold(cyan("::")), allUpLen, bold(gotext.Get("Packages to upgrade.")))
|
fmt.Printf("%s"+bold(" %d ")+"%s\n", bold(cyan("::")), allUpLen, bold(gotext.Get("Packages to upgrade.")))
|
||||||
allUp.print()
|
allUp.Print()
|
||||||
|
|
||||||
text.Infoln(gotext.Get("Packages to exclude: (eg: \"1 2 3\", \"1-3\", \"^4\" or repo name)"))
|
text.Infoln(gotext.Get("Packages to exclude: (eg: \"1 2 3\", \"1-3\", \"^4\" or repo name)"))
|
||||||
|
|
||||||
|
|
|
@ -1,67 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"github.com/Jguer/yay/v10/pkg/text"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestGetVersionDiff(t *testing.T) {
|
|
||||||
text.UseColor = true
|
|
||||||
|
|
||||||
type versionPair struct {
|
|
||||||
Old string
|
|
||||||
New string
|
|
||||||
}
|
|
||||||
|
|
||||||
in := []versionPair{
|
|
||||||
{"1-1", "1-1"},
|
|
||||||
{"1-1", "2-1"},
|
|
||||||
{"2-1", "1-1"},
|
|
||||||
{"1-1", "1-2"},
|
|
||||||
{"1-2", "1-1"},
|
|
||||||
{"1.2.3-1", "1.2.4-1"},
|
|
||||||
{"1.8rc1+6+g0f377f94-1", "1.8rc1+1+g7e949283-1"},
|
|
||||||
{"1.8rc1+6+g0f377f94-1", "1.8rc2+1+g7e949283-1"},
|
|
||||||
{"1.8rc2", "1.9rc1"},
|
|
||||||
{"2.99.917+812+g75795523-1", "2.99.917+823+gd9bf46e4-1"},
|
|
||||||
{"1.2.9-1", "1.2.10-1"},
|
|
||||||
{"1.2.10-1", "1.2.9-1"},
|
|
||||||
{"1.2-1", "1.2.1-1"},
|
|
||||||
{"1.2.1-1", "1.2-1"},
|
|
||||||
{"0.7-4", "0.7+4+gd8d8c67-1"},
|
|
||||||
{"1.0.2_r0-1", "1.0.2_r0-2"},
|
|
||||||
{"1.0.2_r0-1", "1.0.2_r1-1"},
|
|
||||||
{"1.0.2_r0-1", "1.0.3_r0-1"},
|
|
||||||
}
|
|
||||||
|
|
||||||
out := []versionPair{
|
|
||||||
{"1-1" + red(""), "1-1" + green("")},
|
|
||||||
{red("1-1"), green("2-1")},
|
|
||||||
{red("2-1"), green("1-1")},
|
|
||||||
{"1-" + red("1"), "1-" + green("2")},
|
|
||||||
{"1-" + red("2"), "1-" + green("1")},
|
|
||||||
{"1.2." + red("3-1"), "1.2." + green("4-1")},
|
|
||||||
{"1.8rc1+" + red("6+g0f377f94-1"), "1.8rc1+" + green("1+g7e949283-1")},
|
|
||||||
{"1.8" + red("rc1+6+g0f377f94-1"), "1.8" + green("rc2+1+g7e949283-1")},
|
|
||||||
{"1." + red("8rc2"), "1." + green("9rc1")},
|
|
||||||
{"2.99.917+" + red("812+g75795523-1"), "2.99.917+" + green("823+gd9bf46e4-1")},
|
|
||||||
{"1.2." + red("9-1"), "1.2." + green("10-1")},
|
|
||||||
{"1.2." + red("10-1"), "1.2." + green("9-1")},
|
|
||||||
{"1.2" + red("-1"), "1.2" + green(".1-1")},
|
|
||||||
{"1.2" + red(".1-1"), "1.2" + green("-1")},
|
|
||||||
{"0.7" + red("-4"), "0.7" + green("+4+gd8d8c67-1")},
|
|
||||||
{"1.0.2_r0-" + red("1"), "1.0.2_r0-" + green("2")},
|
|
||||||
{"1.0.2_" + red("r0-1"), "1.0.2_" + green("r1-1")},
|
|
||||||
{"1.0." + red("2_r0-1"), "1.0." + green("3_r0-1")},
|
|
||||||
}
|
|
||||||
|
|
||||||
for i, pair := range in {
|
|
||||||
o, n := getVersionDiff(pair.Old, pair.New)
|
|
||||||
|
|
||||||
if o != out[i].Old || n != out[i].New {
|
|
||||||
t.Errorf("Test %d failed for update: expected (%s => %s) got (%s => %s) %d %d %d %d",
|
|
||||||
i+1, in[i].Old, in[i].New, o, n, len(in[i].Old), len(in[i].New), len(o), len(n))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
2
vcs.go
2
vcs.go
|
@ -36,7 +36,7 @@ func createDevelDB(vcsFilePath string, alpmHandle *alpm.Handle) error {
|
||||||
var mux sync.Mutex
|
var mux sync.Mutex
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
|
|
||||||
_, remoteNames, err := query.GetPackageNamesBySource(alpmHandle)
|
_, remoteNames, err := query.GetPackageNamesBySource(config.Runtime.DBExecutor)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue