args.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. package settings
  2. import (
  3. "strconv"
  4. "strings"
  5. "github.com/Jguer/yay/v12/pkg/settings/parser"
  6. )
  7. func (c *Configuration) ParseCommandLine(a *parser.Arguments) error {
  8. if err := a.Parse(); err != nil {
  9. return err
  10. }
  11. c.extractYayOptions(a)
  12. return nil
  13. }
  14. func (c *Configuration) extractYayOptions(a *parser.Arguments) {
  15. for option, value := range a.Options {
  16. if c.handleOption(option, value.First()) {
  17. a.DelArg(option)
  18. }
  19. }
  20. c.AURURL = strings.TrimRight(c.AURURL, "/")
  21. // if AurRPCURL is set, use that for /rpc calls
  22. if c.AURRPCURL == "" {
  23. c.AURRPCURL = c.AURURL + "/rpc?"
  24. return
  25. }
  26. if !strings.HasSuffix(c.AURRPCURL, "?") {
  27. if strings.HasSuffix(c.AURRPCURL, "/rpc") {
  28. c.AURRPCURL += "?"
  29. } else {
  30. c.AURRPCURL = strings.TrimRight(c.AURRPCURL, "/") + "/rpc?"
  31. }
  32. }
  33. }
  34. func (c *Configuration) handleOption(option, value string) bool {
  35. boolValue, err := strconv.ParseBool(value)
  36. if err != nil {
  37. boolValue = true
  38. }
  39. switch option {
  40. case "aururl":
  41. c.AURURL = value
  42. case "aurrpcurl":
  43. c.AURRPCURL = value
  44. case "save":
  45. c.SaveConfig = boolValue
  46. case "afterclean", "cleanafter":
  47. c.CleanAfter = boolValue
  48. case "keepsrc":
  49. c.KeepSrc = boolValue
  50. case "debug":
  51. c.Debug = boolValue
  52. return !boolValue
  53. case "devel":
  54. c.Devel = boolValue
  55. case "timeupdate":
  56. c.TimeUpdate = boolValue
  57. case "topdown":
  58. c.BottomUp = false
  59. case "bottomup":
  60. c.BottomUp = true
  61. case "singlelineresults":
  62. c.SingleLineResults = true
  63. case "doublelineresults":
  64. c.SingleLineResults = false
  65. case "completioninterval":
  66. n, err := strconv.Atoi(value)
  67. if err == nil {
  68. c.CompletionInterval = n
  69. }
  70. case "sortby":
  71. c.SortBy = value
  72. case "searchby":
  73. c.SearchBy = value
  74. case "noconfirm":
  75. NoConfirm = boolValue
  76. case "config":
  77. c.PacmanConf = value
  78. case "redownload":
  79. c.ReDownload = "yes"
  80. case "redownloadall":
  81. c.ReDownload = "all"
  82. case "noredownload":
  83. c.ReDownload = "no"
  84. case "rebuild":
  85. c.ReBuild = parser.RebuildModeYes
  86. case "rebuildall":
  87. c.ReBuild = parser.RebuildModeAll
  88. case "rebuildtree":
  89. c.ReBuild = parser.RebuildModeTree
  90. case "norebuild":
  91. c.ReBuild = parser.RebuildModeNo
  92. case "batchinstall":
  93. c.BatchInstall = boolValue
  94. case "answerclean":
  95. c.AnswerClean = value
  96. case "noanswerclean":
  97. c.AnswerClean = ""
  98. case "answerdiff":
  99. c.AnswerDiff = value
  100. case "noanswerdiff":
  101. c.AnswerDiff = ""
  102. case "answeredit":
  103. c.AnswerEdit = value
  104. case "noansweredit":
  105. c.AnswerEdit = ""
  106. case "answerupgrade":
  107. c.AnswerUpgrade = value
  108. case "noanswerupgrade":
  109. c.AnswerUpgrade = ""
  110. case "gpgflags":
  111. c.GpgFlags = value
  112. case "mflags":
  113. c.MFlags = value
  114. case "gitflags":
  115. c.GitFlags = value
  116. case "builddir":
  117. c.BuildDir = value
  118. case "editor":
  119. c.Editor = value
  120. case "editorflags":
  121. c.EditorFlags = value
  122. case "makepkg":
  123. c.MakepkgBin = value
  124. case "makepkgconf":
  125. c.MakepkgConf = value
  126. case "nomakepkgconf":
  127. c.MakepkgConf = ""
  128. case "pacman":
  129. c.PacmanBin = value
  130. case "git":
  131. c.GitBin = value
  132. case "gpg":
  133. c.GpgBin = value
  134. case "sudo":
  135. c.SudoBin = value
  136. case "sudoflags":
  137. c.SudoFlags = value
  138. case "requestsplitn":
  139. n, err := strconv.Atoi(value)
  140. if err == nil && n > 0 {
  141. c.RequestSplitN = n
  142. }
  143. case "sudoloop":
  144. c.SudoLoop = boolValue
  145. case "provides":
  146. c.Provides = boolValue
  147. case "pgpfetch":
  148. c.PGPFetch = boolValue
  149. case "cleanmenu":
  150. c.CleanMenu = boolValue
  151. case "diffmenu":
  152. c.DiffMenu = boolValue
  153. case "editmenu":
  154. c.EditMenu = boolValue
  155. case "useask":
  156. c.UseAsk = boolValue
  157. case "combinedupgrade":
  158. c.CombinedUpgrade = boolValue
  159. case "a", "aur":
  160. c.Mode = parser.ModeAUR
  161. case "repo":
  162. c.Mode = parser.ModeRepo
  163. case "removemake":
  164. c.RemoveMake = "yes"
  165. case "noremovemake":
  166. c.RemoveMake = "no"
  167. case "askremovemake":
  168. c.RemoveMake = "ask"
  169. case "askyesremovemake":
  170. c.RemoveMake = "askyes"
  171. case "separatesources":
  172. c.SeparateSources = boolValue
  173. default:
  174. return false
  175. }
  176. return true
  177. }