aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2018-04-13 12:30:21 -0300
committerHisham Muhammad <hisham@gobolinux.org>2018-04-13 17:11:12 -0300
commit8bbf9ea3e4a6ce56708df556f2909349a0c93c9e (patch)
tree8355e184858b340d64e14ef0218379f47a3074be
parentd33b56cd60d623500c88b8bd2924e6674fc22776 (diff)
downloadluarocks-8bbf9ea3e4a6ce56708df556f2909349a0c93c9e.tar.gz
luarocks-8bbf9ea3e4a6ce56708df556f2909349a0c93c9e.tar.bz2
luarocks-8bbf9ea3e4a6ce56708df556f2909349a0c93c9e.zip
Use a single load_manifest function throughout the program
-rw-r--r--src/luarocks/core/manif.lua5
-rw-r--r--src/luarocks/loader.lua2
-rw-r--r--src/luarocks/manif.lua37
-rw-r--r--src/luarocks/manif/writer.lua6
-rw-r--r--src/luarocks/queries.lua4
5 files changed, 35 insertions, 19 deletions
diff --git a/src/luarocks/core/manif.lua b/src/luarocks/core/manif.lua
index cd8d7a06..7a561f8a 100644
--- a/src/luarocks/core/manif.lua
+++ b/src/luarocks/core/manif.lua
@@ -48,12 +48,11 @@ function manif.manifest_loader(file, repo_url, lua_version)
48end 48end
49 49
50--- Load a local manifest describing a repository. 50--- Load a local manifest describing a repository.
51-- All functions that use manifest tables assume they were obtained 51-- This is used by the luarocks.loader only.
52-- through either this function or load_manifest.
53-- @param repo_url string: URL or pathname for the repository. 52-- @param repo_url string: URL or pathname for the repository.
54-- @return table or (nil, string, string): A table representing the manifest, 53-- @return table or (nil, string, string): A table representing the manifest,
55-- or nil followed by an error message and an error code, see manifest_loader. 54-- or nil followed by an error message and an error code, see manifest_loader.
56function manif.load_local_manifest(repo_url) 55function manif.fast_load_local_manifest(repo_url)
57 assert(type(repo_url) == "string") 56 assert(type(repo_url) == "string")
58 57
59 local cached_manifest = manif.get_cached_manifest(repo_url) 58 local cached_manifest = manif.get_cached_manifest(repo_url)
diff --git a/src/luarocks/loader.lua b/src/luarocks/loader.lua
index 84cdd696..078e4068 100644
--- a/src/luarocks/loader.lua
+++ b/src/luarocks/loader.lua
@@ -58,7 +58,7 @@ local function load_rocks_trees()
58 local any_ok = false 58 local any_ok = false
59 local trees = {} 59 local trees = {}
60 for _, tree in ipairs(cfg.rocks_trees) do 60 for _, tree in ipairs(cfg.rocks_trees) do
61 local manifest, err = manif.load_local_manifest(path.rocks_dir(tree)) 61 local manifest, err = manif.fast_load_local_manifest(path.rocks_dir(tree))
62 if manifest then 62 if manifest then
63 any_ok = true 63 any_ok = true
64 table.insert(trees, {tree=tree, manifest=manifest}) 64 table.insert(trees, {tree=tree, manifest=manifest})
diff --git a/src/luarocks/manif.lua b/src/luarocks/manif.lua
index 146d5d73..a982c6f7 100644
--- a/src/luarocks/manif.lua
+++ b/src/luarocks/manif.lua
@@ -12,6 +12,7 @@ local fs = require("luarocks.fs")
12local cfg = require("luarocks.core.cfg") 12local cfg = require("luarocks.core.cfg")
13local path = require("luarocks.path") 13local path = require("luarocks.path")
14local util = require("luarocks.util") 14local util = require("luarocks.util")
15local queries = require("luarocks.queries")
15local type_manifest = require("luarocks.type.manifest") 16local type_manifest = require("luarocks.type.manifest")
16 17
17manif.cache_manifest = core.cache_manifest 18manif.cache_manifest = core.cache_manifest
@@ -27,15 +28,24 @@ local function check_manifest(repo_url, manifest, globals)
27 return manifest 28 return manifest
28end 29end
29 30
30function manif.load_local_manifest(repo_url) 31local postprocess_dependencies
31 local manifest, err, errcode = core.load_local_manifest(repo_url) 32do
32 if not manifest then 33 local postprocess_check = setmetatable({}, { __mode = "k" })
33 return nil, err, errcode 34 postprocess_dependencies = function(manifest)
34 end 35 if postprocess_check[manifest] then
35 if err then 36 return
36 return check_manifest(repo_url, manifest, err) 37 end
38 if manifest.dependencies then
39 for name, versions in pairs(manifest.dependencies) do
40 for version, entries in pairs(versions) do
41 for k, v in pairs(entries) do
42 entries[k] = queries.from_persisted_table(v)
43 end
44 end
45 end
46 end
47 postprocess_check[manifest] = true
37 end 48 end
38 return manifest
39end 49end
40 50
41function manif.load_rock_manifest(name, version, root) 51function manif.load_rock_manifest(name, version, root)
@@ -73,7 +83,7 @@ end
73 83
74--- Load a local or remote manifest describing a repository. 84--- Load a local or remote manifest describing a repository.
75-- All functions that use manifest tables assume they were obtained 85-- All functions that use manifest tables assume they were obtained
76-- through either this function or load_local_manifest. 86-- through this function.
77-- @param repo_url string: URL or pathname for the repository. 87-- @param repo_url string: URL or pathname for the repository.
78-- @param lua_version string: Lua version in "5.x" format, defaults to installed version. 88-- @param lua_version string: Lua version in "5.x" format, defaults to installed version.
79-- @return table or (nil, string, [string]): A table representing the manifest, 89-- @return table or (nil, string, [string]): A table representing the manifest,
@@ -85,6 +95,7 @@ function manif.load_manifest(repo_url, lua_version)
85 95
86 local cached_manifest = core.get_cached_manifest(repo_url, lua_version) 96 local cached_manifest = core.get_cached_manifest(repo_url, lua_version)
87 if cached_manifest then 97 if cached_manifest then
98 postprocess_dependencies(cached_manifest)
88 return cached_manifest 99 return cached_manifest
89 end 100 end
90 101
@@ -134,6 +145,8 @@ function manif.load_manifest(repo_url, lua_version)
134 if not manifest then 145 if not manifest then
135 return nil, err, errcode 146 return nil, err, errcode
136 end 147 end
148
149 postprocess_dependencies(manifest)
137 return check_manifest(repo_url, manifest, err) 150 return check_manifest(repo_url, manifest, err)
138end 151end
139 152
@@ -153,7 +166,7 @@ local function get_providers(item_type, item_name, repo)
153 assert(type(item_type) == "string") 166 assert(type(item_type) == "string")
154 assert(type(item_name) == "string") 167 assert(type(item_name) == "string")
155 local rocks_dir = path.rocks_dir(repo or cfg.root_dir) 168 local rocks_dir = path.rocks_dir(repo or cfg.root_dir)
156 local manifest = manif.load_local_manifest(rocks_dir) 169 local manifest = manif.load_manifest(rocks_dir)
157 return manifest and manifest[item_type .. "s"][item_name] 170 return manifest and manifest[item_type .. "s"][item_name]
158end 171end
159 172
@@ -189,7 +202,7 @@ end
189-- and path to the providing file relatively to that subtree. 202-- and path to the providing file relatively to that subtree.
190function manif.get_providing_file(name, version, item_type, item_name, repo) 203function manif.get_providing_file(name, version, item_type, item_name, repo)
191 local rocks_dir = path.rocks_dir(repo or cfg.root_dir) 204 local rocks_dir = path.rocks_dir(repo or cfg.root_dir)
192 local manifest = manif.load_local_manifest(rocks_dir) 205 local manifest = manif.load_manifest(rocks_dir)
193 206
194 local entry_table = manifest.repository[name][version][1] 207 local entry_table = manifest.repository[name][version][1]
195 local file_path = entry_table[item_type .. "s"][item_name] 208 local file_path = entry_table[item_type .. "s"][item_name]
@@ -239,7 +252,7 @@ function manif.get_versions(dep, deps_mode)
239 252
240 local version_set = {} 253 local version_set = {}
241 path.map_trees(deps_mode, function(tree) 254 path.map_trees(deps_mode, function(tree)
242 local manifest = manif.load_local_manifest(path.rocks_dir(tree)) 255 local manifest = manif.load_manifest(path.rocks_dir(tree))
243 256
244 if manifest and manifest.repository[name] then 257 if manifest and manifest.repository[name] then
245 for version in pairs(manifest.repository[name]) do 258 for version in pairs(manifest.repository[name]) do
diff --git a/src/luarocks/manif/writer.lua b/src/luarocks/manif/writer.lua
index 07628ea2..8e8d5525 100644
--- a/src/luarocks/manif/writer.lua
+++ b/src/luarocks/manif/writer.lua
@@ -367,7 +367,7 @@ function writer.add_to_manifest(name, version, repo, deps_mode)
367 367
368 if deps_mode == "none" then deps_mode = cfg.deps_mode end 368 if deps_mode == "none" then deps_mode = cfg.deps_mode end
369 369
370 local manifest, err = manif.load_local_manifest(rocks_dir) 370 local manifest, err = manif.load_manifest(rocks_dir)
371 if not manifest then 371 if not manifest then
372 util.printerr("No existing manifest. Attempting to rebuild...") 372 util.printerr("No existing manifest. Attempting to rebuild...")
373 -- Manifest built by `writer.make_manifest` should already 373 -- Manifest built by `writer.make_manifest` should already
@@ -404,7 +404,7 @@ function writer.remove_from_manifest(name, version, repo, deps_mode)
404 404
405 if deps_mode == "none" then deps_mode = cfg.deps_mode end 405 if deps_mode == "none" then deps_mode = cfg.deps_mode end
406 406
407 local manifest, err = manif.load_local_manifest(rocks_dir) 407 local manifest, err = manif.load_manifest(rocks_dir)
408 if not manifest then 408 if not manifest then
409 util.printerr("No existing manifest. Attempting to rebuild...") 409 util.printerr("No existing manifest. Attempting to rebuild...")
410 -- Manifest built by `writer.make_manifest` should already 410 -- Manifest built by `writer.make_manifest` should already
@@ -442,7 +442,7 @@ function writer.check_dependencies(repo, deps_mode)
442 assert(type(deps_mode) == "string") 442 assert(type(deps_mode) == "string")
443 if deps_mode == "none" then deps_mode = cfg.deps_mode end 443 if deps_mode == "none" then deps_mode = cfg.deps_mode end
444 444
445 local manifest = manif.load_local_manifest(rocks_dir) 445 local manifest = manif.load_manifest(rocks_dir)
446 if not manifest then 446 if not manifest then
447 return 447 return
448 end 448 end
diff --git a/src/luarocks/queries.lua b/src/luarocks/queries.lua
index 6a9166ba..2699aa8c 100644
--- a/src/luarocks/queries.lua
+++ b/src/luarocks/queries.lua
@@ -172,6 +172,10 @@ do
172 end 172 end
173end 173end
174 174
175function queries.from_persisted_table(tbl)
176 return setmetatable(tbl, query_mt)
177end
178
175--- Build a string representation of a query package name. 179--- Build a string representation of a query package name.
176-- Includes namespace, name and version, but not arch or constraints. 180-- Includes namespace, name and version, but not arch or constraints.
177-- @param query table: a query table 181-- @param query table: a query table