Files
yay/pkg/query/filter.go
T

104 lines
2.3 KiB
Go

package query
import (
alpm "github.com/Jguer/go-alpm"
"github.com/leonelquinteros/gotext"
"github.com/Jguer/yay/v10/pkg/settings"
"github.com/Jguer/yay/v10/pkg/text"
)
// GetPackageNamesBySource returns package names with and without correspondence in SyncDBS respectively
func GetPackageNamesBySource(alpmHandle *alpm.Handle) (local, remote []string, err error) {
localDB, err := alpmHandle.LocalDB()
if err != nil {
return nil, nil, err
}
dbList, err := alpmHandle.SyncDBs()
if err != nil {
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
})
return local, remote, err
}
// GetRemotePackages returns packages with no correspondence in SyncDBS.
func GetRemotePackages(alpmHandle *alpm.Handle) (
remote []alpm.Package,
remoteNames []string,
err error) {
localDB, err := alpmHandle.LocalDB()
if err != nil {
return
}
dbList, err := alpmHandle.SyncDBs()
if err != nil {
return
}
f := 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
}
return nil
})
if !found {
remote = append(remote, k)
remoteNames = append(remoteNames, k.Name())
}
return nil
}
err = localDB.PkgCache().ForEach(f)
return remote, remoteNames, err
}
func RemoveInvalidTargets(targets []string, mode settings.TargetMode) []string {
filteredTargets := make([]string, 0)
for _, target := range targets {
db, _ := text.SplitDBFromName(target)
if db == "aur" && mode == settings.ModeRepo {
text.Warnln(gotext.Get("%s: can't use target with option --repo -- skipping", text.Cyan(target)))
continue
}
if db != "aur" && db != "" && mode == settings.ModeAUR {
text.Warnln(gotext.Get("%s: can't use target with option --aur -- skipping", text.Cyan(target)))
continue
}
filteredTargets = append(filteredTargets, target)
}
return filteredTargets
}