aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2017-09-29 15:53:51 -0300
committerHisham Muhammad <hisham@gobolinux.org>2017-09-29 15:54:55 -0300
commit6f9cc282207af83ad8692ac64b37d2549a0dcfec (patch)
tree79f2c8dc24ee6643e378d5d8c6be30ffb2e4c078 /src
parente64f83bc3723d28a3b83ff08bccfe332b1e7fc0b (diff)
downloadluarocks-6f9cc282207af83ad8692ac64b37d2549a0dcfec.tar.gz
luarocks-6f9cc282207af83ad8692ac64b37d2549a0dcfec.tar.bz2
luarocks-6f9cc282207af83ad8692ac64b37d2549a0dcfec.zip
Make sure package paths only reference current Lua version
Diffstat (limited to 'src')
-rw-r--r--src/luarocks/cmd/path.lua12
-rw-r--r--src/luarocks/core/cfg.lua4
-rw-r--r--src/luarocks/core/util.lua10
-rw-r--r--src/luarocks/fs/win32.lua4
4 files changed, 18 insertions, 12 deletions
diff --git a/src/luarocks/cmd/path.lua b/src/luarocks/cmd/path.lua
index 516a0c47..3cf43091 100644
--- a/src/luarocks/cmd/path.lua
+++ b/src/luarocks/cmd/path.lua
@@ -37,13 +37,13 @@ function path_cmd.command(flags)
37 local path_sep = cfg.export_path_separator 37 local path_sep = cfg.export_path_separator
38 38
39 if flags["lr-path"] then 39 if flags["lr-path"] then
40 util.printout(util.remove_path_dupes(lr_path, ';')) 40 util.printout(util.cleanup_path(lr_path, ';', cfg.lua_version))
41 return true 41 return true
42 elseif flags["lr-cpath"] then 42 elseif flags["lr-cpath"] then
43 util.printout(util.remove_path_dupes(lr_cpath, ';')) 43 util.printout(util.cleanup_path(lr_cpath, ';', cfg.lua_version))
44 return true 44 return true
45 elseif flags["lr-bin"] then 45 elseif flags["lr-bin"] then
46 util.printout(util.remove_path_dupes(lr_bin, path_sep)) 46 util.printout(util.cleanup_path(lr_bin, path_sep))
47 return true 47 return true
48 end 48 end
49 49
@@ -57,10 +57,10 @@ function path_cmd.command(flags)
57 lr_bin = lr_bin .. path_sep .. os.getenv("PATH") 57 lr_bin = lr_bin .. path_sep .. os.getenv("PATH")
58 end 58 end
59 59
60 util.printout(cfg.export_lua_path:format(util.remove_path_dupes(lr_path, ';'))) 60 util.printout(cfg.export_lua_path:format(util.cleanup_path(lr_path, ';', cfg.lua_version)))
61 util.printout(cfg.export_lua_cpath:format(util.remove_path_dupes(lr_cpath, ';'))) 61 util.printout(cfg.export_lua_cpath:format(util.cleanup_path(lr_cpath, ';', cfg.lua_version)))
62 if flags["bin"] then 62 if flags["bin"] then
63 util.printout(cfg.export_path:format(util.remove_path_dupes(lr_bin, path_sep))) 63 util.printout(cfg.export_path:format(util.cleanup_path(lr_bin, path_sep)))
64 end 64 end
65 return true 65 return true
66end 66end
diff --git a/src/luarocks/core/cfg.lua b/src/luarocks/core/cfg.lua
index 250f503e..8c005aaa 100644
--- a/src/luarocks/core/cfg.lua
+++ b/src/luarocks/core/cfg.lua
@@ -731,8 +731,8 @@ end
731 731
732function cfg.init_package_paths() 732function cfg.init_package_paths()
733 local lr_path, lr_cpath, lr_bin = cfg.package_paths() 733 local lr_path, lr_cpath, lr_bin = cfg.package_paths()
734 package.path = util.remove_path_dupes(package.path .. ";" .. lr_path, ";") 734 package.path = util.cleanup_path(package.path .. ";" .. lr_path, ";", cfg.lua_version)
735 package.cpath = util.remove_path_dupes(package.cpath .. ";" .. lr_cpath, ";") 735 package.cpath = util.cleanup_path(package.cpath .. ";" .. lr_cpath, ";", cfg.lua_version)
736end 736end
737 737
738function cfg.which_config() 738function cfg.which_config()
diff --git a/src/luarocks/core/util.lua b/src/luarocks/core/util.lua
index 85b59af6..a025da7d 100644
--- a/src/luarocks/core/util.lua
+++ b/src/luarocks/core/util.lua
@@ -135,17 +135,23 @@ function util.deep_merge(dst, src)
135 end 135 end
136end 136end
137 137
138--- Remove repeated entries from a path-style string. 138--- Clean up a path-style string ($PATH, $LUA_PATH/package.path, etc.),
139-- removing repeated entries and making sure only the relevant
140-- Lua version is used.
139-- Example: given ("a;b;c;a;b;d", ";"), returns "a;b;c;d". 141-- Example: given ("a;b;c;a;b;d", ";"), returns "a;b;c;d".
140-- @param list string: A path string (from $PATH or package.path) 142-- @param list string: A path string (from $PATH or package.path)
141-- @param sep string: The separator 143-- @param sep string: The separator
142function util.remove_path_dupes(list, sep) 144-- @param lua_version (optional) string: The Lua version to use.
145function util.cleanup_path(list, sep, lua_version)
143 assert(type(list) == "string") 146 assert(type(list) == "string")
144 assert(type(sep) == "string") 147 assert(type(sep) == "string")
145 local parts = util.split_string(list, sep) 148 local parts = util.split_string(list, sep)
146 local final, entries = {}, {} 149 local final, entries = {}, {}
147 for _, part in ipairs(parts) do 150 for _, part in ipairs(parts) do
148 part = part:gsub("//", "/") 151 part = part:gsub("//", "/")
152 if lua_version then
153 part = part:gsub("/lua/[%d.]+/", "/lua/"..lua_version)
154 end
149 if not entries[part] then 155 if not entries[part] then
150 table.insert(final, part) 156 table.insert(final, part)
151 entries[part] = true 157 entries[part] = true
diff --git a/src/luarocks/fs/win32.lua b/src/luarocks/fs/win32.lua
index 19c603dc..bd504fa7 100644
--- a/src/luarocks/fs/win32.lua
+++ b/src/luarocks/fs/win32.lua
@@ -141,8 +141,8 @@ function win32.wrap_script(file, dest, name, version)
141 local wrapname = fs.is_dir(dest) and dest.."/"..base or dest 141 local wrapname = fs.is_dir(dest) and dest.."/"..base or dest
142 wrapname = wrapname..".bat" 142 wrapname = wrapname..".bat"
143 local lpath, lcpath = cfg.package_paths() 143 local lpath, lcpath = cfg.package_paths()
144 lpath = util.remove_path_dupes(lpath, ";") 144 lpath = util.cleanup_path(lpath, ";", cfg.lua_version)
145 lcpath = util.remove_path_dupes(lcpath, ";") 145 lcpath = util.cleanup_path(lcpath, ";", cfg.lua_version)
146 local wrapper = io.open(wrapname, "w") 146 local wrapper = io.open(wrapname, "w")
147 if not wrapper then 147 if not wrapper then
148 return nil, "Could not open "..wrapname.." for writing." 148 return nil, "Could not open "..wrapname.." for writing."