actions.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "os"
  6. "sort"
  7. "strconv"
  8. "strings"
  9. aur "github.com/jguer/yay/aur"
  10. "github.com/jguer/yay/config"
  11. pac "github.com/jguer/yay/pacman"
  12. "github.com/jguer/yay/upgrade"
  13. )
  14. // Install handles package installs
  15. func install(pkgs []string, flags []string) error {
  16. aurs, repos, _ := pac.PackageSlices(pkgs)
  17. if len(repos) != 0 {
  18. err := config.PassToPacman("-S", repos, flags)
  19. if err != nil {
  20. fmt.Println("Error installing repo packages.")
  21. }
  22. }
  23. if len(aurs) != 0 {
  24. err := aur.Install(aurs, flags)
  25. if err != nil {
  26. fmt.Println("Error installing aur packages.")
  27. }
  28. }
  29. return nil
  30. }
  31. // Upgrade handles updating the cache and installing updates.
  32. func upgradePkgs(flags []string) error {
  33. aurUp, repoUp, err := upgrade.List()
  34. if err != nil {
  35. return err
  36. }
  37. if len(aurUp)+len(repoUp) > 0 {
  38. sort.Sort(repoUp)
  39. fmt.Printf("\x1b[1;34;1m:: \x1b[0m\x1b[1m%d Packages to upgrade.\x1b[0m\n", len(aurUp)+len(repoUp))
  40. upgrade.Print(len(aurUp), repoUp)
  41. upgrade.Print(0, aurUp)
  42. fmt.Print("\x1b[32mEnter packages you don't want to upgrade.\x1b[0m\nNumbers: ")
  43. }
  44. reader := bufio.NewReader(os.Stdin)
  45. numberBuf, overflow, err := reader.ReadLine()
  46. if err != nil || overflow {
  47. fmt.Println(err)
  48. return err
  49. }
  50. result := strings.Fields(string(numberBuf))
  51. var repoNums []int
  52. var aurNums []int
  53. for _, numS := range result {
  54. num, err := strconv.Atoi(numS)
  55. if err != nil {
  56. continue
  57. }
  58. if num > len(aurUp)+len(repoUp)-1 || num < 0 {
  59. continue
  60. } else if num < len(aurUp) {
  61. num = len(aurUp) - num - 1
  62. aurNums = append(aurNums, num)
  63. } else {
  64. num = len(aurUp) + len(repoUp) - num - 1
  65. repoNums = append(repoNums, num)
  66. }
  67. }
  68. if len(repoUp) != 0 {
  69. var repoNames []string
  70. repoloop:
  71. for i, k := range repoUp {
  72. for _, j := range repoNums {
  73. if j == i {
  74. continue repoloop
  75. }
  76. }
  77. repoNames = append(repoNames, k.Name)
  78. }
  79. err := config.PassToPacman("-S", repoNames, flags)
  80. if err != nil {
  81. fmt.Println("Error upgrading repo packages.")
  82. }
  83. }
  84. if len(aurUp) != 0 {
  85. var aurNames []string
  86. aurloop:
  87. for i, k := range aurUp {
  88. for _, j := range aurNums {
  89. if j == i {
  90. continue aurloop
  91. }
  92. }
  93. aurNames = append(aurNames, k.Name)
  94. }
  95. aur.Install(aurNames, flags)
  96. }
  97. return nil
  98. }
  99. // CleanDependencies removels all dangling dependencies in system
  100. func cleanDependencies(pkgs []string) error {
  101. hanging, err := pac.HangingPackages()
  102. if err != nil {
  103. return err
  104. }
  105. if len(hanging) != 0 {
  106. if !config.ContinueTask("Confirm Removal?", "nN") {
  107. return nil
  108. }
  109. err = pac.CleanRemove(hanging)
  110. }
  111. return err
  112. }
  113. // GetPkgbuild gets the pkgbuild of the package 'pkg' trying the ABS first and then the AUR trying the ABS first and then the AUR.
  114. func getPkgbuild(pkg string) (err error) {
  115. wd, err := os.Getwd()
  116. if err != nil {
  117. return
  118. }
  119. wd = wd + "/"
  120. err = pac.GetPkgbuild(pkg, wd)
  121. if err == nil {
  122. return
  123. }
  124. err = aur.GetPkgbuild(pkg, wd)
  125. return
  126. }