yay.go 1.5 KB

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