From 8e39a526b57a2f9cf021f38cd9ffc8f88abd68fd Mon Sep 17 00:00:00 2001 From: Ryan Hartlage Date: Wed, 1 Aug 2018 15:52:02 -0400 Subject: Do not rewrite path in util.cleanup_path if the desired version is a substring of the version (#868) * Do not rewrite path in util.cleanup_path if the desired version is a substring of the version * Improve test coverage for core.util.cleanup_path --- spec/util_spec.lua | 14 ++++++++++++++ src/luarocks/core/util.lua | 6 +++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/spec/util_spec.lua b/spec/util_spec.lua index cbdde095..930a5aea 100644 --- a/spec/util_spec.lua +++ b/spec/util_spec.lua @@ -155,4 +155,18 @@ describe("Luarocks util test #unit", function() assert.truthy(result:find("[\"e\"] = \"4\"", 1, true)) end) end) + + describe("core.util.cleanup_path", function() + it("rewrites versions that do not match the provided version", function() + local expected = 'a/b/lua/5.3/?.lua;a/b/c/lua/5.3/?.lua' + local result = core_util.cleanup_path('a/b/lua/5.2/?.lua;a/b/c/lua/5.3/?.lua', ';', '5.3') + assert.are.equal(expected, result) + end) + + it("does not rewrite versions for which the provided version is a substring", function() + local expected = 'a/b/lua/5.3/?.lua;a/b/c/lua/5.3.4/?.lua' + local result = core_util.cleanup_path('a/b/lua/5.2/?.lua;a/b/c/lua/5.3.4/?.lua', ';', '5.3') + assert.are.equal(expected, result) + end) + end) end) diff --git a/src/luarocks/core/util.lua b/src/luarocks/core/util.lua index daec9d05..5f5c0fe1 100644 --- a/src/luarocks/core/util.lua +++ b/src/luarocks/core/util.lua @@ -166,7 +166,11 @@ function util.cleanup_path(list, sep, lua_version) for _, part in ipairs(parts) do part = part:gsub("//", "/") if lua_version then - part = part:gsub("/lua/[%d.]+/", "/lua/"..lua_version.."/") + part = part:gsub("/lua/([%d.]+)/", function(part_version) + if part_version:sub(1, #lua_version) ~= lua_version then + return "/lua/"..lua_version.."/" + end + end) end if not entries[part] then table.insert(final, part) -- cgit v1.2.3-55-g6feb