yay.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. )
  6. var version string
  7. // PacmanConf describes the default pacman config file
  8. const PacmanConf string = "/etc/pacman.conf"
  9. // BuildDir is the root for package building
  10. const BuildDir string = "/tmp/yaytmp/"
  11. // SearchMode is search without numbers.
  12. const SearchMode int = -1
  13. func usage() {
  14. fmt.Println(`usage: yay <operation> [...]
  15. operations:
  16. yay {-h --help}
  17. yay {-V --version}
  18. yay {-D --database} <options> <package(s)>
  19. yay {-F --files} [options] [package(s)]
  20. yay {-Q --query} [options] [package(s)]
  21. yay {-R --remove} [options] <package(s)>
  22. yay {-S --sync} [options] [package(s)]
  23. yay {-T --deptest} [options] [package(s)]
  24. yay {-U --upgrade} [options] <file(s)>
  25. New operations:
  26. yay -Qstats - Displays system information
  27. `)
  28. }
  29. func parser() (op string, options []string, packages []string, err error) {
  30. if len(os.Args) < 2 {
  31. err = fmt.Errorf("No operation specified.")
  32. return
  33. }
  34. for _, arg := range os.Args[1:] {
  35. if arg[0] == '-' && arg[1] != '-' {
  36. op = arg
  37. }
  38. if arg[0] == '-' && arg[1] == '-' {
  39. if arg == "--help" {
  40. op = arg
  41. }
  42. options = append(options, arg)
  43. }
  44. if arg[0] != '-' {
  45. packages = append(packages, arg)
  46. }
  47. }
  48. if op == "" {
  49. op = "yogurt"
  50. }
  51. return
  52. }
  53. func main() {
  54. var err error
  55. conf, err := readConfig(PacmanConf)
  56. op, options, pkgs, err := parser()
  57. if err != nil {
  58. fmt.Println(err)
  59. os.Exit(1)
  60. }
  61. switch op {
  62. case "-Qstats":
  63. err = stats(&conf)
  64. case "-Ss":
  65. for _, pkg := range pkgs {
  66. err = searchMode(pkg, &conf)
  67. }
  68. case "-S":
  69. err = InstallPackage(pkgs, &conf, options)
  70. case "-Syu", "-Suy":
  71. err = updateAndInstall(&conf, options)
  72. case "yogurt":
  73. for _, pkg := range pkgs {
  74. err = searchAndInstall(pkg, &conf, options)
  75. break
  76. }
  77. case "--help", "-h":
  78. usage()
  79. default:
  80. err = passToPacman(op, pkgs, options)
  81. }
  82. if err != nil {
  83. fmt.Println(err)
  84. os.Exit(1)
  85. }
  86. }