mirror of
https://github.com/Jguer/yay.git
synced 2025-12-08 00:05:04 -05:00
166 lines
3.6 KiB
Go
166 lines
3.6 KiB
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"errors"
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"sort"
|
|
"strings"
|
|
)
|
|
|
|
func searchAurPackages(pkg string, index int) (search AurSearch, err error) {
|
|
err = getJSON("https://aur.archlinux.org/rpc/?v=5&type=search&arg="+pkg, &search)
|
|
if index != SearchMode {
|
|
sort.Sort(search)
|
|
}
|
|
return
|
|
}
|
|
|
|
// SearchPackages handles repo searches
|
|
func SearchPackages(pkg string) (search RepoSearch, err error) {
|
|
cmdOutput, err := exec.Command(PacmanBin, "-Ss", pkg).Output()
|
|
outputSlice := strings.Split(string(cmdOutput), "\n")
|
|
if outputSlice[0] == "" {
|
|
return search, nil
|
|
}
|
|
|
|
i := true
|
|
var tempStr string
|
|
var rRes *RepoResult
|
|
for _, pkgStr := range outputSlice {
|
|
if i {
|
|
rRes = new(RepoResult)
|
|
fmt.Sscanf(pkgStr, "%s %s\n", &tempStr, &rRes.Version)
|
|
repoNameSlc := strings.Split(tempStr, "/")
|
|
rRes.Repository = repoNameSlc[0]
|
|
rRes.Name = repoNameSlc[1]
|
|
i = false
|
|
} else {
|
|
rRes.Description = pkgStr
|
|
search.Resultcount++
|
|
search.Results = append(search.Results, *rRes)
|
|
i = true
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
func infoAurPackage(pkg string) (info AurSearch, err error) {
|
|
err = getJSON("https://aur.archlinux.org/rpc/?v=5&type=info&arg[]="+pkg, &info)
|
|
return
|
|
}
|
|
|
|
func (r AurSearch) printSearch(index int) (err error) {
|
|
for i, result := range r.Results {
|
|
if index != SearchMode {
|
|
fmt.Printf("%d \033[1maur/\x1B[33m%s \x1B[36m%s\033[0m (%d)\n %s\n",
|
|
i+index, result.Name, result.Version, result.NumVotes, result.Description)
|
|
} else {
|
|
fmt.Printf("\033[1maur/\x1B[33m%s \x1B[36m%s\033[0m (%d)\n %s\n",
|
|
result.Name, result.Version, result.NumVotes, result.Description)
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s RepoSearch) printSearch(index int) (err error) {
|
|
for i, result := range s.Results {
|
|
if index != SearchMode {
|
|
fmt.Printf("%d \033[1m%s/\x1B[33m%s \x1B[36m%s\033[0m\n%s\n",
|
|
i, result.Repository, result.Name, result.Version, result.Description)
|
|
} else {
|
|
fmt.Printf("\033[1m%s/\x1B[33m%s \x1B[36m%s\033[0m\n%s\n",
|
|
result.Repository, result.Name, result.Version, result.Description)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// To implement
|
|
func (a AurResult) getDepsfromFile(pkgbuildLoc string) (err error) {
|
|
var depend string
|
|
file, err := os.Open(pkgbuildLoc)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer file.Close()
|
|
|
|
scanner := bufio.NewScanner(file)
|
|
for scanner.Scan() {
|
|
if strings.Contains(scanner.Text(), "optdepends=(") {
|
|
continue
|
|
}
|
|
if strings.Contains(scanner.Text(), "depends=(") {
|
|
depend = scanner.Text()
|
|
fields := strings.Fields(depend)
|
|
|
|
for _, i := range fields {
|
|
fmt.Println(i)
|
|
}
|
|
break
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (a AurResult) getDepsFromRPC() (final []string, err error) {
|
|
f := func(c rune) bool {
|
|
return c == '>' || c == '<' || c == '=' || c == ' '
|
|
}
|
|
info, err := infoAurPackage(a.Name)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
if len(info.Results) == 0 {
|
|
return final, errors.New("Failed to get deps from RPC")
|
|
}
|
|
|
|
for _, deps := range info.Results[0].MakeDepends {
|
|
fields := strings.FieldsFunc(deps, f)
|
|
if !isInRepo(fields[0]) {
|
|
final = append(final, fields[0])
|
|
}
|
|
}
|
|
|
|
for _, deps := range info.Results[0].Depends {
|
|
fields := strings.FieldsFunc(deps, f)
|
|
if !isInRepo(fields[0]) {
|
|
final = append(final, fields[0])
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (a AurResult) getAURDependencies() (err error) {
|
|
pkglist, err := a.getDepsFromRPC()
|
|
fmt.Printf("%+v\n", pkglist)
|
|
|
|
for _, i := range pkglist {
|
|
err = installAURPackage(i, "--asdeps")
|
|
if err != nil {
|
|
for _, e := range pkglist {
|
|
removePackage(e, "sdc")
|
|
}
|
|
return
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func getInstalledPackage(pkg string) (err error) {
|
|
cmd := exec.Command(PacmanBin, "-Qi", pkg)
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
err = cmd.Run()
|
|
return
|
|
}
|
|
|
|
|