aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--spec/quick/build.q76
-rw-r--r--src/luarocks/cmd.lua5
-rw-r--r--src/luarocks/cmd/build.lua6
-rw-r--r--src/luarocks/cmd/install.lua4
-rw-r--r--src/luarocks/cmd/make.lua6
-rw-r--r--src/luarocks/cmd/purge.lua5
-rw-r--r--src/luarocks/cmd/remove.lua7
-rw-r--r--src/luarocks/fs/unix/tools.lua2
8 files changed, 60 insertions, 51 deletions
diff --git a/spec/quick/build.q b/spec/quick/build.q
index 55bb7519..7cbc526b 100644
--- a/spec/quick/build.q
+++ b/spec/quick/build.q
@@ -79,11 +79,16 @@ a_rock 1.0
79================================================================================ 79================================================================================
80TEST: fails if no permissions to access the specified tree #unix 80TEST: fails if no permissions to access the specified tree #unix
81 81
82RUN: luarocks build --tree=/usr ./a_rock-1.0.1-rockspec 82RUN: luarocks build --tree=/usr ./a_rock-1.0-1.rockspec
83EXIT: 4 83EXIT: 2
84STDERR: 84STDERR:
85-------------------------------------------------------------------------------- 85--------------------------------------------------------------------------------
86requires exclusive write access 86You may want to run as a privileged user,
87or use --local to install into your local tree
88or run 'luarocks config local_by_default true' to make --local the default.
89
90(You may need to configure your Lua package paths
91to use the local tree, see 'luarocks path --help')
87-------------------------------------------------------------------------------- 92--------------------------------------------------------------------------------
88 93
89We show the OS permission denied error, so we don't show the --force-lock 94We show the OS permission denied error, so we don't show the --force-lock
@@ -96,33 +101,66 @@ try --force-lock
96 101
97NOT_EXISTS: %{testing_sys_rocks}/a_rock/1.0-1/a_rock-1.0-1.rockspec 102NOT_EXISTS: %{testing_sys_rocks}/a_rock/1.0-1/a_rock-1.0-1.rockspec
98 103
99RUN: luarocks build --tree=/usr ./a_rock-1.0.1-rockspec --force-lock 104
100EXIT: 4 105
101STDERR: 106================================================================================
107TEST: fails if tree is locked, --force-lock overrides #unix
108
109FILE: a_rock-1.0-1.rockspec
102-------------------------------------------------------------------------------- 110--------------------------------------------------------------------------------
103requires exclusive write access 111rockspec_format = "3.0"
112package = "a_rock"
113version = "1.0-1"
114source = {
115 url = "file://%{url(%{fixtures_dir})}/a_rock.lua"
116}
117description = {
118 summary = "An example rockspec",
119}
120dependencies = {
121 "lua >= 5.1"
122}
123build = {
124 modules = {
125 build = "a_rock.lua"
126 },
127}
104-------------------------------------------------------------------------------- 128--------------------------------------------------------------------------------
105 129
106We show the OS permission denied error, so we don't show the --force-lock 130FILE: %{testing_tree}/lockfile.lfs
107message. 131--------------------------------------------------------------------------------
132dummy lock file for testing
133--------------------------------------------------------------------------------
108 134
109NOT_STDERR: 135RUN: luarocks build --tree=%{testing_tree} ./a_rock-1.0-1.rockspec
136EXIT: 4
137STDERR:
110-------------------------------------------------------------------------------- 138--------------------------------------------------------------------------------
139requires exclusive write access
111try --force-lock 140try --force-lock
112-------------------------------------------------------------------------------- 141--------------------------------------------------------------------------------
113 142
114NOT_EXISTS: %{testing_sys_rocks}/a_rock/1.0-1/a_rock-1.0-1.rockspec 143RUN: luarocks build --tree=%{testing_tree} ./a_rock-1.0-1.rockspec --force-lock
144EXIT: 0
115 145
116 146
117 147
118================================================================================ 148================================================================================
119TEST: fails if no permissions to access the parent #unix 149TEST: fails if no permissions to access the parent #unix
120 150
121RUN: luarocks build --tree=/usr/invalid ./a_rock-1.0.1-rockspec 151RUN: luarocks build --tree=/usr/invalid ./a_rock-1.0-1.rockspec
122EXIT: 4 152EXIT: 2
123STDERR: 153STDERR:
124-------------------------------------------------------------------------------- 154--------------------------------------------------------------------------------
125requires exclusive write access 155Error: /usr/invalid/lib/luarocks/rocks-%{lua_version} does not exist
156and your user does not have write permissions in /usr
157
158You may want to run as a privileged user,
159or use --local to install into your local tree
160or run 'luarocks config local_by_default true' to make --local the default.
161
162(You may need to configure your Lua package paths
163to use the local tree, see 'luarocks path --help')
126-------------------------------------------------------------------------------- 164--------------------------------------------------------------------------------
127 165
128We show the OS permission denied error, so we don't show the --force-lock 166We show the OS permission denied error, so we don't show the --force-lock
@@ -135,16 +173,6 @@ try --force-lock
135 173
136NOT_EXISTS: %{testing_sys_rocks}/a_rock/1.0-1/a_rock-1.0-1.rockspec 174NOT_EXISTS: %{testing_sys_rocks}/a_rock/1.0-1/a_rock-1.0-1.rockspec
137 175
138RUN: luarocks build --tree=/usr/invalid ./a_rock-1.0.1-rockspec --force-lock
139EXIT: 4
140STDERR:
141--------------------------------------------------------------------------------
142requires exclusive write access
143failed to force the lock
144--------------------------------------------------------------------------------
145
146NOT_EXISTS: %{testing_sys_rocks}/a_rock/1.0-1/a_rock-1.0-1.rockspec
147
148 176
149 177
150================================================================================ 178================================================================================
diff --git a/src/luarocks/cmd.lua b/src/luarocks/cmd.lua
index b6d0d47e..6085fc9d 100644
--- a/src/luarocks/cmd.lua
+++ b/src/luarocks/cmd.lua
@@ -730,6 +730,11 @@ function cmd.run_command(description, commands, external_namespace, ...)
730 730
731 local lock 731 local lock
732 if cmd_mod.needs_lock and cmd_mod.needs_lock(args) then 732 if cmd_mod.needs_lock and cmd_mod.needs_lock(args) then
733 local ok, err = fs.check_command_permissions(args)
734 if not ok then
735 die(err, cmd.errorcodes.PERMISSIONDENIED)
736 end
737
733 lock, err = fs.lock_access(path.root_dir(cfg.root_dir), args.force_lock) 738 lock, err = fs.lock_access(path.root_dir(cfg.root_dir), args.force_lock)
734 if not lock then 739 if not lock then
735 err = args.force_lock 740 err = args.force_lock
diff --git a/src/luarocks/cmd/build.lua b/src/luarocks/cmd/build.lua
index 710c89f2..ada6b7d2 100644
--- a/src/luarocks/cmd/build.lua
+++ b/src/luarocks/cmd/build.lua
@@ -15,7 +15,6 @@ local build = require("luarocks.build")
15local writer = require("luarocks.manif.writer") 15local writer = require("luarocks.manif.writer")
16local search = require("luarocks.search") 16local search = require("luarocks.search")
17local make = require("luarocks.cmd.make") 17local make = require("luarocks.cmd.make")
18local cmd = require("luarocks.cmd")
19local repos = require("luarocks.repos") 18local repos = require("luarocks.repos")
20 19
21function cmd_build.add_to_parser(parser) 20function cmd_build.add_to_parser(parser)
@@ -156,11 +155,6 @@ function cmd_build.command(args)
156 end) 155 end)
157 end 156 end
158 157
159 local ok, err = fs.check_command_permissions(args)
160 if not ok then
161 return nil, err, cmd.errorcodes.PERMISSIONDENIED
162 end
163
164 local name, version, skip = do_build(args.rock, args.namespace, args.version, opts) 158 local name, version, skip = do_build(args.rock, args.namespace, args.version, opts)
165 if not name then 159 if not name then
166 return nil, version 160 return nil, version
diff --git a/src/luarocks/cmd/install.lua b/src/luarocks/cmd/install.lua
index a6dddd2b..e71b6db8 100644
--- a/src/luarocks/cmd/install.lua
+++ b/src/luarocks/cmd/install.lua
@@ -13,7 +13,6 @@ local remove = require("luarocks.remove")
13local search = require("luarocks.search") 13local search = require("luarocks.search")
14local queries = require("luarocks.queries") 14local queries = require("luarocks.queries")
15local cfg = require("luarocks.core.cfg") 15local cfg = require("luarocks.core.cfg")
16local cmd = require("luarocks.cmd")
17 16
18function install.add_to_parser(parser) 17function install.add_to_parser(parser)
19 local cmd = parser:command("install", "Install a rock.", util.see_also()) -- luacheck: ignore 431 18 local cmd = parser:command("install", "Install a rock.", util.see_also()) -- luacheck: ignore 431
@@ -226,9 +225,6 @@ end
226-- @return boolean or (nil, string, exitcode): True if installation was 225-- @return boolean or (nil, string, exitcode): True if installation was
227-- successful, nil and an error message otherwise. exitcode is optionally returned. 226-- successful, nil and an error message otherwise. exitcode is optionally returned.
228function install.command(args) 227function install.command(args)
229 local ok, err = fs.check_command_permissions(args)
230 if not ok then return nil, err, cmd.errorcodes.PERMISSIONDENIED end
231
232 if args.rock:match("%.rockspec$") or args.rock:match("%.src%.rock$") then 228 if args.rock:match("%.rockspec$") or args.rock:match("%.src%.rock$") then
233 local build = require("luarocks.cmd.build") 229 local build = require("luarocks.cmd.build")
234 return build.command(args) 230 return build.command(args)
diff --git a/src/luarocks/cmd/make.lua b/src/luarocks/cmd/make.lua
index ef794b91..eaa4b899 100644
--- a/src/luarocks/cmd/make.lua
+++ b/src/luarocks/cmd/make.lua
@@ -6,7 +6,6 @@
6local make = {} 6local make = {}
7 7
8local build = require("luarocks.build") 8local build = require("luarocks.build")
9local fs = require("luarocks.fs")
10local util = require("luarocks.util") 9local util = require("luarocks.util")
11local cfg = require("luarocks.core.cfg") 10local cfg = require("luarocks.core.cfg")
12local fetch = require("luarocks.fetch") 11local fetch = require("luarocks.fetch")
@@ -14,7 +13,6 @@ local pack = require("luarocks.pack")
14local remove = require("luarocks.remove") 13local remove = require("luarocks.remove")
15local deps = require("luarocks.deps") 14local deps = require("luarocks.deps")
16local writer = require("luarocks.manif.writer") 15local writer = require("luarocks.manif.writer")
17local cmd = require("luarocks.cmd")
18 16
19function make.cmd_options(parser) 17function make.cmd_options(parser)
20 parser:flag("--no-install", "Do not install the rock.") 18 parser:flag("--no-install", "Do not install the rock.")
@@ -126,9 +124,7 @@ function make.command(args)
126 return name, version 124 return name, version
127 end) 125 end)
128 else 126 else
129 local ok, err = fs.check_command_permissions(args) 127 local ok, err = build.build_rockspec(rockspec, opts)
130 if not ok then return nil, err, cmd.errorcodes.PERMISSIONDENIED end
131 ok, err = build.build_rockspec(rockspec, opts)
132 if not ok then return nil, err end 128 if not ok then return nil, err end
133 local name, version = ok, err -- luacheck: ignore 421 129 local name, version = ok, err -- luacheck: ignore 421
134 130
diff --git a/src/luarocks/cmd/purge.lua b/src/luarocks/cmd/purge.lua
index 16d96531..30811ddf 100644
--- a/src/luarocks/cmd/purge.lua
+++ b/src/luarocks/cmd/purge.lua
@@ -4,7 +4,6 @@
4local purge = {} 4local purge = {}
5 5
6local util = require("luarocks.util") 6local util = require("luarocks.util")
7local fs = require("luarocks.fs")
8local path = require("luarocks.path") 7local path = require("luarocks.path")
9local search = require("luarocks.search") 8local search = require("luarocks.search")
10local vers = require("luarocks.core.vers") 9local vers = require("luarocks.core.vers")
@@ -13,7 +12,6 @@ local writer = require("luarocks.manif.writer")
13local cfg = require("luarocks.core.cfg") 12local cfg = require("luarocks.core.cfg")
14local remove = require("luarocks.remove") 13local remove = require("luarocks.remove")
15local queries = require("luarocks.queries") 14local queries = require("luarocks.queries")
16local cmd = require("luarocks.cmd")
17 15
18function purge.add_to_parser(parser) 16function purge.add_to_parser(parser)
19 -- luacheck: push ignore 431 17 -- luacheck: push ignore 431
@@ -39,9 +37,6 @@ end
39function purge.command(args) 37function purge.command(args)
40 local tree = args.tree 38 local tree = args.tree
41 39
42 local ok, err = fs.check_command_permissions(args)
43 if not ok then return nil, err, cmd.errorcodes.PERMISSIONDENIED end
44
45 local results = {} 40 local results = {}
46 search.local_manifest_search(results, path.rocks_dir(tree), queries.all()) 41 search.local_manifest_search(results, path.rocks_dir(tree), queries.all())
47 42
diff --git a/src/luarocks/cmd/remove.lua b/src/luarocks/cmd/remove.lua
index 91aa8914..8b11bcd3 100644
--- a/src/luarocks/cmd/remove.lua
+++ b/src/luarocks/cmd/remove.lua
@@ -6,13 +6,11 @@ local cmd_remove = {}
6local remove = require("luarocks.remove") 6local remove = require("luarocks.remove")
7local util = require("luarocks.util") 7local util = require("luarocks.util")
8local cfg = require("luarocks.core.cfg") 8local cfg = require("luarocks.core.cfg")
9local fs = require("luarocks.fs")
10local search = require("luarocks.search") 9local search = require("luarocks.search")
11local path = require("luarocks.path") 10local path = require("luarocks.path")
12local deps = require("luarocks.deps") 11local deps = require("luarocks.deps")
13local writer = require("luarocks.manif.writer") 12local writer = require("luarocks.manif.writer")
14local queries = require("luarocks.queries") 13local queries = require("luarocks.queries")
15local cmd = require("luarocks.cmd")
16 14
17function cmd_remove.add_to_parser(parser) 15function cmd_remove.add_to_parser(parser)
18 -- luacheck: push ignore 431 16 -- luacheck: push ignore 431
@@ -43,9 +41,6 @@ function cmd_remove.command(args)
43 local name = args.rock 41 local name = args.rock
44 local deps_mode = deps.get_deps_mode(args) 42 local deps_mode = deps.get_deps_mode(args)
45 43
46 local ok, err = fs.check_command_permissions(args)
47 if not ok then return nil, err, cmd.errorcodes.PERMISSIONDENIED end
48
49 local rock_type = name:match("%.(rock)$") or name:match("%.(rockspec)$") 44 local rock_type = name:match("%.(rock)$") or name:match("%.(rockspec)$")
50 local version = args.version 45 local version = args.version
51 local filename = name 46 local filename = name
@@ -63,7 +58,7 @@ function cmd_remove.command(args)
63 return nil, "Could not find rock '"..rock.."' in "..path.rocks_tree_to_string(cfg.root_dir) 58 return nil, "Could not find rock '"..rock.."' in "..path.rocks_tree_to_string(cfg.root_dir)
64 end 59 end
65 60
66 ok, err = remove.remove_search_results(results, name, deps_mode, args.force, args.force_fast) 61 local ok, err = remove.remove_search_results(results, name, deps_mode, args.force, args.force_fast)
67 if not ok then 62 if not ok then
68 return nil, err 63 return nil, err
69 end 64 end
diff --git a/src/luarocks/fs/unix/tools.lua b/src/luarocks/fs/unix/tools.lua
index a0fba784..16b31335 100644
--- a/src/luarocks/fs/unix/tools.lua
+++ b/src/luarocks/fs/unix/tools.lua
@@ -338,7 +338,7 @@ function tools.lock_access(dirname, force)
338 338
339 fd:close() 339 fd:close()
340 340
341 local lockfile = dir.path(dirname, "lockfile.luarocks") 341 local lockfile = dir.path(dirname, "lockfile.lfs")
342 342
343 local force_flag = force and " -f" or "" 343 local force_flag = force and " -f" or ""
344 344