From: Jo-Philipp Wich Date: Fri, 5 Sep 2008 16:46:51 +0000 (+0000) Subject: * luci/libs/uvl: X-Git-Tag: 0.8.0~138 X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=3315203f2f3e9ff5a76e788e9873e84e171ae876;p=project%2Fluci.git * 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 --- diff --git a/libs/uvl/luasrc/uvl.lua b/libs/uvl/luasrc/uvl.lua index 680581d220..1b430af10c 100644 --- a/libs/uvl/luasrc/uvl.lua +++ b/libs/uvl/luasrc/uvl.lua @@ -355,32 +355,43 @@ end function UVL.read_scheme( self, scheme, alias ) local so = luci.uvl.scheme( self, scheme ) + local bc = "%s/bytecode/%s.lua" %{ self.schemedir, scheme } - local schemes = { } - local files = luci.fs.glob(self.schemedir .. '/*/' .. scheme) + if not luci.fs.access(bc) then + local schemes = { } + local files = luci.fs.glob(self.schemedir .. '/*/' .. scheme) - if files then - for i, file in ipairs( files ) do - if not luci.fs.access(file) then - return so:error(ERR.SME_READ(so,file)) - end + if files then + for i, file in ipairs( files ) do + if not luci.fs.access(file) then + return false, so:error(ERR.SME_READ(so,file)) + end - local uci = luci.model.uci.cursor( luci.fs.dirname(file), default_savedir ) + local uci = luci.model.uci.cursor( luci.fs.dirname(file), default_savedir ) - local sd, err = uci:get_all( luci.fs.basename(file) ) + local sd, err = uci:get_all( luci.fs.basename(file) ) + + if not sd then + return false, ERR.UCILOAD(so, err) + end - if not sd then - return false, ERR.UCILOAD(so, err) + table.insert( schemes, sd ) end - table.insert( schemes, sd ) + 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 + return false, so:error(ERR.SME_FIND(so, self.schemedir)) 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 - 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 diff --git a/libs/uvl/root/usr/bin/uvlc b/libs/uvl/root/usr/bin/uvlc new file mode 100755 index 0000000000..c07cc54ccd --- /dev/null +++ b/libs/uvl/root/usr/bin/uvlc @@ -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 " ) +end