diff options
author | hisham <hisham@9ca3f7c1-7366-0410-b1a3-b5c78f85698c> | 2009-10-08 22:36:00 +0000 |
---|---|---|
committer | hisham <hisham@9ca3f7c1-7366-0410-b1a3-b5c78f85698c> | 2009-10-08 22:36:00 +0000 |
commit | 311287db133962862f03f01c02bb6debee429e3c (patch) | |
tree | 2a09aeed43cfdc363d353aa612d87e2cad8a8018 | |
parent | bffc3eece0c655fca3f6bdf5f4de578d31c9434a (diff) | |
download | luarocks-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.lua | 105 |
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)) |
35 | end | 35 | end |
36 | 36 | ||
37 | --[[ | 37 | local 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 |
46 | function 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) |
76 | end | 54 | end |
77 | ]] | ||
78 | 55 | ||
79 | local function store_package_data(result, name, sub, prefix) | 56 | local 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 | ||