From d7e2df280c9855521ed8b428cf2566daba61c7ee Mon Sep 17 00:00:00 2001 From: V1K1NGbg Date: Thu, 22 Aug 2024 17:49:00 -0300 Subject: Teal: convert luarocks.cmd.list --- src/luarocks/cmd/list.lua | 96 --------------------------------------- src/luarocks/cmd/list.tl | 113 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+), 96 deletions(-) delete mode 100644 src/luarocks/cmd/list.lua create mode 100644 src/luarocks/cmd/list.tl diff --git a/src/luarocks/cmd/list.lua b/src/luarocks/cmd/list.lua deleted file mode 100644 index 7b2682f6..00000000 --- a/src/luarocks/cmd/list.lua +++ /dev/null @@ -1,96 +0,0 @@ - ---- Module implementing the LuaRocks "list" command. --- Lists currently installed rocks. -local list = {} - -local search = require("luarocks.search") -local queries = require("luarocks.queries") -local vers = require("luarocks.core.vers") -local cfg = require("luarocks.core.cfg") -local util = require("luarocks.util") -local path = require("luarocks.path") - -function list.add_to_parser(parser) - local cmd = parser:command("list", "List currently installed rocks.", util.see_also()) - - cmd:argument("filter", "A substring of a rock name to filter by.") - :args("?") - cmd:argument("version", "Rock version to filter by.") - :args("?") - - cmd:flag("--outdated", "List only rocks for which there is a higher ".. - "version available in the rocks server.") - cmd:flag("--porcelain", "Produce machine-friendly output.") -end - -local function check_outdated(trees, query) - local results_installed = {} - for _, tree in ipairs(trees) do - search.local_manifest_search(results_installed, path.rocks_dir(tree), query) - end - local outdated = {} - for name, versions in util.sortedpairs(results_installed) do - versions = util.keys(versions) - table.sort(versions, vers.compare_versions) - local latest_installed = versions[1] - - local query_available = queries.new(name:lower()) - local results_available, err = search.search_repos(query_available) - - if results_available[name] then - local available_versions = util.keys(results_available[name]) - table.sort(available_versions, vers.compare_versions) - local latest_available = available_versions[1] - local latest_available_repo = results_available[name][latest_available][1].repo - - if vers.compare_versions(latest_available, latest_installed) then - table.insert(outdated, { name = name, installed = latest_installed, available = latest_available, repo = latest_available_repo }) - end - end - end - return outdated -end - -local function list_outdated(trees, query, porcelain) - util.title("Outdated rocks:", porcelain) - local outdated = check_outdated(trees, query) - for _, item in ipairs(outdated) do - if porcelain then - util.printout(item.name, item.installed, item.available, item.repo) - else - util.printout(item.name) - util.printout(" "..item.installed.." < "..item.available.." at "..item.repo) - util.printout() - end - end - return true -end - ---- Driver function for "list" command. --- @return boolean: True if succeeded, nil on errors. -function list.command(args) - local query = queries.new(args.filter and args.filter:lower() or "", args.namespace, args.version, true) - local trees = cfg.rocks_trees - local title = "Rocks installed for Lua "..cfg.lua_version - if args.tree then - trees = { args.tree } - title = title .. " in " .. args.tree - end - - if args.outdated then - return list_outdated(trees, query, args.porcelain) - end - - local results = {} - for _, tree in ipairs(trees) do - local ok, err, errcode = search.local_manifest_search(results, path.rocks_dir(tree), query) - if not ok and errcode ~= "open" then - util.warning(err) - end - end - util.title(title, args.porcelain) - search.print_result_tree(results, args.porcelain) - return true -end - -return list diff --git a/src/luarocks/cmd/list.tl b/src/luarocks/cmd/list.tl new file mode 100644 index 00000000..9a0948f0 --- /dev/null +++ b/src/luarocks/cmd/list.tl @@ -0,0 +1,113 @@ + +--- Module implementing the LuaRocks "list" command. +-- Lists currently installed rocks. +local record list + record Outdated + name: string + installed: string + available: string + repo: string + end +end + +local search = require("luarocks.search") +local queries = require("luarocks.queries") +local vers = require("luarocks.core.vers") +local cfg = require("luarocks.core.cfg") +local util = require("luarocks.util") +local path = require("luarocks.path") + +local type Outdated = list.Outdated + +local type Parser = require("luarocks.vendor.argparse").Parser + +local type Args = require("luarocks.core.types.args").Args + +local type Tree = require("luarocks.core.types.tree").Tree + +local type Query = require("luarocks.core.types.query").Query + +function list.add_to_parser(parser: Parser) + local cmd = parser:command("list", "List currently installed rocks.", util.see_also()) + + cmd:argument("filter", "A substring of a rock name to filter by.") + :args("?") + cmd:argument("version", "Rock version to filter by.") + :args("?") + + cmd:flag("--outdated", "List only rocks for which there is a higher ".. + "version available in the rocks server.") + cmd:flag("--porcelain", "Produce machine-friendly output.") +end + +local function check_outdated(trees: {string | Tree}, query: Query): {Outdated} + local results_installed = {} + for _, tree in ipairs(trees) do + search.local_manifest_search(results_installed, path.rocks_dir(tree), query) + end + local outdated: {Outdated} = {} + for name, versions in util.sortedpairs(results_installed) do + local versionsk = util.keys(versions) + table.sort(versionsk, vers.compare_versions) + local latest_installed = versionsk[1] + + local query_available = queries.new(name:lower()) + local results_available = search.search_repos(query_available) + + if results_available[name] then + local available_versions = util.keys(results_available[name]) + table.sort(available_versions, vers.compare_versions) + local latest_available = available_versions[1] + local latest_available_repo = results_available[name][latest_available][1].repo + + if vers.compare_versions(latest_available, latest_installed) then + table.insert(outdated, { name = name, installed = latest_installed, available = latest_available, repo = latest_available_repo }) + end + end + end + return outdated +end + +local function list_outdated(trees: {string | Tree}, query: Query, porcelain: boolean): boolean + util.title("Outdated rocks:", porcelain) + local outdated = check_outdated(trees, query) + for _, item in ipairs(outdated) do + if porcelain then + util.printout(item.name, item.installed, item.available, item.repo) + else + util.printout(item.name) + util.printout(" "..item.installed.." < "..item.available.." at "..item.repo) + util.printout() + end + end + return true +end + +--- Driver function for "list" command. +-- @return boolean: True if succeeded, nil on errors. +function list.command(args: Args): boolean, string + local query = queries.new(args.filter and args.filter:lower() or "", args.namespace, args.version, true) + local trees = cfg.rocks_trees + local title = "Rocks installed for Lua "..cfg.lua_version + if args.tree then + trees = { args.tree } + title = title .. " in " .. args.tree + end + + if args.outdated then + return list_outdated(trees, query, args.porcelain) + end + + local results = {} + for _, tree in ipairs(trees) do + local ok, err, errcode = search.local_manifest_search(results, path.rocks_dir(tree), query) + if not ok and errcode ~= "open" then + util.warning(err) + end + end + util.title(title, args.porcelain) + search.print_result_tree(results, args.porcelain) + return true +end + +return list -- cgit v1.2.3-55-g6feb