Progress on RPC dependency parsing

This commit is contained in:
Jguer 2016-09-07 02:06:10 +01:00
parent 6671cefef0
commit bf0c6e4692

91
aur.go
View file

@ -1,6 +1,7 @@
package main
import (
"bufio"
"encoding/json"
"fmt"
"io"
@ -11,6 +12,35 @@ import (
"strings"
)
// AurInfo is the result of an info search
type AurInfo struct {
Version int `json:"version"`
Type string `json:"type"`
Resultcount int `json:"resultcount"`
Results []struct {
ID int `json:"ID"`
Name string `json:"Name"`
PackageBaseID int `json:"PackageBaseID"`
PackageBase string `json:"PackageBase"`
Version string `json:"Version"`
Description string `json:"Description"`
URL string `json:"URL"`
NumVotes int `json:"NumVotes"`
Popularity float64 `json:"Popularity"`
OutOfDate interface{} `json:"OutOfDate"`
Maintainer string `json:"Maintainer"`
FirstSubmitted int `json:"FirstSubmitted"`
LastModified int `json:"LastModified"`
URLPath string `json:"URLPath"`
Depends []string `json:"Depends"`
MakeDepends []string `json:"MakeDepends"`
OptDepends []string `json:"OptDepends"`
Conflicts []string `json:"Conflicts"`
License []string `json:"License"`
Keywords []string `json:"Keywords"`
} `json:"results"`
}
// AurResult describes an AUR package
type AurResult struct {
ID int `json:"ID"`
@ -66,6 +96,12 @@ func searchAurPackages(pkg string) (search AurSearch) {
return search
}
func infoAurPackage(pkg string) (info AurInfo) {
fmt.Println("https://aur.archlinux.org/rpc/?v=5&type=info&arg[]=" + pkg)
getJSON("https://aur.archlinux.org/rpc/?v=5&type=info&arg[]="+pkg, &info)
return info
}
func (r AurSearch) printSearch(index int) (err error) {
for i, result := range r.Results {
if index != SearchMode {
@ -121,10 +157,61 @@ func downloadFile(filepath string, url string) (err error) {
return nil
}
func (a AurResult) getAURDependencies() {
// 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() (err error) {
info := infoAurPackage(a.Name)
fmt.Printf("%+v\n", info)
f := func(c rune) bool {
return c == '>' || c == '<' || c == '=' || c == ' '
}
for _, deps := range info.Results[0].MakeDepends {
fields := strings.FieldsFunc(deps, f)
fmt.Println(fields[0])
}
for _, deps := range info.Results[0].Depends {
fields := strings.FieldsFunc(deps, f)
fmt.Println(fields[0])
}
return
}
func (a AurResult) getAURDependencies() (err error) {
a.getDepsFromRPC()
return nil
}
func (a AurResult) installResult() (err error) {
// No need to use filepath.separators because it won't run on inferior platforms
err = os.MkdirAll(BuildDir+"builds", 0755)
@ -153,7 +240,9 @@ func (a AurResult) installResult() (err error) {
if err != nil {
return
}
a.getAURDependencies()
os.Exit(0)
fmt.Print("==> Edit PKGBUILD? (y/n)")
var response string