mirror of
https://github.com/Jguer/yay
synced 2024-10-02 22:33:47 +00:00
feat(interface): interface dbexecutor
This commit is contained in:
parent
388aaf6d7f
commit
7a3794ae75
94
callbacks.go
94
callbacks.go
|
@ -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
|
||||
}
|
||||
}
|
6
clean.go
6
clean.go
|
@ -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
18
cmd.go
|
@ -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-- {
|
||||
|
|
|
@ -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
|
||||
|
|
10
install.go
10
install.go
|
@ -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,
|
||||
|
|
5
main.go
5
main.go
|
@ -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)
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
|
@ -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)
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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) {
|
||||
|
|
12
print.go
12
print.go
|
@ -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
|
||||
|
|
12
query.go
12
query.go
|
@ -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
|
||||
|
|
11
upgrade.go
11
upgrade.go
|
@ -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
2
vcs.go
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue