Revert "full fastindex integration, drop old cache stuff"
This reverts commit 19917e78d47dc33c3f75b7fac9585e534d144fd3.
This commit is contained in:
parent
271bfb4725
commit
fbe3f6f09f
1 changed files with 63 additions and 11 deletions
|
@ -27,7 +27,6 @@ module("luci.dispatcher", package.seeall)
|
||||||
require("luci.http")
|
require("luci.http")
|
||||||
require("luci.sys")
|
require("luci.sys")
|
||||||
require("luci.fs")
|
require("luci.fs")
|
||||||
require("luci.fastindex")
|
|
||||||
|
|
||||||
-- Dirty OpenWRT fix
|
-- Dirty OpenWRT fix
|
||||||
if (os.time() < luci.fs.mtime(luci.sys.libpath() .. "/dispatcher.lua")) then
|
if (os.time() < luci.fs.mtime(luci.sys.libpath() .. "/dispatcher.lua")) then
|
||||||
|
@ -50,8 +49,6 @@ dispatched = nil
|
||||||
built_index = false
|
built_index = false
|
||||||
built_tree = false
|
built_tree = false
|
||||||
|
|
||||||
-- Fastindex cache
|
|
||||||
local fi = nil
|
|
||||||
|
|
||||||
-- Builds a URL
|
-- Builds a URL
|
||||||
function build_url(...)
|
function build_url(...)
|
||||||
|
@ -158,20 +155,75 @@ end
|
||||||
function createindex()
|
function createindex()
|
||||||
index = {}
|
index = {}
|
||||||
local path = luci.sys.libpath() .. "/controller/"
|
local path = luci.sys.libpath() .. "/controller/"
|
||||||
local suffix = ".lua"
|
local suff = ".lua"
|
||||||
|
|
||||||
|
--[[if pcall(require, "fastindex") then
|
||||||
|
createindex_fastindex(path, suff)
|
||||||
|
else
|
||||||
|
createindex_plain(path, suff)
|
||||||
|
end]]--
|
||||||
|
|
||||||
|
createindex_plain(path, suff)
|
||||||
|
|
||||||
|
built_index = true
|
||||||
|
end
|
||||||
|
|
||||||
if fi == nil then
|
-- Uses fastindex to create the dispatching tree
|
||||||
fi = luci.fastindex.new("index")
|
function createindex_fastindex(path, suffix)
|
||||||
fi.add(path .. "*" .. suffix)
|
local fi = fastindex.new("index")
|
||||||
fi.add(path .. "*/*" .. suffix)
|
fi.add(path .. "*" .. suffix)
|
||||||
end
|
fi.add(path .. "*/*" .. suffix)
|
||||||
fi.scan()
|
fi.scan()
|
||||||
|
|
||||||
for k, v in pairs(fi.indexes) do
|
for k, v in pairs(fi.indexes) do
|
||||||
index[v[2]] = v[1]
|
index[v[2]] = v[1]
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
built_index = true
|
-- Calls the index function of all available controllers
|
||||||
|
function createindex_plain(path, suffix)
|
||||||
|
local cache = nil
|
||||||
|
|
||||||
|
local controllers = luci.util.combine(
|
||||||
|
luci.fs.glob(path .. "*" .. suffix) or {},
|
||||||
|
luci.fs.glob(path .. "*/*" .. suffix) or {}
|
||||||
|
)
|
||||||
|
|
||||||
|
if indexcache then
|
||||||
|
cache = luci.fs.mtime(indexcache)
|
||||||
|
|
||||||
|
if not cache then
|
||||||
|
luci.fs.mkdir(indexcache)
|
||||||
|
luci.fs.chmod(indexcache, "a=,u=rwx")
|
||||||
|
cache = luci.fs.mtime(indexcache)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
for i,c in ipairs(controllers) do
|
||||||
|
local module = "luci.controller." .. c:sub(#path+1, #c-#suffix):gsub("/", ".")
|
||||||
|
local cachefile = indexcache .. "/" .. module
|
||||||
|
local stime
|
||||||
|
local ctime
|
||||||
|
|
||||||
|
if cache then
|
||||||
|
stime = luci.fs.mtime(c) or 0
|
||||||
|
ctime = luci.fs.mtime(cachefile) or 0
|
||||||
|
end
|
||||||
|
|
||||||
|
if not cache or stime > ctime then
|
||||||
|
stat, mod = pcall(require, module)
|
||||||
|
|
||||||
|
if stat and mod and type(mod.index) == "function" then
|
||||||
|
index[module] = mod.index
|
||||||
|
|
||||||
|
if cache then
|
||||||
|
luci.fs.writefile(cachefile, luci.util.dump(mod.index))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
index[module] = loadfile(cachefile)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Creates the dispatching tree from the index
|
-- Creates the dispatching tree from the index
|
||||||
|
|
Loading…
Reference in a new issue