diff options
| author | Hisham Muhammad <hisham@gobolinux.org> | 2018-08-02 13:48:01 -0300 |
|---|---|---|
| committer | Hisham Muhammad <hisham@gobolinux.org> | 2018-08-02 13:50:01 -0300 |
| commit | 1ab3297faae3e57772c840d74828a9d370a6cd84 (patch) | |
| tree | dfa3e5cad3e4ac1f20c77db59f951bc0b55e2e2b | |
| parent | dcaf10c26714cbc518cbf329d0fb7b71d4241494 (diff) | |
| download | luarocks-1ab3297faae3e57772c840d74828a9d370a6cd84.tar.gz luarocks-1ab3297faae3e57772c840d74828a9d370a6cd84.tar.bz2 luarocks-1ab3297faae3e57772c840d74828a9d370a6cd84.zip | |
Fix: do not detect .luarocks/config-5.x.lua and lua_modules as modules
Running luarocks init a second time after deleting the rockspec was
mis-detects .luarocks/config-5.x.lua as a module, creating an entry
`["luarocks.config-5.3"] = ".luarocks/config-5.3.lua"` in `build.modules`.
Same problem happened with modules under `lua_modules`.
This excludes `.luarocks` and `lua_modules` from module detection.
Includes a regression test.
Closes #847.
| -rw-r--r-- | spec/init_spec.lua | 52 | ||||
| -rw-r--r-- | src/luarocks/build/builtin.lua | 4 |
2 files changed, 54 insertions, 2 deletions
diff --git a/spec/init_spec.lua b/spec/init_spec.lua index a4751741..95aa8ff6 100644 --- a/spec/init_spec.lua +++ b/spec/init_spec.lua | |||
| @@ -1,9 +1,10 @@ | |||
| 1 | local test_env = require("spec.util.test_env") | 1 | local test_env = require("spec.util.test_env") |
| 2 | local run = test_env.run | 2 | local run = test_env.run |
| 3 | local testing_paths = test_env.testing_paths | 3 | local testing_paths = test_env.testing_paths |
| 4 | local get_tmp_path = test_env.get_tmp_path | ||
| 5 | local copy_dir = test_env.copy_dir | 4 | local copy_dir = test_env.copy_dir |
| 6 | local is_win = test_env.TEST_TARGET_OS == "windows" | 5 | local is_win = test_env.TEST_TARGET_OS == "windows" |
| 6 | local write_file = test_env.write_file | ||
| 7 | local lfs = require("lfs") | ||
| 7 | 8 | ||
| 8 | test_env.unload_luarocks() | 9 | test_env.unload_luarocks() |
| 9 | 10 | ||
| @@ -61,4 +62,53 @@ describe("Luarocks init test #integration", function() | |||
| 61 | assert.truthy(content:find("/lua_modules")) | 62 | assert.truthy(content:find("/lua_modules")) |
| 62 | end, finally) | 63 | end, finally) |
| 63 | end) | 64 | end) |
| 65 | |||
| 66 | it("LuaRocks init does not autodetect config or dependencies as modules of the package", function() | ||
| 67 | test_env.run_in_tmp(function(tmpdir) | ||
| 68 | local myproject = tmpdir .. "/myproject" | ||
| 69 | lfs.mkdir(myproject) | ||
| 70 | lfs.chdir(myproject) | ||
| 71 | |||
| 72 | assert(run.luarocks("init")) | ||
| 73 | assert.truthy(lfs.attributes(myproject .. "/.luarocks/config-" .. test_env.lua_version .. ".lua")) | ||
| 74 | local rockspec_filename = myproject .. "/myproject-dev-1.rockspec" | ||
| 75 | assert.truthy(lfs.attributes(rockspec_filename)) | ||
| 76 | |||
| 77 | -- install a package locally | ||
| 78 | write_file("my_dependency-1.0-1.rockspec", [[ | ||
| 79 | package = "my_dependency" | ||
| 80 | version = "1.0-1" | ||
| 81 | source = { | ||
| 82 | url = "file://]] .. tmpdir:gsub("\\", "/") .. [[/my_dependency.lua" | ||
| 83 | } | ||
| 84 | build = { | ||
| 85 | type = "builtin", | ||
| 86 | modules = { | ||
| 87 | my_dependency = "my_dependency.lua" | ||
| 88 | } | ||
| 89 | } | ||
| 90 | ]], finally) | ||
| 91 | write_file(tmpdir .. "/my_dependency.lua", "return {}", finally) | ||
| 92 | |||
| 93 | assert.is_true(run.luarocks_bool("build --verbose my_dependency-1.0-1.rockspec")) | ||
| 94 | assert.truthy(lfs.attributes(myproject .. "/lua_modules/share/lua/" .. test_env.lua_version .."/my_dependency.lua")) | ||
| 95 | |||
| 96 | os.remove(rockspec_filename) | ||
| 97 | os.remove("my_dependency-1.0-1.rockspec") | ||
| 98 | |||
| 99 | -- re-run init | ||
| 100 | assert(run.luarocks("init")) | ||
| 101 | |||
| 102 | -- file is recreated | ||
| 103 | assert.truthy(lfs.attributes(rockspec_filename)) | ||
| 104 | |||
| 105 | local fd = assert(io.open(rockspec_filename, "rb")) | ||
| 106 | local rockspec = assert(fd:read("*a")) | ||
| 107 | fd:close() | ||
| 108 | |||
| 109 | assert.no.match("my_dependency", rockspec, 1, true) | ||
| 110 | assert.no.match("config", rockspec, 1, true) | ||
| 111 | |||
| 112 | end, finally) | ||
| 113 | end) | ||
| 64 | end) | 114 | end) |
diff --git a/src/luarocks/build/builtin.lua b/src/luarocks/build/builtin.lua index 694542ba..2db6f256 100644 --- a/src/luarocks/build/builtin.lua +++ b/src/luarocks/build/builtin.lua | |||
| @@ -89,7 +89,9 @@ do | |||
| 89 | 89 | ||
| 90 | for _, file in ipairs(fs.find()) do | 90 | for _, file in ipairs(fs.find()) do |
| 91 | local luamod = file:match("(.*)%.lua$") | 91 | local luamod = file:match("(.*)%.lua$") |
| 92 | if luamod and not luamod_blacklist[luamod] then | 92 | if file:match("^.luarocks") or file:match("^lua_modules") then |
| 93 | -- skip | ||
| 94 | elseif luamod and not luamod_blacklist[luamod] then | ||
| 93 | modules[path.path_to_module(file)] = prefix..file | 95 | modules[path.path_to_module(file)] = prefix..file |
| 94 | else | 96 | else |
| 95 | local cmod = file:match("(.*)%.c$") | 97 | local cmod = file:match("(.*)%.c$") |
