aboutsummaryrefslogtreecommitdiff
path: root/deprecation.lua
blob: 29bbd5017cf2fb8837bf71e684513c2633c7ce50 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
--[[
		display_api mod for Minetest - Library to add dynamic display
		capabilities to nodes
		(c) Pierre-Yves Rollo

		This program is free software: you can redistribute it and/or modify
		it under the terms of the GNU General Public License as published by
		the Free Software Foundation, either version 3 of the License, or
		(at your option) any later version.

		This program is distributed in the hope that it will be useful,
		but WITHOUT ANY WARRANTY; without even the implied warranty of
		MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
		GNU General Public License for more details.

		You should have received a copy of the GNU General Public License
		along with this program.  If not, see <http://www.gnu.org/licenses/>.
--]]

-- Deprecation

function deprecated_group(deprecated_group, replacement_group)
	for name, ndef in pairs(minetest.registered_nodes) do
		if ndef.groups and ndef.groups[deprecated_group] then
			minetest.log("warning", string.format('Node %s belongs to deprecated "%s" group which should be replaced with new "%s" group.',
				name, deprecated_group, replacement_group))
		end
	end
end

function deprecated_global_table(deprecated_global_name, replacement_global_name)
	assert(type(deprecated_global_name) == 'string', "deprecated_global_name should be a string.")
	assert(type(replacement_global_name) == 'string', "replacement_global_name should be a string.")
	assert(deprecated_global_name ~= '', "deprecated_global_name should not be empty.")
	assert(replacement_global_name ~= '', "replacement_global_name should not be empty.")
	assert(rawget(_G, deprecated_global_name) == nil, "replacement global already exists.")
	if _G[replacement_global_name] == nil then
		print('warn_deprecated_functions: Warning, replacement global "'..replacement_global_name..'" does not exists.')
		return
	end
	local meta = {
		deprecated = deprecated_global_name,
		replacement = replacement_global_name,
		__index = function(table, key)
			local meta = getmetatable(table)
			local dbg = debug.getinfo(2, "lS")
			minetest.log("warning", string.format('Warning: Accessing deprecated "%s" table, "%s" should be used instead (%s:%d).',
				meta.deprecated, meta.replacement, (dbg.short_src or 'unknown'), (dbg.currentline or 0)))
			return _G[meta.replacement][key]
		end,
		__newindex = function(table, key, value)
			local meta = getmetatable(table)
			local dbg = debug.getinfo(2, "lS")
			minetest.log("warning", string.format('Warning: Accessing deprecated "%s" table, "%s" should be used instead (%s:%d).',
				meta.deprecated, meta.replacement, (dbg.short_src or 'unknown'), (dbg.currentline or 0)))
			_G[meta.replacement][key]=value
		end,
	}
	rawset(_G, deprecated_global_name, {})
	setmetatable(_G[deprecated_global_name], meta)
end


-- deprecated(1) -- December 2018 - Deprecation of groups display_modpack_node and display_lib_node
-- Group to be removed from display API register_lbm
minetest.after(0, function()
	deprecated_group("display_modpack_node", "display_api")
	deprecated_group("display_lib_node", "display_api")
end)

-- deprecated(2) -- December 2018 - Deprecation of display_lib
deprecated_global_table('display_lib', 'display_api')