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
Comments