aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Melnichenko <mpeterval@gmail.com>2016-10-20 00:41:40 +0300
committerPeter Melnichenko <mpeterval@gmail.com>2016-10-20 00:41:40 +0300
commitc7b91ce031a3b7877f59951fc8570c97f598e771 (patch)
tree2f2e15f68cb797776430f493e0341fae8d1daa3f /src
parented2cbf4046b76e7f08a17577d286c08f2439e93f (diff)
downloadluarocks-c7b91ce031a3b7877f59951fc8570c97f598e771.tar.gz
luarocks-c7b91ce031a3b7877f59951fc8570c97f598e771.tar.bz2
luarocks-c7b91ce031a3b7877f59951fc8570c97f598e771.zip
Fix backup of wrapped scripts on deploy
When deploying script to bin/script.bat, check and back up bin/script.bat, not bin/script.
Diffstat (limited to 'src')
-rw-r--r--src/luarocks/repos.lua51
1 files changed, 25 insertions, 26 deletions
diff --git a/src/luarocks/repos.lua b/src/luarocks/repos.lua
index 762192a3..161cdd8a 100644
--- a/src/luarocks/repos.lua
+++ b/src/luarocks/repos.lua
@@ -151,17 +151,6 @@ function repos.run_hook(rockspec, hook_name)
151 return true 151 return true
152end 152end
153 153
154local function install_binary(source, target, name, version)
155 assert(type(source) == "string")
156 assert(type(target) == "string")
157
158 if fs.is_lua(source) then
159 return fs.wrap_script(source, target, name, version)
160 else
161 return fs.copy_binary(source, target)
162 end
163end
164
165function repos.should_wrap_bin_scripts(rockspec) 154function repos.should_wrap_bin_scripts(rockspec)
166 assert(type(rockspec) == "table") 155 assert(type(rockspec) == "table")
167 156
@@ -266,22 +255,24 @@ function repos.deploy_files(name, version, wrap_bin_scripts, deps_mode)
266 end 255 end
267 end 256 end
268 257
269 if fs.exists(target) then 258 local ok, err = fs.make_dir(dir.dir_name(target))
270 local backup = target 259 if not ok then return nil, err end
260
261 local suffixed_target, mover = move_fn(source, target, name, version)
262 if fs.exists(suffixed_target) then
263 local backup = suffixed_target
271 repeat 264 repeat
272 backup = backup.."~" 265 backup = backup.."~"
273 until not fs.exists(backup) -- slight race condition here, but shouldn't be a problem. 266 until not fs.exists(backup) -- Slight race condition here, but shouldn't be a problem.
274 267
275 util.printerr("Warning: "..target.." is not tracked by this installation of LuaRocks. Moving it to "..backup) 268 util.printerr("Warning: "..suffixed_target.." is not tracked by this installation of LuaRocks. Moving it to "..backup)
276 local ok, err = fs.move(target, backup) 269 local ok, err = fs.move(suffixed_target, backup)
277 if not ok then 270 if not ok then
278 return nil, err 271 return nil, err
279 end 272 end
280 end 273 end
281 274
282 local ok, err = fs.make_dir(dir.dir_name(target)) 275 ok, err = mover()
283 if not ok then return nil, err end
284 ok, err = move_fn(source, target, name, version)
285 fs.remove_dir_tree_if_empty(dir.dir_name(source)) 276 fs.remove_dir_tree_if_empty(dir.dir_name(source))
286 return ok, err 277 return ok, err
287 end 278 end
@@ -289,17 +280,25 @@ function repos.deploy_files(name, version, wrap_bin_scripts, deps_mode)
289 end 280 end
290 281
291 local rock_manifest = manif.load_rock_manifest(name, version) 282 local rock_manifest = manif.load_rock_manifest(name, version)
292 283
293 local ok, err = true 284 local function install_binary(source, target, name, version)
294 if rock_manifest.bin then 285 if wrap_bin_scripts and fs.is_lua(source) then
295 local move_bin_fn = wrap_bin_scripts and install_binary or fs.copy_binary 286 return target .. (cfg.wrapper_suffix or ""), function() return fs.wrap_script(source, target, name, version) end
296 ok, err = deploy_file_tree(rock_manifest.bin, path.bin_dir, cfg.deploy_bin_dir, move_bin_fn, cfg.wrapper_suffix) 287 else
288 return target, function() return fs.copy_binary(source, target) end
289 end
297 end 290 end
291
298 local function make_mover(perms) 292 local function make_mover(perms)
299 return function (src, dest) 293 return function(source, target)
300 return fs.move(src, dest, perms) 294 return target, function() return fs.move(source, target, perms) end
301 end 295 end
302 end 296 end
297
298 local ok, err = true
299 if rock_manifest.bin then
300 ok, err = deploy_file_tree(rock_manifest.bin, path.bin_dir, cfg.deploy_bin_dir, install_binary, cfg.wrapper_suffix)
301 end
303 if ok and rock_manifest.lua then 302 if ok and rock_manifest.lua then
304 ok, err = deploy_file_tree(rock_manifest.lua, path.lua_dir, cfg.deploy_lua_dir, make_mover(cfg.perm_read)) 303 ok, err = deploy_file_tree(rock_manifest.lua, path.lua_dir, cfg.deploy_lua_dir, make_mover(cfg.perm_read))
305 end 304 end