aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2018-08-31 15:48:47 +0200
committerHisham Muhammad <hisham@gobolinux.org>2018-09-03 12:47:26 -0300
commitd09f92a84d0a9267a066af2d6978f9a51e555f5f (patch)
tree6429c10e153ca77a3f5a3037edc928cea7eb9a97
parent4eb27bea022c1bcd816561d2e8e64d67aef62b18 (diff)
downloadluarocks-d09f92a84d0a9267a066af2d6978f9a51e555f5f.tar.gz
luarocks-d09f92a84d0a9267a066af2d6978f9a51e555f5f.tar.bz2
luarocks-d09f92a84d0a9267a066af2d6978f9a51e555f5f.zip
show: base listing of modules on rock_manifest
List modules based on rock_manifest, for better precision. Overall management of modules should be moved to use rock_manifest instead of the modules list from the general local manifest, but this is a good first step.
-rw-r--r--src/luarocks/cmd/show.lua34
-rw-r--r--src/luarocks/queries.lua5
-rw-r--r--src/luarocks/repos.lua34
3 files changed, 47 insertions, 26 deletions
diff --git a/src/luarocks/cmd/show.lua b/src/luarocks/cmd/show.lua
index b6242cbc..c90a6bea 100644
--- a/src/luarocks/cmd/show.lua
+++ b/src/luarocks/cmd/show.lua
@@ -4,6 +4,7 @@ local show = {}
4 4
5local queries = require("luarocks.queries") 5local queries = require("luarocks.queries")
6local search = require("luarocks.search") 6local search = require("luarocks.search")
7local dir = require("luarocks.core.dir")
7local cfg = require("luarocks.core.cfg") 8local cfg = require("luarocks.core.cfg")
8local util = require("luarocks.util") 9local util = require("luarocks.util")
9local path = require("luarocks.path") 10local path = require("luarocks.path")
@@ -44,10 +45,10 @@ local friendly_template = [[
44?location :Installed in: \t${location} 45?location :Installed in: \t${location}
45?commands : 46?commands :
46?commands :Commands: 47?commands :Commands:
47*commands :\t${name} (${repo}) 48*commands :\t${name} (${file})
48?modules : 49?modules :
49?modules :Modules: 50?modules :Modules:
50*modules :\t${name} (${repo}) 51*modules :\t${name} (${file})
51?bdeps : 52?bdeps :
52?bdeps :Has build dependency on: 53?bdeps :Has build dependency on:
53*bdeps :\t${name} (${label}) 54*bdeps :\t${name} (${label})
@@ -74,8 +75,8 @@ local porcelain_template = [[
74?issues :issues\t${issues} 75?issues :issues\t${issues}
75?labels :labels\t${labels} 76?labels :labels\t${labels}
76?location :location\t${location} 77?location :location\t${location}
77*commands :command\t${name}\t${repo} 78*commands :command\t${name}\t${file}
78*modules :module\t${name}\t${repo} 79*modules :module\t${name}\t${file}
79*bdeps :build_dependency\t${name}\t${label} 80*bdeps :build_dependency\t${name}\t${label}
80*tdeps :test_dependency\t${name}\t${label} 81*tdeps :test_dependency\t${name}\t${label}
81*deps :dependency\t${name}\t${label} 82*deps :dependency\t${name}\t${label}
@@ -147,11 +148,32 @@ end
147local function files_to_list(name, version, item_set, item_type, repo) 148local function files_to_list(name, version, item_set, item_type, repo)
148 local ret = {} 149 local ret = {}
149 for item_name in util.sortedpairs(item_set) do 150 for item_name in util.sortedpairs(item_set) do
150 table.insert(ret, { name = item_name, repo = repos.which(name, version, item_type, item_name, repo) }) 151 table.insert(ret, { name = item_name, file = repos.which(name, version, item_type, item_name, repo) })
151 end 152 end
152 return ret 153 return ret
153end 154end
154 155
156local function modules_to_list(name, version, repo)
157 local ret = {}
158 local rock_manifest = manif.load_rock_manifest(name, version, repo)
159
160 local lua_dir = path.lua_dir(name, version, repo)
161 local lib_dir = path.lib_dir(name, version, repo)
162 repos.recurse_rock_manifest_entry(rock_manifest.lua, function(pathname, modname)
163 table.insert(ret, { name = modname, file = dir.path(lua_dir, pathname) })
164 end)
165 repos.recurse_rock_manifest_entry(rock_manifest.lib, function(pathname, modname)
166 table.insert(ret, { name = modname, file = dir.path(lib_dir, pathname) })
167 end)
168 table.sort(ret, function(a, b)
169 if a.name == b.name then
170 return a.file < b.file
171 end
172 return a.name < b.name
173 end)
174 return ret
175end
176
155local function deps_to_list(dependencies, tree) 177local function deps_to_list(dependencies, tree)
156 local ret = {} 178 local ret = {}
157 for _, dep in ipairs(dependencies or {}) do 179 for _, dep in ipairs(dependencies or {}) do
@@ -188,7 +210,7 @@ local function show_rock(template, namespace, name, version, rockspec, repo, min
188 labels = desc.labels and table.concat(desc.labels, ", "), 210 labels = desc.labels and table.concat(desc.labels, ", "),
189 location = path.rocks_tree_to_string(repo), 211 location = path.rocks_tree_to_string(repo),
190 commands = files_to_list(name, version, minfo.commands, "command", repo), 212 commands = files_to_list(name, version, minfo.commands, "command", repo),
191 modules = files_to_list(name, version, minfo.modules, "module", repo), 213 modules = modules_to_list(name, version, repo),
192 bdeps = deps_to_list(rockspec.build_dependencies, tree), 214 bdeps = deps_to_list(rockspec.build_dependencies, tree),
193 tdeps = deps_to_list(rockspec.test_dependencies, tree), 215 tdeps = deps_to_list(rockspec.test_dependencies, tree),
194 deps = deps_to_list(rockspec.dependencies, tree), 216 deps = deps_to_list(rockspec.dependencies, tree),
diff --git a/src/luarocks/queries.lua b/src/luarocks/queries.lua
index 92d76460..15dc5fac 100644
--- a/src/luarocks/queries.lua
+++ b/src/luarocks/queries.lua
@@ -198,10 +198,11 @@ function query_mt:__tostring()
198 if #self.constraints > 0 then 198 if #self.constraints > 0 then
199 local pretty = {} 199 local pretty = {}
200 for _, c in ipairs(self.constraints) do 200 for _, c in ipairs(self.constraints) do
201 local v = c.version.string
201 if c.op == "==" then 202 if c.op == "==" then
202 table.insert(pretty, tostring(c.version)) 203 table.insert(pretty, v)
203 else 204 else
204 table.insert(pretty, c.op .. " " .. tostring(c.version)) 205 table.insert(pretty, c.op .. " " .. v)
205 end 206 end
206 end 207 end
207 table.insert(out, " ") 208 table.insert(out, " ")
diff --git a/src/luarocks/repos.lua b/src/luarocks/repos.lua
index dd2a5142..37a81c20 100644
--- a/src/luarocks/repos.lua
+++ b/src/luarocks/repos.lua
@@ -51,31 +51,37 @@ function repos.is_installed(name, version)
51 return fs.is_dir(path.install_dir(name, version)) 51 return fs.is_dir(path.install_dir(name, version))
52end 52end
53 53
54local function recurse_rock_manifest_tree(file_tree, action) 54function repos.recurse_rock_manifest_entry(entry, action)
55 assert(type(file_tree) == "table") 55 assert(entry == nil or type(entry) == "table")
56 assert(type(action) == "function") 56 assert(type(action) == "function")
57 57
58 local function do_recurse_rock_manifest_tree(tree, parent_path) 58 if entry == nil then
59 return true
60 end
61
62 local function do_recurse_rock_manifest_tree(tree, parent_path, parent_mod)
59 for file, sub in pairs(tree) do 63 for file, sub in pairs(tree) do
60 local sub_path = (parent_path and (parent_path .. "/") or "") .. file 64 local sub_path = (parent_path and (parent_path .. "/") or "") .. file
65 local sub_mod = (parent_mod and (parent_mod .. ".") or "") .. file
61 local ok, err 66 local ok, err
62 67
63 if type(sub) == "table" then 68 if type(sub) == "table" then
64 ok, err = do_recurse_rock_manifest_tree(sub, sub_path) 69 ok, err = do_recurse_rock_manifest_tree(sub, sub_path, sub_mod)
65 else 70 else
66 ok, err = action(sub_path) 71 local mod_no_ext = sub_mod:gsub("%.[^.]*$", "")
72 ok, err = action(sub_path, mod_no_ext)
67 end 73 end
68 74
69 if not ok then return nil, err end 75 if err then return nil, err end
70 end 76 end
71 return true 77 return true
72 end 78 end
73 return do_recurse_rock_manifest_tree(file_tree) 79 return do_recurse_rock_manifest_tree(entry)
74end 80end
75 81
76local function store_package_data(result, rock_manifest, deploy_type) 82local function store_package_data(result, rock_manifest, deploy_type)
77 if rock_manifest[deploy_type] then 83 if rock_manifest[deploy_type] then
78 recurse_rock_manifest_tree(rock_manifest[deploy_type], function(file_path) 84 repos.recurse_rock_manifest_entry(rock_manifest[deploy_type], function(file_path)
79 local _, item_name = manif.get_provided_item(deploy_type, file_path) 85 local _, item_name = manif.get_provided_item(deploy_type, file_path)
80 result[item_name] = file_path 86 result[item_name] = file_path
81 return true 87 return true
@@ -280,11 +286,7 @@ function repos.deploy_files(name, version, wrap_bin_scripts, deps_mode)
280 if not rock_manifest then return nil, load_err end 286 if not rock_manifest then return nil, load_err end
281 287
282 local function deploy_file_tree(deploy_type, source_dir, move_fn, suffix) 288 local function deploy_file_tree(deploy_type, source_dir, move_fn, suffix)
283 if not rock_manifest[deploy_type] then 289 return repos.recurse_rock_manifest_entry(rock_manifest[deploy_type], function(file_path)
284 return true
285 end
286
287 return recurse_rock_manifest_tree(rock_manifest[deploy_type], function(file_path)
288 local source = dir.path(source_dir, file_path) 290 local source = dir.path(source_dir, file_path)
289 291
290 local target, prepare_err = prepare_target(name, version, deploy_type, file_path, suffix) 292 local target, prepare_err = prepare_target(name, version, deploy_type, file_path, suffix)
@@ -363,11 +365,7 @@ function repos.delete_version(name, version, deps_mode, quick)
363 if not rock_manifest then return nil, load_err end 365 if not rock_manifest then return nil, load_err end
364 366
365 local function delete_deployed_file_tree(deploy_type, suffix) 367 local function delete_deployed_file_tree(deploy_type, suffix)
366 if not rock_manifest[deploy_type] then 368 return repos.recurse_rock_manifest_entry(rock_manifest[deploy_type], function(file_path)
367 return true
368 end
369
370 return recurse_rock_manifest_tree(rock_manifest[deploy_type], function(file_path)
371 local non_versioned, versioned = get_deploy_paths(name, version, deploy_type, file_path) 369 local non_versioned, versioned = get_deploy_paths(name, version, deploy_type, file_path)
372 370
373 -- Figure out if the file is deployed using versioned or non-versioned name. 371 -- Figure out if the file is deployed using versioned or non-versioned name.