args.go 5.8 KB

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