args.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  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. // Reload CmdBuilder
  13. c.Runtime.CmdBuilder = c.CmdBuilder(nil)
  14. return nil
  15. }
  16. func (c *Configuration) extractYayOptions(a *parser.Arguments) {
  17. for option, value := range a.Options {
  18. if c.handleOption(option, value.First()) {
  19. a.DelArg(option)
  20. }
  21. }
  22. c.AURURL = strings.TrimRight(c.AURURL, "/")
  23. c.Runtime.AURClient.BaseURL = c.AURURL + "/rpc?"
  24. // if AurRPCURL is set, use that for /rpc calls
  25. if c.AURRPCURL != "" {
  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. c.Runtime.AURClient.BaseURL = c.AURRPCURL
  34. }
  35. }
  36. func (c *Configuration) handleOption(option, value string) bool {
  37. switch option {
  38. case "aururl":
  39. c.AURURL = value
  40. case "aurrpcurl":
  41. c.AURRPCURL = value
  42. case "save":
  43. c.Runtime.SaveConfig = true
  44. case "afterclean", "cleanafter":
  45. c.CleanAfter = true
  46. case "noafterclean", "nocleanafter":
  47. c.CleanAfter = false
  48. case "devel":
  49. c.Devel = true
  50. case "nodevel":
  51. c.Devel = false
  52. case "timeupdate":
  53. c.TimeUpdate = true
  54. case "notimeupdate":
  55. c.TimeUpdate = false
  56. case "topdown":
  57. c.BottomUp = false
  58. case "bottomup":
  59. c.BottomUp = true
  60. case "singlelineresults":
  61. c.SingleLineResults = true
  62. case "doublelineresults":
  63. c.SingleLineResults = false
  64. case "completioninterval":
  65. n, err := strconv.Atoi(value)
  66. if err == nil {
  67. c.CompletionInterval = n
  68. }
  69. case "sortby":
  70. c.SortBy = value
  71. case "searchby":
  72. c.SearchBy = value
  73. case "noconfirm":
  74. NoConfirm = true
  75. case "config":
  76. c.PacmanConf = value
  77. case "redownload":
  78. c.ReDownload = "yes"
  79. case "redownloadall":
  80. c.ReDownload = "all"
  81. case "noredownload":
  82. c.ReDownload = "no"
  83. case "rebuild":
  84. c.ReBuild = "yes"
  85. case "rebuildall":
  86. c.ReBuild = "all"
  87. case "rebuildtree":
  88. c.ReBuild = "tree"
  89. case "norebuild":
  90. c.ReBuild = "no"
  91. case "batchinstall":
  92. c.BatchInstall = true
  93. case "nobatchinstall":
  94. c.BatchInstall = false
  95. case "answerclean":
  96. c.AnswerClean = value
  97. case "noanswerclean":
  98. c.AnswerClean = ""
  99. case "answerdiff":
  100. c.AnswerDiff = value
  101. case "noanswerdiff":
  102. c.AnswerDiff = ""
  103. case "answeredit":
  104. c.AnswerEdit = value
  105. case "noansweredit":
  106. c.AnswerEdit = ""
  107. case "answerupgrade":
  108. c.AnswerUpgrade = value
  109. case "noanswerupgrade":
  110. c.AnswerUpgrade = ""
  111. case "gpgflags":
  112. c.GpgFlags = value
  113. case "mflags":
  114. c.MFlags = value
  115. case "gitflags":
  116. c.GitFlags = value
  117. case "builddir":
  118. c.BuildDir = value
  119. case "editor":
  120. c.Editor = value
  121. case "editorflags":
  122. c.EditorFlags = value
  123. case "makepkg":
  124. c.MakepkgBin = value
  125. case "makepkgconf":
  126. c.MakepkgConf = value
  127. case "nomakepkgconf":
  128. c.MakepkgConf = ""
  129. case "pacman":
  130. c.PacmanBin = value
  131. case "git":
  132. c.GitBin = value
  133. case "gpg":
  134. c.GpgBin = value
  135. case "sudo":
  136. c.SudoBin = value
  137. case "sudoflags":
  138. c.SudoFlags = value
  139. case "requestsplitn":
  140. n, err := strconv.Atoi(value)
  141. if err == nil && n > 0 {
  142. c.RequestSplitN = n
  143. }
  144. case "sudoloop":
  145. c.SudoLoop = true
  146. case "nosudoloop":
  147. c.SudoLoop = false
  148. case "provides":
  149. c.Provides = true
  150. case "noprovides":
  151. c.Provides = false
  152. case "pgpfetch":
  153. c.PGPFetch = true
  154. case "nopgpfetch":
  155. c.PGPFetch = false
  156. case "upgrademenu":
  157. c.UpgradeMenu = true
  158. case "noupgrademenu":
  159. c.UpgradeMenu = false
  160. case "cleanmenu":
  161. c.CleanMenu = true
  162. case "nocleanmenu":
  163. c.CleanMenu = false
  164. case "diffmenu":
  165. c.DiffMenu = true
  166. case "nodiffmenu":
  167. c.DiffMenu = false
  168. case "editmenu":
  169. c.EditMenu = true
  170. case "noeditmenu":
  171. c.EditMenu = false
  172. case "useask":
  173. c.UseAsk = true
  174. case "nouseask":
  175. c.UseAsk = false
  176. case "combinedupgrade":
  177. c.CombinedUpgrade = true
  178. case "nocombinedupgrade":
  179. c.CombinedUpgrade = false
  180. case "a", "aur":
  181. c.Runtime.Mode = parser.ModeAUR
  182. case "repo":
  183. c.Runtime.Mode = parser.ModeRepo
  184. case "removemake":
  185. c.RemoveMake = "yes"
  186. case "noremovemake":
  187. c.RemoveMake = "no"
  188. case "askremovemake":
  189. c.RemoveMake = "ask"
  190. case "separatesources":
  191. c.SeparateSources = true
  192. case "noseparatesources":
  193. c.SeparateSources = false
  194. default:
  195. return false
  196. }
  197. return true
  198. }