Procházet zdrojové kódy

Allow use of rpc client as an alternative to the metadata client (#1918)

* use updated aur client

* add logger to rpc client

* update go.mod
Jo před 2 roky
rodič
revize
f1d086df1d

+ 7 - 2
go.mod

@@ -1,7 +1,7 @@
 module github.com/Jguer/yay/v11
 
 require (
-	github.com/Jguer/aur v1.1.3
+	github.com/Jguer/aur v1.2.0
 	github.com/Jguer/go-alpm/v2 v2.1.2
 	github.com/Jguer/votar v1.0.0
 	github.com/Morganamilo/go-pacmanconf v0.0.0-20210502114700-cff030e927a5
@@ -28,7 +28,12 @@ require (
 	github.com/deckarep/golang-set/v2 v2.1.0
 	github.com/itchyny/gojq v0.12.11 // indirect
 	github.com/itchyny/timefmt-go v0.1.5 // indirect
-	github.com/ohler55/ojg v1.17.4 // indirect
+	github.com/ohler55/ojg v1.17.5 // indirect
+)
+
+require (
+	github.com/hashicorp/errwrap v1.1.0 // indirect
+	github.com/hashicorp/go-multierror v1.1.1 // indirect
 )
 
 go 1.19

+ 9 - 12
go.sum

@@ -1,5 +1,5 @@
-github.com/Jguer/aur v1.1.3 h1:wuqz67ZqUnyqS56WjNSwKqrZCJFeDuG+ljWnmmPKg04=
-github.com/Jguer/aur v1.1.3/go.mod h1:YWXsL0qywB3kY8gduwAJwklN38opQYRm6+pYMJgtCd0=
+github.com/Jguer/aur v1.2.0 h1:hWg0JcGQ9WkPlnElr3tZ6dW+GfD/wZTr9kym5GFY3OE=
+github.com/Jguer/aur v1.2.0/go.mod h1:x4iPZX1qZoQtPiYgFepVO/6kbz7zwFkep8gz5tzga64=
 github.com/Jguer/go-alpm/v2 v2.1.2 h1:CGTIxzuEpT9Q3a7IBrx0E6acoYoaHX2Z93UOApPDhgU=
 github.com/Jguer/go-alpm/v2 v2.1.2/go.mod h1:uLQcTMNM904dRiGU+/JDtDdd7Nd8mVbEVaHjhmziT7w=
 github.com/Jguer/votar v1.0.0 h1:drPYpV5Py5BeAQS8xezmT6uCEfLzotNjLf5yfmlHKTg=
@@ -21,6 +21,11 @@ github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6
 github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4=
 github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslCrtky5vbi9dd7HrQPQIx6wqiw=
 github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI=
+github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
+github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
+github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
+github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
+github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
 github.com/itchyny/gojq v0.12.11 h1:YhLueoHhHiN4mkfM+3AyJV6EPcCxKZsOnYf+aVSwaQw=
 github.com/itchyny/gojq v0.12.11/go.mod h1:o3FT8Gkbg/geT4pLI0tF3hvip5F3Y/uskjRz9OYa38g=
 github.com/itchyny/timefmt-go v0.1.5 h1:G0INE2la8S6ru/ZI5JecgyzbbJNs5lG1RcBqa7Jm6GE=
@@ -29,10 +34,8 @@ github.com/leonelquinteros/gotext v1.5.1 h1:vmddRn3gHp67YFjZLZE2AZsgYMT4IBTJhua4
 github.com/leonelquinteros/gotext v1.5.1/go.mod h1:/A4Y7BvIsf5JHO60E43ZQDVkV3qO+7eP8HjeqD6ChIA=
 github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32 h1:W6apQkHrMkS0Muv8G/TipAy/FJl/rCYT0+EuS8+Z0z4=
 github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms=
-github.com/ohler55/ojg v1.15.0 h1:Z95FvBiMsMOOGP9Nzv5OVV4ND2KnEMxk0GOS8Kvcahg=
-github.com/ohler55/ojg v1.15.0/go.mod h1:7Ghirupn8NC8hSSDpI0gcjorPxj+vSVIONDWfliHR1k=
-github.com/ohler55/ojg v1.17.4 h1:6Ss87DyAZHU0ODZu6Cmuahj5UiVaRD1n8C4KNm0qMYg=
-github.com/ohler55/ojg v1.17.4/go.mod h1:7Ghirupn8NC8hSSDpI0gcjorPxj+vSVIONDWfliHR1k=
+github.com/ohler55/ojg v1.17.5 h1:SY6/cdhVzsLinNFIBRNSWhJgihvEWco5Y0TJe46XJ1Y=
+github.com/ohler55/ojg v1.17.5/go.mod h1:7Ghirupn8NC8hSSDpI0gcjorPxj+vSVIONDWfliHR1k=
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@@ -62,21 +65,15 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ=
-golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
 golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/term v0.3.0 h1:qoo4akIqOcDME5bhc/NgxUdovd6BSS2uMsVjB56q1xI=
-golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA=
 golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY=
 golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM=
-golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
 golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
 golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=

+ 2 - 3
local_install_test.go

@@ -10,7 +10,6 @@ import (
 	"testing"
 
 	aur "github.com/Jguer/aur"
-	"github.com/Jguer/aur/metadata"
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
 
@@ -141,7 +140,7 @@ func TestIntegrationLocalInstall(t *testing.T) {
 			CmdBuilder: cmdBuilder,
 			VCSStore:   &vcs.Mock{},
 			AURCache: &mockaur.MockAUR{
-				GetFn: func(ctx context.Context, query *metadata.AURQuery) ([]aur.Pkg, error) {
+				GetFn: func(ctx context.Context, query *aur.Query) ([]aur.Pkg, error) {
 					return []aur.Pkg{}, nil
 				},
 			},
@@ -259,7 +258,7 @@ func TestIntegrationLocalInstallMissingDep(t *testing.T) {
 			CmdBuilder: cmdBuilder,
 			VCSStore:   &vcs.Mock{},
 			AURCache: &mockaur.MockAUR{
-				GetFn: func(ctx context.Context, query *metadata.AURQuery) ([]aur.Pkg, error) {
+				GetFn: func(ctx context.Context, query *aur.Query) ([]aur.Pkg, error) {
 					return []aur.Pkg{}, nil
 				},
 			},

+ 4 - 3
pkg/dep/depPool.go

@@ -9,6 +9,7 @@ import (
 	"sync"
 
 	"github.com/Jguer/aur"
+	"github.com/Jguer/aur/rpc"
 	alpm "github.com/Jguer/go-alpm/v2"
 	"github.com/leonelquinteros/gotext"
 
@@ -29,10 +30,10 @@ type Pool struct {
 	Groups       []string
 	AlpmExecutor db.Executor
 	Warnings     *query.AURWarnings
-	aurClient    aur.ClientInterface
+	aurClient    rpc.ClientInterface
 }
 
-func newPool(dbExecutor db.Executor, aurClient aur.ClientInterface) *Pool {
+func newPool(dbExecutor db.Executor, aurClient rpc.ClientInterface) *Pool {
 	dp := &Pool{
 		Targets:      []Target{},
 		Explicit:     map[string]struct{}{},
@@ -348,7 +349,7 @@ func (dp *Pool) ResolveRepoDependency(pkg db.IPackage, noDeps bool) {
 func GetPool(ctx context.Context, pkgs []string,
 	warnings *query.AURWarnings,
 	dbExecutor db.Executor,
-	aurClient aur.ClientInterface,
+	aurClient rpc.ClientInterface,
 	mode parser.TargetMode,
 	ignoreProviders, noConfirm, provides bool,
 	rebuild string, splitN int, noDeps bool, noCheckDeps bool, assumeInstalled []string,

+ 4 - 9
pkg/dep/dep_graph.go

@@ -14,7 +14,6 @@ import (
 	"github.com/Jguer/yay/v11/pkg/topo"
 
 	aurc "github.com/Jguer/aur"
-	"github.com/Jguer/aur/metadata"
 	alpm "github.com/Jguer/go-alpm/v2"
 	gosrc "github.com/Morganamilo/go-srcinfo"
 	"github.com/leonelquinteros/gotext"
@@ -94,13 +93,9 @@ var colorMap = map[Reason]string{
 	CheckDep: "forestgreen",
 }
 
-type AURCache interface {
-	Get(ctx context.Context, query *metadata.AURQuery) ([]aurc.Pkg, error)
-}
-
 type Grapher struct {
 	dbExecutor  db.Executor
-	aurCache    AURCache
+	aurCache    aurc.QueryClient
 	fullGraph   bool // If true, the graph will include all dependencies including already installed ones or repo
 	noConfirm   bool
 	noDeps      bool      // If true, the graph will not include dependencies
@@ -110,7 +105,7 @@ type Grapher struct {
 	providerCache map[string]*aur.Pkg
 }
 
-func NewGrapher(dbExecutor db.Executor, aurCache AURCache,
+func NewGrapher(dbExecutor db.Executor, aurCache aurc.QueryClient,
 	fullGraph, noConfirm bool, output io.Writer, noDeps bool, noCheckDeps bool,
 ) *Grapher {
 	return &Grapher{
@@ -342,7 +337,7 @@ func (g *Grapher) GraphFromAURCache(ctx context.Context,
 	}
 
 	for _, target := range targets {
-		aurPkgs, _ := g.aurCache.Get(ctx, &metadata.AURQuery{By: aurc.Name, Needles: []string{target}})
+		aurPkgs, _ := g.aurCache.Get(ctx, &aurc.Query{By: aurc.Name, Needles: []string{target}})
 		if len(aurPkgs) == 0 {
 			text.Errorln("No AUR package found for", target)
 
@@ -447,7 +442,7 @@ func (g *Grapher) addNodes(
 		} else {
 			var errMeta error
 			aurPkgs, errMeta = g.aurCache.Get(ctx,
-				&metadata.AURQuery{
+				&aurc.Query{
 					Needles:  []string{depName},
 					By:       aurc.None,
 					Contains: false,

+ 6 - 6
pkg/dep/dep_graph_test.go

@@ -7,13 +7,13 @@ import (
 	"os"
 	"testing"
 
+	aurc "github.com/Jguer/aur"
+	"github.com/stretchr/testify/require"
+
 	"github.com/Jguer/yay/v11/pkg/db"
 	"github.com/Jguer/yay/v11/pkg/db/mock"
 	mockaur "github.com/Jguer/yay/v11/pkg/dep/mock"
 	aur "github.com/Jguer/yay/v11/pkg/query"
-
-	"github.com/Jguer/aur/metadata"
-	"github.com/stretchr/testify/require"
 )
 
 func ptrString(s string) *string {
@@ -31,7 +31,7 @@ func getFromFile(t *testing.T, filePath string) mockaur.GetFunc {
 	err = json.Unmarshal(fBytes, &pkgs)
 	require.NoError(t, err)
 
-	return func(ctx context.Context, query *metadata.AURQuery) ([]aur.Pkg, error) {
+	return func(ctx context.Context, query *aurc.Query) ([]aur.Pkg, error) {
 		return pkgs, nil
 	}
 }
@@ -72,7 +72,7 @@ func TestGrapher_GraphFromTargets_jellyfin(t *testing.T) {
 		},
 	}
 
-	mockAUR := &mockaur.MockAUR{GetFn: func(ctx context.Context, query *metadata.AURQuery) ([]aur.Pkg, error) {
+	mockAUR := &mockaur.MockAUR{GetFn: func(ctx context.Context, query *aurc.Query) ([]aur.Pkg, error) {
 		if query.Needles[0] == "jellyfin" {
 			jfinFn := getFromFile(t, "testdata/jellyfin.json")
 			return jfinFn(ctx, query)
@@ -93,7 +93,7 @@ func TestGrapher_GraphFromTargets_jellyfin(t *testing.T) {
 
 	type fields struct {
 		dbExecutor  db.Executor
-		aurCache    AURCache
+		aurCache    aurc.QueryClient
 		noDeps      bool
 		noCheckDeps bool
 	}

+ 2 - 3
pkg/dep/mock/aur.go

@@ -4,16 +4,15 @@ import (
 	"context"
 
 	"github.com/Jguer/aur"
-	"github.com/Jguer/aur/metadata"
 )
 
-type GetFunc func(ctx context.Context, query *metadata.AURQuery) ([]aur.Pkg, error)
+type GetFunc func(ctx context.Context, query *aur.Query) ([]aur.Pkg, error)
 
 type MockAUR struct {
 	GetFn GetFunc
 }
 
-func (m *MockAUR) Get(ctx context.Context, query *metadata.AURQuery) ([]aur.Pkg, error) {
+func (m *MockAUR) Get(ctx context.Context, query *aur.Query) ([]aur.Pkg, error) {
 	if m.GetFn != nil {
 		return m.GetFn(ctx, query)
 	}

+ 3 - 2
pkg/query/aur_info.go

@@ -5,6 +5,7 @@ import (
 	"sync"
 
 	"github.com/Jguer/aur"
+	"github.com/Jguer/aur/rpc"
 	"github.com/leonelquinteros/gotext"
 
 	"github.com/Jguer/yay/v11/pkg/intrange"
@@ -19,7 +20,7 @@ type Pkg = aur.Pkg
 // of packages exceeds the number set in config.RequestSplitN.
 // If the number does exceed config.RequestSplitN multiple aur requests will be
 // performed concurrently.
-func AURInfo(ctx context.Context, aurClient aur.ClientInterface, names []string, warnings *AURWarnings, splitN int) ([]Pkg, error) {
+func AURInfo(ctx context.Context, aurClient rpc.ClientInterface, names []string, warnings *AURWarnings, splitN int) ([]Pkg, error) {
 	info := make([]Pkg, 0, len(names))
 	seen := make(map[string]int)
 
@@ -84,7 +85,7 @@ func AURInfo(ctx context.Context, aurClient aur.ClientInterface, names []string,
 	return info, nil
 }
 
-func AURInfoPrint(ctx context.Context, aurClient aur.ClientInterface, names []string, splitN int) ([]Pkg, error) {
+func AURInfoPrint(ctx context.Context, aurClient rpc.ClientInterface, names []string, splitN int) ([]Pkg, error) {
 	text.OperationInfoln(gotext.Get("Querying AUR..."))
 
 	warnings := &AURWarnings{}

+ 3 - 2
pkg/query/mixed_sources.go

@@ -9,6 +9,7 @@ import (
 	"strings"
 
 	"github.com/Jguer/aur"
+	"github.com/Jguer/aur/rpc"
 	"github.com/Jguer/go-alpm/v2"
 	"github.com/adrg/strutil"
 	"github.com/adrg/strutil/metrics"
@@ -39,11 +40,11 @@ type MixedSourceQueryBuilder struct {
 	bottomUp          bool
 	singleLineResults bool
 
-	aurClient aur.ClientInterface
+	aurClient rpc.ClientInterface
 }
 
 func NewMixedSourceQueryBuilder(
-	aurClient aur.ClientInterface,
+	aurClient rpc.ClientInterface,
 	sortBy string,
 	targetMode parser.TargetMode,
 	searchBy string,

+ 3 - 2
pkg/query/mixed_sources_test.go

@@ -5,9 +5,10 @@ import (
 	"strings"
 	"testing"
 
+	"github.com/Jguer/aur/rpc"
+
 	"github.com/Jguer/yay/v11/pkg/settings/parser"
 
-	"github.com/Jguer/aur"
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
 )
@@ -30,7 +31,7 @@ func TestMixedSourceQueryBuilder(t *testing.T) {
 
 	for _, tc := range testCases {
 		t.Run(tc.desc, func(t *testing.T) {
-			client, err := aur.NewClient(aur.WithHTTPClient(&mockDoer{}))
+			client, err := rpc.NewClient(rpc.WithHTTPClient(&mockDoer{}))
 			queryBuilder := NewMixedSourceQueryBuilder(client, "votes", parser.ModeAny, "", tc.bottomUp, false)
 			search := []string{"linux"}
 			mockStore := &mockDB{}

+ 7 - 11
pkg/query/source.go

@@ -16,7 +16,7 @@ import (
 	"github.com/Jguer/yay/v11/pkg/stringset"
 	"github.com/Jguer/yay/v11/pkg/text"
 
-	"github.com/Jguer/aur/metadata"
+	"github.com/Jguer/aur/rpc"
 )
 
 type SearchVerbosity int
@@ -28,10 +28,6 @@ const (
 	Minimal
 )
 
-type AURCache interface {
-	Get(ctx context.Context, query *metadata.AURQuery) ([]aur.Pkg, error)
-}
-
 type SourceQueryBuilder struct {
 	repoQuery
 	aurQuery
@@ -43,13 +39,13 @@ type SourceQueryBuilder struct {
 	bottomUp          bool
 	singleLineResults bool
 
-	aurClient aur.ClientInterface
-	aurCache  AURCache
+	aurClient rpc.ClientInterface
+	aurCache  aur.QueryClient
 }
 
 func NewSourceQueryBuilder(
-	aurClient aur.ClientInterface,
-	aurCache AURCache,
+	aurClient rpc.ClientInterface,
+	aurCache aur.QueryClient,
 	sortBy string,
 	targetMode parser.TargetMode,
 	searchBy string,
@@ -197,7 +193,7 @@ func filterAURResults(pkgS []string, results []aur.Pkg) []aur.Pkg {
 
 // queryAUR searches AUR and narrows based on subarguments.
 func queryAUR(ctx context.Context,
-	aurClient aur.ClientInterface, aurMetadata AURCache,
+	aurClient rpc.ClientInterface, aurMetadata aur.QueryClient,
 	pkgS []string, searchBy string, newEngine bool,
 ) ([]aur.Pkg, error) {
 	var (
@@ -209,7 +205,7 @@ func queryAUR(ctx context.Context,
 		var r []aur.Pkg
 
 		if aurMetadata != nil && newEngine {
-			q, errM := aurMetadata.Get(ctx, &metadata.AURQuery{
+			q, errM := aurMetadata.Get(ctx, &aur.Query{
 				Needles:  []string{word},
 				By:       by,
 				Contains: true,

+ 3 - 2
pkg/query/source_test.go

@@ -8,11 +8,12 @@ import (
 	"strings"
 	"testing"
 
+	"github.com/Jguer/aur/rpc"
+
 	"github.com/Jguer/yay/v11/pkg/db"
 	"github.com/Jguer/yay/v11/pkg/db/mock"
 	"github.com/Jguer/yay/v11/pkg/settings/parser"
 
-	"github.com/Jguer/aur"
 	"github.com/Jguer/go-alpm/v2"
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
@@ -105,7 +106,7 @@ func TestSourceQueryBuilder(t *testing.T) {
 
 	for _, tc := range testCases {
 		t.Run(tc.desc, func(t *testing.T) {
-			client, err := aur.NewClient(aur.WithHTTPClient(&mockDoer{}))
+			client, err := rpc.NewClient(rpc.WithHTTPClient(&mockDoer{}))
 			require.NoError(t, err)
 
 			queryBuilder := NewSourceQueryBuilder(client, nil, "votes", parser.ModeAny, "", tc.bottomUp, false, false)

+ 13 - 8
pkg/settings/config.go

@@ -16,11 +16,10 @@ import (
 	"github.com/Jguer/yay/v11/pkg/text"
 	"github.com/Jguer/yay/v11/pkg/vcs"
 
-	"github.com/Jguer/aur"
 	"github.com/Jguer/aur/metadata"
+	"github.com/Jguer/aur/rpc"
 	"github.com/Jguer/votar/pkg/vote"
 	"github.com/leonelquinteros/gotext"
-	"github.com/pkg/errors"
 )
 
 // HideMenus indicates if pacman's provider menus must be hidden.
@@ -79,6 +78,7 @@ type Configuration struct {
 	SeparateSources        bool     `json:"separatesources"`
 	NewInstallEngine       bool     `json:"newinstallengine"`
 	Debug                  bool     `json:"debug"`
+	UseRPC                 bool     `json:"rpc"`
 }
 
 // SaveConfig writes yay config to file.
@@ -238,6 +238,7 @@ func DefaultConfig(version string) *Configuration {
 		NewInstallEngine:       false,
 		Version:                version,
 		Debug:                  false,
+		UseRPC:                 false,
 	}
 }
 
@@ -310,21 +311,25 @@ func NewConfig(version string) (*Configuration, error) {
 		metadata.WithCacheFilePath(filepath.Join(newConfig.BuildDir, "aur.json")),
 		metadata.WithRequestEditorFn(userAgentFn),
 		metadata.WithBaseURL(newConfig.AURURL),
-		metadata.WithDebugLogger(text.Debugln),
+		metadata.WithDebugLogger(newConfig.Runtime.Logger.Child("aur").Debugln),
 	)
 	if errAURCache != nil {
-		return nil, errors.Wrap(errAURCache, gotext.Get("failed to retrieve aur Cache"))
+		return nil, fmt.Errorf(gotext.Get("failed to retrieve aur Cache")+": %w", errAURCache)
 	}
 
 	var errAUR error
-	newConfig.Runtime.AURClient, errAUR = aur.NewClient(
-		aur.WithHTTPClient(newConfig.Runtime.HTTPClient),
-		aur.WithRequestEditorFn(userAgentFn))
-
+	newConfig.Runtime.AURClient, errAUR = rpc.NewClient(
+		rpc.WithHTTPClient(newConfig.Runtime.HTTPClient),
+		rpc.WithRequestEditorFn(userAgentFn),
+		rpc.WithLogFn(newConfig.Runtime.Logger.Child("rpc").Debugln))
 	if errAUR != nil {
 		return nil, errAUR
 	}
 
+	if newConfig.UseRPC {
+		newConfig.Runtime.AURCache = newConfig.Runtime.AURClient
+	}
+
 	newConfig.Runtime.VCSStore = vcs.NewInfoStore(
 		filepath.Join(cacheHome, vcsFileName), newConfig.Runtime.CmdBuilder)
 

+ 3 - 8
pkg/settings/runtime.go

@@ -1,7 +1,6 @@
 package settings
 
 import (
-	"context"
 	"net/http"
 
 	"github.com/Jguer/yay/v11/pkg/db"
@@ -12,15 +11,11 @@ import (
 	"github.com/Jguer/yay/v11/pkg/vcs"
 
 	"github.com/Jguer/aur"
-	"github.com/Jguer/aur/metadata"
+	"github.com/Jguer/aur/rpc"
 	"github.com/Jguer/votar/pkg/vote"
 	"github.com/Morganamilo/go-pacmanconf"
 )
 
-type AURCache interface {
-	Get(ctx context.Context, query *metadata.AURQuery) ([]aur.Pkg, error)
-}
-
 type Runtime struct {
 	Mode           parser.TargetMode
 	QueryBuilder   query.Builder
@@ -32,9 +27,9 @@ type Runtime struct {
 	VCSStore       vcs.Store
 	CmdBuilder     exe.ICmdBuilder
 	HTTPClient     *http.Client
-	AURClient      *aur.Client
+	AURClient      *rpc.Client
 	VoteClient     *vote.Client
-	AURCache       AURCache
+	AURCache       aur.QueryClient
 	DBExecutor     db.Executor
 	Logger         *text.Logger
 }

+ 7 - 21
pkg/upgrade/service.go

@@ -5,7 +5,6 @@ import (
 	"sort"
 
 	"github.com/Jguer/aur"
-	"github.com/Jguer/aur/metadata"
 	"github.com/Jguer/go-alpm/v2"
 	mapset "github.com/deckarep/golang-set/v2"
 	"github.com/leonelquinteros/gotext"
@@ -14,7 +13,6 @@ import (
 	"github.com/Jguer/yay/v11/pkg/dep"
 	"github.com/Jguer/yay/v11/pkg/intrange"
 	"github.com/Jguer/yay/v11/pkg/multierror"
-	"github.com/Jguer/yay/v11/pkg/query"
 	"github.com/Jguer/yay/v11/pkg/settings"
 	"github.com/Jguer/yay/v11/pkg/text"
 	"github.com/Jguer/yay/v11/pkg/topo"
@@ -23,8 +21,7 @@ import (
 
 type UpgradeService struct {
 	grapher    *dep.Grapher
-	aurCache   settings.AURCache
-	aurClient  aur.ClientInterface
+	aurCache   aur.QueryClient
 	dbExecutor db.Executor
 	vcsStore   vcs.Store
 	runtime    *settings.Runtime
@@ -33,15 +30,13 @@ type UpgradeService struct {
 	noConfirm  bool
 }
 
-func NewUpgradeService(grapher *dep.Grapher, aurCache settings.AURCache,
-	aurClient aur.ClientInterface, dbExecutor db.Executor,
-	vcsStore vcs.Store, runtime *settings.Runtime, cfg *settings.Configuration,
-	noConfirm bool, logger *text.Logger,
+func NewUpgradeService(grapher *dep.Grapher, aurCache aur.QueryClient,
+	dbExecutor db.Executor, vcsStore vcs.Store, runtime *settings.Runtime,
+	cfg *settings.Configuration, noConfirm bool, logger *text.Logger,
 ) *UpgradeService {
 	return &UpgradeService{
 		grapher:    grapher,
 		aurCache:   aurCache,
-		aurClient:  aurClient,
 		dbExecutor: dbExecutor,
 		vcsStore:   vcsStore,
 		runtime:    runtime,
@@ -53,7 +48,7 @@ func NewUpgradeService(grapher *dep.Grapher, aurCache settings.AURCache,
 
 // upGraph adds packages to upgrade to the graph.
 func (u *UpgradeService) upGraph(ctx context.Context, graph *topo.Graph[string, *dep.InstallInfo],
-	warnings *query.AURWarnings, enableDowngrade bool,
+	enableDowngrade bool,
 	filter Filter,
 ) (err error) {
 	var (
@@ -69,12 +64,7 @@ func (u *UpgradeService) upGraph(ctx context.Context, graph *topo.Graph[string,
 	if u.runtime.Mode.AtLeastAUR() {
 		u.log.OperationInfoln(gotext.Get("Searching AUR for updates..."))
 
-		var _aurdata []aur.Pkg
-		if u.aurCache != nil {
-			_aurdata, err = u.aurCache.Get(ctx, &metadata.AURQuery{Needles: remoteNames, By: aur.Name})
-		} else {
-			_aurdata, err = query.AURInfo(ctx, u.aurClient, remoteNames, warnings, u.cfg.RequestSplitN)
-		}
+		_aurdata, err := u.aurCache.Get(ctx, &aur.Query{Needles: remoteNames, By: aur.Name})
 
 		errs.Add(err)
 
@@ -235,16 +225,12 @@ func (u *UpgradeService) GraphUpgrades(ctx context.Context,
 		graph = topo.New[string, *dep.InstallInfo]()
 	}
 
-	warnings := query.NewWarnings()
-
-	err := u.upGraph(ctx, graph, warnings, enableDowngrade,
+	err := u.upGraph(ctx, graph, enableDowngrade,
 		func(*Upgrade) bool { return true })
 	if err != nil {
 		return graph, err
 	}
 
-	warnings.Print()
-
 	if graph.Len() == 0 {
 		return graph, nil
 	}

+ 1 - 2
pkg/upgrade/service_test.go

@@ -7,7 +7,6 @@ import (
 	"testing"
 
 	"github.com/Jguer/aur"
-	"github.com/Jguer/aur/metadata"
 	"github.com/Jguer/go-alpm/v2"
 	"github.com/stretchr/testify/assert"
 
@@ -115,7 +114,7 @@ func TestUpgradeService_GraphUpgrades(t *testing.T) {
 	}
 
 	mockAUR := &mockaur.MockAUR{
-		GetFn: func(ctx context.Context, query *metadata.AURQuery) ([]aur.Pkg, error) {
+		GetFn: func(ctx context.Context, query *aur.Query) ([]aur.Pkg, error) {
 			return []aur.Pkg{
 				{Name: "yay", Version: "10.2.4", PackageBase: "yay"},
 				{Name: "example-git", Version: "2.2.1.r69.g8a10460-1", PackageBase: "example"},

+ 2 - 2
sync.go

@@ -56,8 +56,8 @@ func syncInstall(ctx context.Context,
 		var errSysUp error
 
 		upService := upgrade.NewUpgradeService(
-			grapher, aurCache, config.Runtime.AURClient,
-			dbExecutor, config.Runtime.VCSStore, config.Runtime, config, settings.NoConfirm, config.Runtime.Logger.Child("upgrade"))
+			grapher, aurCache, dbExecutor, config.Runtime.VCSStore,
+			config.Runtime, config, settings.NoConfirm, config.Runtime.Logger.Child("upgrade"))
 
 		graph, errSysUp = upService.GraphUpgrades(ctx, graph, cmdArgs.ExistsDouble("u", "sysupgrade"))
 		if errSysUp != nil {

+ 2 - 2
vote.go

@@ -5,7 +5,7 @@ import (
 	"errors"
 	"fmt"
 
-	"github.com/Jguer/aur"
+	"github.com/Jguer/aur/rpc"
 	"github.com/Jguer/votar/pkg/vote"
 	"github.com/leonelquinteros/gotext"
 
@@ -22,7 +22,7 @@ func (e *ErrAURVote) Error() string {
 }
 
 func handlePackageVote(ctx context.Context,
-	targets []string, aurClient aur.ClientInterface,
+	targets []string, aurClient rpc.ClientInterface,
 	voteClient *vote.Client, splitN int, upvote bool,
 ) error {
 	infos, err := query.AURInfoPrint(ctx, aurClient, targets, splitN)