123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- package main
- import (
- "bufio"
- "errors"
- "fmt"
- "github.com/Jguer/go-alpm"
- "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) {
- h, er := alpm.Init("/", "/var/lib/pacman")
- if er != nil {
- fmt.Println(er)
- return
- }
- defer h.Release()
- fmt.Println("before dblist")
- dbList, _ := h.SyncDbs()
- fmt.Println("after dblist")
- // db, _ := h.RegisterSyncDb("core", 0)
- // h.RegisterSyncDb("community", 0)
- // h.RegisterSyncDb("extra", 0)
- _, err = h.SyncDbByName("core")
- fmt.Println(err)
- fmt.Printf("%+v\n", dbList)
- db, _ := h.LocalDb()
- for _, pkg := range db.PkgCache().Slice() {
- fmt.Printf("%s %s\n %s\n",
- pkg.Name(), pkg.Version(), pkg.Description())
- }
- for _, db := range dbList.Slice() {
- fmt.Printf("%+v\n", db)
- db, _ := h.LocalDb()
- for _, pkg := range db.PkgCache().Slice() {
- fmt.Printf("%s %s\n %s\n",
- pkg.Name(), pkg.Version(), pkg.Description())
- }
- }
- return
- }
- // SearchPackagesa handles repo searches
- func SearchPackagesa(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
- }
|