yay.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/jguer/yay"
  6. "github.com/jguer/yay/util"
  7. )
  8. func usage() {
  9. fmt.Println(`usage: yay <operation> [...]
  10. operations:
  11. yay {-h --help}
  12. yay {-V --version}
  13. yay {-D --database} <options> <package(s)>
  14. yay {-F --files} [options] [package(s)]
  15. yay {-Q --query} [options] [package(s)]
  16. yay {-R --remove} [options] <package(s)>
  17. yay {-S --sync} [options] [package(s)]
  18. yay {-T --deptest} [options] [package(s)]
  19. yay {-U --upgrade} [options] <file(s)>
  20. New operations:
  21. yay -Qstats displays system information
  22. yay -Cd remove unneeded dependencies
  23. yay -G [package(s)] get pkgbuild from ABS or AUR
  24. New options:
  25. --topdown shows repository's packages first and then aur's
  26. --bottomup shows aur's packages first and then repository's
  27. --noconfirm skip user input on package install
  28. `)
  29. }
  30. var version = "1.92"
  31. func parser() (op string, options []string, packages []string, err error) {
  32. if len(os.Args) < 2 {
  33. err = fmt.Errorf("no operation specified")
  34. return
  35. }
  36. for _, arg := range os.Args[1:] {
  37. if arg[0] == '-' && arg[1] != '-' {
  38. op = arg
  39. }
  40. if arg[0] == '-' && arg[1] == '-' {
  41. if arg == "--help" {
  42. op = arg
  43. } else if arg == "--topdown" {
  44. util.SortMode = util.TopDown
  45. } else if arg == "--bottomup" {
  46. util.SortMode = util.BottomUp
  47. } else if arg == "--noconfirm" {
  48. util.NoConfirm = true
  49. options = append(options, arg)
  50. } else {
  51. options = append(options, arg)
  52. }
  53. }
  54. if arg[0] != '-' {
  55. packages = append(packages, arg)
  56. }
  57. }
  58. if op == "" {
  59. op = "yogurt"
  60. }
  61. return
  62. }
  63. func main() {
  64. op, options, pkgs, err := parser()
  65. if err != nil {
  66. fmt.Println(err)
  67. os.Exit(1)
  68. }
  69. switch op {
  70. case "-Cd":
  71. err = yay.CleanDependencies(pkgs)
  72. case "-G":
  73. for _, pkg := range pkgs {
  74. err = yay.GetPkgbuild(pkg)
  75. if err != nil {
  76. fmt.Println(pkg+":", err)
  77. }
  78. }
  79. case "-Qstats":
  80. err = yay.LocalStatistics(version)
  81. case "-Ss", "-Ssq", "-Sqs":
  82. if op == "-Ss" {
  83. util.SearchVerbosity = util.Detailed
  84. } else {
  85. util.SearchVerbosity = util.Minimal
  86. }
  87. if pkgs != nil {
  88. err = yay.Search(pkgs[0], pkgs[1:])
  89. }
  90. case "-S":
  91. err = yay.Install(pkgs, options)
  92. case "-Syu", "-Suy":
  93. err = yay.Upgrade(options)
  94. case "-Si":
  95. err = yay.SingleSearch(pkgs, options)
  96. case "yogurt":
  97. util.SearchVerbosity = util.NumberMenu
  98. if pkgs != nil {
  99. err = yay.NumberMenu(pkgs[0], pkgs[1:], options)
  100. }
  101. case "--help", "-h":
  102. usage()
  103. default:
  104. err = yay.PassToPacman(op, pkgs, options)
  105. }
  106. if err != nil {
  107. fmt.Println(err)
  108. os.Exit(1)
  109. }
  110. }