1
0
mirror of https://github.com/Jguer/yay synced 2024-07-03 08:51:44 +00:00

feat(interface): interface dbexecutor

This commit is contained in:
jguer 2020-08-16 23:41:38 +02:00
parent 388aaf6d7f
commit 7a3794ae75
No known key found for this signature in database
GPG Key ID: 6D6CC9BEA8556B35
18 changed files with 201 additions and 184 deletions

View File

@ -1,94 +0,0 @@
package main
import (
"bufio"
"fmt"
"os"
"strconv"
alpm "github.com/Jguer/go-alpm"
"github.com/leonelquinteros/gotext"
"github.com/Jguer/yay/v10/pkg/settings"
"github.com/Jguer/yay/v10/pkg/text"
)
func questionCallback(question alpm.QuestionAny) {
if qi, err := question.QuestionInstallIgnorepkg(); err == nil {
qi.SetInstall(true)
}
qp, err := question.QuestionSelectProvider()
if err != nil {
return
}
if settings.HideMenus {
return
}
size := 0
_ = qp.Providers(config.Runtime.AlpmHandle).ForEach(func(pkg alpm.Package) error {
size++
return nil
})
str := text.Bold(gotext.Get("There are %d providers available for %s:\n", size, qp.Dep()))
size = 1
var db string
_ = qp.Providers(config.Runtime.AlpmHandle).ForEach(func(pkg alpm.Package) error {
thisDB := pkg.DB().Name()
if db != thisDB {
db = thisDB
str += text.SprintOperationInfo(gotext.Get("Repository"), db, "\n ")
}
str += fmt.Sprintf("%d) %s ", size, pkg.Name())
size++
return nil
})
text.OperationInfoln(str)
for {
fmt.Print(gotext.Get("\nEnter a number (default=1): "))
if config.NoConfirm {
fmt.Println()
break
}
reader := bufio.NewReader(os.Stdin)
numberBuf, overflow, err := reader.ReadLine()
if err != nil {
text.Errorln(err)
break
}
if overflow {
text.Errorln(gotext.Get(" Input too long"))
continue
}
if string(numberBuf) == "" {
break
}
num, err := strconv.Atoi(string(numberBuf))
if err != nil {
text.Errorln(gotext.Get("invalid number: %s", string(numberBuf)))
continue
}
if num < 1 || num > size {
text.Errorln(gotext.Get("invalid value: %d is not between %d and %d", num, 1, size))
continue
}
qp.SetUseIndex(num - 1)
break
}
}

View File

