summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--libs/uvl/luasrc/uvl.lua7
-rw-r--r--libs/uvl/luasrc/uvl/datatypes.lua4
-rw-r--r--libs/uvl/root/lib/uci/schema/meta/schema4
-rwxr-xr-xlibs/uvl/root/usr/bin/uvl37
4 files changed, 38 insertions, 14 deletions
diff --git a/libs/uvl/luasrc/uvl.lua b/libs/uvl/luasrc/uvl.lua
index b1d481062c..680581d220 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 ce18d47ed4..60377e289e 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 1d673d3502..dd373f8ae0 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 0fe7a13a70..83ed73941d 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