From df1e8d9e617c0ce3ec9c899aa1f08773532bb6b0 Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Thu, 26 Sep 2013 20:42:59 -0300 Subject: A simpler approach for reducing output clutter. Closes #158. --- src/luarocks/build/cmake.lua | 2 +- src/luarocks/fs/lua.lua | 27 ++++++++++++++++++++++----- src/luarocks/fs/unix/tools.lua | 10 +++++----- src/luarocks/fs/win32/tools.lua | 24 ++++++++++++------------ src/luarocks/persist.lua | 2 +- 5 files changed, 41 insertions(+), 24 deletions(-) diff --git a/src/luarocks/build/cmake.lua b/src/luarocks/build/cmake.lua index 82f4ff58..f1737876 100644 --- a/src/luarocks/build/cmake.lua +++ b/src/luarocks/build/cmake.lua @@ -22,7 +22,7 @@ function run(rockspec) util.variable_substitutions(variables, rockspec.variables) - if not fs.execute_string(fs.quiet(rockspec.variables.CMAKE.." --help")) then + if not fs.execute_quiet(rockspec.variables.CMAKE, "--help")) then return nil, "'"..rockspec.variables.CMAKE.."' program not found. Is cmake installed? You may want to edit variables.CMAKE" end diff --git a/src/luarocks/fs/lua.lua b/src/luarocks/fs/lua.lua index f50ecf75..32aac6d6 100644 --- a/src/luarocks/fs/lua.lua +++ b/src/luarocks/fs/lua.lua @@ -83,6 +83,15 @@ function make_temp_dir(name) end end +local function quote_args(command, ...) + local out = { command } + for _, arg in ipairs({...}) do + assert(type(arg) == "string") + out[#out+1] = fs.Q(arg) + end + return table.concat(out, " ") +end + --- Run the given command, quoting its arguments. -- The command is executed in the current directory in the dir stack. -- @param command string: The command to be executed. No quoting/escaping @@ -92,12 +101,19 @@ end -- otherwise. function execute(command, ...) assert(type(command) == "string") + return fs.execute_string(quote_args(command, ...)) +end - for _, arg in ipairs({...}) do - assert(type(arg) == "string") - command = command .. " " .. fs.Q(arg) - end - return fs.execute_string(command) +--- Run the given command, quoting its arguments, silencing its output. +-- The command is executed in the current directory in the dir stack. +-- @param command string: The command to be executed. No quoting/escaping +-- is applied. +-- @param ... Strings containing additional arguments, which are quoted. +-- @return boolean: true if command succeeds (status code 0), false +-- otherwise. +function execute_quiet(command, ...) + assert(type(command) == "string") + return fs.execute_string(fs.quiet(quote_args(command, ...))) end --- Check the MD5 checksum for a file. @@ -482,6 +498,7 @@ if socket_ok then local ltn12 = require("ltn12") local luasec_ok, https = pcall(require, "ssl.https") + local redirect_protocols = { http = http, https = luasec_ok and https, diff --git a/src/luarocks/fs/unix/tools.lua b/src/luarocks/fs/unix/tools.lua index 9e4acf73..1b2931e9 100644 --- a/src/luarocks/fs/unix/tools.lua +++ b/src/luarocks/fs/unix/tools.lua @@ -88,7 +88,7 @@ end -- @param directory string: pathname of directory to remove. function remove_dir_if_empty(directory) assert(directory) - fs.execute_string(fs.quiet(vars.RMDIR.." "..fs.Q(directory))) + fs.execute_quiet(vars.RMDIR, directory) end --- Remove a directory if it is empty. @@ -97,7 +97,7 @@ end -- @param directory string: pathname of directory to remove. function remove_dir_tree_if_empty(directory) assert(directory) - fs.execute_string(fs.quiet(vars.RMDIR.." -p "..fs.Q(directory))) + fs.execute_quiet(vars.RMDIR, "-p", directory) end --- Copy a file. @@ -132,7 +132,7 @@ end -- plus an error message. function copy_contents(src, dest) assert(src and dest) - if fs.execute_string(fs.quiet(vars.CP.." -pPR "..fs.Q(src).."/* "..fs.Q(dest))) then + if fs.execute_quiet(vars.CP.." -pPR "..fs.Q(src).."/* "..fs.Q(dest)) then return true else return false, "Failed copying "..src.." to "..dest @@ -145,7 +145,7 @@ end function delete(arg) assert(arg) assert(arg:sub(1,1) == "/") - return fs.execute_string(fs.quiet(vars.RM.." -rf " .. fs.Q(arg))) + return fs.execute_quiet(vars.RM, "-rf", arg) end --- List the contents of a directory. @@ -206,7 +206,7 @@ end -- @return boolean: true on success, false on failure. function unzip(zipfile) assert(zipfile) - return fs.execute_string(fs.quiet(vars.UNZIP.." "..fs.Q(zipfile))) + return fs.execute_quiet(vars.UNZIP, zipfile) end --- Test is file/directory exists diff --git a/src/luarocks/fs/win32/tools.lua b/src/luarocks/fs/win32/tools.lua index f60b8f5b..b8f9bd36 100644 --- a/src/luarocks/fs/win32/tools.lua +++ b/src/luarocks/fs/win32/tools.lua @@ -108,7 +108,7 @@ end function make_dir(directory) assert(directory) directory = dir.normalize(directory) - fs.execute(fs.quiet(vars.MKDIR.." -p "..fs.Q(directory))) + fs.execute_quiet(vars.MKDIR.." -p ", directory) if not fs.is_dir(directory) then return false, "failed making directory "..directory end @@ -121,7 +121,7 @@ end -- @param directory string: pathname of directory to remove. function remove_dir_if_empty(directory) assert(directory) - fs.execute_string(fs.quiet(vars.RMDIR.." "..fs.Q(directory))) + fs.execute_quiet(vars.RMDIR, directory) end --- Remove a directory if it is empty. @@ -130,7 +130,7 @@ end -- @param directory string: pathname of directory to remove. function remove_dir_tree_if_empty(directory) assert(directory) - fs.execute_string(fs.quiet(vars.RMDIR.." "..fs.Q(directory))) + fs.execute_quiet(vars.RMDIR, directory) end --- Copy a file. @@ -155,7 +155,7 @@ end -- plus an error message. function copy_contents(src, dest) assert(src and dest) - if fs.execute_string(fs.quiet(vars.CP.." -dR "..src.."\\*.* "..fs.Q(dest))) then + if fs.execute_quiet(vars.CP.." -dR "..src.."\\*.* "..fs.Q(dest)) then return true else return false, "Failed copying "..src.." to "..dest @@ -170,7 +170,7 @@ function delete(arg) assert(arg) assert(arg:match("^[\a-zA-Z]?:?[\\/]")) fs.execute(vars.CHMOD.." a+rw -R ", arg) - return fs.execute_string(fs.quiet(vars.RM.." -rf " .. fs.Q(arg))) + return fs.execute_quiet(vars.RM.." -rf ", arg) end --- List the contents of a directory. @@ -245,7 +245,7 @@ end -- @return boolean: true if it is a directory, false otherwise. function is_dir(file) assert(file) - return fs.execute(fs.quiet(vars.TEST.." -d " .. fs.Q(file))) + return fs.execute_quiet(vars.TEST.." -d ", file) end --- Test is pathname is a regular file. @@ -301,20 +301,20 @@ function unpack_archive(archive) if archive:match("%.tar%.gz$") then ok = gunzip(archive) if ok then - ok = fs.execute(sevenzx, strip_extension(archive)) + ok = fs.execute_quiet(sevenzx, strip_extension(archive)) end elseif archive:match("%.tgz$") then ok = gunzip(archive) if ok then - ok = fs.execute(sevenzx, strip_extension(archive)..".tar") + ok = fs.execute_quiet(sevenzx, strip_extension(archive)..".tar") end elseif archive:match("%.tar%.bz2$") then - ok = fs.execute(sevenzx, archive) + ok = fs.execute_quiet(sevenzx, archive) if ok then - ok = fs.execute(sevenzx, strip_extension(archive)) + ok = fs.execute_quiet(sevenzx, strip_extension(archive)) end elseif archive:match("%.zip$") then - ok = fs.execute(sevenzx, archive) + ok = fs.execute_quiet(sevenzx, archive) elseif archive:match("%.lua$") or archive:match("%.c$") then -- Ignore .lua and .c files; they don't need to be extracted. return true @@ -352,5 +352,5 @@ end -- @return boolean: true if file exists, false otherwise. function exists(file) assert(file) - return fs.execute(fs.quiet("if not exist " .. fs.Q(file) .. " invalidcommandname")) + return fs.execute_quiet("if not exist " .. fs.Q(file) .. " invalidcommandname") end diff --git a/src/luarocks/persist.lua b/src/luarocks/persist.lua index 376a242a..5b92f9cb 100644 --- a/src/luarocks/persist.lua +++ b/src/luarocks/persist.lua @@ -170,4 +170,4 @@ function save_from_table(filename, tbl, field_order) write_table(out, tbl, field_order) out:close() return true -end +end \ No newline at end of file -- cgit v1.2.3-55-g6feb