* luci/libs: uvl: Major rewrite of internal element handling, reworked error model...
[project/luci.git] / libs / uvl / root / usr / bin / uvl
index b724c8a..7dc6a00 100755 (executable)
@@ -1,3 +1,4 @@
+#!/usr/bin/lua
 --[[
 
 UCI Validation Layer - Command Line Utility
@@ -10,7 +11,7 @@ You may obtain a copy of the License at
 
         http://www.apache.org/licenses/LICENSE-2.0
 
-$Id: uvl.lua 2873 2008-08-17 21:43:56Z jow $
+$Id$
 
 ]]--
 
@@ -60,14 +61,16 @@ local options, arguments = getopt( arg )
 
 if #arguments == 0 or options.help then
        print([=[
+
 uvl - UCI Validation Layer
-$Id: uvl.lua 2873 2008-08-17 21:43:56Z jow $
+$Id$
 (c) 2008 Jo-Philipp Wich, Steven Barth
 
 Usage:
        uvl --help
-       uvl [--silent] [--no-strict-sections] [--no-strict-options]
-               [--no-strict-validators] config[.section[.option]]
+       uvl [--silent] [--schemedir=DIR]
+               [--no-strict-sections] [--no-strict-options] [--no-strict-validators]
+               [--no-strict-lists] config[.section[.option]]
 
 Options:
        --help
@@ -76,6 +79,9 @@ Options:
        --silent
                Don't produce any output.
 
+       --schemedir=DIR
+               Use DIR as scheme directory.
+
        --no-strict-sections
                Don't treat sections found in config but not in scheme as error.
 
@@ -83,8 +89,10 @@ Options:
                Don't treat options found in config but not in scheme as error.
 
        --no-strict-validators
-               Don't invalidate config if an external validators fails.
+               Don't invalidate config if an external validator fails.
 
+       --no-strict-lists
+               Don't invalidate lists that are stored options.
        ]=])
        os.exit(255)
 else
@@ -94,23 +102,28 @@ else
                ( options['no-strict-options'] and false or true )
        luci.uvl.STRICT_EXTERNAL_VALIDATORS =
                ( options['no-strict-validators'] and false or true )
+       luci.uvl.STRICT_LIST_TYPE =
+               ( options['no-strict-lists'] and false or true )
+
+       local uvl = luci.uvl.UVL(
+               type(options.schemedir) == "string" and options.schemedir or nil
+       )
 
-       local uvl = luci.uvl.UVL( options['schemedir'] )
        local cso = luci.util.split( arguments[1], "." )
        local ok, err = uvl:validate( unpack(cso) )
 
        if ok then
                if not options.silent then
                        print( string.format(
-                               '%s "%s.%s.%s" validates fine!',
+                               '%s "%s" validates fine!',
                                        ( #cso == 1 and "Config" or
                                                ( #cso == 2 and "Section" or "Option" ) ),
-                                       cso[1], cso[2], cso[3]
+                                       table.concat(cso, ".")
                        ) )
                end
                os.exit( 0 )
        else
-               if not options.silent then print( err ) end
+               if not options.silent then print( err and err:string() or "Unknown error" ) end
                os.exit( 1 )
        end
 end