yay.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package main
  2. import (
  3. "bytes"
  4. "errors"
  5. "fmt"
  6. "os"
  7. "strings"
  8. )
  9. // PacmanConf describes the default pacman config file
  10. const PacmanConf string = "/etc/pacman.conf"
  11. // BuildDir is the root for package building
  12. const BuildDir string = "/tmp/yaytmp/"
  13. // SearchMode is search without numbers.
  14. const SearchMode int = -1
  15. func operation() (operation string, err error) {
  16. if len(os.Args) < 2 {
  17. return "noop", errors.New("No operation specified.")
  18. }
  19. for _, arg := range os.Args[1:] {
  20. if arg[0] == '-' && arg[1] != '-' {
  21. return arg, nil
  22. }
  23. }
  24. return "yogurt", nil
  25. }
  26. func packages() ([]string, error) {
  27. var ps []string
  28. for _, arg := range os.Args[1:] {
  29. if arg[0] != '-' {
  30. ps = append(ps, arg)
  31. }
  32. }
  33. return ps, nil
  34. }
  35. func flags() (flags string, err error) {
  36. var fs []string
  37. for _, arg := range os.Args[1:] {
  38. if arg[0] == '-' && arg[1] == '-' {
  39. fs = append(fs, arg)
  40. }
  41. }
  42. if len(fs) == 0 {
  43. return "", nil
  44. }
  45. flags = strings.Join(fs, " ")
  46. return
  47. }
  48. func main() {
  49. var err error
  50. var pkgstring bytes.Buffer
  51. conf, err := readConfig(PacmanConf)
  52. op, err := operation()
  53. if err != nil {
  54. fmt.Println(err)
  55. os.Exit(1)
  56. }
  57. pkgs, _ := packages()
  58. flag, _ := flags()
  59. switch op {
  60. case "-Ss":
  61. for _, pkg := range pkgs {
  62. err = searchMode(pkg, &conf)
  63. }
  64. case "-S":
  65. err = InstallPackage(pkgs, &conf, flag)
  66. case "-Syu":
  67. err = updateAndInstall(&conf, flag)
  68. case "yogurt":
  69. for _, pkg := range pkgs {
  70. err = searchAndInstall(pkg, &conf, flag)
  71. }
  72. default:
  73. for i, pkg := range pkgs {
  74. pkgstring.WriteString(pkg)
  75. if i != len(pkgs)-1 {
  76. pkgstring.WriteString(" ")
  77. }
  78. }
  79. err = passToPacman(op, pkgstring.String(), flag)
  80. }
  81. if err != nil {
  82. fmt.Println(err)
  83. os.Exit(1)
  84. }
  85. }