repo.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "os/exec"
  6. "strings"
  7. )
  8. // RepoResult describes a Repository package
  9. type RepoResult struct {
  10. Description string
  11. Repository string
  12. Version string
  13. Name string
  14. }
  15. // RepoSearch describes a Repository search
  16. type RepoSearch struct {
  17. Resultcount int
  18. Results []RepoResult
  19. }
  20. func getInstalledPackage(pkg string) (err error) {
  21. cmd := exec.Command(PacmanBin, "-Qi", pkg)
  22. cmd.Stdout = os.Stdout
  23. cmd.Stderr = os.Stderr
  24. err = cmd.Run()
  25. return
  26. }
  27. // InstallPackage handles repo installs
  28. func InstallPackage(pkg string, flags ...string) (err error) {
  29. cmd := exec.Command(PacmanBin, "-S", pkg, strings.Join(flags, " "))
  30. cmd.Stdout = os.Stdout
  31. cmd.Stdin = os.Stdin
  32. cmd.Stderr = os.Stderr
  33. err = cmd.Run()
  34. return nil
  35. }
  36. // SearchPackages handles repo searches
  37. func SearchPackages(pkg string) (search RepoSearch, err error) {
  38. cmdOutput, err := exec.Command(PacmanBin, "-Ss", pkg).Output()
  39. outputSlice := strings.Split(string(cmdOutput), "\n")
  40. if outputSlice[0] == "" {
  41. return search, nil
  42. }
  43. i := true
  44. var tempStr string
  45. var rRes *RepoResult
  46. for _, pkgStr := range outputSlice {
  47. if i {
  48. rRes = new(RepoResult)
  49. fmt.Sscanf(pkgStr, "%s %s\n", &tempStr, &rRes.Version)
  50. repoNameSlc := strings.Split(tempStr, "/")
  51. rRes.Repository = repoNameSlc[0]
  52. rRes.Name = repoNameSlc[1]
  53. i = false
  54. } else {
  55. rRes.Description = pkgStr
  56. search.Resultcount++
  57. search.Results = append(search.Results, *rRes)
  58. i = true
  59. }
  60. }
  61. return
  62. }
  63. func isInRepo(pkg string) bool {
  64. if _, err := exec.Command(PacmanBin, "-Sp", pkg).Output(); err != nil {
  65. return false
  66. }
  67. return true
  68. }
  69. func (s RepoSearch) printSearch(index int) (err error) {
  70. for i, result := range s.Results {
  71. if index != SearchMode {
  72. fmt.Printf("%d \033[1m%s/\x1B[33m%s \x1B[36m%s\033[0m\n%s\n",
  73. i, result.Repository, result.Name, result.Version, result.Description)
  74. } else {
  75. fmt.Printf("\033[1m%s/\x1B[33m%s \x1B[36m%s\033[0m\n%s\n",
  76. result.Repository, result.Name, result.Version, result.Description)
  77. }
  78. }
  79. return nil
  80. }