diff options
| author | V1K1NGbg <victor@ilchev.com> | 2024-08-22 17:49:09 -0300 |
|---|---|---|
| committer | Hisham Muhammad <hisham@gobolinux.org> | 2024-10-21 13:30:51 -0300 |
| commit | 259e0ca4855d775dc8ba61f6d30b1cc3b493ae61 (patch) | |
| tree | 1ac5e0c86bbe0600217cd578379469ca9e77c130 | |
| parent | 49f174265944b326f183ed6fb7ffc15aeb32b815 (diff) | |
| download | luarocks-259e0ca4855d775dc8ba61f6d30b1cc3b493ae61.tar.gz luarocks-259e0ca4855d775dc8ba61f6d30b1cc3b493ae61.tar.bz2 luarocks-259e0ca4855d775dc8ba61f6d30b1cc3b493ae61.zip | |
Teal: convert luarocks.cmd
| -rw-r--r-- | src/luarocks/cmd.tl (renamed from src/luarocks/cmd.lua) | 144 |
1 files changed, 85 insertions, 59 deletions
diff --git a/src/luarocks/cmd.lua b/src/luarocks/cmd.tl index 7710dc68..a3d2970f 100644 --- a/src/luarocks/cmd.lua +++ b/src/luarocks/cmd.tl | |||
| @@ -1,6 +1,16 @@ | |||
| 1 | 1 | ||
| 2 | --- Functions for command-line scripts. | 2 | --- Functions for command-line scripts. |
| 3 | local cmd = {} | 3 | local record cmd |
| 4 | errorcodes: {string: integer} | ||
| 5 | |||
| 6 | record Module | ||
| 7 | add_to_parser: function(Parser) | ||
| 8 | command: function(Args, ...: string): boolean, string, integer | ||
| 9 | needs_lock: function(Args): boolean | ||
| 10 | help: string | ||
| 11 | help_summary: string | ||
| 12 | end | ||
| 13 | end | ||
| 4 | 14 | ||
| 5 | local manif = require("luarocks.manif") | 15 | local manif = require("luarocks.manif") |
| 6 | local config = require("luarocks.config") | 16 | local config = require("luarocks.config") |
| @@ -12,10 +22,19 @@ local fun = require("luarocks.fun") | |||
| 12 | local fs = require("luarocks.fs") | 22 | local fs = require("luarocks.fs") |
| 13 | local argparse = require("luarocks.vendor.argparse") | 23 | local argparse = require("luarocks.vendor.argparse") |
| 14 | 24 | ||
| 15 | local unpack = table.unpack or unpack | 25 | local type Tree = require("luarocks.core.types.tree").Tree |
| 16 | local pack = table.pack or function(...) return { n = select("#", ...), ... } end | 26 | |
| 27 | local type Parser = argparse.Parser | ||
| 28 | |||
| 29 | local type Args = require("luarocks.core.types.args").Args | ||
| 30 | |||
| 31 | local type Module = cmd.Module | ||
| 17 | 32 | ||
| 18 | local hc_ok, hardcoded = pcall(require, "luarocks.core.hardcoded") | 33 | local type PersistableTable = require("luarocks.core.types.persist").PersistableTable |
| 34 | |||
| 35 | local type Config = cfg | ||
| 36 | |||
| 37 | local hc_ok, hardcoded: boolean, {string: string} = pcall(require, "luarocks.core.hardcoded") | ||
| 19 | if not hc_ok then | 38 | if not hc_ok then |
| 20 | hardcoded = {} | 39 | hardcoded = {} |
| 21 | end | 40 | end |
| @@ -44,19 +63,20 @@ local function check_popen() | |||
| 44 | end | 63 | end |
| 45 | end | 64 | end |
| 46 | 65 | ||
| 47 | local process_tree_args | 66 | local process_tree_args: function(Args, string): boolean, string |
| 48 | do | 67 | do |
| 49 | local function replace_tree(args, root, tree) | 68 | local function replace_tree(args: Args, root: string, tree?: Tree) |
| 50 | root = dir.normalize(root) | 69 | root = dir.normalize(root) |
| 51 | args.tree = root | 70 | args.tree = root |
| 52 | path.use_tree(tree or root) | 71 | path.use_tree(tree or root) |
| 53 | end | 72 | end |
| 54 | 73 | ||
| 55 | local function strip_trailing_slashes() | 74 | local function strip_trailing_slashes() |
| 56 | if type(cfg.root_dir) == "string" then | 75 | local cfg_root_dir = cfg.root_dir |
| 57 | cfg.root_dir = cfg.root_dir:gsub("/+$", "") | 76 | if cfg_root_dir is string then |
| 77 | cfg.root_dir = (cfg.root_dir as string):gsub("/+$", "") | ||
| 58 | else | 78 | else |
| 59 | cfg.root_dir.root = cfg.root_dir.root:gsub("/+$", "") | 79 | (cfg.root_dir as Tree).root = (cfg.root_dir as Tree).root:gsub("/+$", "") |
| 60 | end | 80 | end |
| 61 | cfg.rocks_dir = cfg.rocks_dir:gsub("/+$", "") | 81 | cfg.rocks_dir = cfg.rocks_dir:gsub("/+$", "") |
| 62 | cfg.deploy_bin_dir = cfg.deploy_bin_dir:gsub("/+$", "") | 82 | cfg.deploy_bin_dir = cfg.deploy_bin_dir:gsub("/+$", "") |
| @@ -64,9 +84,9 @@ do | |||
| 64 | cfg.deploy_lib_dir = cfg.deploy_lib_dir:gsub("/+$", "") | 84 | cfg.deploy_lib_dir = cfg.deploy_lib_dir:gsub("/+$", "") |
| 65 | end | 85 | end |
| 66 | 86 | ||
| 67 | local function set_named_tree(args, name) | 87 | local function set_named_tree(args: Args, name: string): boolean, string |
| 68 | for _, tree in ipairs(cfg.rocks_trees) do | 88 | for _, tree in ipairs(cfg.rocks_trees) do |
| 69 | if type(tree) == "table" and name == tree.name then | 89 | if tree is Tree and name == tree.name then |
| 70 | if not tree.root then | 90 | if not tree.root then |
| 71 | return nil, "Configuration error: tree '"..tree.name.."' has no 'root' field." | 91 | return nil, "Configuration error: tree '"..tree.name.."' has no 'root' field." |
| 72 | end | 92 | end |
| @@ -77,7 +97,7 @@ do | |||
| 77 | return false | 97 | return false |
| 78 | end | 98 | end |
| 79 | 99 | ||
| 80 | process_tree_args = function(args, project_dir) | 100 | process_tree_args = function(args: Args, project_dir: string): boolean, string |
| 81 | 101 | ||
| 82 | if args.global then | 102 | if args.global then |
| 83 | local ok, err = set_named_tree(args, "system") | 103 | local ok, err = set_named_tree(args, "system") |
| @@ -133,16 +153,22 @@ do | |||
| 133 | end | 153 | end |
| 134 | end | 154 | end |
| 135 | 155 | ||
| 136 | local function process_server_args(args) | 156 | local function process_server_args(args: Args): boolean, string |
| 137 | if args.server then | 157 | if args.server then |
| 138 | local protocol, pathname = dir.split_url(args.server) | 158 | local protocol, pathname = dir.split_url(args.server) |
| 139 | table.insert(cfg.rocks_servers, 1, protocol.."://"..pathname) | 159 | table.insert(cfg.rocks_servers, 1, protocol.."://"..pathname) |
| 140 | end | 160 | end |
| 141 | 161 | ||
| 142 | if args.dev then | 162 | if args.dev then |
| 143 | local append_dev = function(s) return dir.path(s, "dev") end | 163 | for i, server in ipairs(cfg.rocks_servers) do |
| 144 | local dev_servers = fun.traverse(cfg.rocks_servers, append_dev) | 164 | if server is string then |
| 145 | cfg.rocks_servers = fun.concat(dev_servers, cfg.rocks_servers) | 165 | cfg.rocks_servers[i] = dir.path(server, "dev") |
| 166 | else | ||
| 167 | for j, mirror in ipairs(server) do | ||
| 168 | server[j] = dir.path(mirror, "dev") | ||
| 169 | end | ||
| 170 | end | ||
| 171 | end | ||
| 146 | end | 172 | end |
| 147 | 173 | ||
| 148 | if args.only_server then | 174 | if args.only_server then |
| @@ -158,7 +184,7 @@ local function process_server_args(args) | |||
| 158 | return true | 184 | return true |
| 159 | end | 185 | end |
| 160 | 186 | ||
| 161 | local function error_handler(err) | 187 | local function error_handler(err: string): string |
| 162 | if not debug then | 188 | if not debug then |
| 163 | return err | 189 | return err |
| 164 | end | 190 | end |
| @@ -179,8 +205,8 @@ end | |||
| 179 | --- Display an error message and exit. | 205 | --- Display an error message and exit. |
| 180 | -- @param message string: The error message. | 206 | -- @param message string: The error message. |
| 181 | -- @param exitcode number: the exitcode to use | 207 | -- @param exitcode number: the exitcode to use |
| 182 | local function die(message, exitcode) | 208 | local function die(message: string, exitcode?: integer) |
| 183 | assert(type(message) == "string", "bad error, expected string, got: " .. type(message)) | 209 | assert(type(message) == "string", "bad error, expected string, got: " .. type(message)) --! |
| 184 | assert(exitcode == nil or type(exitcode) == "number", "bad error, expected number, got: " .. type(exitcode) .. " - " .. tostring(exitcode)) | 210 | assert(exitcode == nil or type(exitcode) == "number", "bad error, expected number, got: " .. type(exitcode) .. " - " .. tostring(exitcode)) |
| 185 | util.printerr("\nError: "..message) | 211 | util.printerr("\nError: "..message) |
| 186 | 212 | ||
| @@ -193,7 +219,7 @@ local function die(message, exitcode) | |||
| 193 | os.exit(exitcode or cmd.errorcodes.UNSPECIFIED) | 219 | os.exit(exitcode or cmd.errorcodes.UNSPECIFIED) |
| 194 | end | 220 | end |
| 195 | 221 | ||
| 196 | local function search_lua(lua_version, verbose, search_at) | 222 | local function search_lua(lua_version: string, verbose?: string, search_at?: string): {string : string}, string |
| 197 | if search_at then | 223 | if search_at then |
| 198 | return util.find_lua(search_at, lua_version, verbose) | 224 | return util.find_lua(search_at, lua_version, verbose) |
| 199 | end | 225 | end |
| @@ -215,11 +241,11 @@ local function search_lua(lua_version, verbose, search_at) | |||
| 215 | (verbose and " Tried:\n" .. table.concat(all_tried, "\n") or "") | 241 | (verbose and " Tried:\n" .. table.concat(all_tried, "\n") or "") |
| 216 | end | 242 | end |
| 217 | 243 | ||
| 218 | local init_config | 244 | local init_config: function(Args): boolean, string |
| 219 | do | 245 | do |
| 220 | local detect_config_via_args | 246 | local detect_config_via_args: function(Args): {string : string} |
| 221 | do | 247 | do |
| 222 | local function find_project_dir(project_tree) | 248 | local function find_project_dir(project_tree: string): string, boolean |
| 223 | if project_tree then | 249 | if project_tree then |
| 224 | return project_tree:gsub("[/\\][^/\\]+$", ""), true | 250 | return project_tree:gsub("[/\\][^/\\]+$", ""), true |
| 225 | else | 251 | else |
| @@ -236,12 +262,12 @@ do | |||
| 236 | return nil | 262 | return nil |
| 237 | end | 263 | end |
| 238 | 264 | ||
| 239 | local function find_default_lua_version(args, project_dir) | 265 | local function find_default_lua_version(args: Args, project_dir: string): string |
| 240 | if hardcoded.FORCE_CONFIG then | 266 | if hardcoded.FORCE_CONFIG then |
| 241 | return nil | 267 | return nil |
| 242 | end | 268 | end |
| 243 | 269 | ||
| 244 | local dirs = {} | 270 | local dirs: {string} = {} |
| 245 | if project_dir then | 271 | if project_dir then |
| 246 | table.insert(dirs, dir.path(project_dir, ".luarocks")) | 272 | table.insert(dirs, dir.path(project_dir, ".luarocks")) |
| 247 | end | 273 | end |
| @@ -251,10 +277,10 @@ do | |||
| 251 | table.insert(dirs, cfg.sysconfdir) | 277 | table.insert(dirs, cfg.sysconfdir) |
| 252 | for _, d in ipairs(dirs) do | 278 | for _, d in ipairs(dirs) do |
| 253 | local f = dir.path(d, "default-lua-version.lua") | 279 | local f = dir.path(d, "default-lua-version.lua") |
| 254 | local mod, err = loadfile(f, "t") | 280 | local mod, _ = loadfile(f, "t") |
| 255 | if mod then | 281 | if mod then |
| 256 | local pok, ver = pcall(mod) | 282 | local pok, ver = pcall(mod) |
| 257 | if pok and type(ver) == "string" and ver:match("%d+.%d+") then | 283 | if pok and ver is string and ver:match("%d+.%d+") then |
| 258 | if args.verbose then | 284 | if args.verbose then |
| 259 | util.printout("Defaulting to Lua " .. ver .. " based on " .. f .. " ...") | 285 | util.printout("Defaulting to Lua " .. ver .. " based on " .. f .. " ...") |
| 260 | end | 286 | end |
| @@ -265,15 +291,15 @@ do | |||
| 265 | return nil | 291 | return nil |
| 266 | end | 292 | end |
| 267 | 293 | ||
| 268 | local function find_version_from_config(dirname) | 294 | local function find_version_from_config(dirname: string): string |
| 269 | return fun.find(util.lua_versions("descending"), function(v) | 295 | return fun.find(util.lua_versions("descending"), function(v: string): string |
| 270 | if util.exists(dir.path(dirname, ".luarocks", "config-"..v..".lua")) then | 296 | if util.exists(dir.path(dirname, ".luarocks", "config-"..v..".lua")) then |
| 271 | return v | 297 | return v |
| 272 | end | 298 | end |
| 273 | end) | 299 | end) |
| 274 | end | 300 | end |
| 275 | 301 | ||
| 276 | local function detect_lua_via_args(args, project_dir) | 302 | local function detect_lua_via_args(args: Args, project_dir: string): {string : string} |
| 277 | local lua_version = args.lua_version | 303 | local lua_version = args.lua_version |
| 278 | or find_default_lua_version(args, project_dir) | 304 | or find_default_lua_version(args, project_dir) |
| 279 | or (project_dir and find_version_from_config(project_dir)) | 305 | or (project_dir and find_version_from_config(project_dir)) |
| @@ -302,8 +328,8 @@ do | |||
| 302 | return {} | 328 | return {} |
| 303 | end | 329 | end |
| 304 | 330 | ||
| 305 | detect_config_via_args = function(args) | 331 | detect_config_via_args = function(args: Args): {string : string} |
| 306 | local project_dir, given | 332 | local project_dir, given: string, boolean |
| 307 | if not args.no_project then | 333 | if not args.no_project then |
| 308 | project_dir, given = find_project_dir(args.project_tree) | 334 | project_dir, given = find_project_dir(args.project_tree) |
| 309 | end | 335 | end |
| @@ -323,7 +349,7 @@ do | |||
| 323 | end | 349 | end |
| 324 | end | 350 | end |
| 325 | 351 | ||
| 326 | init_config = function(args) | 352 | init_config = function(args: Args): boolean, string |
| 327 | local detected = detect_config_via_args(args) | 353 | local detected = detect_config_via_args(args) |
| 328 | 354 | ||
| 329 | local ok, err = cfg.init(detected, util.warning) | 355 | local ok, err = cfg.init(detected, util.warning) |
| @@ -346,11 +372,11 @@ local lua_example = package.config:sub(1, 1) == "\\" | |||
| 346 | and "<d:\\path\\lua.exe>" | 372 | and "<d:\\path\\lua.exe>" |
| 347 | or "</path/lua>" | 373 | or "</path/lua>" |
| 348 | 374 | ||
| 349 | local function show_status(file, status, err) | 375 | local function show_status(file: string, status: boolean, err?: string): string |
| 350 | return (file and file .. " " or "") .. (status and "(ok)" or ("(" .. (err or "not found") ..")")) | 376 | return (file and file .. " " or "") .. (status and "(ok)" or ("(" .. (err or "not found") ..")")) |
| 351 | end | 377 | end |
| 352 | 378 | ||
| 353 | local function use_to_fix_location(key, what) | 379 | local function use_to_fix_location(key: string, what?: string): string |
| 354 | local buf = " ****************************************\n" | 380 | local buf = " ****************************************\n" |
| 355 | buf = buf .. " Use the command\n\n" | 381 | buf = buf .. " Use the command\n\n" |
| 356 | buf = buf .. " luarocks config " .. key .. " " .. (what or "<dir>") .. "\n\n" | 382 | buf = buf .. " luarocks config " .. key .. " " .. (what or "<dir>") .. "\n\n" |
| @@ -359,7 +385,7 @@ local function use_to_fix_location(key, what) | |||
| 359 | return buf | 385 | return buf |
| 360 | end | 386 | end |
| 361 | 387 | ||
| 362 | local function get_config_text(cfg) -- luacheck: ignore 431 | 388 | local function get_config_text(cfg: Config): string -- luacheck: ignore 431 |
| 363 | local deps = require("luarocks.deps") | 389 | local deps = require("luarocks.deps") |
| 364 | 390 | ||
| 365 | local libdir_ok = deps.check_lua_libdir(cfg.variables) | 391 | local libdir_ok = deps.check_lua_libdir(cfg.variables) |
| @@ -398,7 +424,7 @@ local function get_config_text(cfg) -- luacheck: ignore 431 | |||
| 398 | end | 424 | end |
| 399 | buf = buf.."\n Rocks trees in use: \n" | 425 | buf = buf.."\n Rocks trees in use: \n" |
| 400 | for _, tree in ipairs(cfg.rocks_trees) do | 426 | for _, tree in ipairs(cfg.rocks_trees) do |
| 401 | if type(tree) == "string" then | 427 | if tree is string then |
| 402 | buf = buf.." "..fs.absolute_name(tree) | 428 | buf = buf.." "..fs.absolute_name(tree) |
| 403 | else | 429 | else |
| 404 | local name = tree.name and " (\""..tree.name.."\")" or "" | 430 | local name = tree.name and " (\""..tree.name.."\")" or "" |
| @@ -410,7 +436,7 @@ local function get_config_text(cfg) -- luacheck: ignore 431 | |||
| 410 | return buf | 436 | return buf |
| 411 | end | 437 | end |
| 412 | 438 | ||
| 413 | local function get_parser(description, cmd_modules) | 439 | local function get_parser(description: string, cmd_modules: {string: Module}): Parser |
| 414 | local basename = dir.base_name(program) | 440 | local basename = dir.base_name(program) |
| 415 | local parser = argparse( | 441 | local parser = argparse( |
| 416 | basename, "LuaRocks "..cfg.program_version..", the Lua package manager\n\n".. | 442 | basename, "LuaRocks "..cfg.program_version..", the Lua package manager\n\n".. |
| @@ -477,7 +503,7 @@ Enabling completion for Fish: | |||
| 477 | :argname("<prefix>") | 503 | :argname("<prefix>") |
| 478 | parser:option("--lua-version", "Which Lua version to use.") | 504 | parser:option("--lua-version", "Which Lua version to use.") |
| 479 | :argname("<ver>") | 505 | :argname("<ver>") |
| 480 | :convert(function(s) return (s:match("^%d+%.%d+$")) end) | 506 | :convert(function(s: string): string return (s:match("^%d+%.%d+$")) end) |
| 481 | parser:option("--tree", "Which tree to operate on.") | 507 | parser:option("--tree", "Which tree to operate on.") |
| 482 | :hidden_name("--to") | 508 | :hidden_name("--to") |
| 483 | parser:flag("--local", "Use the tree in the user's home directory.\n".. | 509 | parser:flag("--local", "Use the tree in the user's home directory.\n".. |
| @@ -503,7 +529,7 @@ Enabling completion for Fish: | |||
| 503 | return parser | 529 | return parser |
| 504 | end | 530 | end |
| 505 | 531 | ||
| 506 | local function get_first_arg() | 532 | local function get_first_arg(): string |
| 507 | if not arg then | 533 | if not arg then |
| 508 | return | 534 | return |
| 509 | end | 535 | end |
| @@ -524,7 +550,7 @@ end | |||
| 524 | -- @param commands table: contains the loaded modules representing commands. | 550 | -- @param commands table: contains the loaded modules representing commands. |
| 525 | -- @param external_namespace string: where to look for external commands. | 551 | -- @param external_namespace string: where to look for external commands. |
| 526 | -- @param ... string: Arguments given on the command-line. | 552 | -- @param ... string: Arguments given on the command-line. |
| 527 | function cmd.run_command(description, commands, external_namespace, ...) | 553 | function cmd.run_command(description: string, commands: {string: string}, external_namespace: string, ...: string) |
| 528 | 554 | ||
| 529 | check_popen() | 555 | check_popen() |
| 530 | 556 | ||
| @@ -539,14 +565,14 @@ function cmd.run_command(description, commands, external_namespace, ...) | |||
| 539 | end | 565 | end |
| 540 | end | 566 | end |
| 541 | 567 | ||
| 542 | local cmd_modules = {} | 568 | local cmd_modules: {string: Module} = {} |
| 543 | for name, module in pairs(commands) do | 569 | for name, module in pairs(commands) do |
| 544 | local pok, mod = pcall(require, module) | 570 | local pok, mod = pcall(require, module) as (boolean, Module) |
| 545 | if pok and type(mod) == "table" then | 571 | if pok and mod is Module then |
| 546 | local original_command = mod.command | 572 | local original_command = mod.command |
| 547 | if original_command then | 573 | if original_command then |
| 548 | if not mod.add_to_parser then | 574 | if not mod.add_to_parser then |
| 549 | mod.add_to_parser = function(parser) | 575 | mod.add_to_parser = function(parser: Parser) |
| 550 | parser:command(name, mod.help, util.see_also()) | 576 | parser:command(name, mod.help, util.see_also()) |
| 551 | :summary(mod.help_summary) | 577 | :summary(mod.help_summary) |
| 552 | :handle_options(false) | 578 | :handle_options(false) |
| @@ -554,8 +580,8 @@ function cmd.run_command(description, commands, external_namespace, ...) | |||
| 554 | :args("*") | 580 | :args("*") |
| 555 | end | 581 | end |
| 556 | 582 | ||
| 557 | mod.command = function(args) | 583 | mod.command = function(args: Args): boolean, string, integer |
| 558 | return original_command(args, unpack(args.input)) | 584 | return original_command(args, table.unpack(args.input)) |
| 559 | end | 585 | end |
| 560 | end | 586 | end |
| 561 | cmd_modules[name] = mod | 587 | cmd_modules[name] = mod |
| @@ -563,13 +589,13 @@ function cmd.run_command(description, commands, external_namespace, ...) | |||
| 563 | util.warning("command module " .. module .. " does not implement command(), skipping") | 589 | util.warning("command module " .. module .. " does not implement command(), skipping") |
| 564 | end | 590 | end |
| 565 | else | 591 | else |
| 566 | util.warning("failed to load command module " .. module .. ": " .. mod) | 592 | util.warning("failed to load command module " .. module .. ": " .. tostring(mod)) |
| 567 | end | 593 | end |
| 568 | end | 594 | end |
| 569 | 595 | ||
| 570 | local function process_cmdline_vars(...) | 596 | local function process_cmdline_vars(...: string): table.PackTable<string>, {string : string} |
| 571 | local args = pack(...) | 597 | local args = table.pack(...) |
| 572 | local cmdline_vars = {} | 598 | local cmdline_vars: {string: string} = {} |
| 573 | local last = args.n | 599 | local last = args.n |
| 574 | for i = 1, args.n do | 600 | for i = 1, args.n do |
| 575 | if args[i] == "--" then | 601 | if args[i] == "--" then |
| @@ -593,9 +619,9 @@ function cmd.run_command(description, commands, external_namespace, ...) | |||
| 593 | return args, cmdline_vars | 619 | return args, cmdline_vars |
| 594 | end | 620 | end |
| 595 | 621 | ||
| 596 | local args, cmdline_vars = process_cmdline_vars(...) | 622 | local cmdline_args, cmdline_vars = process_cmdline_vars(...) |
| 597 | local parser = get_parser(description, cmd_modules) | 623 | local parser = get_parser(description, cmd_modules) |
| 598 | args = parser:parse(args) | 624 | local args: Args = parser:parse(cmdline_args) as Args |
| 599 | 625 | ||
| 600 | -- Compatibility for old flag | 626 | -- Compatibility for old flag |
| 601 | if args.nodeps then | 627 | if args.nodeps then |
| @@ -627,9 +653,9 @@ function cmd.run_command(description, commands, external_namespace, ...) | |||
| 627 | 653 | ||
| 628 | -- if the Lua interpreter wasn't explicitly found before cfg.init, | 654 | -- if the Lua interpreter wasn't explicitly found before cfg.init, |
| 629 | -- try again now. | 655 | -- try again now. |
| 630 | local tried | 656 | local tried: string |
| 631 | if not lua_found then | 657 | if not lua_found then |
| 632 | local detected | 658 | local detected: {string : string} |
| 633 | detected, tried = search_lua(cfg.lua_version, args.verbose, cfg.variables.LUA_DIR) | 659 | detected, tried = search_lua(cfg.lua_version, args.verbose, cfg.variables.LUA_DIR) |
| 634 | if detected then | 660 | if detected then |
| 635 | lua_found = true | 661 | lua_found = true |
| @@ -683,7 +709,7 @@ function cmd.run_command(description, commands, external_namespace, ...) | |||
| 683 | print(("-"):rep(79)) | 709 | print(("-"):rep(79)) |
| 684 | print("Current configuration:") | 710 | print("Current configuration:") |
| 685 | print(("-"):rep(79)) | 711 | print(("-"):rep(79)) |
| 686 | print(config.to_string(cfg)) | 712 | print(config.to_string(cfg as PersistableTable)) |
| 687 | print(("-"):rep(79)) | 713 | print(("-"):rep(79)) |
| 688 | fs.verbose() | 714 | fs.verbose() |
| 689 | end | 715 | end |
| @@ -741,7 +767,7 @@ function cmd.run_command(description, commands, external_namespace, ...) | |||
| 741 | 767 | ||
| 742 | local cmd_mod = cmd_modules[args.command] | 768 | local cmd_mod = cmd_modules[args.command] |
| 743 | 769 | ||
| 744 | local lock | 770 | local lock: fs.Lock |
| 745 | if cmd_mod.needs_lock and cmd_mod.needs_lock(args) then | 771 | if cmd_mod.needs_lock and cmd_mod.needs_lock(args) then |
| 746 | local ok, err = fs.check_command_permissions(args) | 772 | local ok, err = fs.check_command_permissions(args) |
| 747 | if not ok then | 773 | if not ok then |
| @@ -762,7 +788,7 @@ function cmd.run_command(description, commands, external_namespace, ...) | |||
| 762 | end | 788 | end |
| 763 | end | 789 | end |
| 764 | 790 | ||
| 765 | local call_ok, ok, err, exitcode = xpcall(function() | 791 | local call_ok, ok, err, exitcode = xpcall(function(): boolean, string, integer |
| 766 | return cmd_mod.command(args) | 792 | return cmd_mod.command(args) |
| 767 | end, error_handler) | 793 | end, error_handler) |
| 768 | 794 | ||
| @@ -771,7 +797,7 @@ function cmd.run_command(description, commands, external_namespace, ...) | |||
| 771 | end | 797 | end |
| 772 | 798 | ||
| 773 | if not call_ok then | 799 | if not call_ok then |
| 774 | die(ok, cmd.errorcodes.CRASH) | 800 | die(tostring(ok), cmd.errorcodes.CRASH) |
| 775 | elseif not ok then | 801 | elseif not ok then |
| 776 | die(err, exitcode) | 802 | die(err, exitcode) |
| 777 | end | 803 | end |
