aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2013-08-15 14:27:33 -0300
committerHisham Muhammad <hisham@gobolinux.org>2013-08-15 14:27:33 -0300
commit772410c041f3fa9480e49e7aea88ec265a74b89d (patch)
tree10d47ddf88147a072e533ccea8bf5d4f1f390dab
parentc7a3685013ad5bfa60bce6a91707903b699df431 (diff)
downloadluarocks-772410c041f3fa9480e49e7aea88ec265a74b89d.tar.gz
luarocks-772410c041f3fa9480e49e7aea88ec265a74b89d.tar.bz2
luarocks-772410c041f3fa9480e49e7aea88ec265a74b89d.zip
Make sure fs.make_dir is always checked and results in proper errors.
-rw-r--r--src/luarocks/build.lua12
-rw-r--r--src/luarocks/build/builtin.lua5
-rw-r--r--src/luarocks/cache.lua6
-rw-r--r--src/luarocks/fetch.lua9
-rw-r--r--src/luarocks/fs/lua.lua28
-rw-r--r--src/luarocks/fs/unix/tools.lua6
-rw-r--r--src/luarocks/fs/win32/tools.lua5
-rw-r--r--src/luarocks/pack.lua14
-rw-r--r--src/luarocks/repos.lua6
-rw-r--r--src/luarocks/tools/tar.lua6
-rw-r--r--src/luarocks/unpack.lua3
11 files changed, 63 insertions, 37 deletions
diff --git a/src/luarocks/build.lua b/src/luarocks/build.lua
index dbe450ab..40f02e38 100644
--- a/src/luarocks/build.lua
+++ b/src/luarocks/build.lua
@@ -56,14 +56,17 @@ local function install_files(files, location, is_module_path)
56 if type(k) == "string" then 56 if type(k) == "string" then
57 if is_module_path then 57 if is_module_path then
58 dest = dir.path(location, path.module_to_path(k)) 58 dest = dir.path(location, path.module_to_path(k))
59 fs.make_dir(dest) 59 local ok, err = fs.make_dir(dest)
60 if not ok then return nil, err end
60 else 61 else
61 dest = dir.path(location, dir.dir_name(k)) 62 dest = dir.path(location, dir.dir_name(k))
62 fs.make_dir(dest) 63 local ok, err = fs.make_dir(dest)
64 if not ok then return nil, err end
63 dest = dir.path(dest, dir.base_name(k)) 65 dest = dir.path(dest, dir.base_name(k))
64 end 66 end
65 else 67 else
66 fs.make_dir(dest) 68 local ok, err = fs.make_dir(dest)
69 if not ok then return nil, err end
67 end 70 end
68 local ok = fs.copy(dir.path(file), dest) 71 local ok = fs.copy(dir.path(file), dest)
69 if not ok then 72 if not ok then
@@ -180,7 +183,8 @@ function build_rockspec(rockspec_file, need_to_fetch, minimal_mode, deps_mode)
180 } 183 }
181 184
182 for _, d in pairs(dirs) do 185 for _, d in pairs(dirs) do
183 fs.make_dir(d.name) 186 local ok, err = fs.make_dir(d.name)
187 if not ok then return nil, err end
184 end 188 end
185 local rollback = util.schedule_function(function() 189 local rollback = util.schedule_function(function()
186 fs.delete(path.install_dir(name, version)) 190 fs.delete(path.install_dir(name, version))
diff --git a/src/luarocks/build/builtin.lua b/src/luarocks/build/builtin.lua
index 9d97d58b..c96a2496 100644
--- a/src/luarocks/build/builtin.lua
+++ b/src/luarocks/build/builtin.lua
@@ -224,7 +224,8 @@ function run(rockspec)
224 if not ok then break end 224 if not ok then break end
225 local module_name = dir.path(moddir, name:match("([^.]*)$").."."..util.matchquote(cfg.lib_extension)):gsub("//", "/") 225 local module_name = dir.path(moddir, name:match("([^.]*)$").."."..util.matchquote(cfg.lib_extension)):gsub("//", "/")
226 if moddir ~= "" then 226 if moddir ~= "" then
227 fs.make_dir(moddir) 227 local ok, err = fs.make_dir(moddir)
228 if not ok then return nil, err end
228 end 229 end
229 local dest = dir.path(libdir, moddir) 230 local dest = dir.path(libdir, moddir)
230 built_modules[module_name] = dest 231 built_modules[module_name] = dest
@@ -242,7 +243,7 @@ function run(rockspec)
242 end 243 end
243 end 244 end
244 if fs.is_dir("lua") then 245 if fs.is_dir("lua") then
245 ok, err = fs.copy_contents("lua", luadir) 246 local ok, err = fs.copy_contents("lua", luadir)
246 if not ok then 247 if not ok then
247 return nil, "Failed copying contents of 'lua' directory: "..err 248 return nil, "Failed copying contents of 'lua' directory: "..err
248 end 249 end
diff --git a/src/luarocks/cache.lua b/src/luarocks/cache.lua
index 21185c10..fe74ba18 100644
--- a/src/luarocks/cache.lua
+++ b/src/luarocks/cache.lua
@@ -53,11 +53,13 @@ end
53function refresh_local_cache(server, url, user, password) 53function refresh_local_cache(server, url, user, password)
54 local local_cache, protocol, server_path, user, password = split_server_url(server, url, user, password) 54 local local_cache, protocol, server_path, user, password = split_server_url(server, url, user, password)
55 55
56 fs.make_dir(cfg.local_cache) 56 local ok, err = fs.make_dir(cfg.local_cache)
57 if not ok then return nil, err end
57 58
58 local tmp_cache = false 59 local tmp_cache = false
59 if not local_cache then 60 if not local_cache then
60 local_cache = fs.make_temp_dir("local_cache") 61 local err
62 local_cache, err = fs.make_temp_dir("local_cache")
61 tmp_cache = true 63 tmp_cache = true
62 end 64 end
63 local ok = fs.make_dir(local_cache) 65 local ok = fs.make_dir(local_cache)
diff --git a/src/luarocks/fetch.lua b/src/luarocks/fetch.lua
index bfdbacec..be2f32c6 100644
--- a/src/luarocks/fetch.lua
+++ b/src/luarocks/fetch.lua
@@ -66,9 +66,9 @@ function fetch_url_at_temp_dir(url, tmpname, filename)
66 return nil, "File not found: "..pathname 66 return nil, "File not found: "..pathname
67 end 67 end
68 else 68 else
69 local temp_dir = fs.make_temp_dir(tmpname) 69 local temp_dir, err = fs.make_temp_dir(tmpname)
70 if not temp_dir then 70 if not temp_dir then
71 return nil, "Failed creating temporary directory." 71 return nil, "Failed creating temporary directory "..tmpname..": "..err
72 end 72 end
73 util.schedule_function(fs.delete, temp_dir) 73 util.schedule_function(fs.delete, temp_dir)
74 fs.change_dir(temp_dir) 74 fs.change_dir(temp_dir)
@@ -104,7 +104,10 @@ function fetch_and_unpack_rock(rock_file, dest)
104 local unpack_dir 104 local unpack_dir
105 if dest then 105 if dest then
106 unpack_dir = dest 106 unpack_dir = dest
107 fs.make_dir(unpack_dir) 107 local ok, err = fs.make_dir(unpack_dir)
108 if not ok then
109 return nil, "Failed unpacking rock file: " .. err
110 end
108 else 111 else
109 unpack_dir = fs.make_temp_dir(name) 112 unpack_dir = fs.make_temp_dir(name)
110 end 113 end
diff --git a/src/luarocks/fs/lua.lua b/src/luarocks/fs/lua.lua
index 36b33690..7e208357 100644
--- a/src/luarocks/fs/lua.lua
+++ b/src/luarocks/fs/lua.lua
@@ -69,16 +69,17 @@ end
69--- Create a temporary directory. 69--- Create a temporary directory.
70-- @param name string: name pattern to use for avoiding conflicts 70-- @param name string: name pattern to use for avoiding conflicts
71-- when creating temporary directory. 71-- when creating temporary directory.
72-- @return string or nil: name of temporary directory or nil on failure. 72-- @return string or (nil, string): name of temporary directory or (nil, error message) on failure.
73function make_temp_dir(name) 73function make_temp_dir(name)
74 assert(type(name) == "string") 74 assert(type(name) == "string")
75 name = dir.normalize(name) 75 name = dir.normalize(name)
76 76
77 local temp_dir = (os.getenv("TMP") or "/tmp") .. "/luarocks_" .. name:gsub(dir.separator, "_") .. "-" .. tostring(math.floor(math.random() * 10000)) 77 local temp_dir = (os.getenv("TMP") or "/tmp") .. "/luarocks_" .. name:gsub(dir.separator, "_") .. "-" .. tostring(math.floor(math.random() * 10000))
78 if fs.make_dir(temp_dir) then 78 local ok, err = fs.make_dir(temp_dir)
79 if ok then
79 return temp_dir 80 return temp_dir
80 else 81 else
81 return nil 82 return nil, err
82 end 83 end
83end 84end
84 85
@@ -131,11 +132,7 @@ if lfs_ok then
131function execute_string(cmd) 132function execute_string(cmd)
132 if cfg.verbose then print("Executing: "..cmd) end 133 if cfg.verbose then print("Executing: "..cmd) end
133 local code = os.execute(cmd) 134 local code = os.execute(cmd)
134 if code == 0 or code == true then 135 return (code == 0 or code == true)
135 return true
136 else
137 return false
138 end
139end 136end
140 137
141--- Obtain current directory. 138--- Obtain current directory.
@@ -180,7 +177,7 @@ end
180-- If any of the higher levels in the path name does not exist 177-- If any of the higher levels in the path name does not exist
181-- too, they are created as well. 178-- too, they are created as well.
182-- @param directory string: pathname of directory to create. 179-- @param directory string: pathname of directory to create.
183-- @return boolean: true on success, false on failure. 180-- @return boolean or (boolean, string): true on success or (false, error message) on failure.
184function make_dir(directory) 181function make_dir(directory)
185 assert(type(directory) == "string") 182 assert(type(directory) == "string")
186 directory = dir.normalize(directory) 183 directory = dir.normalize(directory)
@@ -197,11 +194,12 @@ function make_dir(directory)
197 path = path and path .. dir.separator .. d or d 194 path = path and path .. dir.separator .. d or d
198 local mode = lfs.attributes(path, "mode") 195 local mode = lfs.attributes(path, "mode")
199 if not mode then 196 if not mode then
200 if not lfs.mkdir(path) then 197 local ok, err = lfs.mkdir(path)
201 return false 198 if not ok then
199 return false, err
202 end 200 end
203 elseif mode ~= "directory" then 201 elseif mode ~= "directory" then
204 return false 202 return false, path.." is not a directory"
205 end 203 end
206 end 204 end
207 return true 205 return true
@@ -274,7 +272,8 @@ local function recursive_copy(src, dest)
274 if not ok then return false end 272 if not ok then return false end
275 elseif srcmode == "directory" then 273 elseif srcmode == "directory" then
276 local subdir = dir.path(dest, dir.base_name(src)) 274 local subdir = dir.path(dest, dir.base_name(src))
277 fs.make_dir(subdir) 275 local ok, err = fs.make_dir(subdir)
276 if not ok then return nil, err end
278 for file in lfs.dir(src) do 277 for file in lfs.dir(src) do
279 if file ~= "." and file ~= ".." then 278 if file ~= "." and file ~= ".." then
280 local ok = recursive_copy(dir.path(src, file), subdir) 279 local ok = recursive_copy(dir.path(src, file), subdir)
@@ -455,7 +454,8 @@ function unzip(zipfile)
455 local file = files() 454 local file = files()
456 repeat 455 repeat
457 if file.filename:sub(#file.filename) == "/" then 456 if file.filename:sub(#file.filename) == "/" then
458 fs.make_dir(dir.path(fs.current_dir(), file.filename)) 457 local ok, err = fs.make_dir(dir.path(fs.current_dir(), file.filename))
458 if not ok then return nil, err end
459 else 459 else
460 local rf, err = zipfile:open(file.filename) 460 local rf, err = zipfile:open(file.filename)
461 if not rf then zipfile:close(); return nil, err end 461 if not rf then zipfile:close(); return nil, err end
diff --git a/src/luarocks/fs/unix/tools.lua b/src/luarocks/fs/unix/tools.lua
index 3b853be7..23bd8161 100644
--- a/src/luarocks/fs/unix/tools.lua
+++ b/src/luarocks/fs/unix/tools.lua
@@ -71,7 +71,11 @@ end
71-- @return boolean: true on success, false on failure. 71-- @return boolean: true on success, false on failure.
72function make_dir(directory) 72function make_dir(directory)
73 assert(directory) 73 assert(directory)
74 return fs.execute(vars.MKDIR.." -p", directory) 74 local ok, err = fs.execute(vars.MKDIR.." -p", directory)
75 if not ok then
76 err = "failed making directory "..directory
77 end
78 return ok, err
75end 79end
76 80
77--- Remove a directory if it is empty. 81--- Remove a directory if it is empty.
diff --git a/src/luarocks/fs/win32/tools.lua b/src/luarocks/fs/win32/tools.lua
index 1af1dd91..97ba4fe5 100644
--- a/src/luarocks/fs/win32/tools.lua
+++ b/src/luarocks/fs/win32/tools.lua
@@ -103,7 +103,10 @@ end
103function make_dir(directory) 103function make_dir(directory)
104 assert(directory) 104 assert(directory)
105 fs.execute(fs.quiet(vars.MKDIR.." "..fs.Q(directory))) 105 fs.execute(fs.quiet(vars.MKDIR.." "..fs.Q(directory)))
106 return 1 106 if not fs.is_dir(directory) then
107 return false, "failed making directory "..directory
108 end
109 return true
107end 110end
108 111
109--- Remove a directory if it is empty. 112--- Remove a directory if it is empty.
diff --git a/src/luarocks/pack.lua b/src/luarocks/pack.lua
index 583932e0..ede992ce 100644
--- a/src/luarocks/pack.lua
+++ b/src/luarocks/pack.lua
@@ -58,12 +58,14 @@ local function pack_source_rock(rockspec_file)
58end 58end
59 59
60local function copy_back_files(name, version, file_tree, deploy_dir, pack_dir) 60local function copy_back_files(name, version, file_tree, deploy_dir, pack_dir)
61 fs.make_dir(pack_dir) 61 local ok, err = fs.make_dir(pack_dir)
62 if not ok then return nil, err end
62 for file, sub in pairs(file_tree) do 63 for file, sub in pairs(file_tree) do
63 local source = dir.path(deploy_dir, file) 64 local source = dir.path(deploy_dir, file)
64 local target = dir.path(pack_dir, file) 65 local target = dir.path(pack_dir, file)
65 if type(sub) == "table" then 66 if type(sub) == "table" then
66 local ok, err = copy_back_files(name, version, sub, source, target) 67 local ok, err = copy_back_files(name, version, sub, source, target)
68 if not ok then return nil, err end
67 else 69 else
68 local versioned = path.versioned_name(source, deploy_dir, name, version) 70 local versioned = path.versioned_name(source, deploy_dir, name, version)
69 if fs.exists(versioned) then 71 if fs.exists(versioned) then
@@ -128,11 +130,13 @@ local function do_pack_binary_rock(name, version)
128 130
129 local is_binary = false 131 local is_binary = false
130 if rock_manifest.lib then 132 if rock_manifest.lib then
131 copy_back_files(name, version, rock_manifest.lib, path.deploy_lib_dir(root), dir.path(temp_dir, "lib")) 133 local ok, err = copy_back_files(name, version, rock_manifest.lib, path.deploy_lib_dir(root), dir.path(temp_dir, "lib"))
134 if not ok then return nil, "Failed copying back files: " .. err end
132 is_binary = true 135 is_binary = true
133 end 136 end
134 if rock_manifest.lua then 137 if rock_manifest.lua then
135 copy_back_files(name, version, rock_manifest.lua, path.deploy_lua_dir(root), dir.path(temp_dir, "lua")) 138 local ok, err = copy_back_files(name, version, rock_manifest.lua, path.deploy_lua_dir(root), dir.path(temp_dir, "lua"))
139 if not ok then return nil, "Failed copying back files: " .. err end
136 end 140 end
137 141
138 fs.change_dir(temp_dir) 142 fs.change_dir(temp_dir)
@@ -157,9 +161,9 @@ function pack_binary_rock(name, version, cmd, ...)
157 -- to shave off the final deploy steps from the build phase and the initial 161 -- to shave off the final deploy steps from the build phase and the initial
158 -- collect steps from the pack phase. 162 -- collect steps from the pack phase.
159 163
160 local temp_dir = fs.make_temp_dir("luarocks-build-pack-"..dir.base_name(name)) 164 local temp_dir, err = fs.make_temp_dir("luarocks-build-pack-"..dir.base_name(name))
161 if not temp_dir then 165 if not temp_dir then
162 return nil, "Failed creating temporary directory." 166 return nil, "Failed creating temporary directory: "..err
163 end 167 end
164 util.schedule_function(fs.delete, temp_dir) 168 util.schedule_function(fs.delete, temp_dir)
165 169
diff --git a/src/luarocks/repos.lua b/src/luarocks/repos.lua
index b7e64d42..c7b381df 100644
--- a/src/luarocks/repos.lua
+++ b/src/luarocks/repos.lua
@@ -175,7 +175,8 @@ local function resolve_conflict(target, deploy_dir, name, version)
175 end 175 end
176 if name ~= cname or deps.compare_versions(version, cversion) then 176 if name ~= cname or deps.compare_versions(version, cversion) then
177 local versioned = path.versioned_name(target, deploy_dir, cname, cversion) 177 local versioned = path.versioned_name(target, deploy_dir, cname, cversion)
178 fs.make_dir(dir.dir_name(versioned)) 178 local ok, err = fs.make_dir(dir.dir_name(versioned))
179 if not ok then return nil, err end
179 fs.move(target, versioned) 180 fs.move(target, versioned)
180 return target 181 return target
181 else 182 else
@@ -220,7 +221,8 @@ function deploy_files(name, version, wrap_bin_scripts)
220 target = new_target 221 target = new_target
221 end 222 end
222 end 223 end
223 fs.make_dir(dir.dir_name(target)) 224 ok, err = fs.make_dir(dir.dir_name(target))
225 if not ok then return nil, err end
224 ok, err = move_fn(source, target, name, version) 226 ok, err = move_fn(source, target, name, version)
225 fs.remove_dir_tree_if_empty(dir.dir_name(source)) 227 fs.remove_dir_tree_if_empty(dir.dir_name(source))
226 if not ok then return nil, err end 228 if not ok then return nil, err end
diff --git a/src/luarocks/tools/tar.lua b/src/luarocks/tools/tar.lua
index ba01a413..0c68ab2f 100644
--- a/src/luarocks/tools/tar.lua
+++ b/src/luarocks/tools/tar.lua
@@ -119,11 +119,13 @@ function untar(filename, destdir)
119 end 119 end
120 local pathname = dir.path(destdir, header.name) 120 local pathname = dir.path(destdir, header.name)
121 if header.typeflag == "directory" then 121 if header.typeflag == "directory" then
122 fs.make_dir(pathname) 122 local ok, err = fs.make_dir(pathname)
123 if not ok then return nil, err end
123 elseif header.typeflag == "file" then 124 elseif header.typeflag == "file" then
124 local dirname = dir.dir_name(pathname) 125 local dirname = dir.dir_name(pathname)
125 if dirname ~= "" then 126 if dirname ~= "" then
126 fs.make_dir(dirname) 127 local ok, err = fs.make_dir(dirname)
128 if not ok then return nil, err end
127 end 129 end
128 local file_handle = io.open(pathname, "wb") 130 local file_handle = io.open(pathname, "wb")
129 file_handle:write(file_data) 131 file_handle:write(file_data)
diff --git a/src/luarocks/unpack.lua b/src/luarocks/unpack.lua
index 67153812..67db5ca5 100644
--- a/src/luarocks/unpack.lua
+++ b/src/luarocks/unpack.lua
@@ -99,7 +99,8 @@ local function run_unpacker(file)
99 if (fs.exists(dir_name)) then 99 if (fs.exists(dir_name)) then
100 return nil, "Directory "..dir_name.." already exists." 100 return nil, "Directory "..dir_name.." already exists."
101 end 101 end
102 fs.make_dir(dir_name) 102 local ok, err = fs.make_dir(dir_name)
103 if not ok then return nil, err end
103 local rollback = util.schedule_function(fs.delete, fs.absolute_name(dir_name)) 104 local rollback = util.schedule_function(fs.delete, fs.absolute_name(dir_name))
104 105
105 local rockspec, err 106 local rockspec, err