1
0
mirror of https://github.com/Jguer/yay.git synced 2025-08-07 15:17:12 +02:00

Add support for multiple 'Architecture' values

This allows architecture to be multivalued. On x86-64 machines, this
could be something like:
    Architecture = x86-64-v3 x86-64

We use the first specified Architecture value in mirrorlist $arch
variable replacement, as this is backwards-compatible and sane.

More info:
https://git.archlinux.org/pacman.git/commit/?id=3179db108a83104d9de6d1d607f55f8118e92160

Signed-off-by: x1b6e6 <ftdabcde@gmail.com>
This commit is contained in:
x1b6e6 2021-05-02 16:10:25 +07:00 committed by J Guerreiro
parent 29f4c43227
commit de113b87f3
8 changed files with 60 additions and 16 deletions

4
go.mod
View File

@ -2,8 +2,8 @@ module github.com/Jguer/yay/v10
require (
github.com/Jguer/go-alpm v0.0.0-20200405152916-a3feea4322e9 // indirect
github.com/Jguer/go-alpm/v2 v2.0.2
github.com/Morganamilo/go-pacmanconf v0.0.0-20180910220353-9c5265e1b14f
github.com/Jguer/go-alpm/v2 v2.0.3-0.20210503120603-1e8b5ec6f821
github.com/Morganamilo/go-pacmanconf v0.0.0-20210502114700-cff030e927a5
github.com/Morganamilo/go-srcinfo v1.0.0
github.com/bradleyjkemp/cupaloy v2.3.0+incompatible
github.com/davecgh/go-spew v1.1.1 // indirect

8
go.sum
View File

@ -1,9 +1,9 @@
github.com/Jguer/go-alpm v0.0.0-20200405152916-a3feea4322e9 h1:lLQSUe6iRdtFrP0zkDV7n8I8XKSxRHQTEU1KRh4IOLg=
github.com/Jguer/go-alpm v0.0.0-20200405152916-a3feea4322e9/go.mod h1:D5SUcIS9Yiz/L8cjRzq/992eERnx6ugYmGlc4e7xdus=
github.com/Jguer/go-alpm/v2 v2.0.2 h1:BbF/6dg2tXISEJiCtxlX6J/TCSoB/g+31bCfEiH9D0c=
github.com/Jguer/go-alpm/v2 v2.0.2/go.mod h1:zU4iKCtNkDARfj5BrKJXYAQ5nIjtZbySfa0paboSmTQ=
github.com/Morganamilo/go-pacmanconf v0.0.0-20180910220353-9c5265e1b14f h1:ptFKynTV1p8JCzqk81NcMj0DV0Xle+PdKxfHjPbdIOU=
github.com/Morganamilo/go-pacmanconf v0.0.0-20180910220353-9c5265e1b14f/go.mod h1:Hk55m330jNiwxRodIlMCvw5iEyoRUCIY64W1p9D+tHc=
github.com/Jguer/go-alpm/v2 v2.0.3-0.20210503120603-1e8b5ec6f821 h1:ds4SK2NSSFF3f/jOUL7liQ2N6Ug7UQzFdAvWcj44Y2s=
github.com/Jguer/go-alpm/v2 v2.0.3-0.20210503120603-1e8b5ec6f821/go.mod h1:zU4iKCtNkDARfj5BrKJXYAQ5nIjtZbySfa0paboSmTQ=
github.com/Morganamilo/go-pacmanconf v0.0.0-20210502114700-cff030e927a5 h1:TMscPjkb1ThXN32LuFY5bEYIcXZx3YlwzhS1GxNpn/c=
github.com/Morganamilo/go-pacmanconf v0.0.0-20210502114700-cff030e927a5/go.mod h1:Hk55m330jNiwxRodIlMCvw5iEyoRUCIY64W1p9D+tHc=
github.com/Morganamilo/go-srcinfo v1.0.0 h1:Wh4nEF+HJWo+29hnxM18Q2hi+DUf0GejS13+Wg+dzmI=
github.com/Morganamilo/go-srcinfo v1.0.0/go.mod h1:MP6VGY1NNpVUmYIEgoM9acix95KQqIRyqQ0hCLsyYUY=
github.com/bradleyjkemp/cupaloy v2.3.0+incompatible h1:UafIjBvWQmS9i/xRg+CamMrnLTKNzo+bdmT/oH34c2Y=

View File

@ -443,10 +443,24 @@ func earlyRefresh(cmdArgs *settings.Arguments) error {
return config.Runtime.CmdRunner.Show(passToPacman(arguments))
}
func alpmArchIsSupported(alpmArch []string, arch string) bool {
if arch == "any" {
return true
}
for _, a := range alpmArch {
if a == arch {
return true
}
}
return false
}
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()
alpmArch, err := dbExecutor.AlpmArchitectures()
if err != nil {
return nil, err
}
@ -454,7 +468,7 @@ func getIncompatible(bases []dep.Base, srcinfos map[string]*gosrc.Srcinfo, dbExe
nextpkg:
for _, base := range bases {
for _, arch := range srcinfos[base.Pkgbase()].Arch {
if arch == "any" || arch == alpmArch {
if alpmArchIsSupported(alpmArch, arch) {
continue nextpkg
}
}

View File

@ -47,8 +47,8 @@ func initAlpm(cmdArgs *settings.Arguments, pacmanConfigPath string) (*pacmanconf
pacmanConf.DBPath = dbPath
}
if arch, _, exists := cmdArgs.GetArg("arch"); exists {
pacmanConf.Architecture = arch
if arch := cmdArgs.GetArgs("arch"); arch != nil {
pacmanConf.Architecture = append(pacmanConf.Architecture, arch...)
}
if ignoreArray := cmdArgs.GetArgs("ignore"); ignoreArray != nil {

View File

@ -22,7 +22,7 @@ type Upgrade struct {
}
type Executor interface {
AlpmArch() (string, error)
AlpmArchitectures() ([]string, error)
BiggestPackages() []IPackage
Cleanup()
IsCorrectVersionInstalled(string, string) bool

View File

@ -115,7 +115,7 @@ func configureAlpm(pacmanConf *pacmanconf.Config, alpmHandle *alpm.Handle) error
return err
}
if err := alpmHandle.SetArch(pacmanConf.Architecture); err != nil {
if err := alpmSetArchitecture(alpmHandle, pacmanConf.Architecture); err != nil {
return err
}
@ -442,10 +442,6 @@ func (ae *AlpmExecutor) RepoUpgrades(enableDowngrade bool) ([]db.Upgrade, error)
return slice, nil
}
func (ae *AlpmExecutor) AlpmArch() (string, error) {
return ae.handle.Arch()
}
func (ae *AlpmExecutor) BiggestPackages() []alpm.IPackage {
localPackages := []alpm.IPackage{}
_ = ae.localDB.PkgCache().SortBySize().ForEach(func(pkg alpm.IPackage) error {

17
pkg/db/ialpm/alpm_five.go Normal file
View File

@ -0,0 +1,17 @@
// +build !six
package ialpm
import (
alpm "github.com/Jguer/go-alpm/v2"
)
func alpmSetArchitecture(alpmHandle *alpm.Handle, arch []string) error {
return alpmHandle.SetArch(arch[0])
}
func (ae *AlpmExecutor) AlpmArchitectures() ([]string, error) {
arch, err := ae.handle.Arch()
return []string{arch}, err
}

17
pkg/db/ialpm/alpm_six.go Normal file
View File

@ -0,0 +1,17 @@
// +build six
package ialpm
import (
alpm "github.com/Jguer/go-alpm/v2"
)
func alpmSetArchitecture(alpmHandle *alpm.Handle, arch []string) error {
return alpmHandle.SetArchitectures(arch)
}
func (ae *AlpmExecutor) AlpmArchitectures() ([]string, error) {
architectures, err := ae.handle.GetArchitectures()
return architectures.Slice(), err
}