* luci/libs/uvl:

- implement bytecode loading in luci.uvl.read_scheme()
	- add "uvlc" executable to byte-compile arbitary schemes
	- add lib/uci/schema/bytecode/ directory
This commit is contained in:
Jo-Philipp Wich 2008-09-05 16:46:51 +00:00
parent 8af9060efd
commit 3315203f2f
2 changed files with 53 additions and 20 deletions

View file

@ -355,32 +355,43 @@ end
function UVL.read_scheme( self, scheme, alias ) function UVL.read_scheme( self, scheme, alias )
local so = luci.uvl.scheme( self, scheme ) local so = luci.uvl.scheme( self, scheme )
local bc = "%s/bytecode/%s.lua" %{ self.schemedir, scheme }
local schemes = { } if not luci.fs.access(bc) then
local files = luci.fs.glob(self.schemedir .. '/*/' .. scheme) local schemes = { }
local files = luci.fs.glob(self.schemedir .. '/*/' .. scheme)
if files then if files then
for i, file in ipairs( files ) do for i, file in ipairs( files ) do
if not luci.fs.access(file) then if not luci.fs.access(file) then
return so:error(ERR.SME_READ(so,file)) return false, so:error(ERR.SME_READ(so,file))
end
local uci = luci.model.uci.cursor( luci.fs.dirname(file), default_savedir )
local sd, err = uci:get_all( luci.fs.basename(file) )
if not sd then
return false, ERR.UCILOAD(so, err)
end
table.insert( schemes, sd )
end end
local uci = luci.model.uci.cursor( luci.fs.dirname(file), default_savedir ) local ok, err = self:_read_scheme_parts( so, schemes )
if ok and alias then self.packages[alias] = self.packages[scheme] end
local sd, err = uci:get_all( luci.fs.basename(file) ) return ok, err
else
if not sd then return false, so:error(ERR.SME_FIND(so, self.schemedir))
return false, ERR.UCILOAD(so, err)
end
table.insert( schemes, sd )
end end
local ok, err = self:_read_scheme_parts( so, schemes )
if ok and alias then self.packages[alias] = self.packages[scheme] end
return ok, err
else else
return false, so:error(ERR.SME_FIND(so, self.schemedir)) local sc = loadfile(bc)
if sc then
self.packages[scheme] = sc()
return true
else
return false, so:error(ERR.SME_READ(so,file))
end
end end
end end

22
libs/uvl/root/usr/bin/uvlc Executable file
View file

@ -0,0 +1,22 @@
#!/usr/bin/lua
if arg[1] then
require("luci.util")
require("luci.uvl")
require("luci.fs")
local uvl = luci.uvl.UVL()
local scheme, err = uvl:get_scheme( arg[1] )
if scheme then
luci.fs.writefile(
"%s/bytecode/%s.lua" %{ uvl.schemedir, arg[1] },
luci.util.get_bytecode(scheme)
)
else
print("Error:", err:string())
end
else
print( "Usage: uvlc <scheme>" )
end