diff --git a/src/luarocks/list.lua b/src/luarocks/list.lua index 8affc52..2efcfdd 100644 --- a/src/luarocks/list.lua +++ b/src/luarocks/list.lua @@ -4,6 +4,9 @@ --module("luarocks.list", package.seeall) local list = {} package.loaded["luarocks.list"] = list + +local flags, filter, version, query, trees + local search = require("luarocks.search") local deps = require("luarocks.deps") @@ -22,7 +25,9 @@ list.help = [[ --porcelain Produce machine-friendly output. ]] -local function check_outdated(trees, query) +---Searches for outdated packages in the given tree +-- @return table,table,table,string: results, trees, flags, version +local function get_outdated() local results_installed = {} for _, tree in ipairs(trees) do search.manifest_search(results_installed, path.rocks_dir(tree), query) @@ -48,12 +53,14 @@ local function check_outdated(trees, query) end end end - return outdated + return outdated, trees, flags, version end -local function list_outdated(trees, query, porcelain) +--- Outputs the outdated packages +-- @return true +local function print_outdated(porcelain) util.title("Outdated rocks:", porcelain) - local outdated = check_outdated(trees, query) + local outdated = get_outdated() for _, item in ipairs(outdated) do if porcelain then util.printout(item.name, item.installed, item.available, item.repo) @@ -69,20 +76,9 @@ end --- Driver function for "list" command. -- @param filter string or nil: A substring of a rock name to filter by. -- @param version string or nil: a version may also be passed. --- @return boolean: True if succeeded, nil on errors. -function list.run(...) - local flags, filter, version = util.parse_flags(...) - local query = search.make_query(filter and filter:lower() or "", version) - query.exact_name = false - local trees = cfg.rocks_trees - if flags["tree"] then - trees = { flags["tree"] } - end - - if flags["outdated"] then - return list_outdated(trees, query, flags["porcelain"]) - end - +-- @return table,table,table,string: results, trees, flags, version +local function get_results() + local results = {} for _, tree in ipairs(trees) do local ok, err, errcode = search.manifest_search(results, path.rocks_dir(tree), query) @@ -90,9 +86,46 @@ function list.run(...) util.warning(err) end end - util.title("Installed rocks:", flags["porcelain"]) - search.print_results(results, flags["porcelain"]) + return results, trees, flags, version +end + +--- Parse the arguments, create the query and get the trees. +local function parse(...) + flags, filter, version = util.parse_flags(...) + query = search.make_query(filter and filter:lower() or "", version) + query.exact_name = false + trees = cfg.rocks_trees + if flags["tree"] then + trees = { flags["tree"] } + end +end + +--- Run function for "list" command. This is called by command_line +-- when the user specifies `list`. +-- @param filter string or nil: A substring of a rock name to filter by. +-- @param version string or nil: a version may also be passed. +-- @return true +function list.run(...) + parse(...) + if flags["outdated"] then + print_outdated(flags["porcelain"]) + else + util.title("Installed rocks:", flags["porcelain"]) + search.print_results(get_results(), flags["porcelain"]) + end + return true end +-- Return the table results from the list command +-- @return table,table,table,string: results, trees, flags, version +function list.list(...) + parse(...) + if flags["outdated"] then + return get_outdated() + else + return get_results() + end +end + return list