aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2018-06-19 09:58:36 -0300
committerHisham Muhammad <hisham@gobolinux.org>2018-07-01 15:51:09 -0300
commita55f09fae00cb3c575f926eda4d76e81ff37b2ba (patch)
treec36d2d475549f76805b3b9bfd08f1429f032e5ac
parent392f67d65a950fcf08a08d10d21e80f359160262 (diff)
downloadluarocks-a55f09fae00cb3c575f926eda4d76e81ff37b2ba.tar.gz
luarocks-a55f09fae00cb3c575f926eda4d76e81ff37b2ba.tar.bz2
luarocks-a55f09fae00cb3c575f926eda4d76e81ff37b2ba.zip
fs: make module loading side-effect free, require explicit init()
-rw-r--r--spec/fetch_spec.lua2
-rw-r--r--spec/fs_spec.lua1
-rw-r--r--spec/test_spec.lua3
-rw-r--r--spec/tools_spec.lua3
-rw-r--r--src/luarocks/command_line.lua2
-rw-r--r--src/luarocks/core/cfg.lua8
-rw-r--r--src/luarocks/fs.lua107
-rw-r--r--src/luarocks/util.lua4
8 files changed, 80 insertions, 50 deletions
diff --git a/spec/fetch_spec.lua b/spec/fetch_spec.lua
index ce4cfb56..6e00bc22 100644
--- a/spec/fetch_spec.lua
+++ b/spec/fetch_spec.lua
@@ -3,6 +3,7 @@ local git_repo = require("spec.util.git_repo")
3 3
4test_env.unload_luarocks() 4test_env.unload_luarocks()
5test_env.setup_specs() 5test_env.setup_specs()
6local fs = require("luarocks.fs")
6local fetch = require("luarocks.fetch") 7local fetch = require("luarocks.fetch")
7local fs = require("luarocks.fs") 8local fs = require("luarocks.fs")
8local path = require("luarocks.path") 9local path = require("luarocks.path")
@@ -20,6 +21,7 @@ describe("Luarocks fetch test #unit #mock", function()
20 local runner 21 local runner
21 22
22 setup(function() 23 setup(function()
24 fs.init()
23 test_env.mock_server_init() 25 test_env.mock_server_init()
24 26
25 runner = require("luacov.runner") 27 runner = require("luacov.runner")
diff --git a/spec/fs_spec.lua b/spec/fs_spec.lua
index 9b2aa01b..b8091f75 100644
--- a/spec/fs_spec.lua
+++ b/spec/fs_spec.lua
@@ -55,6 +55,7 @@ describe("Luarocks fs test #unit", function()
55 local runner 55 local runner
56 56
57 setup(function() 57 setup(function()
58 fs.init()
58 runner = require("luacov.runner") 59 runner = require("luacov.runner")
59 runner.init(testing_paths.testrun_dir .. "/luacov.config") 60 runner.init(testing_paths.testrun_dir .. "/luacov.config")
60 runner.tick = true 61 runner.tick = true
diff --git a/spec/test_spec.lua b/spec/test_spec.lua
index 0111f89a..7a2399a9 100644
--- a/spec/test_spec.lua
+++ b/spec/test_spec.lua
@@ -82,6 +82,7 @@ end)
82test_env.unload_luarocks() 82test_env.unload_luarocks()
83 83
84local fs = require("luarocks.fs") 84local fs = require("luarocks.fs")
85local cfg = require("luarocks.core.cfg")
85local path = require("luarocks.path") 86local path = require("luarocks.path")
86local test = require("luarocks.test") 87local test = require("luarocks.test")
87local test_busted = require("luarocks.test.busted") 88local test_busted = require("luarocks.test.busted")
@@ -91,6 +92,8 @@ describe("LuaRocks test #unit", function()
91 local runner 92 local runner
92 93
93 setup(function() 94 setup(function()
95 cfg.init()
96 fs.init()
94 runner = require("luacov.runner") 97 runner = require("luacov.runner")
95 runner.init(testing_paths.testrun_dir .. "/luacov.config") 98 runner.init(testing_paths.testrun_dir .. "/luacov.config")
96 runner.tick = true 99 runner.tick = true
diff --git a/spec/tools_spec.lua b/spec/tools_spec.lua
index 8805d703..10dafb0b 100644
--- a/spec/tools_spec.lua
+++ b/spec/tools_spec.lua
@@ -5,7 +5,7 @@ local write_file = test_env.write_file
5 5
6test_env.unload_luarocks() 6test_env.unload_luarocks()
7local fs = require("luarocks.fs") 7local fs = require("luarocks.fs")
8local patch = package.loaded["luarocks.tools.patch"] 8local patch = require("luarocks.tools.patch")
9 9
10local lao = 10local lao =
11[[The Nameless is the origin of Heaven and Earth; 11[[The Nameless is the origin of Heaven and Earth;
@@ -148,6 +148,7 @@ describe("Luarocks patch test #unit", function()
148 local runner 148 local runner
149 149
150 setup(function() 150 setup(function()
151 fs.init()
151 runner = require("luacov.runner") 152 runner = require("luacov.runner")
152 runner.init(testing_paths.testrun_dir .. "/luacov.config") 153 runner.init(testing_paths.testrun_dir .. "/luacov.config")
153 runner.tick = true 154 runner.tick = true
diff --git a/src/luarocks/command_line.lua b/src/luarocks/command_line.lua
index 5ba5ae1b..b542fb9c 100644
--- a/src/luarocks/command_line.lua
+++ b/src/luarocks/command_line.lua
@@ -93,6 +93,8 @@ function command_line.run_command(...)
93 die(flags.ERROR.." See --help.") 93 die(flags.ERROR.." See --help.")
94 end 94 end
95 95
96 fs.init()
97
96 if flags["from"] then flags["server"] = flags["from"] end 98 if flags["from"] then flags["server"] = flags["from"] end
97 if flags["only-from"] then flags["only-server"] = flags["only-from"] end 99 if flags["only-from"] then flags["only-server"] = flags["only-from"] end
98 if flags["only-sources-from"] then flags["only-sources"] = flags["only-sources-from"] end 100 if flags["only-sources-from"] then flags["only-sources"] = flags["only-sources-from"] end
diff --git a/src/luarocks/core/cfg.lua b/src/luarocks/core/cfg.lua
index 38b10f6e..00efeaf3 100644
--- a/src/luarocks/core/cfg.lua
+++ b/src/luarocks/core/cfg.lua
@@ -763,4 +763,12 @@ function cfg.is_platform(query)
763 end 763 end
764end 764end
765 765
766function cfg.each_platform()
767 local i = 0
768 return function()
769 i = i + 1
770 return cfg.platforms[i]
771 end
772end
773
766return cfg 774return cfg
diff --git a/src/luarocks/fs.lua b/src/luarocks/fs.lua
index 7322e552..999572b8 100644
--- a/src/luarocks/fs.lua
+++ b/src/luarocks/fs.lua
@@ -16,62 +16,73 @@ local cfg = require("luarocks.core.cfg")
16local pack = table.pack or function(...) return { n = select("#", ...), ... } end 16local pack = table.pack or function(...) return { n = select("#", ...), ... } end
17local unpack = table.unpack or unpack 17local unpack = table.unpack or unpack
18 18
19local old_popen, old_exec 19do
20fs.verbose = function() -- patch io.popen and os.execute to display commands in verbose mode 20 local old_popen, old_execute
21 if old_popen or old_exec then return end 21
22 old_popen = io.popen 22 -- patch io.popen and os.execute to display commands in verbose mode
23 io.popen = function(one, two) 23 function fs.verbose()
24 if two == nil then 24 if old_popen or old_execute then return end
25 print("\nio.popen: ", one) 25 old_popen = io.popen
26 else 26 io.popen = function(one, two)
27 print("\nio.popen: ", one, "Mode:", two) 27 if two == nil then
28 end 28 print("\nio.popen: ", one)
29 return old_popen(one, two) 29 else
30 end 30 print("\nio.popen: ", one, "Mode:", two)
31 31 end
32 old_exec = os.execute 32 return old_popen(one, two)
33 os.execute = function(cmd) 33 end
34 -- redact api keys if present
35 print("\nos.execute: ", (cmd:gsub("(/api/[^/]+/)([^/]+)/", function(cap, key) return cap.."<redacted>/" end)) )
36 local code = pack(old_exec(cmd))
37 print("Results: "..tostring(code.n))
38 for i = 1,code.n do
39 print(" "..tostring(i).." ("..type(code[i]).."): "..tostring(code[i]))
40 end
41 return unpack(code, 1, code.n)
42 end
43end
44if cfg.verbose then fs.verbose() end
45 34
46local function load_fns(fs_table) 35 old_execute = os.execute
47 for name, fn in pairs(fs_table) do 36 os.execute = function(cmd)
48 if not fs[name] then 37 -- redact api keys if present
49 fs[name] = fn 38 print("\nos.execute: ", (cmd:gsub("(/api/[^/]+/)([^/]+)/", function(cap, key) return cap.."<redacted>/" end)) )
39 local code = pack(old_execute(cmd))
40 print("Results: "..tostring(code.n))
41 for i = 1,code.n do
42 print(" "..tostring(i).." ("..type(code[i]).."): "..tostring(code[i]))
43 end
44 return unpack(code, 1, code.n)
50 end 45 end
51 end 46 end
52end 47end
53 48
54-- Load platform-specific functions 49do
55local loaded_platform = nil 50 local function load_fns(fs_table)
56for _, platform in ipairs(cfg.platforms) do 51 for name, fn in pairs(fs_table) do
57 local ok, fs_plat = pcall(require, "luarocks.fs."..platform) 52 if not fs[name] then
58 if ok and fs_plat then 53 fs[name] = fn
59 loaded_platform = platform 54 end
60 load_fns(fs_plat) 55 end
61 break
62 end 56 end
63end
64 57
65-- Load platform-independent pure-Lua functionality 58 function fs.init()
66local fs_lua = require("luarocks.fs.lua") 59 if fs.current_dir then
67load_fns(fs_lua) 60 -- already initialized
61 return
62 end
63
64 -- Load platform-specific functions
65 local loaded_platform = nil
66 for platform in cfg.each_platform() do
67 local ok, fs_plat = pcall(require, "luarocks.fs."..platform)
68 if ok and fs_plat then
69 loaded_platform = platform
70 load_fns(fs_plat)
71 break
72 end
73 end
68 74
69-- Load platform-specific fallbacks for missing Lua modules 75 -- Load platform-independent pure-Lua functionality
70local ok, fs_plat_tools = pcall(require, "luarocks.fs."..loaded_platform..".tools") 76 local fs_lua = require("luarocks.fs.lua")
71if ok and fs_plat_tools then 77 load_fns(fs_lua)
72 load_fns(fs_plat_tools)
73 load_fns(require("luarocks.fs.tools"))
74end
75 78
79 -- Load platform-specific fallbacks for missing Lua modules
80 local ok, fs_plat_tools = pcall(require, "luarocks.fs."..loaded_platform..".tools")
81 if ok and fs_plat_tools then
82 load_fns(fs_plat_tools)
83 load_fns(require("luarocks.fs.tools"))
84 end
85 end
86end
76 87
77return fs 88return fs
diff --git a/src/luarocks/util.lua b/src/luarocks/util.lua
index ee4a803a..8058a407 100644
--- a/src/luarocks/util.lua
+++ b/src/luarocks/util.lua
@@ -59,7 +59,9 @@ end
59-- Functions are executed in the inverse order they were scheduled. 59-- Functions are executed in the inverse order they were scheduled.
60function util.run_scheduled_functions() 60function util.run_scheduled_functions()
61 local fs = require("luarocks.fs") 61 local fs = require("luarocks.fs")
62 fs.change_dir_to_root() 62 if fs.change_dir_to_root then
63 fs.change_dir_to_root()
64 end
63 for i = #scheduled_functions, 1, -1 do 65 for i = #scheduled_functions, 1, -1 do
64 local item = scheduled_functions[i] 66 local item = scheduled_functions[i]
65 item.fn(unpack(item.args)) 67 item.fn(unpack(item.args))