From 569ab48390725c2d87f9a89cdeb47bae3fc2cd46 Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Thu, 9 Sep 2010 16:03:13 -0300 Subject: Preserve permissions when copying files --- src/luarocks/cfg.lua | 2 ++ src/luarocks/fs/lua.lua | 6 ++++++ src/luarocks/fs/unix.lua | 1 - src/luarocks/fs/unix/tools.lua | 9 +++++++++ src/luarocks/fs/win32.lua | 8 ++++++++ 5 files changed, 25 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/luarocks/cfg.lua b/src/luarocks/cfg.lua index 67cd17b7..45c73bf6 100644 --- a/src/luarocks/cfg.lua +++ b/src/luarocks/cfg.lua @@ -63,9 +63,11 @@ end if system == "FreeBSD" then detected.unix = true detected.freebsd = true + detected.bsd = true elseif system == "Darwin" then detected.unix = true detected.macosx = true + detected.bsd = true elseif system == "Linux" then detected.unix = true detected.linux = true diff --git a/src/luarocks/fs/lua.lua b/src/luarocks/fs/lua.lua index cd0a31e0..70df65be 100644 --- a/src/luarocks/fs/lua.lua +++ b/src/luarocks/fs/lua.lua @@ -230,6 +230,7 @@ function copy(src, dest) if destmode == "directory" then dest = dir.path(dest, dir.base_name(src)) end + local perms = fs.get_permissions(src) local src_h, err = io.open(src, "rb") if not src_h then return nil, err end local dest_h, err = io.open(dest, "wb+") @@ -241,6 +242,7 @@ function copy(src, dest) end src_h:close() dest_h:close() + fs.chmod(dest, perms) return true end @@ -571,6 +573,10 @@ function chmod(file, mode) return err == 0 end +function get_permissions(file) + return posix.stat(file, "mode") +end + end --------------------------------------------------------------------- diff --git a/src/luarocks/fs/unix.lua b/src/luarocks/fs/unix.lua index 94a3ad4e..f2290412 100644 --- a/src/luarocks/fs/unix.lua +++ b/src/luarocks/fs/unix.lua @@ -122,4 +122,3 @@ end function copy_binary(filename, dest) return fs.copy(filename, dest) end - diff --git a/src/luarocks/fs/unix/tools.lua b/src/luarocks/fs/unix/tools.lua index 33dbc489..2bfa7c3e 100644 --- a/src/luarocks/fs/unix/tools.lua +++ b/src/luarocks/fs/unix/tools.lua @@ -343,3 +343,12 @@ function unpack_archive(archive) end return true end + +function get_permissions(filename) + local ret + local flag = cfg.is_platform("bsd") and "-f '%A'" or "-c '%a'" + local pipe = io.popen("stat "..flag.." "..fs.Q(filename)) + ret = pipe:read("*l") + pipe:close() + return ret +end diff --git a/src/luarocks/fs/win32.lua b/src/luarocks/fs/win32.lua index d87ad90d..44740850 100644 --- a/src/luarocks/fs/win32.lua +++ b/src/luarocks/fs/win32.lua @@ -95,3 +95,11 @@ function copy_binary(filename, dest) end return true end + +function chmod(filename, mode) + return true +end + +function get_permissions(filename) + return "" +end -- cgit v1.2.3-55-g6feb