diff options
| author | Hisham Muhammad <hisham@gobolinux.org> | 2019-03-15 19:29:06 -0300 |
|---|---|---|
| committer | Hisham Muhammad <hisham@gobolinux.org> | 2019-03-15 19:43:22 -0300 |
| commit | b7ad1123af254a5b1fffab4251effa96db58c408 (patch) | |
| tree | 0669222b14d4929d2eb91328fba75939e80cfc66 /src | |
| parent | 9064b9f1ff7bbdd7a25ac6e8e02ceb0fe9603e93 (diff) | |
| download | luarocks-b7ad1123af254a5b1fffab4251effa96db58c408.tar.gz luarocks-b7ad1123af254a5b1fffab4251effa96db58c408.tar.bz2 luarocks-b7ad1123af254a5b1fffab4251effa96db58c408.zip | |
cmd: improve detection of project dir
Perform detection of project dir earlier, so we can inspect what
Lua version its config uses.
Diffstat (limited to 'src')
| -rw-r--r-- | src/luarocks/cmd.lua | 59 |
1 files changed, 31 insertions, 28 deletions
diff --git a/src/luarocks/cmd.lua b/src/luarocks/cmd.lua index ff6abf3d..4397d43b 100644 --- a/src/luarocks/cmd.lua +++ b/src/luarocks/cmd.lua | |||
| @@ -151,6 +151,18 @@ local function check_popen() | |||
| 151 | end | 151 | end |
| 152 | end | 152 | end |
| 153 | 153 | ||
| 154 | local function find_project_dir() | ||
| 155 | local try = "." | ||
| 156 | for _ = 1, 10 do -- FIXME detect when root dir was hit instead | ||
| 157 | if exists(try .. "/.luarocks") and exists(try .. "/lua_modules") then | ||
| 158 | return try | ||
| 159 | elseif exists(try .. "/.luarocks-no-project") then | ||
| 160 | return nil | ||
| 161 | end | ||
| 162 | try = try .. "/.." | ||
| 163 | end | ||
| 164 | end | ||
| 165 | |||
| 154 | local process_tree_flags | 166 | local process_tree_flags |
| 155 | do | 167 | do |
| 156 | local function replace_tree(flags, root, tree) | 168 | local function replace_tree(flags, root, tree) |
| @@ -159,20 +171,6 @@ do | |||
| 159 | path.use_tree(tree or root) | 171 | path.use_tree(tree or root) |
| 160 | end | 172 | end |
| 161 | 173 | ||
| 162 | local function find_project_dir() | ||
| 163 | local try = "." | ||
| 164 | for _ = 1, 10 do -- FIXME detect when root dir was hit instead | ||
| 165 | local abs = fs.absolute_name(try) | ||
| 166 | if fs.is_dir(abs .. "/.luarocks") and fs.is_dir(abs .. "/lua_modules") then | ||
| 167 | abs = abs:gsub("/.$", "") | ||
| 168 | return abs, abs .. "/lua_modules" | ||
| 169 | elseif fs.exists(abs .. "/.luarocks-no-project") then | ||
| 170 | return nil | ||
| 171 | end | ||
| 172 | try = try .. "/.." | ||
| 173 | end | ||
| 174 | end | ||
| 175 | |||
| 176 | local function strip_trailing_slashes() | 174 | local function strip_trailing_slashes() |
| 177 | if type(cfg.root_dir) == "string" then | 175 | if type(cfg.root_dir) == "string" then |
| 178 | cfg.root_dir = cfg.root_dir:gsub("/+$", "") | 176 | cfg.root_dir = cfg.root_dir:gsub("/+$", "") |
| @@ -185,7 +183,7 @@ do | |||
| 185 | cfg.deploy_lib_dir = cfg.deploy_lib_dir:gsub("/+$", "") | 183 | cfg.deploy_lib_dir = cfg.deploy_lib_dir:gsub("/+$", "") |
| 186 | end | 184 | end |
| 187 | 185 | ||
| 188 | process_tree_flags = function(flags) | 186 | process_tree_flags = function(flags, project_dir) |
| 189 | 187 | ||
| 190 | if cfg.local_by_default then | 188 | if cfg.local_by_default then |
| 191 | flags["local"] = true | 189 | flags["local"] = true |
| @@ -219,16 +217,14 @@ do | |||
| 219 | "To force using the superuser's home, use --tree explicitly." | 217 | "To force using the superuser's home, use --tree explicitly." |
| 220 | end | 218 | end |
| 221 | replace_tree(flags, cfg.home_tree) | 219 | replace_tree(flags, cfg.home_tree) |
| 220 | elseif project_dir then | ||
| 221 | local project_tree = project_dir .. "/lua_modules" | ||
| 222 | table.insert(cfg.rocks_trees, 1, { name = "project", root = project_tree } ) | ||
| 223 | loader.load_rocks_trees() | ||
| 224 | path.use_tree(project_tree) | ||
| 222 | else | 225 | else |
| 223 | local project_dir, rocks_tree = find_project_dir() | 226 | local trees = cfg.rocks_trees |
| 224 | if project_dir then | 227 | path.use_tree(trees[#trees]) |
| 225 | table.insert(cfg.rocks_trees, 1, { name = "project", root = rocks_tree } ) | ||
| 226 | loader.load_rocks_trees() | ||
| 227 | path.use_tree(rocks_tree) | ||
| 228 | else | ||
| 229 | local trees = cfg.rocks_trees | ||
| 230 | path.use_tree(trees[#trees]) | ||
| 231 | end | ||
| 232 | end | 228 | end |
| 233 | 229 | ||
| 234 | strip_trailing_slashes() | 230 | strip_trailing_slashes() |
| @@ -414,10 +410,13 @@ function cmd.run_command(description, commands, external_namespace, ...) | |||
| 414 | lua_version = flags["lua-version"], | 410 | lua_version = flags["lua-version"], |
| 415 | } | 411 | } |
| 416 | end | 412 | end |
| 417 | elseif project_dir then | ||
| 418 | lua_data = find_lua_version_at(project_dir) | ||
| 419 | else | 413 | else |
| 420 | lua_data = find_lua_version_at(".") | 414 | if not project_dir then |
| 415 | project_dir = find_project_dir() | ||
| 416 | end | ||
| 417 | if project_dir then | ||
| 418 | lua_data = find_lua_version_at(project_dir) | ||
| 419 | end | ||
| 421 | end | 420 | end |
| 422 | 421 | ||
| 423 | -- FIXME A quick hack for the experimental Windows build | 422 | -- FIXME A quick hack for the experimental Windows build |
| @@ -441,6 +440,10 @@ function cmd.run_command(description, commands, external_namespace, ...) | |||
| 441 | ----------------------------------------------------------------------------- | 440 | ----------------------------------------------------------------------------- |
| 442 | 441 | ||
| 443 | fs.init() | 442 | fs.init() |
| 443 | |||
| 444 | if project_dir then | ||
| 445 | project_dir = fs.absolute_name(project_dir) | ||
| 446 | end | ||
| 444 | 447 | ||
| 445 | if flags["version"] then | 448 | if flags["version"] then |
| 446 | util.printout(program.." "..cfg.program_version) | 449 | util.printout(program.." "..cfg.program_version) |
| @@ -464,7 +467,7 @@ function cmd.run_command(description, commands, external_namespace, ...) | |||
| 464 | die("Current directory does not exist. Please run LuaRocks from an existing directory.") | 467 | die("Current directory does not exist. Please run LuaRocks from an existing directory.") |
| 465 | end | 468 | end |
| 466 | 469 | ||
| 467 | ok, err = process_tree_flags(flags) | 470 | ok, err = process_tree_flags(flags, project_dir) |
| 468 | if not ok then | 471 | if not ok then |
| 469 | die(err) | 472 | die(err) |
| 470 | end | 473 | end |
