actions.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  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. } else if len(aurUp)+len(repoUp) == 0 {
  37. fmt.Println("\nthere is nothing to do")
  38. return err
  39. }
  40. sort.Sort(repoUp)
  41. fmt.Printf("\x1b[1;34;1m:: \x1b[0m\x1b[1m%d Packages to upgrade.\x1b[0m\n", len(aurUp)+len(repoUp))
  42. upgrade.Print(len(aurUp), repoUp)
  43. upgrade.Print(0, aurUp)
  44. fmt.Print("\x1b[32mEnter packages you don't want to upgrade.\x1b[0m\nNumbers: ")
  45. reader := bufio.NewReader(os.Stdin)
  46. numberBuf, overflow, err := reader.ReadLine()
  47. if err != nil || overflow {
  48. fmt.Println(err)
  49. return err
  50. }
  51. result := strings.Fields(string(numberBuf))
  52. var repoNums []int
  53. var aurNums []int
  54. for _, numS := range result {
  55. num, err := strconv.Atoi(numS)
  56. if err != nil {
  57. continue
  58. }
  59. if num > len(aurUp)+len(repoUp)-1 || num < 0 {
  60. continue
  61. } else if num < len(aurUp) {
  62. num = len(aurUp) - num - 1
  63. aurNums = append(aurNums, num)
  64. } else {
  65. num = len(aurUp) + len(repoUp) - num - 1
  66. repoNums = append(repoNums, num)
  67. }
  68. }
  69. if len(repoUp) != 0 {
  70. var repoNames []string
  71. repoloop:
  72. for i, k := range repoUp {
  73. for _, j := range repoNums {
  74. if j == i {
  75. continue repoloop
  76. }
  77. }
  78. repoNames = append(repoNames, k.Name)
  79. }
  80. err := config.PassToPacman("-S", repoNames, flags)
  81. if err != nil {
  82. fmt.Println("Error upgrading repo packages.")
  83. }
  84. }
  85. if len(aurUp) != 0 {
  86. var aurNames []string
  87. aurloop:
  88. for i, k := range aurUp {
  89. for _, j := range aurNums {
  90. if j == i {
  91. continue aurloop
  92. }
  93. }
  94. aurNames = append(aurNames, k.Name)
  95. }
  96. aur.Install(aurNames, flags)
  97. }
  98. return nil
  99. }
  100. // CleanDependencies removels all dangling dependencies in system
  101. func cleanDependencies(pkgs []string) error {
  102. hanging, err := pac.HangingPackages()
  103. if err != nil {
  104. return err
  105. }
  106. if len(hanging) != 0 {
  107. if !config.ContinueTask("Confirm Removal?", "nN") {
  108. return nil
  109. }
  110. err = pac.CleanRemove(hanging)
  111. }
  112. return err
  113. }
  114. // GetPkgbuild gets the pkgbuild of the package 'pkg' trying the ABS first and then the AUR trying the ABS first and then the AUR.
  115. func getPkgbuild(pkg string) (err error) {
  116. wd, err := os.Getwd()
  117. if err != nil {
  118. return
  119. }
  120. wd = wd + "/"
  121. err = pac.GetPkgbuild(pkg, wd)
  122. if err == nil {
  123. return
  124. }
  125. err = aur.GetPkgbuild(pkg, wd)
  126. return
  127. }