@ -38,7 +38,7 @@ func removeVCSPackage(pkgs []string) {
}
// CleanDependencies removes all dangling dependencies in system
func cleanDependencies(cmdArgs *settings.Arguments, dbExecutor *db.AlpmExecutor, removeOptional bool) error {
func cleanDependencies(cmdArgs *settings.Arguments, dbExecutor db.Executor, removeOptional bool) error {
hanging := hangingPackages(removeOptional, dbExecutor)
if len(hanging) != 0 {
return cleanRemove(cmdArgs, hanging)
@ -60,7 +60,7 @@ func cleanRemove(cmdArgs *settings.Arguments, pkgNames []string) error {
return show(passToPacman(arguments))
}
func syncClean(cmdArgs *settings.Arguments, dbExecutor *db.AlpmExecutor) error {
func syncClean(cmdArgs *settings.Arguments, dbExecutor db.Executor) error {
keepInstalled := false
keepCurrent := false
@ -110,7 +110,7 @@ func syncClean(cmdArgs *settings.Arguments, dbExecutor *db.AlpmExecutor) error {
return nil
}
func cleanAUR(keepInstalled, keepCurrent, removeAll bool, dbExecutor *db.AlpmExecutor) error {
func cleanAUR(keepInstalled, keepCurrent, removeAll bool, dbExecutor db.Executor) error {
fmt.Println(gotext.Get("removing AUR packages from cache..."))
installedBases := make(stringset.StringSet)

18
cmd.go
View File

@ -139,7 +139,7 @@ getpkgbuild specific options:
-f --force Force download for existing ABS packages`)
}
func handleCmd(cmdArgs *settings.Arguments, dbExecutor *db.AlpmExecutor) error {
func handleCmd(cmdArgs *settings.Arguments, dbExecutor db.Executor) error {
if cmdArgs.ExistsArg("h", "help") {
return handleHelp(cmdArgs)
}
@ -177,7 +177,7 @@ func handleCmd(cmdArgs *settings.Arguments, dbExecutor *db.AlpmExecutor) error {
return fmt.Errorf(gotext.Get("unhandled operation"))
}
func handleQuery(cmdArgs *settings.Arguments, dbExecutor *db.AlpmExecutor) error {
func handleQuery(cmdArgs *settings.Arguments, dbExecutor db.Executor) error {
if cmdArgs.ExistsArg("u", "upgrades") {
return printUpdateList(cmdArgs, dbExecutor, cmdArgs.ExistsDouble("u", "sysupgrade"))
}
@ -196,7 +196,7 @@ func handleVersion() {
fmt.Printf("yay v%s - libalpm v%s\n", yayVersion, alpm.Version())
}
func handlePrint(cmdArgs *settings.Arguments, dbExecutor *db.AlpmExecutor) (err error) {
func handlePrint(cmdArgs *settings.Arguments, dbExecutor db.Executor) (err error) {
switch {
case cmdArgs.ExistsArg("d", "defaultconfig"):
tmpConfig := settings.MakeConfig()
@ -222,7 +222,7 @@ func handlePrint(cmdArgs *settings.Arguments, dbExecutor *db.AlpmExecutor) (err
return err
}
func handleYay(cmdArgs *settings.Arguments, dbExecutor *db.AlpmExecutor) error {
func handleYay(cmdArgs *settings.Arguments, dbExecutor db.Executor) error {
if cmdArgs.ExistsArg("gendb") {
return createDevelDB(config.Runtime.VCSPath, dbExecutor)
}
@ -238,16 +238,16 @@ func handleYay(cmdArgs *settings.Arguments, dbExecutor *db.AlpmExecutor) error {
return nil
}
func handleGetpkgbuild(cmdArgs *settings.Arguments, dbExecutor *db.AlpmExecutor) error {
func handleGetpkgbuild(cmdArgs *settings.Arguments, dbExecutor db.Executor) error {
return getPkgbuilds(cmdArgs.Targets, dbExecutor, cmdArgs.ExistsArg("f", "force"))
}
func handleYogurt(cmdArgs *settings.Arguments, dbExecutor *db.AlpmExecutor) error {
func handleYogurt(cmdArgs *settings.Arguments, dbExecutor db.Executor) error {
config.SearchMode = numberMenu
return displayNumberMenu(cmdArgs.Targets, dbExecutor, cmdArgs)
}
func handleSync(cmdArgs *settings.Arguments, dbExecutor *db.AlpmExecutor) error {
func handleSync(cmdArgs *settings.Arguments, dbExecutor db.Executor) error {
targets := cmdArgs.Targets
if cmdArgs.ExistsArg("s", "search") {
@ -295,7 +295,7 @@ func handleRemove(cmdArgs *settings.Arguments) error {
}
// NumberMenu presents a CLI for selecting packages to install.
func displayNumberMenu(pkgS []string, dbExecutor *db.AlpmExecutor, cmdArgs *settings.Arguments) error {
func displayNumberMenu(pkgS []string, dbExecutor db.Executor, cmdArgs *settings.Arguments) error {
var (
aurErr, repoErr error
aq aurQuery
@ -408,7 +408,7 @@ func displayNumberMenu(pkgS []string, dbExecutor *db.AlpmExecutor, cmdArgs *sett
return install(arguments, dbExecutor, true)
}
func syncList(cmdArgs *settings.Arguments, dbExecutor *db.AlpmExecutor) error {
func syncList(cmdArgs *settings.Arguments, dbExecutor db.Executor) error {
aur := false
for i := len(cmdArgs.Targets) - 1; i >= 0; i-- {

View File

@ -140,7 +140,7 @@ func gitMerge(path, name string) error {
return nil
}
func getPkgbuilds(pkgs []string, dbExecutor *db.AlpmExecutor, force bool) error {
func getPkgbuilds(pkgs []string, dbExecutor db.Executor, force bool) error {
missing := false
wd, err := os.Getwd()
if err != nil {
@ -209,7 +209,7 @@ func getPkgbuilds(pkgs []string, dbExecutor *db.AlpmExecutor, force bool) error
}
// GetPkgbuild downloads pkgbuild from the ABS.
func getPkgbuildsfromABS(pkgs []string, path string, dbExecutor *db.AlpmExecutor, force bool) (bool, error) {
func getPkgbuildsfromABS(pkgs []string, path string, dbExecutor db.Executor, force bool) (bool, error) {
var wg sync.WaitGroup
var mux sync.Mutex
var errs multierror.MultiError

View File

@ -62,7 +62,7 @@ func asexp(cmdArgs *settings.Arguments, pkgs []string) error {
}
// Install handles package installs
func install(cmdArgs *settings.Arguments, dbExecutor *db.AlpmExecutor, ignoreProviders bool) (err error) {
func install(cmdArgs *settings.Arguments, dbExecutor db.Executor, ignoreProviders bool) (err error) {
var incompatible stringset.StringSet
var do *dep.Order
@ -402,7 +402,7 @@ func removeMake(do *dep.Order) error {
return err
}
func inRepos(dbExecutor *db.AlpmExecutor, pkg string) bool {
func inRepos(dbExecutor db.Executor, pkg string) bool {
target := dep.ToTarget(pkg)
if target.DB == "aur" {
@ -419,7 +419,7 @@ func inRepos(dbExecutor *db.AlpmExecutor, pkg string) bool {
return exists || len(dbExecutor.PackagesFromGroup(target.Name)) > 0
}
func earlyPacmanCall(cmdArgs *settings.Arguments, dbExecutor *db.AlpmExecutor) error {
func earlyPacmanCall(cmdArgs *settings.Arguments, dbExecutor db.Executor) error {
arguments := cmdArgs.Copy()
arguments.Op = "S"
targets := cmdArgs.Targets
@ -459,7 +459,7 @@ func earlyRefresh(cmdArgs *settings.Arguments) error {
return show(passToPacman(arguments))
}
func getIncompatible(bases []dep.Base, srcinfos map[string]*gosrc.Srcinfo, dbExecutor *db.AlpmExecutor) (stringset.StringSet, error) {
func getIncompatible(bases []dep.Base, srcinfos map[string]*gosrc.Srcinfo, dbExecutor db.Executor) (stringset.StringSet, error) {
incompatible := make(stringset.StringSet)
basesMap := make(map[string]dep.Base)
alpmArch, err := dbExecutor.AlpmArch()
@ -933,7 +933,7 @@ func downloadPkgbuildsSources(bases []dep.Base, incompatible stringset.StringSet
func buildInstallPkgbuilds(
cmdArgs *settings.Arguments,
dbExecutor *db.AlpmExecutor,
dbExecutor db.Executor,
dp *dep.Pool,
do *dep.Order,
srcinfos map[string]*gosrc.Srcinfo,

View File

@ -10,6 +10,7 @@ import (
"github.com/leonelquinteros/gotext"
"github.com/Jguer/yay/v10/pkg/db"
"github.com/Jguer/yay/v10/pkg/db/ialpm"
"github.com/Jguer/yay/v10/pkg/settings"
"github.com/Jguer/yay/v10/pkg/text"
)
@ -197,7 +198,7 @@ func main() {
text.UseColor = useColor
dbExecutor, err := db.NewExecutor(runtime.PacmanConf, questionCallback)
dbExecutor, err := ialpm.NewExecutor(runtime.PacmanConf)
if err != nil {
if str := err.Error(); str != "" {
fmt.Fprintln(os.Stderr, str)
@ -207,7 +208,7 @@ func main() {
}
defer dbExecutor.Cleanup()
err = handleCmd(cmdArgs, dbExecutor)
err = handleCmd(cmdArgs, db.Executor(dbExecutor))
if err != nil {
if str := err.Error(); str != "" {
fmt.Fprintln(os.Stderr, str)

View File

@ -16,7 +16,7 @@ import (
)
// Show provides completion info for shells
func Show(dbExecutor *db.AlpmExecutor, aurURL, completionPath string, interval int, force bool) error {
func Show(dbExecutor db.Executor, aurURL, completionPath string, interval int, force bool) error {
err := Update(dbExecutor, aurURL, completionPath, interval, force)
if err != nil {
return err
@ -33,7 +33,7 @@ func Show(dbExecutor *db.AlpmExecutor, aurURL, completionPath string, interval i
}
// Update updates completion cache to be used by Complete
func Update(dbExecutor *db.AlpmExecutor, aurURL, completionPath string, interval int, force bool) error {
func Update(dbExecutor db.Executor, aurURL, completionPath string, interval int, force bool) error {
info, err := os.Stat(completionPath)
if os.IsNotExist(err) || (interval != -1 && time.Since(info.ModTime()).Hours() >= float64(interval*24)) || force {
@ -93,7 +93,7 @@ func createAURList(aurURL string, out io.Writer) error {
}
// CreatePackageList appends Repo packages to completion cache
func createRepoList(dbExecutor *db.AlpmExecutor, out io.Writer) error {
func createRepoList(dbExecutor db.Executor, out io.Writer) error {
for _, pkg := range dbExecutor.SyncPackages() {
_, err := io.WriteString(out, pkg.Name()+"\t"+pkg.DB().Name()+"\n")
if err != nil {

View File

@ -4,6 +4,8 @@ import (
"time"
alpm "github.com/Jguer/go-alpm"
"github.com/Jguer/yay/v10/pkg/upgrade"
)
type RepoPackage interface {
@ -18,3 +20,26 @@ type RepoPackage interface {
Version() string
Reason() alpm.PkgReason
}
type Executor interface {
AlpmArch() (string, error)
BiggestPackages() []RepoPackage
Cleanup()
IsCorrectVersionInstalled(string, string) bool
LastBuildTime() time.Time
LocalPackage(string) RepoPackage
LocalPackages() []RepoPackage
LocalSatisfierExists(string) bool
PackageConflicts(RepoPackage) []alpm.Depend
PackageDepends(RepoPackage) []alpm.Depend
PackageFromDB(string, string) RepoPackage
PackageGroups(RepoPackage) []string
PackageOptionalDepends(RepoPackage) []alpm.Depend
PackageProvides(RepoPackage) []alpm.Depend
PackagesFromGroup(string) []RepoPackage
RefreshHandle() error
RepoUpgrades(bool) (upgrade.UpSlice, error)
SyncPackages(...string) []RepoPackage
SyncSatisfier(string) RepoPackage
SyncSatisfierExists(string) bool
}

View File

@ -1,30 +1,32 @@
package db
package ialpm
import (
"bufio"
"errors"
"fmt"
"os"
"strconv"
"time"
alpm "github.com/Jguer/go-alpm"
pacmanconf "github.com/Morganamilo/go-pacmanconf"
"github.com/leonelquinteros/gotext"
"github.com/Jguer/yay/v10/pkg/db"
"github.com/Jguer/yay/v10/pkg/settings"
"github.com/Jguer/yay/v10/pkg/text"
"github.com/Jguer/yay/v10/pkg/upgrade"
)
type AlpmExecutor struct {
handle *alpm.Handle
localDB *alpm.DB
syncDB alpm.DBList
conf *pacmanconf.Config
questionCallback func(question alpm.QuestionAny)
handle *alpm.Handle
localDB *alpm.DB
syncDB alpm.DBList
conf *pacmanconf.Config
}
func NewExecutor(pacamnConf *pacmanconf.Config,
questionCallback func(question alpm.QuestionAny)) (*AlpmExecutor, error) {
ae := &AlpmExecutor{conf: pacamnConf, questionCallback: questionCallback}
func NewExecutor(pacamnConf *pacmanconf.Config) (*AlpmExecutor, error) {
ae := &AlpmExecutor{conf: pacamnConf}
err := ae.RefreshHandle()
if err != nil {
@ -76,13 +78,13 @@ func configureAlpm(pacmanConf *pacmanconf.Config, alpmHandle *alpm.Handle) error
for _, repo := range pacmanConf.Repos {
// TODO: set SigLevel
db, err := alpmHandle.RegisterSyncDB(repo.Name, 0)
alpmDB, err := alpmHandle.RegisterSyncDB(repo.Name, 0)
if err != nil {
return err
}
db.SetServers(repo.Servers)
db.SetUsage(toUsage(repo.Usage))
alpmDB.SetServers(repo.Servers)
alpmDB.SetUsage(toUsage(repo.Usage))
}
if err := alpmHandle.SetCacheDirs(pacmanConf.CacheDir); err != nil {
@ -152,6 +154,89 @@ func logCallback(level alpm.LogLevel, str string) {
}
}
func (ae *AlpmExecutor) questionCallback() func(question alpm.QuestionAny) {
return func(question alpm.QuestionAny) {
if qi, err := question.QuestionInstallIgnorepkg(); err == nil {
qi.SetInstall(true)
}
qp, err := question.QuestionSelectProvider()
if err != nil {
return
}
if settings.HideMenus {
return
}
size := 0
_ = qp.Providers(ae.handle).ForEach(func(pkg alpm.Package) error {
size++
return nil
})
str := text.Bold(gotext.Get("There are %d providers available for %s:\n", size, qp.Dep()))
size = 1
var dbName string
_ = qp.Providers(ae.handle).ForEach(func(pkg alpm.Package) error {
thisDB := pkg.DB().Name()
if dbName != thisDB {
dbName = thisDB
str += text.SprintOperationInfo(gotext.Get("Repository"), dbName, "\n ")
}
str += fmt.Sprintf("%d) %s ", size, pkg.Name())
size++
return nil
})
text.OperationInfoln(str)
for {
fmt.Print(gotext.Get("\nEnter a number (default=1): "))
// TODO: reenable noconfirm
// if config.NoConfirm {
// fmt.Println()
// break
// }
reader := bufio.NewReader(os.Stdin)
numberBuf, overflow, err := reader.ReadLine()
if err != nil {
text.Errorln(err)
break
}
if overflow {
text.Errorln(gotext.Get(" Input too long"))
continue
}
if string(numberBuf) == "" {
break
}
num, err := strconv.Atoi(string(numberBuf))
if err != nil {
text.Errorln(gotext.Get("invalid number: %s", string(numberBuf)))
continue
}
if num < 1 || num > size {
text.Errorln(gotext.Get("invalid value: %d is not between %d and %d", num, 1, size))
continue
}
qp.SetUseIndex(num - 1)
break
}
}
}
func (ae *AlpmExecutor) RefreshHandle() error {
if ae.handle != nil {
if errRelease := ae.handle.Release(); errRelease != nil {
@ -168,7 +253,7 @@ func (ae *AlpmExecutor) RefreshHandle() error {
return errConf
}
alpmHandle.SetQuestionCallback(ae.questionCallback)
alpmHandle.SetQuestionCallback(ae.questionCallback())
alpmHandle.SetLogCallback(logCallback)
ae.handle = alpmHandle
ae.syncDB, err = alpmHandle.SyncDBs()
@ -203,7 +288,7 @@ func (ae *AlpmExecutor) IsCorrectVersionInstalled(pkgName, versionRequired strin
return alpmPackage.Version() == versionRequired
}
func (ae *AlpmExecutor) SyncSatisfier(pkgName string) RepoPackage {
func (ae *AlpmExecutor) SyncSatisfier(pkgName string) db.RepoPackage {
foundPkg, err := ae.syncDB.FindSatisfier(pkgName)
if err != nil {
return nil
@ -211,8 +296,8 @@ func (ae *AlpmExecutor) SyncSatisfier(pkgName string) RepoPackage {
return foundPkg
}
func (ae *AlpmExecutor) PackagesFromGroup(groupName string) []RepoPackage {
groupPackages := []RepoPackage{}
func (ae *AlpmExecutor) PackagesFromGroup(groupName string) []db.RepoPackage {
groupPackages := []db.RepoPackage{}
_ = ae.syncDB.FindGroupPkgs(groupName).ForEach(func(pkg alpm.Package) error {
groupPackages = append(groupPackages, &pkg)
return nil
@ -220,27 +305,27 @@ func (ae *AlpmExecutor) PackagesFromGroup(groupName string) []RepoPackage {
return groupPackages
}
func (ae *AlpmExecutor) LocalPackages() []RepoPackage {
localPackages := []RepoPackage{}
func (ae *AlpmExecutor) LocalPackages() []db.RepoPackage {
localPackages := []db.RepoPackage{}
_ = ae.localDB.PkgCache().ForEach(func(pkg alpm.Package) error {
localPackages = append(localPackages, RepoPackage(&pkg))
localPackages = append(localPackages, db.RepoPackage(&pkg))
return nil
})
return localPackages
}
// SyncPackages searches SyncDB for packages or returns all packages if no search param is given
func (ae *AlpmExecutor) SyncPackages(pkgNames ...string) []RepoPackage {
repoPackages := []RepoPackage{}
_ = ae.syncDB.ForEach(func(db alpm.DB) error {
func (ae *AlpmExecutor) SyncPackages(pkgNames ...string) []db.RepoPackage {
repoPackages := []db.RepoPackage{}
_ = ae.syncDB.ForEach(func(alpmDB alpm.DB) error {
if len(pkgNames) == 0 {
_ = db.PkgCache().ForEach(func(pkg alpm.Package) error {
repoPackages = append(repoPackages, RepoPackage(&pkg))
_ = alpmDB.PkgCache().ForEach(func(pkg alpm.Package) error {
repoPackages = append(repoPackages, db.RepoPackage(&pkg))
return nil
})
} else {
_ = db.Search(pkgNames).ForEach(func(pkg alpm.Package) error {
repoPackages = append(repoPackages, RepoPackage(&pkg))
_ = alpmDB.Search(pkgNames).ForEach(func(pkg alpm.Package) error {
repoPackages = append(repoPackages, db.RepoPackage(&pkg))
return nil
})
}
@ -249,7 +334,7 @@ func (ae *AlpmExecutor) SyncPackages(pkgNames ...string) []RepoPackage {
return repoPackages
}
func (ae *AlpmExecutor) LocalPackage(pkgName string) RepoPackage {
func (ae *AlpmExecutor) LocalPackage(pkgName string) db.RepoPackage {
pkg := ae.localDB.Pkg(pkgName)
if pkg == nil {
return nil
@ -257,7 +342,7 @@ func (ae *AlpmExecutor) LocalPackage(pkgName string) RepoPackage {
return pkg
}
func (ae *AlpmExecutor) PackageFromDB(pkgName, dbName string) RepoPackage {
func (ae *AlpmExecutor) PackageFromDB(pkgName, dbName string) db.RepoPackage {
singleDB, err := ae.handle.SyncDBByName(dbName)
if err != nil {
return nil
@ -269,27 +354,27 @@ func (ae *AlpmExecutor) PackageFromDB(pkgName, dbName string) RepoPackage {
return foundPkg
}
func (ae *AlpmExecutor) PackageDepends(pkg RepoPackage) []alpm.Depend {
func (ae *AlpmExecutor) PackageDepends(pkg db.RepoPackage) []alpm.Depend {
alpmPackage := pkg.(*alpm.Package)
return alpmPackage.Depends().Slice()
}
func (ae *AlpmExecutor) PackageOptionalDepends(pkg RepoPackage) []alpm.Depend {
func (ae *AlpmExecutor) PackageOptionalDepends(pkg db.RepoPackage) []alpm.Depend {
alpmPackage := pkg.(*alpm.Package)
return alpmPackage.OptionalDepends().Slice()
}
func (ae *AlpmExecutor) PackageProvides(pkg RepoPackage) []alpm.Depend {
func (ae *AlpmExecutor) PackageProvides(pkg db.RepoPackage) []alpm.Depend {
alpmPackage := pkg.(*alpm.Package)
return alpmPackage.Provides().Slice()
}
func (ae *AlpmExecutor) PackageConflicts(pkg RepoPackage) []alpm.Depend {
func (ae *AlpmExecutor) PackageConflicts(pkg db.RepoPackage) []alpm.Depend {
alpmPackage := pkg.(*alpm.Package)
return alpmPackage.Conflicts().Slice()
}
func (ae *AlpmExecutor) PackageGroups(pkg RepoPackage) []string {
func (ae *AlpmExecutor) PackageGroups(pkg db.RepoPackage) []string {
alpmPackage := pkg.(*alpm.Package)
return alpmPackage.Groups().Slice()
}
@ -340,10 +425,10 @@ func (ae *AlpmExecutor) AlpmArch() (string, error) {
return ae.handle.Arch()
}
func (ae *AlpmExecutor) BiggestPackages() []RepoPackage {
localPackages := []RepoPackage{}
func (ae *AlpmExecutor) BiggestPackages() []db.RepoPackage {
localPackages := []db.RepoPackage{}
_ = ae.localDB.PkgCache().SortBySize().ForEach(func(pkg alpm.Package) error {
localPackages = append(localPackages, RepoPackage(&pkg))
localPackages = append(localPackages, db.RepoPackage(&pkg))
return nil
})
return localPackages

View File

@ -1,9 +1,8 @@
package db
package ialpm
import (
"testing"
alpm "github.com/Jguer/go-alpm"
"github.com/Morganamilo/go-pacmanconf"
"github.com/stretchr/testify/assert"
)
@ -37,7 +36,7 @@ func TestAlpmExecutor(t *testing.T) {
{Name: "repo1", Servers: []string{"repo1"}, SigLevel: []string(nil), Usage: []string{"All"}},
{Name: "repo2", Servers: []string{"repo2"}, SigLevel: []string(nil), Usage: []string{"All"}}}}
aExec, err := NewExecutor(pacmanConf, func(question alpm.QuestionAny) {})
aExec, err := NewExecutor(pacmanConf)
assert.NoError(t, err)
assert.NotNil(t, aExec.conf)

View File

@ -121,12 +121,12 @@ func satisfiesAur(dep string, pkg *rpc.Pkg) bool {
return false
}
func satisfiesRepo(dep string, pkg db.RepoPackage, ae *db.AlpmExecutor) bool {
func satisfiesRepo(dep string, pkg db.RepoPackage, dbExecutor db.Executor) bool {
if pkgSatisfies(pkg.Name(), pkg.Version(), dep) {
return true
}
for _, provided := range ae.PackageProvides(pkg) {
for _, provided := range dbExecutor.PackageProvides(pkg) {
if provideSatisfies(provided.String(), dep) {
return true
}

View File

@ -57,11 +57,11 @@ type Pool struct {
Aur map[string]*rpc.Pkg
AurCache map[string]*rpc.Pkg
Groups []string
AlpmExecutor *db.AlpmExecutor
AlpmExecutor db.Executor
Warnings *query.AURWarnings
}
func makePool(dbExecutor *db.AlpmExecutor) *Pool {
func makePool(dbExecutor db.Executor) *Pool {
dp := &Pool{
make([]Target, 0),
make(stringset.StringSet),
@ -347,7 +347,7 @@ func (dp *Pool) ResolveRepoDependency(pkg db.RepoPackage) {
func GetPool(pkgs []string,
warnings *query.AURWarnings,
dbExecutor *db.AlpmExecutor,
dbExecutor db.Executor,
mode settings.TargetMode,
ignoreProviders, noConfirm, provides bool,
rebuild string, splitN int) (*Pool, error) {

View File

@ -9,7 +9,7 @@ import (
)
// GetPackageNamesBySource returns package names with and without correspondence in SyncDBS respectively
func GetPackageNamesBySource(dbExecutor *db.AlpmExecutor) (local, remote []string, err error) {
func GetPackageNamesBySource(dbExecutor db.Executor) (local, remote []string, err error) {
outer:
for _, localpkg := range dbExecutor.LocalPackages() {
for _, syncpkg := range dbExecutor.SyncPackages() {
@ -24,7 +24,7 @@ outer:
}
// GetRemotePackages returns packages with no correspondence in SyncDBS.
func GetRemotePackages(dbExecutor *db.AlpmExecutor) (
func GetRemotePackages(dbExecutor db.Executor) (
remote []db.RepoPackage,
remoteNames []string) {
outer:

View File

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

View File

@ -17,7 +17,7 @@ import (
)
// PrintSearch handles printing search results in a given format
func (q aurQuery) printSearch(start int, dbExecutor *db.AlpmExecutor) {
func (q aurQuery) printSearch(start int, dbExecutor db.Executor) {
for i := range q {
var toprint string
if config.SearchMode == numberMenu {
@ -60,7 +60,7 @@ func (q aurQuery) printSearch(start int, dbExecutor *db.AlpmExecutor) {
}
// PrintSearch receives a RepoSearch type and outputs pretty text.
func (s repoQuery) printSearch(dbExecutor *db.AlpmExecutor) {
func (s repoQuery) printSearch(dbExecutor db.Executor) {
for i, res := range s {
var toprint string
if config.SearchMode == numberMenu {
@ -142,7 +142,7 @@ func PrintInfo(a *rpc.Pkg, extendedInfo bool) {
}
// BiggestPackages prints the name of the ten biggest packages in the system.
func biggestPackages(dbExecutor *db.AlpmExecutor) {
func biggestPackages(dbExecutor db.Executor) {
pkgS := dbExecutor.BiggestPackages()
if len(pkgS) < 10 {
@ -156,7 +156,7 @@ func biggestPackages(dbExecutor *db.AlpmExecutor) {
}
// localStatistics prints installed packages statistics.
func localStatistics(dbExecutor *db.AlpmExecutor) error {
func localStatistics(dbExecutor db.Executor) error {
info := statistics(dbExecutor)
_, remoteNames, err := query.GetPackageNamesBySource(config.Runtime.DBExecutor)
@ -181,7 +181,7 @@ func localStatistics(dbExecutor *db.AlpmExecutor) error {
}
// TODO: Make it less hacky
func printNumberOfUpdates(dbExecutor *db.AlpmExecutor, enableDowngrade bool) error {
func printNumberOfUpdates(dbExecutor db.Executor, enableDowngrade bool) error {
warnings := query.NewWarnings()
old := os.Stdout // keep backup of the real stdout
os.Stdout = nil
@ -196,7 +196,7 @@ func printNumberOfUpdates(dbExecutor *db.AlpmExecutor, enableDowngrade bool) err
}
// TODO: Make it less hacky
func printUpdateList(cmdArgs *settings.Arguments, dbExecutor *db.AlpmExecutor, enableDowngrade bool) error {
func printUpdateList(cmdArgs *settings.Arguments, dbExecutor db.Executor, enableDowngrade bool) error {
targets := stringset.FromSlice(cmdArgs.Targets)
warnings := query.NewWarnings()
old := os.Stdout // keep backup of the real stdout

View File

@ -147,7 +147,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, dbExecutor *db.AlpmExecutor) (err error) {
func syncSearch(pkgS []string, dbExecutor db.Executor) (err error) {
pkgS = query.RemoveInvalidTargets(pkgS, config.Runtime.Mode)
var aurErr error
var aq aurQuery
@ -188,7 +188,7 @@ func syncSearch(pkgS []string, dbExecutor *db.AlpmExecutor) (err error) {
}
// SyncInfo serves as a pacman -Si for repo packages and AUR packages.
func syncInfo(cmdArgs *settings.Arguments, pkgS []string, dbExecutor *db.AlpmExecutor) error {
func syncInfo(cmdArgs *settings.Arguments, pkgS []string, dbExecutor db.Executor) error {
var info []*rpc.Pkg
var err error
missing := false
@ -240,7 +240,7 @@ func syncInfo(cmdArgs *settings.Arguments, pkgS []string, dbExecutor *db.AlpmExe
}
// Search handles repo searches. Creates a RepoSearch struct.
func queryRepo(pkgInputN []string, dbExecutor *db.AlpmExecutor) repoQuery {
func queryRepo(pkgInputN []string, dbExecutor db.Executor) repoQuery {
s := repoQuery(dbExecutor.SyncPackages(pkgInputN...))
if config.SortMode == settings.BottomUp {
@ -250,7 +250,7 @@ func queryRepo(pkgInputN []string, dbExecutor *db.AlpmExecutor) repoQuery {
}
// PackageSlices separates an input slice into aur and repo slices
func packageSlices(toCheck []string, dbExecutor *db.AlpmExecutor) (aur, repo []string) {
func packageSlices(toCheck []string, dbExecutor db.Executor) (aur, repo []string) {
for _, _pkg := range toCheck {
dbName, name := text.SplitDBFromName(_pkg)
found := false
@ -282,7 +282,7 @@ func packageSlices(toCheck []string, dbExecutor *db.AlpmExecutor) (aur, repo []s
// 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, dbExecutor *db.AlpmExecutor) (hanging []string) {
func hangingPackages(removeOptional bool, dbExecutor db.Executor) (hanging []string) {
// safePackages represents every package in the system in one of 3 states
// State = 0 - Remove package from the system
// State = 1 - Keep package in the system; need to iterate over dependencies
@ -356,7 +356,7 @@ func hangingPackages(removeOptional bool, dbExecutor *db.AlpmExecutor) (hanging
}
// Statistics returns statistics about packages installed in system
func statistics(dbExecutor *db.AlpmExecutor) *struct {
func statistics(dbExecutor db.Executor) *struct {
Totaln int
Expln int
TotalSize int64

View File

@ -23,7 +23,7 @@ import (
)
// upList returns lists of packages to upgrade from each source.
func upList(warnings *query.AURWarnings, dbExecutor *db.AlpmExecutor, enableDowngrade bool) (aurUp, repoUp upgrade.UpSlice, err error) {
func upList(warnings *query.AURWarnings, dbExecutor db.Executor, enableDowngrade bool) (aurUp, repoUp upgrade.UpSlice, err error) {
remote, remoteNames := query.GetRemotePackages(dbExecutor)
var wg sync.WaitGroup
@ -139,10 +139,12 @@ func upDevel(remote []db.RepoPackage, aurdata map[string]*rpc.Pkg) upgrade.UpSli
printIgnoringPackage(pkg, "latest-commit")
} else {
toUpgrade = append(toUpgrade,
upgrade.Upgrade{Name: pkg.Name(),
upgrade.Upgrade{
Name: pkg.Name(),
Repository: "devel",
LocalVersion: pkg.Version(),
RemoteVersion: "latest-commit"})
RemoteVersion: "latest-commit",
})
}
}
@ -180,7 +182,8 @@ func upAUR(remote []db.RepoPackage, aurdata map[string]*rpc.Pkg) upgrade.UpSlice
Name: aurPkg.Name,
Repository: "aur",
LocalVersion: pkg.Version(),
RemoteVersion: aurPkg.Version})
RemoteVersion: aurPkg.Version,
})
}
}
}

2
vcs.go
View File

@ -31,7 +31,7 @@ type (
)
// createDevelDB forces yay to create a DB of the existing development packages
func createDevelDB(vcsFilePath string, dbExecutor *db.AlpmExecutor) error {
func createDevelDB(vcsFilePath string, dbExecutor db.Executor) error {
var mux sync.Mutex
var wg sync.WaitGroup