From 2940d60e6e2802daad658c5b5c0f28c949a20fb3 Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Tue, 13 Apr 2021 16:01:22 -0300 Subject: use skip_set terminology + code cleanups --- src/luarocks/build.lua | 2 +- src/luarocks/cmd.lua | 1 + src/luarocks/cmd/remove.lua | 5 +++-- src/luarocks/deps.lua | 35 +++++++++++++++++------------------ src/luarocks/remove.lua | 11 +++++++---- 5 files changed, 29 insertions(+), 25 deletions(-) (limited to 'src') diff --git a/src/luarocks/build.lua b/src/luarocks/build.lua index 0aecca3e..0b82174b 100644 --- a/src/luarocks/build.lua +++ b/src/luarocks/build.lua @@ -135,7 +135,7 @@ local function process_dependencies(rockspec, opts) end end end - local ok, err, errcode = deps.fulfill_dependencies(rockspec, "dependencies", opts.deps_mode, opts.verify) + ok, err, errcode = deps.fulfill_dependencies(rockspec, "dependencies", opts.deps_mode, opts.verify) if err then return nil, err, errcode end diff --git a/src/luarocks/cmd.lua b/src/luarocks/cmd.lua index bc965af4..72edc66d 100644 --- a/src/luarocks/cmd.lua +++ b/src/luarocks/cmd.lua @@ -165,6 +165,7 @@ end -- @param exitcode number: the exitcode to use local function die(message, exitcode) assert(type(message) == "string", "bad error, expected string, got: " .. type(message)) + assert(exitcode == nil or type(exitcode) == "number", "bad error, expected number, got: " .. type(exitcode) .. " - " .. tostring(exitcode)) util.printerr("\nError: "..message) local ok, err = xpcall(util.run_scheduled_functions, error_handler) diff --git a/src/luarocks/cmd/remove.lua b/src/luarocks/cmd/remove.lua index 17723ec9..6bb69ad6 100644 --- a/src/luarocks/cmd/remove.lua +++ b/src/luarocks/cmd/remove.lua @@ -54,15 +54,16 @@ function cmd_remove.command(args) if not name then return nil, "Invalid "..rock_type.." filename: "..filename end end - local results = {} name = name:lower() + + local results = {} search.local_manifest_search(results, cfg.rocks_dir, queries.new(name, args.namespace, version)) if not results[name] then local rock = util.format_rock_name(name, args.namespace, version) return nil, "Could not find rock '"..rock.."' in "..path.rocks_tree_to_string(cfg.root_dir) end - local ok, err = remove.remove_search_results(results, name, deps_mode, args.force, args.force_fast) + ok, err = remove.remove_search_results(results, name, deps_mode, args.force, args.force_fast) if not ok then return nil, err end diff --git a/src/luarocks/deps.lua b/src/luarocks/deps.lua index 7e7b69e6..1457224e 100644 --- a/src/luarocks/deps.lua +++ b/src/luarocks/deps.lua @@ -14,7 +14,8 @@ local builtin = require("luarocks.build.builtin") local deplocks = require("luarocks.deplocks") --- Generate a function that matches dep queries against the manifest, --- taking into account rocks_provided, the blacklist and the lockfile. +-- taking into account rocks_provided, the list of versions to skip, +-- and the lockfile. -- @param deps_mode "one", "none", "all" or "order" -- @param rocks_provided a one-level table mapping names to versions, -- listing rocks to consider provided by the VM @@ -22,18 +23,18 @@ local deplocks = require("luarocks.deplocks") -- by this Lua implementation for the given dependency. -- @param depskey key to use when matching the lockfile ("dependencies", -- "build_dependencies", etc.) --- @param blacklist a two-level table mapping names to versions to boolean, --- listing rocks to not match +-- @param skip_set a two-level table mapping names to versions to +-- boolean, listing rocks that should not be matched -- @return function(dep): {string}, {string:string}, string, boolean -- * array of matching versions -- * map of versions to locations -- * version matched via lockfile if any -- * true if rock matched via rocks_provided -local function prepare_get_versions(deps_mode, rocks_provided, depskey, blacklist) +local function prepare_get_versions(deps_mode, rocks_provided, depskey, skip_set) assert(type(deps_mode) == "string") assert(type(rocks_provided) == "table") assert(type(depskey) == "string") - assert(type(blacklist) == "table" or blacklist == nil) + assert(type(skip_set) == "table" or skip_set == nil) return function(dep) local versions, locations @@ -48,12 +49,11 @@ local function prepare_get_versions(deps_mode, rocks_provided, depskey, blacklis versions, locations = manif.get_versions(dep, deps_mode) end - if blacklist and blacklist[dep.name] then - local orig_versions = versions - versions = {} - for _, v in ipairs(orig_versions) do - if not blacklist[dep.name][v] then - table.insert(versions, v) + if skip_set and skip_set[dep.name] then + for i = #versions, 1, -1 do + local v = versions[i] + if skip_set[dep.name][v] then + table.remove(versions, i) end end end @@ -65,8 +65,6 @@ local function prepare_get_versions(deps_mode, rocks_provided, depskey, blacklis end --- Attempt to match a dependency to an installed rock. --- @param blacklist table: Versions that can't be accepted. Table where keys --- are program versions and values are 'true'. -- @param get_versions a getter function obtained via prepare_get_versions -- @return (string, string, table) or (nil, nil, table): -- 1. latest installed version of the rock matching the dependency @@ -135,7 +133,7 @@ end --- Attempt to match dependencies of a rockspec to installed rocks. -- @param dependencies table: The table of dependencies. -- @param rocks_provided table: The table of auto-provided dependencies. --- @param blacklist table or nil: Program versions to not use as valid matches. +-- @param skip_set table or nil: Program versions to not use as valid matches. -- Table where keys are program names and values are tables where keys -- are program versions and values are 'true'. -- @param deps_mode string: Which trees to check dependencies for @@ -145,13 +143,13 @@ end -- parsed as tables; and a table of "no-upgrade" missing dependencies -- (to be used in plugin modules so that a plugin does not force upgrade of -- its parent application). -function deps.match_deps(dependencies, rocks_provided, blacklist, deps_mode) +function deps.match_deps(dependencies, rocks_provided, skip_set, deps_mode) assert(type(dependencies) == "table") assert(type(rocks_provided) == "table") - assert(type(blacklist) == "table" or blacklist == nil) + assert(type(skip_set) == "table" or skip_set == nil) assert(type(deps_mode) == "string") - local get_versions = prepare_get_versions(deps_mode, rocks_provided, "dependencies", blacklist) + local get_versions = prepare_get_versions(deps_mode, rocks_provided, "dependencies", skip_set) return match_all_deps(dependencies, get_versions) end @@ -278,7 +276,8 @@ end -- Packages are installed using the LuaRocks "install" command. -- Aborts the program if a dependency could not be fulfilled. -- @param rockspec table: A rockspec in table format. --- @param depskey string: Rockspec key to fetch to get dependency table. +-- @param depskey string: Rockspec key to fetch to get dependency table +-- ("dependencies", "build_dependencies", etc.). -- @param deps_mode string -- @param verify boolean -- @param deplock_dir string: dirname of the deplock file diff --git a/src/luarocks/remove.lua b/src/luarocks/remove.lua index 385930eb..a24b54ba 100644 --- a/src/luarocks/remove.lua +++ b/src/luarocks/remove.lua @@ -18,11 +18,13 @@ local queries = require("luarocks.queries") -- of the given list, or an array of strings in "name/version" format. local function check_dependents(name, versions, deps_mode) local dependents = {} - local blacklist = {} - blacklist[name] = {} + + local skip_set = {} + skip_set[name] = {} for version, _ in pairs(versions) do - blacklist[name][version] = true + skip_set[name][version] = true end + local local_rocks = {} local query_all = queries.all() search.local_manifest_search(local_rocks, cfg.rocks_dir, query_all) @@ -31,13 +33,14 @@ local function check_dependents(name, versions, deps_mode) for rock_version, _ in pairs(rock_versions) do local rockspec, err = fetch.load_rockspec(path.rockspec_file(rock_name, rock_version)) if rockspec then - local _, missing = deps.match_deps(rockspec.dependencies, rockspec.rocks_provided, blacklist, deps_mode) + local _, missing = deps.match_deps(rockspec.dependencies, rockspec.rocks_provided, skip_set, deps_mode) if missing[name] then table.insert(dependents, { name = rock_name, version = rock_version }) end end end end + return dependents end -- cgit v1.2.3-55-g6feb