浏览代码

Add --searchby

Allow using the RPC's &by= field during -Ss
morganamilo 5 年之前
父节点
当前提交
ab2101ab49
共有 10 个文件被更改,包括 102 次插入47 次删除
  1. 3 0
      config.go
  2. 1 1
      depPool.go
  3. 2 2
      go.mod
  4. 4 0
      go.sum
  5. 4 0
      parser.go
  6. 22 1
      query.go
  7. 5 0
      vendor/github.com/Jguer/go-alpm/package.go
  8. 14 4
      vendor/github.com/Jguer/go-alpm/types.go
  9. 45 37
      vendor/github.com/mikkeloscar/aur/aur.go
  10. 2 2
      vendor/modules.txt

+ 3 - 0
config.go

@@ -56,6 +56,7 @@ type Configuration struct {
 	GpgFlags           string `json:"gpgflags"`
 	MFlags             string `json:"mflags"`
 	SortBy             string `json:"sortby"`
+	SearchBy           string `json:"searchby"`
 	GitFlags           string `json:"gitflags"`
 	RemoveMake         string `json:"removemake"`
 	RequestSplitN      int    `json:"requestsplitn"`
@@ -157,6 +158,7 @@ func defaultSettings() *Configuration {
 		SortMode:           bottomUp,
 		CompletionInterval: 7,
 		SortBy:             "votes",
+		SearchBy:           "name-desc",
 		SudoLoop:           false,
 		TarBin:             "bsdtar",
 		GitBin:             "git",
@@ -200,6 +202,7 @@ func (config *Configuration) expandEnv() {
 	config.MFlags = os.ExpandEnv(config.MFlags)
 	config.GitFlags = os.ExpandEnv(config.GitFlags)
 	config.SortBy = os.ExpandEnv(config.SortBy)
+	config.SearchBy = os.ExpandEnv(config.SearchBy)
 	config.TarBin = os.ExpandEnv(config.TarBin)
 	config.GitBin = os.ExpandEnv(config.GitBin)
 	config.GpgBin = os.ExpandEnv(config.GpgBin)

+ 1 - 1
depPool.go

@@ -188,7 +188,7 @@ func (dp *depPool) findProvides(pkgs types.StringSet) error {
 		words := strings.Split(pkg, "-")
 
 		for i := range words {
-			results, err = rpc.SearchByNameDesc(strings.Join(words[:i+1], "-"))
+			results, err = rpc.Search(strings.Join(words[:i+1], "-"))
 			if err == nil {
 				break
 			}

+ 2 - 2
go.mod

@@ -1,10 +1,10 @@
 module github.com/Jguer/yay/v9
 
 require (
-	github.com/Jguer/go-alpm v0.0.0-20190302211415-9c82d5170ce0
+	github.com/Jguer/go-alpm v0.0.0-20190627095237-ec8523c9bb21
 	github.com/Morganamilo/go-pacmanconf v0.0.0-20180910220353-9c5265e1b14f
 	github.com/Morganamilo/go-srcinfo v1.0.0
-	github.com/mikkeloscar/aur v0.0.0-20181111113612-b71516da3ae9
+	github.com/mikkeloscar/aur v0.0.0-20190912174111-183f80a38525
 )
 
 go 1.13

+ 4 - 0
go.sum

@@ -1,8 +1,12 @@
 github.com/Jguer/go-alpm v0.0.0-20190302211415-9c82d5170ce0 h1:jkaSC1289bzjkoc1qRMDrl4Oad2uoERHHqpptYsGIJY=
 github.com/Jguer/go-alpm v0.0.0-20190302211415-9c82d5170ce0/go.mod h1:FyxWWXMCnKWSU8prNG5ryzjilFJVj6PUr6yMR36rALA=
+github.com/Jguer/go-alpm v0.0.0-20190627095237-ec8523c9bb21 h1:byeuFn/If54Ty6HzKeKlwTPIUKSag/aZTNcPLZsp1ms=
+github.com/Jguer/go-alpm v0.0.0-20190627095237-ec8523c9bb21/go.mod h1:D5SUcIS9Yiz/L8cjRzq/992eERnx6ugYmGlc4e7xdus=
 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/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/mikkeloscar/aur v0.0.0-20181111113612-b71516da3ae9 h1:g4TBYa1sjv/TZfU9t82oYlRneu8cCVr3dnazE7os5vw=
 github.com/mikkeloscar/aur v0.0.0-20181111113612-b71516da3ae9/go.mod h1:n1NKHoldRNhIEufSx1PiDYcd2W+wpbz5/5K+p2eNDVk=
+github.com/mikkeloscar/aur v0.0.0-20190912174111-183f80a38525 h1:T0cWcTw55+0h3bEBHWkDPEKYutNIksrDU4aJfkBJTpo=
+github.com/mikkeloscar/aur v0.0.0-20190912174111-183f80a38525/go.mod h1:nYOKcK8tIj69ZZ8uDOWoiT+L25NvlOQaraDqTec/idA=

+ 4 - 0
parser.go

@@ -378,6 +378,7 @@ func isArg(arg string) bool {
 	case "bottomup":
 	case "completioninterval":
 	case "sortby":
+	case "searchby":
 	case "redownload":
 	case "redownloadall":
 	case "noredownload":
@@ -473,6 +474,8 @@ func handleConfig(option, value string) bool {
 		}
 	case "sortby":
 		config.SortBy = value
+	case "searchby":
+		config.SearchBy = value
 	case "noconfirm":
 		config.NoConfirm = true
 	case "config":
@@ -677,6 +680,7 @@ func hasParam(arg string) bool {
 	case "answerupgrade":
 	case "completioninterval":
 	case "sortby":
+	case "searchby":
 	default:
 		return false
 	}

+ 22 - 1
query.go

@@ -101,18 +101,39 @@ func filterPackages() (local []alpm.Package, remote []alpm.Package,
 	return
 }
 
+func getSearchBy(value string) rpc.By {
+	switch value {
+	case "name":
+		return rpc.Name
+	case "maintainer":
+		return rpc.Maintainer
+	case "depends":
+		return rpc.Depends
+	case "makedepends":
+		return rpc.MakeDepends
+	case "optdepends":
+		return rpc.OptDepends
+	case "checkdepends":
+		return rpc.CheckDepends
+	default:
+		return rpc.NameDesc
+	}
+}
+
 // NarrowSearch searches AUR and narrows based on subarguments
 func narrowSearch(pkgS []string, sortS bool) (aurQuery, error) {
 	var r []rpc.Pkg
 	var err error
 	var usedIndex int
 
+	by := getSearchBy(config.SearchBy)
+
 	if len(pkgS) == 0 {
 		return nil, nil
 	}
 
 	for i, word := range pkgS {
-		r, err = rpc.Search(word)
+		r, err = rpc.SearchBy(word, by)
 		if err == nil {
 			usedIndex = i
 			break

+ 5 - 0
vendor/github.com/Jguer/go-alpm/package.go

@@ -181,6 +181,11 @@ func (pkg *Package) Files() []File {
 	return convertFilelist(cFiles)
 }
 
+// ContainsFile checks if the path is in the package filelist
+func (pkg *Package) ContainsFile(path string) (File, error) {
+	return convertFile(C.alpm_filelist_contains(C.alpm_pkg_get_files(pkg.pmpkg), C.CString(path)))
+}
+
 // Groups returns the groups the package belongs to.
 func (pkg *Package) Groups() StringList {
 	ptr := unsafe.Pointer(C.alpm_pkg_get_groups(pkg.pmpkg))

+ 14 - 4
vendor/github.com/Jguer/go-alpm/types.go

@@ -11,6 +11,7 @@ package alpm
 import "C"
 
 import (
+	"errors"
 	"fmt"
 	"reflect"
 	"unsafe"
@@ -68,6 +69,16 @@ type File struct {
 	Mode uint32
 }
 
+func convertFile(file *C.alpm_file_t) (File, error) {
+	if file == nil {
+		return File{}, errors.New("No file")
+	}
+	return File{
+		Name: C.GoString(file.name),
+		Size: int64(file.size),
+		Mode: uint32(file.mode)}, nil
+}
+
 func convertFilelist(files *C.alpm_filelist_t) []File {
 	size := int(files.count)
 	items := make([]File, size)
@@ -80,10 +91,9 @@ func convertFilelist(files *C.alpm_filelist_t) []File {
 	cFiles := *(*[]C.alpm_file_t)(unsafe.Pointer(&rawItems))
 
 	for i := 0; i < size; i++ {
-		items[i] = File{
-			Name: C.GoString(cFiles[i].name),
-			Size: int64(cFiles[i].size),
-			Mode: uint32(cFiles[i].mode)}
+		if file, err := convertFile(&cFiles[i]); err == nil {
+			items[i] = file
+		}
 	}
 	return items
 }

+ 45 - 37
vendor/github.com/mikkeloscar/aur/aur.go

@@ -18,6 +18,40 @@ type response struct {
 	Results     []Pkg  `json:"results"`
 }
 
+//By specifies what to seach by in RPC searches
+type By int
+
+const (
+	Name By = iota
+	NameDesc
+	Maintainer
+	Depends
+	MakeDepends
+	OptDepends
+	CheckDepends
+)
+
+func (by By) String() string {
+	switch by {
+	case Name:
+		return "name"
+	case NameDesc:
+		return "name-desc"
+	case Maintainer:
+		return "maintainer"
+	case Depends:
+		return "depends"
+	case MakeDepends:
+		return "makedepends"
+	case OptDepends:
+		return "optdepends"
+	case CheckDepends:
+		return "checkdepends"
+	default:
+		panic("invalid By")
+	}
+}
+
 // Pkg holds package information
 type Pkg struct {
 	ID             int      `json:"ID"`
@@ -52,6 +86,11 @@ func get(values url.Values) ([]Pkg, error) {
 	if err != nil {
 		return nil, err
 	}
+
+	if resp.StatusCode == http.StatusServiceUnavailable {
+		return nil, errors.New("AUR is unavailable at this moment")
+	}
+
 	defer resp.Body.Close()
 
 	dec := json.NewDecoder(resp.Body)
@@ -80,50 +119,19 @@ func searchBy(query, by string) ([]Pkg, error) {
 	return get(v)
 }
 
-// Search searches for packages by the RPC's default defautl field.
-// This is the same as SearchByNameDesc
+// Search searches for packages using the RPC's default search by.
+// This is the same as using SearchBy With NameDesc
 func Search(query string) ([]Pkg, error) {
 	return searchBy(query, "")
 }
 
-// Search searches for packages by package name.
-func SearchByName(query string) ([]Pkg, error) {
-	return searchBy(query, "name")
-}
-
-// SearchByNameDesc searches for package by package name and description.
-func SearchByNameDesc(query string) ([]Pkg, error) {
-	return searchBy(query, "name-desc")
-}
-
-// SearchByMaintainer searches for package by maintainer.
-func SearchByMaintainer(query string) ([]Pkg, error) {
-	return searchBy(query, "maintainer")
-}
-
-// SearchByDepends searches for packages that depend on query
-func SearchByDepends(query string) ([]Pkg, error) {
-	return searchBy(query, "depends")
-}
-
-// SearchByMakeDepends searches for packages that makedepend on query
-func SearchByMakeDepends(query string) ([]Pkg, error) {
-	return searchBy(query, "makedepends")
-}
-
-// SearchByOptDepends searches for packages that optdepend on query
-func SearchByOptDepends(query string) ([]Pkg, error) {
-	return searchBy(query, "optdepends")
-}
-
-// SearchByCheckDepends searches for packages that checkdepend on query
-func SearchByCheckDepends(query string) ([]Pkg, error) {
-	return searchBy(query, "checkdepends")
+// SearchBy searches for packages with a specified  search by
+func SearchBy(query string, by By) ([]Pkg, error) {
+	return searchBy(query, by.String())
 }
 
-// Orphans returns all orphan packages in the AUR.
 func Orphans() ([]Pkg, error) {
-	return SearchByMaintainer("")
+	return SearchBy("", Maintainer)
 }
 
 // Info shows info for one or multiple packages.

+ 2 - 2
vendor/modules.txt

@@ -1,9 +1,9 @@
-# github.com/Jguer/go-alpm v0.0.0-20190302211415-9c82d5170ce0
+# github.com/Jguer/go-alpm v0.0.0-20190627095237-ec8523c9bb21
 github.com/Jguer/go-alpm
 # github.com/Morganamilo/go-pacmanconf v0.0.0-20180910220353-9c5265e1b14f
 github.com/Morganamilo/go-pacmanconf
 github.com/Morganamilo/go-pacmanconf/ini
 # github.com/Morganamilo/go-srcinfo v1.0.0
 github.com/Morganamilo/go-srcinfo
-# github.com/mikkeloscar/aur v0.0.0-20181111113612-b71516da3ae9
+# github.com/mikkeloscar/aur v0.0.0-20190912174111-183f80a38525
 github.com/mikkeloscar/aur