aur.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. package aur
  2. import (
  3. "bufio"
  4. "fmt"
  5. "net/http"
  6. "os"
  7. "github.com/jguer/yay/pacman"
  8. "github.com/jguer/yay/util"
  9. )
  10. // Install sends system commands to make and install a package from pkgName
  11. func Install(pkg string, flags []string) (err error) {
  12. q, n, err := Info(pkg)
  13. if err != nil {
  14. return
  15. }
  16. if n == 0 {
  17. return fmt.Errorf("Package %s does not exist", pkg)
  18. }
  19. q[0].Install(flags)
  20. return err
  21. }
  22. // Upgrade tries to update every foreign package installed in the system
  23. func Upgrade(flags []string) error {
  24. fmt.Println("\x1b[1;36;1m::\x1b[0m\x1b[1m Starting AUR upgrade...\x1b[0m")
  25. foreign, n, err := pacman.ForeignPackages()
  26. if err != nil || n == 0 {
  27. return err
  28. }
  29. keys := make([]string, len(foreign))
  30. i := 0
  31. for k := range foreign {
  32. keys[i] = k
  33. i++
  34. }
  35. q, _, err := MultiInfo(keys)
  36. if err != nil {
  37. return err
  38. }
  39. outdated := q[:0]
  40. for _, res := range q {
  41. if _, ok := foreign[res.Name]; ok {
  42. // Leaving this here for now, warn about downgrades later
  43. if res.LastModified > foreign[res.Name].Date {
  44. fmt.Printf("\x1b[1m\x1b[32m==>\x1b[33;1m %s: \x1b[0m%s \x1b[33;1m-> \x1b[0m%s\n",
  45. res.Name, foreign[res.Name].Version, res.Version)
  46. outdated = append(outdated, res)
  47. }
  48. }
  49. }
  50. //If there are no outdated packages, don't prompt
  51. if len(outdated) == 0 {
  52. fmt.Println(" there is nothing to do")
  53. return nil
  54. }
  55. // Install updated packages
  56. if !util.ContinueTask("Proceed with upgrade?", "nN") {
  57. return nil
  58. }
  59. for _, pkg := range outdated {
  60. pkg.Install(flags)
  61. }
  62. return nil
  63. }
  64. // GetPkgbuild downloads pkgbuild from the AUR.
  65. func GetPkgbuild(pkgN string, dir string) (err error) {
  66. aq, numaq, err := Info(pkgN)
  67. if err != nil {
  68. return err
  69. }
  70. if numaq == 0 {
  71. return fmt.Errorf("no results")
  72. }
  73. fmt.Printf("\x1b[1;32m==>\x1b[1;33m %s \x1b[1;32mfound in AUR.\x1b[0m\n", pkgN)
  74. util.DownloadAndUnpack(BaseURL+aq[0].URLPath, dir, false)
  75. return
  76. }
  77. //CreateAURList creates a new completion file
  78. func CreateAURList(out *os.File) (err error) {
  79. resp, err := http.Get("https://aur.archlinux.org/packages.gz")
  80. if err != nil {
  81. return err
  82. }
  83. defer resp.Body.Close()
  84. scanner := bufio.NewScanner(resp.Body)
  85. scanner.Scan()
  86. for scanner.Scan() {
  87. fmt.Print(scanner.Text())
  88. out.WriteString(scanner.Text())
  89. if util.Shell == "fish" {
  90. fmt.Print("\tAUR\n")
  91. out.WriteString("\tAUR\n")
  92. } else {
  93. fmt.Print("\n")
  94. out.WriteString("\n")
  95. }
  96. }
  97. return nil
  98. }