From eb7c1f337d5bcff341a22b26c0793683bf075889 Mon Sep 17 00:00:00 2001 From: Steven Barth Date: Wed, 5 Nov 2008 14:10:02 +0000 Subject: [PATCH] Ensure hotdeploying --- libs/web/luasrc/dispatcher.lua | 41 ++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/libs/web/luasrc/dispatcher.lua b/libs/web/luasrc/dispatcher.lua index 8d79d7e8ab..79532ddf1d 100644 --- a/libs/web/luasrc/dispatcher.lua +++ b/libs/web/luasrc/dispatcher.lua @@ -300,28 +300,35 @@ end -- @param path Controller base directory -- @param suffix Controller file suffix function createindex_plain(path, suffix) - if indexcache then - local cachedate = fs.mtime(indexcache) - if cachedate and cachedate > fs.mtime(path) then - - assert( - sys.process.info("uid") == fs.stat(indexcache, "uid") - and fs.stat(indexcache, "mode") == "rw-------", - "Fatal: Indexcache is not sane!" - ) - - index = loadfile(indexcache)() - return index - end - end - - index = {} - local controllers = util.combine( luci.fs.glob(path .. "*" .. suffix) or {}, luci.fs.glob(path .. "*/*" .. suffix) or {} ) + if indexcache then + local cachedate = fs.mtime(indexcache) + if cachedate then + local realdate = 0 + for _, obj in ipairs(controllers) do + local omtime = fs.mtime(path .. "/" .. obj) + realdate = (omtime and omtime > realdate) and omtime or realdate + end + + if cachedate > realdate then + assert( + sys.process.info("uid") == fs.stat(indexcache, "uid") + and fs.stat(indexcache, "mode") == "rw-------", + "Fatal: Indexcache is not sane!" + ) + + index = loadfile(indexcache)() + return index + end + end + end + + index = {} + for i,c in ipairs(controllers) do local module = "luci.controller." .. c:sub(#path+1, #c-#suffix):gsub("/", ".") local mod = require(module)