install.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package main
  2. import (
  3. "errors"
  4. "fmt"
  5. "os"
  6. "os/exec"
  7. "strings"
  8. )
  9. func installnumArray(num []int, aurRes AurSearch, repoRes RepoSearch, flags ...string) (err error) {
  10. if len(num) == 0 {
  11. return errors.New("Installing AUR array: No nums selected")
  12. }
  13. var index int
  14. for _, i := range num {
  15. if i > repoRes.Resultcount-1 {
  16. index = i - repoRes.Resultcount
  17. err = aurRes.Results[i-index].install(flags...)
  18. if err != nil {
  19. // Do not abandon program, we might still be able to install the rest
  20. fmt.Println(err)
  21. }
  22. } else {
  23. InstallPackage(repoRes.Results[i].Name, flags...)
  24. }
  25. }
  26. return err
  27. }
  28. func installAURPackage(pkg string, flags ...string) (err error) {
  29. info, err := infoAurPackage(pkg)
  30. if err != nil {
  31. return
  32. }
  33. if info.Resultcount == 0 {
  34. return errors.New("Package '" + pkg + "' does not exist")
  35. }
  36. info.Results[0].install(flags...)
  37. return err
  38. }
  39. func (a AurResult) install(flags ...string) (err error) {
  40. // No need to use filepath.separators because it won't run on inferior platforms
  41. err = os.MkdirAll(BuildDir+"builds", 0755)
  42. if err != nil {
  43. fmt.Println(err)
  44. return
  45. }
  46. tarLocation := BuildDir + a.Name + ".tar.gz"
  47. defer os.Remove(BuildDir + a.Name + ".tar.gz")
  48. err = downloadFile(tarLocation, BaseURL+a.URLPath)
  49. if err != nil {
  50. return
  51. }
  52. err = exec.Command(TarBin, "-xf", tarLocation, "-C", BuildDir).Run()
  53. if err != nil {
  54. return
  55. }
  56. defer os.RemoveAll(BuildDir + a.Name)
  57. err = a.getAURDependencies()
  58. if err != nil {
  59. return
  60. }
  61. fmt.Print("\033[1m\x1b[32m==> Edit PKGBUILD? (y/n)\033[0m")
  62. var response string
  63. fmt.Scanln(&response)
  64. if strings.ContainsAny(response, "y & Y") {
  65. editcmd := exec.Command(Editor, BuildDir+a.Name+"/"+"PKGBUILD")
  66. editcmd.Stdout = os.Stdout
  67. editcmd.Stderr = os.Stderr
  68. editcmd.Stdin = os.Stdin
  69. err = editcmd.Run()
  70. }
  71. err = os.Chdir(BuildDir + a.Name)
  72. if err != nil {
  73. return
  74. }
  75. var args string
  76. if len(flags) != 0 {
  77. args = fmt.Sprintf(" %s", strings.Join(flags, " "))
  78. }
  79. makepkgcmd := exec.Command(MakepkgBin, "-sri"+args)
  80. makepkgcmd.Stdout = os.Stdout
  81. makepkgcmd.Stderr = os.Stderr
  82. makepkgcmd.Stdin = os.Stdin
  83. err = makepkgcmd.Run()
  84. return
  85. }
  86. // InstallPackage handles repo installs
  87. func InstallPackage(pkg string, flags ...string) (err error) {
  88. var args string
  89. fmt.Println(len(flags))
  90. if len(flags) != 0 {
  91. args = fmt.Sprintf(" %s", strings.Join(flags, " "))
  92. }
  93. cmd := exec.Command("sudo", "pacman", "-S", pkg+args)
  94. cmd.Stdout = os.Stdout
  95. cmd.Stdin = os.Stdin
  96. cmd.Stderr = os.Stderr
  97. err = cmd.Run()
  98. return nil
  99. }