From d300c11c6acba4390fdde9030a45b0a31e7501d1 Mon Sep 17 00:00:00 2001 From: Marc Jakobi Date: Mon, 5 Aug 2024 16:48:22 +0200 Subject: fix: use luarocks.lock in cwd for non-binary rocks too (#1693) --- src/luarocks/build.lua | 17 ++++++++++++----- src/luarocks/cmd/build.lua | 8 ++++++-- src/luarocks/cmd/install.lua | 5 ++++- src/luarocks/cmd/make.lua | 9 ++++++--- 4 files changed, 28 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/luarocks/build.lua b/src/luarocks/build.lua index c6b3388b..56e5ebd4 100644 --- a/src/luarocks/build.lua +++ b/src/luarocks/build.lua @@ -104,7 +104,7 @@ local function check_macosx_deployment_target(rockspec) return true end -local function process_dependencies(rockspec, opts) +local function process_dependencies(rockspec, opts, cwd) if not opts.build_only_deps then local ok, err, errcode = deps.check_external_deps(rockspec, "build") if err then @@ -116,6 +116,8 @@ local function process_dependencies(rockspec, opts) return true end + local deplock_dir = fs.exists(dir.path(cwd, "luarocks.lock")) and cwd or nil + if not opts.build_only_deps then if next(rockspec.build_dependencies) then @@ -136,7 +138,7 @@ local function process_dependencies(rockspec, opts) path.use_tree(cfg.root_dir) end - local ok, err, errcode = deps.fulfill_dependencies(rockspec, "build_dependencies", "all", opts.verify) + local ok, err, errcode = deps.fulfill_dependencies(rockspec, "build_dependencies", "all", opts.verify, deplock_dir) path.add_to_package_paths(cfg.root_dir) @@ -155,7 +157,7 @@ local function process_dependencies(rockspec, opts) end end - return deps.fulfill_dependencies(rockspec, "dependencies", opts.deps_mode, opts.verify) + return deps.fulfill_dependencies(rockspec, "dependencies", opts.deps_mode, opts.verify, deplock_dir) end local function fetch_and_change_to_source_dir(rockspec, opts) @@ -381,12 +383,17 @@ local function write_rock_dir_files(rockspec, opts) end --- Build and install a rock given a rockspec. +-- @param rockspec rockspec: the rockspec to build -- @param opts table: build options table +-- @param cwd string or nil: The current working directory -- @return (string, string) or (nil, string, [string]): Name and version of -- installed rock if succeeded or nil and an error message followed by an error code. -function build.build_rockspec(rockspec, opts) +function build.build_rockspec(rockspec, opts, cwd) assert(rockspec:type() == "rockspec") assert(opts:type() == "build.opts") + assert(type(cwd) == "string" or type(cwd) == nil) + + cwd = cwd or dir.path(".") if not rockspec.build then if rockspec:format_is_at_least("3.0") then @@ -413,7 +420,7 @@ function build.build_rockspec(rockspec, opts) deplocks.init(rockspec.name, ".") end - ok, err = process_dependencies(rockspec, opts) + ok, err = process_dependencies(rockspec, opts, cwd) if not ok then return nil, err end local name, version = rockspec.name, rockspec.version diff --git a/src/luarocks/cmd/build.lua b/src/luarocks/cmd/build.lua index 32680411..8049596f 100644 --- a/src/luarocks/cmd/build.lua +++ b/src/luarocks/cmd/build.lua @@ -5,6 +5,7 @@ local cmd_build = {} local pack = require("luarocks.pack") local path = require("luarocks.path") +local dir = require("luarocks.dir") local util = require("luarocks.util") local fetch = require("luarocks.fetch") local fs = require("luarocks.fs") @@ -52,6 +53,8 @@ local function build_rock(rock_filename, opts) assert(type(rock_filename) == "string") assert(opts:type() == "build.opts") + local cwd = fs.absolute_name(dir.path(".")) + local ok, err, errcode local unpack_dir @@ -71,7 +74,7 @@ local function build_rock(rock_filename, opts) return nil, err, errcode end - ok, err, errcode = build.build_rockspec(rockspec, opts) + ok, err, errcode = build.build_rockspec(rockspec, opts, cwd) fs.pop_dir() return ok, err, errcode @@ -103,11 +106,12 @@ local function do_build(name, namespace, version, opts) end if url:match("%.rockspec$") then + local cwd = fs.absolute_name(dir.path(".")) local rockspec, err = fetch.load_rockspec(url, nil, opts.verify) if not rockspec then return nil, err end - return build.build_rockspec(rockspec, opts) + return build.build_rockspec(rockspec, opts, cwd) end if url:match("%.src%.rock$") then diff --git a/src/luarocks/cmd/install.lua b/src/luarocks/cmd/install.lua index 05e31fe7..c3b5f811 100644 --- a/src/luarocks/cmd/install.lua +++ b/src/luarocks/cmd/install.lua @@ -177,7 +177,10 @@ function install.install_binary_rock_deps(rock_file, opts) return nil, "Failed loading rockspec for installed package: "..err, errcode end - ok, err, errcode = deps.fulfill_dependencies(rockspec, "dependencies", opts.deps_mode, opts.verify, install_dir) + local deplock_dir = fs.exists(dir.path(".", "luarocks.lock")) + and "." + or install_dir + ok, err, errcode = deps.fulfill_dependencies(rockspec, "dependencies", opts.deps_mode, opts.verify, deplock_dir) if err then return nil, err, errcode end util.printout() diff --git a/src/luarocks/cmd/make.lua b/src/luarocks/cmd/make.lua index 0b3db27c..ffec8c5d 100644 --- a/src/luarocks/cmd/make.lua +++ b/src/luarocks/cmd/make.lua @@ -13,6 +13,8 @@ local pack = require("luarocks.pack") local remove = require("luarocks.remove") local deps = require("luarocks.deps") local writer = require("luarocks.manif.writer") +local dir = require("luarocks.dir") +local fs = require("luarocks.fs") function make.cmd_options(parser) parser:flag("--no-install", "Do not install the rock.") @@ -88,6 +90,7 @@ function make.command(args) return nil, "Invalid argument: 'make' takes a rockspec as a parameter. "..util.see_help("make") end + local cwd = fs.absolute_name(dir.path(".")) local rockspec, err, errcode = fetch.load_rockspec(rockspec_filename) if not rockspec then return nil, err @@ -115,17 +118,17 @@ function make.command(args) end if args.no_install then - return build.build_rockspec(rockspec, opts) + return build.build_rockspec(rockspec, opts, cwd) elseif args.pack_binary_rock then return pack.pack_binary_rock(name, namespace, rockspec.version, args.sign, function() - local name, version = build.build_rockspec(rockspec, opts) -- luacheck: ignore 431 + local name, version = build.build_rockspec(rockspec, opts, cwd) -- luacheck: ignore 431 if name and args.no_doc then util.remove_doc_dir(name, version) end return name, version end) else - local ok, err = build.build_rockspec(rockspec, opts) + local ok, err = build.build_rockspec(rockspec, opts, cwd) if not ok then return nil, err end local name, version = ok, err -- luacheck: ignore 421 -- cgit v1.2.3-55-g6feb