diff options
| author | V1K1NGbg <victor@ilchev.com> | 2024-08-22 17:49:03 -0300 |
|---|---|---|
| committer | Hisham Muhammad <hisham@gobolinux.org> | 2024-10-21 13:30:51 -0300 |
| commit | e835049ce5eb087462da8ffc540efa5ea481ee34 (patch) | |
| tree | f626b93a600fa25d46cf543e7c521d5eb8db29ed /src | |
| parent | 2fc32e9c0183b74875d2341b3c38ea8789cec4a5 (diff) | |
| download | luarocks-e835049ce5eb087462da8ffc540efa5ea481ee34.tar.gz luarocks-e835049ce5eb087462da8ffc540efa5ea481ee34.tar.bz2 luarocks-e835049ce5eb087462da8ffc540efa5ea481ee34.zip | |
Teal: convert luarocks.cmd.config
Diffstat (limited to 'src')
| -rw-r--r-- | src/luarocks/cmd/config.tl (renamed from src/luarocks/cmd/config.lua) | 100 |
1 files changed, 55 insertions, 45 deletions
diff --git a/src/luarocks/cmd/config.lua b/src/luarocks/cmd/config.tl index d67711a0..53e3be5e 100644 --- a/src/luarocks/cmd/config.lua +++ b/src/luarocks/cmd/config.tl | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | --- Module implementing the LuaRocks "config" command. | 1 | --- Module implementing the LuaRocks "config" command. |
| 2 | -- Queries information about the LuaRocks configuration. | 2 | -- Queries information about the LuaRocks configuration. |
| 3 | local config_cmd = {} | 3 | local record config_cmd |
| 4 | end | ||
| 4 | 5 | ||
| 5 | local persist = require("luarocks.persist") | 6 | local persist = require("luarocks.persist") |
| 6 | local config = require("luarocks.config") | 7 | local config = require("luarocks.config") |
| @@ -11,7 +12,13 @@ local dir = require("luarocks.dir") | |||
| 11 | local fs = require("luarocks.fs") | 12 | local fs = require("luarocks.fs") |
| 12 | local json = require("luarocks.vendor.dkjson") | 13 | local json = require("luarocks.vendor.dkjson") |
| 13 | 14 | ||
| 14 | function config_cmd.add_to_parser(parser) | 15 | local type Parser = require("luarocks.vendor.argparse").Parser |
| 16 | |||
| 17 | local type Args = require("luarocks.core.types.args").Args | ||
| 18 | |||
| 19 | local type PersistableTable = require("luarocks.core.types.persist").PersistableTable | ||
| 20 | |||
| 21 | function config_cmd.add_to_parser(parser: Parser) | ||
| 15 | local cmd = parser:command("config", [[ | 22 | local cmd = parser:command("config", [[ |
| 16 | Query information about the LuaRocks configuration. | 23 | Query information about the LuaRocks configuration. |
| 17 | 24 | ||
| @@ -74,7 +81,7 @@ Query information about the LuaRocks configuration. | |||
| 74 | cmd:flag("--rock-trees"):hidden(true) | 81 | cmd:flag("--rock-trees"):hidden(true) |
| 75 | end | 82 | end |
| 76 | 83 | ||
| 77 | local function config_file(conf) | 84 | local function config_file(conf: cfg.conf): boolean, string |
| 78 | print(dir.normalize(conf.file)) | 85 | print(dir.normalize(conf.file)) |
| 79 | if conf.found then | 86 | if conf.found then |
| 80 | return true | 87 | return true |
| @@ -83,8 +90,10 @@ local function config_file(conf) | |||
| 83 | end | 90 | end |
| 84 | end | 91 | end |
| 85 | 92 | ||
| 86 | local function traverse_varstring(var, tbl, fn, missing_parent) | 93 | local function traverse_varstring(var: string, tbl: PersistableTable, fn: function(PersistableTable, string | number): (boolean, string), missing_parent?: function(PersistableTable, string | number)): boolean, string |
| 87 | local k, r = var:match("^%[([0-9]+)%]%.(.*)$") | 94 | local k: string | number |
| 95 | local r: string | ||
| 96 | k, r = var:match("^%[([0-9]+)%]%.(.*)$") | ||
| 88 | if k then | 97 | if k then |
| 89 | k = tonumber(k) | 98 | k = tonumber(k) |
| 90 | else | 99 | else |
| @@ -100,27 +109,27 @@ local function traverse_varstring(var, tbl, fn, missing_parent) | |||
| 100 | end | 109 | end |
| 101 | 110 | ||
| 102 | if tbl[k] then | 111 | if tbl[k] then |
| 103 | return traverse_varstring(r, tbl[k], fn, missing_parent) | 112 | return traverse_varstring(r, tbl[k] as PersistableTable, fn, missing_parent) |
| 104 | else | 113 | else |
| 105 | return nil, "Unknown entry " .. k | 114 | return nil, "Unknown entry " .. tostring(k) |
| 106 | end | 115 | end |
| 107 | end | 116 | end |
| 108 | 117 | ||
| 109 | local i = var:match("^%[([0-9]+)%]$") | 118 | local i = var:match("^%[([0-9]+)%]$") |
| 110 | if i then | 119 | if i then |
| 111 | var = tonumber(i) | 120 | return fn(tbl, tonumber(i)) |
| 112 | end | 121 | end |
| 113 | 122 | ||
| 114 | return fn(tbl, var) | 123 | return fn(tbl, var) |
| 115 | end | 124 | end |
| 116 | 125 | ||
| 117 | local function print_json(value) | 126 | local function print_json(value: {string : any}): boolean |
| 118 | print(json.encode(value)) | 127 | print(json.encode(value)) |
| 119 | return true | 128 | return true |
| 120 | end | 129 | end |
| 121 | 130 | ||
| 122 | local function print_entry(var, tbl, is_json) | 131 | local function print_entry(var: string, tbl: PersistableTable, is_json: boolean): boolean, string |
| 123 | return traverse_varstring(var, tbl, function(t, k) | 132 | return traverse_varstring(var, tbl, function(t: PersistableTable, k: string): boolean, string |
| 124 | if not t[k] then | 133 | if not t[k] then |
| 125 | return nil, "Unknown entry " .. k | 134 | return nil, "Unknown entry " .. k |
| 126 | end | 135 | end |
| @@ -128,33 +137,34 @@ local function print_entry(var, tbl, is_json) | |||
| 128 | 137 | ||
| 129 | if not config.should_skip(var, val) then | 138 | if not config.should_skip(var, val) then |
| 130 | if is_json then | 139 | if is_json then |
| 131 | return print_json(val) | 140 | return print_json(val as {string : any}) |
| 132 | elseif type(val) == "string" then | 141 | elseif type(val) == "string" then |
| 133 | print(val) | 142 | print(val) |
| 134 | else | 143 | else |
| 135 | persist.write_value(io.stdout, val) | 144 | persist.write_value(io.stdout as persist.Writer, val) |
| 136 | end | 145 | end |
| 137 | end | 146 | end |
| 138 | return true | 147 | return true |
| 139 | end) | 148 | end) |
| 140 | end | 149 | end |
| 141 | 150 | ||
| 142 | local function infer_type(var) | 151 | local function infer_type(var: string): string |
| 143 | local typ | 152 | local typ: string |
| 144 | traverse_varstring(var, cfg, function(t, k) | 153 | traverse_varstring(var, cfg as PersistableTable, function(t: PersistableTable, k: string): boolean, string --! |
| 145 | if t[k] ~= nil then | 154 | if t[k] then |
| 146 | typ = type(t[k]) | 155 | typ = type(t[k]) |
| 147 | end | 156 | end |
| 148 | end) | 157 | end) |
| 149 | return typ | 158 | return typ |
| 150 | end | 159 | end |
| 151 | 160 | ||
| 152 | local function write_entries(keys, scope, do_unset) | 161 | local function write_entries(keys: {string: string}, scope: string, do_unset: boolean): boolean, string |
| 162 | local wrote: PersistableTable = {} | ||
| 153 | if scope == "project" and not cfg.config_files.project then | 163 | if scope == "project" and not cfg.config_files.project then |
| 154 | return nil, "Current directory is not part of a project. You may want to run `luarocks init`." | 164 | return nil, "Current directory is not part of a project. You may want to run `luarocks init`." |
| 155 | end | 165 | end |
| 156 | 166 | ||
| 157 | local file_name = cfg.config_files[scope].file | 167 | local file_name = (cfg.config_files as {string: {string: string}})[scope].file |
| 158 | 168 | ||
| 159 | local tbl, err = persist.load_config_file_if_basic(file_name, cfg) | 169 | local tbl, err = persist.load_config_file_if_basic(file_name, cfg) |
| 160 | if not tbl then | 170 | if not tbl then |
| @@ -162,12 +172,13 @@ local function write_entries(keys, scope, do_unset) | |||
| 162 | end | 172 | end |
| 163 | 173 | ||
| 164 | for var, val in util.sortedpairs(keys) do | 174 | for var, val in util.sortedpairs(keys) do |
| 165 | traverse_varstring(var, tbl, function(t, k) | 175 | traverse_varstring(var, tbl, function(t: PersistableTable, k: string | number): boolean, string |
| 166 | if do_unset then | 176 | if do_unset then |
| 167 | t[k] = nil | 177 | t[k] = nil |
| 178 | wrote[var] = "" | ||
| 168 | else | 179 | else |
| 169 | local typ = infer_type(var) | 180 | local typ = infer_type(var) |
| 170 | local v | 181 | local v: string | number | boolean |
| 171 | if typ == "number" and tonumber(val) then | 182 | if typ == "number" and tonumber(val) then |
| 172 | v = tonumber(val) | 183 | v = tonumber(val) |
| 173 | elseif typ == "boolean" and val == "true" then | 184 | elseif typ == "boolean" and val == "true" then |
| @@ -178,10 +189,10 @@ local function write_entries(keys, scope, do_unset) | |||
| 178 | v = val | 189 | v = val |
| 179 | end | 190 | end |
| 180 | t[k] = v | 191 | t[k] = v |
| 181 | keys[var] = v | 192 | wrote[var] = v |
| 182 | end | 193 | end |
| 183 | return true | 194 | return true |
| 184 | end, function(p, k) | 195 | end, function(p: PersistableTable, k: string | number) |
| 185 | p[k] = {} | 196 | p[k] = {} |
| 186 | end) | 197 | end) |
| 187 | end | 198 | end |
| @@ -194,11 +205,11 @@ local function write_entries(keys, scope, do_unset) | |||
| 194 | ok, err = persist.save_from_table(file_name, tbl) | 205 | ok, err = persist.save_from_table(file_name, tbl) |
| 195 | if ok then | 206 | if ok then |
| 196 | print(do_unset and "Removed" or "Wrote") | 207 | print(do_unset and "Removed" or "Wrote") |
| 197 | for var, val in util.sortedpairs(keys) do | 208 | for var, val in util.sortedpairs(wrote) do |
| 198 | if do_unset then | 209 | if do_unset then |
| 199 | print(("\t%s"):format(var)) | 210 | print(("\t%s"):format(var)) |
| 200 | else | 211 | else |
| 201 | if type(val) == "string" then | 212 | if val is string then |
| 202 | print(("\t%s = %q"):format(var, val)) | 213 | print(("\t%s = %q"):format(var, val)) |
| 203 | else | 214 | else |
| 204 | print(("\t%s = %s"):format(var, tostring(val))) | 215 | print(("\t%s = %s"):format(var, tostring(val))) |
| @@ -213,7 +224,7 @@ local function write_entries(keys, scope, do_unset) | |||
| 213 | end | 224 | end |
| 214 | end | 225 | end |
| 215 | 226 | ||
| 216 | local function get_scope(args) | 227 | local function get_scope(args: Args): string |
| 217 | return args.scope | 228 | return args.scope |
| 218 | or (args["local"] and "user") | 229 | or (args["local"] and "user") |
| 219 | or (args.project_tree and "project") | 230 | or (args.project_tree and "project") |
| @@ -222,7 +233,7 @@ local function get_scope(args) | |||
| 222 | or "user" | 233 | or "user" |
| 223 | end | 234 | end |
| 224 | 235 | ||
| 225 | local function report_on_lua_incdir_config(value, lua_version) | 236 | local function report_on_lua_incdir_config(value: string): boolean |
| 226 | local variables = { | 237 | local variables = { |
| 227 | ["LUA_DIR"] = cfg.variables.LUA_DIR, | 238 | ["LUA_DIR"] = cfg.variables.LUA_DIR, |
| 228 | ["LUA_BINDIR"] = cfg.variables.LUA_BINDIR, | 239 | ["LUA_BINDIR"] = cfg.variables.LUA_BINDIR, |
| @@ -231,7 +242,7 @@ local function report_on_lua_incdir_config(value, lua_version) | |||
| 231 | ["LUA"] = cfg.variables.LUA, | 242 | ["LUA"] = cfg.variables.LUA, |
| 232 | } | 243 | } |
| 233 | 244 | ||
| 234 | local ok, err = deps.check_lua_incdir(variables, lua_version) | 245 | local ok, err = deps.check_lua_incdir(variables) |
| 235 | if not ok then | 246 | if not ok then |
| 236 | util.printerr() | 247 | util.printerr() |
| 237 | util.warning((err:gsub(" You can use.*", ""))) | 248 | util.warning((err:gsub(" You can use.*", ""))) |
| @@ -239,7 +250,7 @@ local function report_on_lua_incdir_config(value, lua_version) | |||
| 239 | return ok | 250 | return ok |
| 240 | end | 251 | end |
| 241 | 252 | ||
| 242 | local function report_on_lua_libdir_config(value, lua_version) | 253 | local function report_on_lua_libdir_config(value: string): boolean |
| 243 | local variables = { | 254 | local variables = { |
| 244 | ["LUA_DIR"] = cfg.variables.LUA_DIR, | 255 | ["LUA_DIR"] = cfg.variables.LUA_DIR, |
| 245 | ["LUA_BINDIR"] = cfg.variables.LUA_BINDIR, | 256 | ["LUA_BINDIR"] = cfg.variables.LUA_BINDIR, |
| @@ -248,7 +259,7 @@ local function report_on_lua_libdir_config(value, lua_version) | |||
| 248 | ["LUA"] = cfg.variables.LUA, | 259 | ["LUA"] = cfg.variables.LUA, |
| 249 | } | 260 | } |
| 250 | 261 | ||
| 251 | local ok, err, _, err_files = deps.check_lua_libdir(variables, lua_version) | 262 | local ok, err, _, err_files = deps.check_lua_libdir(variables) |
| 252 | if not ok then | 263 | if not ok then |
| 253 | util.printerr() | 264 | util.printerr() |
| 254 | util.warning((err:gsub(" You can use.*", ""))) | 265 | util.warning((err:gsub(" You can use.*", ""))) |
| @@ -270,11 +281,10 @@ end | |||
| 270 | 281 | ||
| 271 | --- Driver function for "config" command. | 282 | --- Driver function for "config" command. |
| 272 | -- @return boolean: True if succeeded, nil on errors. | 283 | -- @return boolean: True if succeeded, nil on errors. |
| 273 | function config_cmd.command(args) | 284 | function config_cmd.command(args: Args): boolean, string |
| 274 | local lua_version = args.lua_version or cfg.lua_version | ||
| 275 | 285 | ||
| 276 | deps.check_lua_incdir(cfg.variables, lua_version) | 286 | deps.check_lua_incdir(cfg.variables) |
| 277 | deps.check_lua_libdir(cfg.variables, lua_version) | 287 | deps.check_lua_libdir(cfg.variables) |
| 278 | 288 | ||
| 279 | -- deprecated flags | 289 | -- deprecated flags |
| 280 | if args.lua_incdir then | 290 | if args.lua_incdir then |
| @@ -297,7 +307,7 @@ function config_cmd.command(args) | |||
| 297 | end | 307 | end |
| 298 | if args.rock_trees then | 308 | if args.rock_trees then |
| 299 | for _, tree in ipairs(cfg.rocks_trees) do | 309 | for _, tree in ipairs(cfg.rocks_trees) do |
| 300 | if type(tree) == "string" then | 310 | if tree is string then |
| 301 | util.printout(dir.normalize(tree)) | 311 | util.printout(dir.normalize(tree)) |
| 302 | else | 312 | else |
| 303 | local name = tree.name and "\t"..tree.name or "" | 313 | local name = tree.name and "\t"..tree.name or "" |
| @@ -313,7 +323,7 @@ function config_cmd.command(args) | |||
| 313 | return nil, "Current directory is not part of a project. You may want to run `luarocks init`." | 323 | return nil, "Current directory is not part of a project. You may want to run `luarocks init`." |
| 314 | end | 324 | end |
| 315 | 325 | ||
| 316 | local location = cfg.config_files[scope] | 326 | local location = (cfg.config_files as {string: {string: string}})[scope] |
| 317 | if (not location) or (not location.file) then | 327 | if (not location) or (not location.file) then |
| 318 | return nil, "could not get config file location for " .. tostring(scope) .. " scope" | 328 | return nil, "could not get config file location for " .. tostring(scope) .. " scope" |
| 319 | end | 329 | end |
| @@ -336,13 +346,13 @@ function config_cmd.command(args) | |||
| 336 | ["variables.LUA"] = cfg.variables.LUA, | 346 | ["variables.LUA"] = cfg.variables.LUA, |
| 337 | } | 347 | } |
| 338 | if args.lua_version then | 348 | if args.lua_version then |
| 339 | local prefix = dir.dir_name(cfg.config_files[scope].file) | 349 | local prefix = dir.dir_name((cfg.config_files as {string: {string: string}})[scope].file) |
| 340 | persist.save_default_lua_version(prefix, args.lua_version) | 350 | persist.save_default_lua_version(prefix, args.lua_version) |
| 341 | end | 351 | end |
| 342 | local ok, err = write_entries(keys, scope, args.unset) | 352 | local ok, err = write_entries(keys, scope, args.unset) |
| 343 | if ok then | 353 | if ok then |
| 344 | local inc_ok = report_on_lua_incdir_config(cfg.variables.LUA_INCDIR, lua_version) | 354 | local inc_ok = report_on_lua_incdir_config(cfg.variables.LUA_INCDIR) |
| 345 | local lib_ok = ok and report_on_lua_libdir_config(cfg.variables.LUA_LIBDIR, lua_version) | 355 | local lib_ok = ok and report_on_lua_libdir_config(cfg.variables.LUA_LIBDIR) |
| 346 | if not (inc_ok and lib_ok) then | 356 | if not (inc_ok and lib_ok) then |
| 347 | warn_bad_c_config() | 357 | warn_bad_c_config() |
| 348 | end | 358 | end |
| @@ -359,16 +369,16 @@ function config_cmd.command(args) | |||
| 359 | if args.value or args.unset then | 369 | if args.value or args.unset then |
| 360 | local scope = get_scope(args) | 370 | local scope = get_scope(args) |
| 361 | 371 | ||
| 362 | local ok, err = write_entries({ [args.key] = args.value or args.unset }, scope, args.unset) | 372 | local ok, err = write_entries({ [args.key] = args.value or "" }, scope, args.unset) |
| 363 | 373 | ||
| 364 | if ok then | 374 | if ok then |
| 365 | if args.key == "variables.LUA_INCDIR" then | 375 | if args.key == "variables.LUA_INCDIR" then |
| 366 | local ok = report_on_lua_incdir_config(args.value, lua_version) | 376 | local ok = report_on_lua_incdir_config(args.value) |
| 367 | if not ok then | 377 | if not ok then |
| 368 | warn_bad_c_config() | 378 | warn_bad_c_config() |
| 369 | end | 379 | end |
| 370 | elseif args.key == "variables.LUA_LIBDIR" then | 380 | elseif args.key == "variables.LUA_LIBDIR" then |
| 371 | local ok = report_on_lua_libdir_config(args.value, lua_version) | 381 | local ok = report_on_lua_libdir_config(args.value) |
| 372 | if not ok then | 382 | if not ok then |
| 373 | warn_bad_c_config() | 383 | warn_bad_c_config() |
| 374 | end | 384 | end |
| @@ -377,14 +387,14 @@ function config_cmd.command(args) | |||
| 377 | 387 | ||
| 378 | return ok, err | 388 | return ok, err |
| 379 | else | 389 | else |
| 380 | return print_entry(args.key, cfg, args.json) | 390 | return print_entry(args.key, cfg as PersistableTable, args.json) |
| 381 | end | 391 | end |
| 382 | end | 392 | end |
| 383 | 393 | ||
| 384 | if args.json then | 394 | if args.json then |
| 385 | return print_json(config.get_config_for_display(cfg)) | 395 | return print_json(config.get_config_for_display(cfg as PersistableTable) as {string : any}) |
| 386 | else | 396 | else |
| 387 | print(config.to_string(cfg)) | 397 | print(config.to_string(cfg as PersistableTable)) |
| 388 | return true | 398 | return true |
| 389 | end | 399 | end |
| 390 | end | 400 | end |
