mirror of
https://github.com/Jguer/yay.git
synced 2025-10-07 00:14:22 -04:00
73 lines
1.6 KiB
Go
73 lines
1.6 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"
|
|
)
|
|
|
|
// FilterPackages filters packages based on source and type from local repository.
|
|
func FilterPackages(alpmHandle *alpm.Handle) (
|
|
local, remote []alpm.Package,
|
|
localNames, 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
|
|
local = append(local, k)
|
|
localNames = append(localNames, k.Name())
|
|
}
|
|
return nil
|
|
})
|
|
|
|
if !found {
|
|
remote = append(remote, k)
|
|
remoteNames = append(remoteNames, k.Name())
|
|
}
|
|
return nil
|
|
}
|
|
|
|
err = localDB.PkgCache().ForEach(f)
|
|
return local, remote, localNames, 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
|
|
}
|