From: Jo-Philipp Wich Date: Thu, 4 Sep 2008 00:56:13 +0000 (+0000) Subject: * luci/libs/uvl: X-Git-Tag: 0.8.0~165 X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=commitdiff_plain;h=19e22598fd5b43a4e3e23e5e0d5f994281024035 * luci/libs/uvl: - implement aliasing in luci.uvl.read_scheme() - fixed wrong enum definition in reference scheme - fixed boolean() datatype validator to actually accept "true" and "false" literals - extend uvl cli to validate schemes against the reference scheme (incomplete) --- diff --git a/libs/uvl/luasrc/uvl.lua b/libs/uvl/luasrc/uvl.lua index b1d481062..680581d22 100644 --- a/libs/uvl/luasrc/uvl.lua +++ b/libs/uvl/luasrc/uvl.lua @@ -351,7 +351,8 @@ end -- This is normally done on demand, so you don't have to call this function -- by yourself. -- @param scheme Name of the scheme to parse -function UVL.read_scheme( self, scheme ) +-- @param alias Create an alias for the loaded scheme +function UVL.read_scheme( self, scheme, alias ) local so = luci.uvl.scheme( self, scheme ) @@ -375,7 +376,9 @@ function UVL.read_scheme( self, scheme ) table.insert( schemes, sd ) end - return self:_read_scheme_parts( so, schemes ) + 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 diff --git a/libs/uvl/luasrc/uvl/datatypes.lua b/libs/uvl/luasrc/uvl/datatypes.lua index ce18d47ed..60377e289 100644 --- a/libs/uvl/luasrc/uvl/datatypes.lua +++ b/libs/uvl/luasrc/uvl/datatypes.lua @@ -22,9 +22,9 @@ require("luci.util") function boolean( val ) - if val == "1" or val == "yes" or val == "on" then + if val == "1" or val == "yes" or val == "on" or val == "true" then return true - elseif val == "0" or val == "no" or val == "off" then + elseif val == "0" or val == "no" or val == "off" or val == "false" then return true end diff --git a/libs/uvl/root/lib/uci/schema/meta/schema b/libs/uvl/root/lib/uci/schema/meta/schema index 1d673d350..dd373f8ae 100644 --- a/libs/uvl/root/lib/uci/schema/meta/schema +++ b/libs/uvl/root/lib/uci/schema/meta/schema @@ -305,8 +305,8 @@ config section # Enum value (schema.@enum.value) config variable - option name 'name' - option title 'Name of the defined variable' + option name 'value' + option title 'Value of the defined enum value' option section 'schema.enum' option type 'variable' option datatype 'string' diff --git a/libs/uvl/root/usr/bin/uvl b/libs/uvl/root/usr/bin/uvl index 0fe7a13a7..83ed73941 100755 --- a/libs/uvl/root/usr/bin/uvl +++ b/libs/uvl/root/usr/bin/uvl @@ -149,9 +149,9 @@ $Id$ Usage: uvl --help - uvl [--silent] [--schemedir=DIR] - [--no-strict-sections] [--no-strict-options] [--no-strict-validators] - [--no-strict-lists] {verify|genspec} config[.section[.option]] + uvl [--silent] [--schemedir=DIR] [--configdir=DIR] [--no-strict-sections] \ + [--no-strict-options] [--no-strict-validators] [--no-strict-lists] \ + {verify|verify-scheme|genspec} config[.section[.option]] Options: --help @@ -163,6 +163,9 @@ Options: --schemedir=DIR Use DIR as scheme directory. + --configdir=DIR + Use DIR as config directory. + --no-strict-sections Don't treat sections found in config but not in scheme as error. @@ -179,11 +182,14 @@ Actions: verify Validate given configuration, section or option. + verify-scheme + Validate given scheme against the reference meta scheme. + genspec Generate a scheme skeleton from given configuration. ]=]) os.exit(255) -elseif arguments[1] == "verify" then +elseif arguments[1] == "verify" or arguments[1] == "verify-scheme" then luci.uvl.STRICT_UNKNOWN_SECTIONS = ( not options['no-strict-sections'] and true or false ) luci.uvl.STRICT_UNKNOWN_OPTIONS = @@ -194,18 +200,33 @@ elseif arguments[1] == "verify" then ( not options['no-strict-lists'] and true or false ) local uvl = luci.uvl.UVL( - type(options.schemedir) == "string" and options.schemedir or nil + type(options.schemedir) == "string" and options.schemedir ) local cso = luci.util.split( arguments[2], "." ) - local ok, err = uvl:validate( unpack(cso) ) + local ok, err + + if arguments[1] == "verify-scheme" then + uvl:read_scheme( 'schema', cso[1] ) + + local uci = uvl.uci.cursor( + type(options.configdir) == "string" + and options.configdir or uvl.schemedir .. '/default' + ) + + ok, err = uvl:validate_config( cso[1], uci:get_all(cso[1]) ) + if err then err.code = luci.uvl.errors.ERR_SCHEME end + else + ok, err = uvl:validate( unpack(cso) ) + end if ok then if not options.silent then print( string.format( '%s "%s" validates fine!', - ( #cso == 1 and "Config" or - ( #cso == 2 and "Section" or "Option" ) ), + ( arguments[1] == "verify-scheme" and "Scheme" or + ( #cso == 1 and "Config" or + ( #cso == 2 and "Section" or "Option" ) ) ), table.concat(cso, ".") ) ) end