From bf0c6e46929e678e8bc82b7c9bb24f7ce9bbd136 Mon Sep 17 00:00:00 2001 From: Jguer Date: Wed, 7 Sep 2016 02:06:10 +0100 Subject: [PATCH] Progress on RPC dependency parsing --- aur.go | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 90 insertions(+), 1 deletion(-) diff --git a/aur.go b/aur.go index 2b631428..b5b03c38 100644 --- a/aur.go +++ b/aur.go @@ -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