aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHisham <hisham@gobolinux.org>2016-10-28 12:10:46 -0200
committerHisham <hisham@gobolinux.org>2016-10-28 12:10:46 -0200
commit825e722029fbc93976c2d882dd21f444f9bffda0 (patch)
treee406e578987989d547db1710215af701bf644546
parent17f71ed0e37122d24d8df53e276bbb190c12fb69 (diff)
parent825f903a29df24b912e77e48d8b59e43e3a72029 (diff)
downloadluarocks-825e722029fbc93976c2d882dd21f444f9bffda0.tar.gz
luarocks-825e722029fbc93976c2d882dd21f444f9bffda0.tar.bz2
luarocks-825e722029fbc93976c2d882dd21f444f9bffda0.zip
Merge branch 'master' into luarocks-3
-rwxr-xr-xconfigure2
-rw-r--r--spec/fs_spec.lua21
-rw-r--r--src/luarocks/fs/lua.lua11
-rw-r--r--src/luarocks/fs/unix.lua9
-rw-r--r--src/luarocks/fs/win32.lua30
5 files changed, 40 insertions, 33 deletions
diff --git a/configure b/configure
index ae2696d2..ab629f98 100755
--- a/configure
+++ b/configure
@@ -292,7 +292,7 @@ then
292 else 292 else
293 suffixes="5.3 53 -5.3 -53 5.2 52 -5.2 -52 5.1 51 -5.1 -51" 293 suffixes="5.3 53 -5.3 -53 5.2 52 -5.2 -52 5.1 51 -5.1 -51"
294 fi 294 fi
295 for suffix in "" `echo $suffixes` 295 for suffix in `echo $suffixes` ""
296 do 296 do
297 search_interpreter "$suffix" && { 297 search_interpreter "$suffix" && {
298 lua_interp_found=yes 298 lua_interp_found=yes
diff --git a/spec/fs_spec.lua b/spec/fs_spec.lua
new file mode 100644
index 00000000..c76f47a4
--- /dev/null
+++ b/spec/fs_spec.lua
@@ -0,0 +1,21 @@
1local test_env = require("test/test_environment")
2
3test_env.unload_luarocks()
4local fs = require("luarocks.fs")
5local is_win = test_env.TEST_TARGET_OS == "windows"
6
7describe("Luarocks fs test #whitebox #w_fs", function()
8 describe("fs.Q", function()
9 it("simple argument", function()
10 assert.are.same(is_win and '"foo"' or "'foo'", fs.Q("foo"))
11 end)
12
13 it("argument with quotes", function()
14 assert.are.same(is_win and [["it's \"quoting\""]] or [['it'\''s "quoting"']], fs.Q([[it's "quoting"]]))
15 end)
16
17 it("argument with special characters", function()
18 assert.are.same(is_win and [["\\"%" \\\\" \\\\\\"]] or [['\% \\" \\\']], fs.Q([[\% \\" \\\]]))
19 end)
20 end)
21end)
diff --git a/src/luarocks/fs/lua.lua b/src/luarocks/fs/lua.lua
index 770da2b7..e4c6ca05 100644
--- a/src/luarocks/fs/lua.lua
+++ b/src/luarocks/fs/lua.lua
@@ -30,17 +30,6 @@ local dir_stack = {}
30 30
31local dir_separator = "/" 31local dir_separator = "/"
32 32
33--- Quote argument for shell processing.
34-- Adds single quotes and escapes.
35-- @param arg string: Unquoted argument.
36-- @return string: Quoted argument.
37function fs_lua.Q(arg)
38 assert(type(arg) == "string")
39
40 -- FIXME Unix-specific
41 return "'" .. arg:gsub("'", "'\\''") .. "'"
42end
43
44--- Test is file/dir is writable. 33--- Test is file/dir is writable.
45-- Warning: testing if a file/dir is writable does not guarantee 34-- Warning: testing if a file/dir is writable does not guarantee
46-- that it will remain writable and therefore it is no replacement 35-- that it will remain writable and therefore it is no replacement
diff --git a/src/luarocks/fs/unix.lua b/src/luarocks/fs/unix.lua
index df9d256d..aca64ac0 100644
--- a/src/luarocks/fs/unix.lua
+++ b/src/luarocks/fs/unix.lua
@@ -22,6 +22,15 @@ function unix.quiet_stderr(cmd)
22 return cmd.." 2> /dev/null" 22 return cmd.." 2> /dev/null"
23end 23end
24 24
25--- Quote argument for shell processing.
26-- Adds single quotes and escapes.
27-- @param arg string: Unquoted argument.
28-- @return string: Quoted argument.
29function unix.Q(arg)
30 assert(type(arg) == "string")
31 return "'" .. arg:gsub("'", "'\\''") .. "'"
32end
33
25--- Return an absolute pathname from a potentially relative one. 34--- Return an absolute pathname from a potentially relative one.
26-- @param pathname string: pathname to convert. 35-- @param pathname string: pathname to convert.
27-- @param relative_to string or nil: path to prepend when making 36-- @param relative_to string or nil: path to prepend when making
diff --git a/src/luarocks/fs/win32.lua b/src/luarocks/fs/win32.lua
index 9ce95986..2216d2fa 100644
--- a/src/luarocks/fs/win32.lua
+++ b/src/luarocks/fs/win32.lua
@@ -35,19 +35,6 @@ end
35 35
36local drive_letter = "[%.a-zA-Z]?:?[\\/]" 36local drive_letter = "[%.a-zA-Z]?:?[\\/]"
37 37
38local win_escape_chars = {
39 ["%"] = "%%",
40 ['"'] = '\\"',
41}
42
43local function q_escaper(bs, q)
44 return ("\\"):rep(2*#bs-1) .. (q or "\\")
45end
46
47local function p_escaper(bs)
48 return bs .. bs .. '"%"'
49end
50
51--- Quote argument for shell processing. Fixes paths on Windows. 38--- Quote argument for shell processing. Fixes paths on Windows.
52-- Adds double quotes and escapes. 39-- Adds double quotes and escapes.
53-- @param arg string: Unquoted argument. 40-- @param arg string: Unquoted argument.
@@ -61,11 +48,11 @@ function win32.Q(arg)
61 if arg == "\\" then 48 if arg == "\\" then
62 return '\\' -- CHDIR needs special handling for root dir 49 return '\\' -- CHDIR needs special handling for root dir
63 end 50 end
64 -- URLs and anything else 51 -- URLs and anything else
65 arg = arg:gsub('(\\+)(")', q_escaper) 52 arg = arg:gsub('\\(\\*)"', '\\%1%1"')
66 arg = arg:gsub('(\\+)$', q_escaper) 53 arg = arg:gsub('\\+$', '%0%0')
67 arg = arg:gsub('"', win_escape_chars) 54 arg = arg:gsub('"', '\\"')
68 arg = arg:gsub('(\\*)%%', p_escaper) 55 arg = arg:gsub('(\\*)%%', '%1%1"%%"')
69 return '"' .. arg .. '"' 56 return '"' .. arg .. '"'
70end 57end
71 58
@@ -83,9 +70,10 @@ function win32.Qb(arg)
83 return '\\' -- CHDIR needs special handling for root dir 70 return '\\' -- CHDIR needs special handling for root dir
84 end 71 end
85 -- URLs and anything else 72 -- URLs and anything else
86 arg = arg:gsub('(\\+)(")', q_escaper) 73 arg = arg:gsub('\\(\\*)"', '\\%1%1"')
87 arg = arg:gsub('(\\+)$', q_escaper) 74 arg = arg:gsub('\\+$', '%0%0')
88 arg = arg:gsub('[%%"]', win_escape_chars) 75 arg = arg:gsub('"', '\\"')
76 arg = arg:gsub('%%', '%%%%')
89 return '"' .. arg .. '"' 77 return '"' .. arg .. '"'
90end 78end
91 79