aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2019-04-03 13:58:47 -0300
committerHisham Muhammad <hisham@gobolinux.org>2019-04-09 16:49:20 -0300
commit208c5528289b2f69f03b70a1ea6f979d675882a9 (patch)
tree128342046f7abe88b85b4352b136c3c252d7a308 /src
parent29513caaca2bfdf197e3bbdc27c24f0081639fbd (diff)
downloadluarocks-208c5528289b2f69f03b70a1ea6f979d675882a9.tar.gz
luarocks-208c5528289b2f69f03b70a1ea6f979d675882a9.tar.bz2
luarocks-208c5528289b2f69f03b70a1ea6f979d675882a9.zip
search: add report and opt-out for checking other Lua versions
Diffstat (limited to 'src')
-rw-r--r--src/luarocks/cmd/build.lua2
-rw-r--r--src/luarocks/cmd/install.lua2
-rw-r--r--src/luarocks/cmd/unpack.lua2
-rw-r--r--src/luarocks/core/cfg.lua1
-rw-r--r--src/luarocks/deps.lua2
-rw-r--r--src/luarocks/download.lua3
-rw-r--r--src/luarocks/search.lua44
7 files changed, 35 insertions, 21 deletions
diff --git a/src/luarocks/cmd/build.lua b/src/luarocks/cmd/build.lua
index e6dc8a88..23a94fa7 100644
--- a/src/luarocks/cmd/build.lua
+++ b/src/luarocks/cmd/build.lua
@@ -96,7 +96,7 @@ local function do_build(ns_name, version, opts)
96 if ns_name:match("%.rockspec$") or ns_name:match("%.rock$") then 96 if ns_name:match("%.rockspec$") or ns_name:match("%.rock$") then
97 url = ns_name 97 url = ns_name
98 else 98 else
99 url, err = search.find_src_or_rockspec(ns_name, version) 99 url, err = search.find_src_or_rockspec(ns_name, version, true)
100 if not url then 100 if not url then
101 return nil, err 101 return nil, err
102 end 102 end
diff --git a/src/luarocks/cmd/install.lua b/src/luarocks/cmd/install.lua
index 647dbdfd..d1d7bf6c 100644
--- a/src/luarocks/cmd/install.lua
+++ b/src/luarocks/cmd/install.lua
@@ -247,7 +247,7 @@ function install.command(flags, name, version)
247 return install_rock_file(name, opts) 247 return install_rock_file(name, opts)
248 end 248 end
249 else 249 else
250 local url, err = search.find_suitable_rock(queries.new(name:lower(), version)) 250 local url, err = search.find_suitable_rock(queries.new(name:lower(), version), true)
251 if not url then 251 if not url then
252 return nil, err 252 return nil, err
253 end 253 end
diff --git a/src/luarocks/cmd/unpack.lua b/src/luarocks/cmd/unpack.lua
index 7d3b7ca4..99263f49 100644
--- a/src/luarocks/cmd/unpack.lua
+++ b/src/luarocks/cmd/unpack.lua
@@ -159,7 +159,7 @@ function unpack.command(flags, ns_name, version)
159 if ns_name:match(".*%.rock") or ns_name:match(".*%.rockspec") then 159 if ns_name:match(".*%.rock") or ns_name:match(".*%.rockspec") then
160 url = ns_name 160 url = ns_name
161 else 161 else
162 url, err = search.find_src_or_rockspec(ns_name, version) 162 url, err = search.find_src_or_rockspec(ns_name, version, true)
163 if not url then 163 if not url then
164 return nil, err 164 return nil, err
165 end 165 end
diff --git a/src/luarocks/core/cfg.lua b/src/luarocks/core/cfg.lua
index af4327c6..c420c5bd 100644
--- a/src/luarocks/core/cfg.lua
+++ b/src/luarocks/core/cfg.lua
@@ -190,6 +190,7 @@ local function make_defaults(lua_version, target_cpu, platforms, home)
190 check_certificates = false, 190 check_certificates = false,
191 191
192 cache_timeout = 10, 192 cache_timeout = 10,
193 version_check_on_fail = true,
193 194
194 lua_modules_path = "/share/lua/"..lua_version, 195 lua_modules_path = "/share/lua/"..lua_version,
195 lib_modules_path = "/lib/lua/"..lua_version, 196 lib_modules_path = "/lib/lua/"..lua_version,
diff --git a/src/luarocks/deps.lua b/src/luarocks/deps.lua
index c2f6ab96..a2b7f0ea 100644
--- a/src/luarocks/deps.lua
+++ b/src/luarocks/deps.lua
@@ -165,7 +165,7 @@ function deps.fulfill_dependency(dep, deps_mode, name, version, rocks_provided,
165 return nil, "Failed matching dependencies" 165 return nil, "Failed matching dependencies"
166 end 166 end
167 167
168 local url, search_err = search.find_suitable_rock(dep) 168 local url, search_err = search.find_suitable_rock(dep, true)
169 if not url then 169 if not url then
170 return nil, "Could not satisfy dependency "..tostring(dep)..": "..search_err 170 return nil, "Could not satisfy dependency "..tostring(dep)..": "..search_err
171 end 171 end
diff --git a/src/luarocks/download.lua b/src/luarocks/download.lua
index ac401f33..0620be68 100644
--- a/src/luarocks/download.lua
+++ b/src/luarocks/download.lua
@@ -6,7 +6,6 @@ local search = require("luarocks.search")
6local queries = require("luarocks.queries") 6local queries = require("luarocks.queries")
7local fs = require("luarocks.fs") 7local fs = require("luarocks.fs")
8local dir = require("luarocks.dir") 8local dir = require("luarocks.dir")
9local cfg = require("luarocks.core.cfg")
10 9
11local function get_file(filename) 10local function get_file(filename)
12 local protocol, pathname = dir.split_url(filename) 11 local protocol, pathname = dir.split_url(filename)
@@ -54,7 +53,7 @@ function download.download(arch, name, version, all)
54 end 53 end
55 else 54 else
56 local url 55 local url
57 url, search_err = search.find_suitable_rock(query) 56 url, search_err = search.find_suitable_rock(query, true)
58 if url then 57 if url then
59 return get_file(url) 58 return get_file(url)
60 end 59 end
diff --git a/src/luarocks/search.lua b/src/luarocks/search.lua
index da527bc6..a11d959c 100644
--- a/src/luarocks/search.lua
+++ b/src/luarocks/search.lua
@@ -205,13 +205,17 @@ end
205 205
206-- Find out which other Lua versions provide rock versions matching a query, 206-- Find out which other Lua versions provide rock versions matching a query,
207-- @param query table: a query object. 207-- @param query table: a query object.
208-- @param cli boolean: print status messages as it works
208-- @return table: array of Lua versions supported, in "5.x" format. 209-- @return table: array of Lua versions supported, in "5.x" format.
209local function supported_lua_versions(query) 210local function supported_lua_versions(query, cli)
210 assert(query:type() == "query") 211 assert(query:type() == "query")
211 local result_tree = {} 212 local result_tree = {}
212 213
213 for lua_version in util.lua_versions() do 214 for lua_version in util.lua_versions() do
214 if lua_version ~= cfg.lua_version then 215 if lua_version ~= cfg.lua_version then
216 if cli then
217 util.printout("Checking for Lua " .. lua_version .. "...")
218 end
215 if search.search_repos(query, lua_version)[query.name] then 219 if search.search_repos(query, lua_version)[query.name] then
216 table.insert(result_tree, lua_version) 220 table.insert(result_tree, lua_version)
217 end 221 end
@@ -221,9 +225,9 @@ local function supported_lua_versions(query)
221 return result_tree 225 return result_tree
222end 226end
223 227
224function search.find_src_or_rockspec(ns_name, version) 228function search.find_src_or_rockspec(ns_name, version, cli)
225 local query = queries.new(ns_name, version, false, "src|rockspec") 229 local query = queries.new(ns_name, version, false, "src|rockspec")
226 local url, err = search.find_suitable_rock(query) 230 local url, err = search.find_suitable_rock(query, cli)
227 if not url then 231 if not url then
228 return nil, "Could not find a result named "..tostring(query)..": "..err 232 return nil, "Could not find a result named "..tostring(query)..": "..err
229 end 233 end
@@ -232,27 +236,41 @@ end
232 236
233--- Attempt to get a single URL for a given search for a rock. 237--- Attempt to get a single URL for a given search for a rock.
234-- @param query table: a query object. 238-- @param query table: a query object.
239-- @param cli boolean: print status messages as it works
235-- @return string or (nil, string): URL for latest matching version 240-- @return string or (nil, string): URL for latest matching version
236-- of the rock if it was found, or nil followed by an error message. 241-- of the rock if it was found, or nil followed by an error message.
237function search.find_suitable_rock(query) 242function search.find_suitable_rock(query, cli)
238 assert(query:type() == "query") 243 assert(query:type() == "query")
244
245 if cfg.rocks_provided[query.name] ~= nil then
246 -- Do not install versions listed in cfg.rocks_provided.
247 return nil, "Rock "..query.name.." "..cfg.rocks_provided[query.name]..
248 " is already provided by VM or via 'rocks_provided' in the config file."
249 end
239 250
240 local result_tree = search.search_repos(query) 251 local result_tree = search.search_repos(query)
241 local first_rock = next(result_tree) 252 local first_rock = next(result_tree)
242 if not first_rock then 253 if not first_rock then
243 if cfg.rocks_provided[query.name] == nil then 254 if cfg.version_check_on_fail then
255 if cli then
256 util.printout(query.name .. " not found for Lua " .. cfg.lua_version .. ".")
257 util.printout("Checking if available for other Lua versions...")
258 end
259
244 -- Check if constraints are satisfiable with other Lua versions. 260 -- Check if constraints are satisfiable with other Lua versions.
245 local lua_versions = supported_lua_versions(query) 261 local lua_versions = supported_lua_versions(query, cli)
246 262
247 if #lua_versions ~= 0 then 263 if #lua_versions ~= 0 then
248 -- Build a nice message in "only Lua 5.x and 5.y but not 5.z." format 264 -- Build a nice message in "only Lua 5.x and 5.y but not 5.z." format
249 for i, lua_version in ipairs(lua_versions) do 265 for i, lua_version in ipairs(lua_versions) do
250 lua_versions[i] = "Lua "..lua_version 266 lua_versions[i] = "Lua "..lua_version
251 end 267 end
252 268
253 local versions_message = "only "..table.concat(lua_versions, " and ").. 269 local versions_message = "only "..table.concat(lua_versions, " and ")..
254 " but not Lua "..cfg.lua_version.."." 270 " but not Lua "..cfg.lua_version..".\n"..
255 271 "(To suppress these checks run '"..
272 "luarocks --lua-version="..cfg.lua_version.." config version_check_on_fail false')"
273
256 if #query.constraints == 0 then 274 if #query.constraints == 0 then
257 return nil, query.name.." supports "..versions_message 275 return nil, query.name.." supports "..versions_message
258 elseif #query.constraints == 1 and query.constraints[1].op == "==" then 276 elseif #query.constraints == 1 and query.constraints[1].op == "==" then
@@ -263,14 +281,10 @@ function search.find_suitable_rock(query)
263 end 281 end
264 end 282 end
265 283
266 return nil, "No results matching query were found." 284 return nil, "No results matching query were found for Lua " .. cfg.lua_version .. "."
267 elseif next(result_tree, first_rock) then 285 elseif next(result_tree, first_rock) then
268 -- Shouldn't happen as query must match only one package. 286 -- Shouldn't happen as query must match only one package.
269 return nil, "Several rocks matched query." 287 return nil, "Several rocks matched query."
270 elseif cfg.rocks_provided[query.name] ~= nil then
271 -- Do not install versions listed in cfg.rocks_provided.
272 return nil, "Rock "..query.name.." "..cfg.rocks_provided[query.name]..
273 " was found but it is provided by VM or 'rocks_provided' in the config file."
274 else 288 else
275 return pick_latest_version(query.name, result_tree[first_rock]) 289 return pick_latest_version(query.name, result_tree[first_rock])
276 end 290 end