aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhisham <hisham@9ca3f7c1-7366-0410-b1a3-b5c78f85698c>2009-10-08 22:36:00 +0000
committerhisham <hisham@9ca3f7c1-7366-0410-b1a3-b5c78f85698c>2009-10-08 22:36:00 +0000
commit311287db133962862f03f01c02bb6debee429e3c (patch)
tree2a09aeed43cfdc363d353aa612d87e2cad8a8018
parentbffc3eece0c655fca3f6bdf5f4de578d31c9434a (diff)
downloadluarocks-311287db133962862f03f01c02bb6debee429e3c.tar.gz
luarocks-311287db133962862f03f01c02bb6debee429e3c.tar.bz2
luarocks-311287db133962862f03f01c02bb6debee429e3c.zip
work in progress
git-svn-id: http://luarocks.org/svn/luarocks/trunk@75 9ca3f7c1-7366-0410-b1a3-b5c78f85698c
-rw-r--r--src/luarocks/rep.lua105
1 files changed, 55 insertions, 50 deletions
diff --git a/src/luarocks/rep.lua b/src/luarocks/rep.lua
index ffe5a87c..cabb83ef 100644
--- a/src/luarocks/rep.lua
+++ b/src/luarocks/rep.lua
@@ -34,47 +34,24 @@ function is_installed(name, version)
34 return fs.is_dir(path.install_dir(name, version)) 34 return fs.is_dir(path.install_dir(name, version))
35end 35end
36 36
37--[[ 37local function recurse_rock_manifest_tree(file_tree, action)
38--- Install bin entries in the repository bin dir. 38 assert(type(file_tree) == "table")
39-- @param name string: name of package 39 assert(type(action) == "function")
40-- @param version string: package version in string format 40 local function do_recurse_rock_manifest_tree(tree, parent_path, parent_module)
41-- @param single_file string or nil: optional parameter, indicating the name 41
42-- of a single file to install; if not given, all bin files from the package 42 for file, sub in pairs(tree) do
43-- are installed. 43 if type(sub) == "table" then
44-- @return boolean or (nil, string): True if succeeded or nil and 44 local ok, err = recurse_rock_manifest_tree(sub, parent_path..file.."/", parent_module..file..".", action)
45-- and error message. 45 if not ok then return nil, err end
46function install_bins(name, version, single_file)
47 assert(type(name) == "string")
48 assert(type(version) == "string")
49
50 local bindir = path.bin_dir(name, version)
51 if fs.exists(bindir) then
52 local ok, err = fs.make_dir(cfg.deploy_bin_dir)
53 if not ok then
54 return nil, "Could not create "..cfg.deploy_bin_dir
55 end
56 local files = single_file and {single_file} or fs.list_dir(bindir)
57 for _, file in pairs(files) do
58 local fullname = dir.path(bindir, file)
59 local match = file:match("%.lua$")
60 local file
61 if not match then
62 file = io.open(fullname)
63 end
64 if match or (file and file:read():match("#!.*lua.*")) then
65 ok, err = fs.wrap_script(fullname, cfg.deploy_bin_dir)
66 else 46 else
67 ok, err = fs.copy_binary(fullname, cfg.deploy_bin_dir) 47 local ok, err = action(parent_path, parent_module, file)
68 end 48 if not ok then return nil, err end
69 if file then file:close() end
70 if not ok then
71 return nil, err
72 end 49 end
73 end 50 end
51 return true
74 end 52 end
75 return true 53 return do_recurse_rock_manifest_tree(file_tree, "", "", action)
76end 54end
77]]
78 55
79local function store_package_data(result, name, sub, prefix) 56local function store_package_data(result, name, sub, prefix)
80 assert(type(result) == "table") 57 assert(type(result) == "table")
@@ -221,6 +198,37 @@ function deploy_files(name, version)
221 assert(type(name) == "string") 198 assert(type(name) == "string")
222 assert(type(version) == "string") 199 assert(type(version) == "string")
223 200
201 local function deploy_file_tree(file_tree, deploy_dir, source_dir, move_fn)
202 return recurse_rock_manifest_tree(file_tree,
203 function(name, version, deploy_dir, parent_path, parent_module, file)
204
205 local versioned = path.versioned_name(dir.path(deploy_dir, file), name, version)
206 if fs.exists(versioned) then
207 fs.delete(versioned)
208 else
209 fs.delete(target)
210 end
211 return true
212
213 local source = dir.path(source_dir, file)
214 local target = dir.path(deploy_dir, file)
215 if type(sub) == "table" then
216 ok, err = deploy_file_tree(sub, source, target)
217 if not ok then return nil, err end
218 fs.remove_dir_if_empty(source)
219 else
220 if fs.exists(target) then
221 target, err = resolve_conflict(name, version, target)
222 if err then return nil, err.." Cannot install new version." end
223 end
224 ok, err = move_fn(source, target)
225 if not ok then return nil, err end
226 end
227
228 end
229 )
230 end
231
224 local function deploy_file_tree(file_tree, source_dir, deploy_dir, move_fn) 232 local function deploy_file_tree(file_tree, source_dir, deploy_dir, move_fn)
225 assert(type(file_tree) == "table") 233 assert(type(file_tree) == "table")
226 assert(type(source_dir) == "string") 234 assert(type(source_dir) == "string")
@@ -275,23 +283,20 @@ function delete_version(name, version)
275 assert(type(name) == "string") 283 assert(type(name) == "string")
276 assert(type(version) == "string") 284 assert(type(version) == "string")
277 285
278 local function delete_deployed_file_tree(file_tree, deploy_dir) 286 local function delete_deployed_file_tree(name, version, file_tree, deploy_dir)
279 for file, sub in pairs(file_tree) do 287 return recurse_rock_manifest_tree(name, version, file_tree, deploy_dir, "", "",
280 local target = dir.path(deploy_dir, file) 288 function(name, version, deploy_dir, parent_path, parent_module, file)
281 if type(sub) == "table" then 289
282 local ok, err = delete_deployed_file_tree(sub, target) 290 local versioned = path.versioned_name(dir.path(deploy_dir, file), name, version)
283 if not ok then return nil, err end
284 fs.remove_dir_if_empty(target)
285 else
286 local versioned = path.versioned_name(target, name, version)
287 if fs.exists(versioned) then 291 if fs.exists(versioned) then
288 fs.delete(versioned) 292 fs.delete(versioned)
289 else 293 else
290 fs.delete(target) 294 fs.delete(target)
291 end 295 end
296 return true
297
292 end 298 end
293 end 299 )
294 return true
295 end 300 end
296 301
297 local rock_manifest = manif.load_rock_manifest(name, version) 302 local rock_manifest = manif.load_rock_manifest(name, version)
@@ -301,13 +306,13 @@ function delete_version(name, version)
301 306
302 local ok, err = true 307 local ok, err = true
303 if rock_manifest.bin then 308 if rock_manifest.bin then
304 ok, err = delete_deployed_file_tree(rock_manifest.bin, cfg.deploy_bin_dir) 309 ok, err = delete_deployed_file_tree(name, version, rock_manifest.bin, cfg.deploy_bin_dir)
305 end 310 end
306 if ok and rock_manifest.lua then 311 if ok and rock_manifest.lua then
307 ok, err = delete_deployed_file_tree(rock_manifest.lua, cfg.deploy_lua_dir) 312 ok, err = delete_deployed_file_tree(name, version, rock_manifest.lua, cfg.deploy_lua_dir)
308 end 313 end
309 if ok and rock_manifest.lib then 314 if ok and rock_manifest.lib then
310 ok, err = delete_deployed_file_tree(rock_manifest.lib, cfg.deploy_lib_dir) 315 ok, err = delete_deployed_file_tree(name, version, rock_manifest.lib, cfg.deploy_lib_dir)
311 end 316 end
312 if err then return nil, err end 317 if err then return nil, err end
313 318