Author: kevans
Date: Thu Feb 22 01:21:39 2018
New Revision: 329779
URL: https://svnweb.freebsd.org/changeset/base/329779

Log:
  lualoader: Split cli bits out into a cli module
  
  This module will, in the not-so-distant future, grow functionality for
  reducing boilerplate in functions that implement cli commands. It will
  likely also house most in-tree cli commands.

Added:
  head/stand/lua/cli.lua   (contents, props changed)
Modified:
  head/stand/lua/Makefile
  head/stand/lua/core.lua
  head/stand/lua/loader.lua

Modified: head/stand/lua/Makefile
==============================================================================
--- head/stand/lua/Makefile     Thu Feb 22 01:17:32 2018        (r329778)
+++ head/stand/lua/Makefile     Thu Feb 22 01:21:39 2018        (r329779)
@@ -3,7 +3,8 @@
 .include <bsd.init.mk>
 
 BINDIR=        /boot/lua
-FILES= color.lua \
+FILES= cli.lua \
+       color.lua \
        config.lua \
        core.lua \
        drawer.lua \

Added: head/stand/lua/cli.lua
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/stand/lua/cli.lua      Thu Feb 22 01:21:39 2018        (r329779)
@@ -0,0 +1,113 @@
+--
+-- Copyright (c) 2018 Kyle Evans <[email protected]>
+-- All rights reserved.
+--
+-- Redistribution and use in source and binary forms, with or without
+-- modification, are permitted provided that the following conditions
+-- are met:
+-- 1. Redistributions of source code must retain the above copyright
+--    notice, this list of conditions and the following disclaimer.
+-- 2. Redistributions in binary form must reproduce the above copyright
+--    notice, this list of conditions and the following disclaimer in the
+--    documentation and/or other materials provided with the distribution.
+--
+-- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+-- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+-- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+-- ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+-- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+-- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+-- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+-- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+-- SUCH DAMAGE.
+--
+-- $FreeBSD$
+--
+
+local core = require('core')
+
+local cli = {}
+
+-- Internal function
+-- Parses arguments to boot and returns two values: kernel_name, argstr
+-- Defaults to nil and "" respectively.
+-- This will also parse arguments to autoboot, but the with_kernel argument
+-- will need to be explicitly overwritten to false
+local parse_boot_args = function(argv, with_kernel)
+       if with_kernel == nil then
+               with_kernel = true
+       end
+       if #argv == 0 then
+               if with_kernel then
+                       return nil, ""
+               else
+                       return ""
+               end
+       end
+       local kernel_name
+       local argstr = ""
+
+       for k, v in ipairs(argv) do
+               if with_kernel and v:sub(1,1) ~= "-" then
+                       kernel_name = v
+               else
+                       argstr = argstr .. " " .. v
+               end
+       end
+       if with_kernel then
+               return kernel_name, argstr
+       else
+               return argstr
+       end
+end
+
+-- Globals
+
+function boot(...)
+       local argv = {...}
+       local cmd_name = ""
+       cmd_name, argv = core.popFrontTable(argv)
+       local kernel, argstr = parse_boot_args(argv)
+       if kernel ~= nil then
+               loader.perform("unload")
+               config.selectkernel(kernel)
+       end
+       core.boot(argstr)
+end
+
+function autoboot(...)
+       local argv = {...}
+       local cmd_name = ""
+       cmd_name, argv = core.popFrontTable(argv)
+       local argstr = parse_boot_args(argv, false)
+       core.autoboot(argstr)
+end
+
+-- Declares a global function cli_execute that attempts to dispatch the
+-- arguments passed as a lua function. This gives lua a chance to intercept
+-- builtin CLI commands like "boot"
+function cli_execute(...)
+       local argv = {...}
+       -- Just in case...
+       if #argv == 0 then
+               loader.command(...)
+               return
+       end
+
+       local cmd_name = argv[1]
+       local cmd = _G[cmd_name]
+       if cmd ~= nil and type(cmd) == "function" then
+               -- Pass argv wholesale into cmd. We could omit argv[0] since the
+               -- traditional reasons for including it don't necessarily apply,
+               -- it may not be totally redundant if we want to have one global
+               -- handling multiple commands
+               cmd(...)
+       else
+               loader.command(...)
+       end
+
+end
+
+return cli

Modified: head/stand/lua/core.lua
==============================================================================
--- head/stand/lua/core.lua     Thu Feb 22 01:17:32 2018        (r329778)
+++ head/stand/lua/core.lua     Thu Feb 22 01:21:39 2018        (r329779)
@@ -37,60 +37,6 @@ local compose_loader_cmd = function(cmd_name, argstr)
        return cmd_name
 end
 
--- Internal function
--- Parses arguments to boot and returns two values: kernel_name, argstr
--- Defaults to nil and "" respectively.
--- This will also parse arguments to autoboot, but the with_kernel argument
--- will need to be explicitly overwritten to false
-local parse_boot_args = function(argv, with_kernel)
-       if with_kernel == nil then
-               with_kernel = true
-       end
-       if #argv == 0 then
-               if with_kernel then
-                       return nil, ""
-               else
-                       return ""
-               end
-       end
-       local kernel_name
-       local argstr = ""
-
-       for k, v in ipairs(argv) do
-               if with_kernel and v:sub(1,1) ~= "-" then
-                       kernel_name = v
-               else
-                       argstr = argstr .. " " .. v
-               end
-       end
-       if with_kernel then
-               return kernel_name, argstr
-       else
-               return argstr
-       end
-end
-
--- Globals
-function boot(...)
-       local argv = {...}
-       local cmd_name = ""
-       cmd_name, argv = core.popFrontTable(argv)
-       local kernel, argstr = parse_boot_args(argv)
-       if kernel ~= nil then
-               loader.perform("unload")
-               config.selectkernel(kernel)
-       end
-       core.boot(argstr)
-end
-
-function autoboot(...)
-       local argv = {...}
-       local cmd_name = ""
-       cmd_name, argv = core.popFrontTable(argv)
-       local argstr = parse_boot_args(argv, false)
-       core.autoboot(argstr)
-end
-
 -- Module exports
 -- Commonly appearing constants
 core.KEY_BACKSPACE     = 8

Modified: head/stand/lua/loader.lua
==============================================================================
--- head/stand/lua/loader.lua   Thu Feb 22 01:17:32 2018        (r329778)
+++ head/stand/lua/loader.lua   Thu Feb 22 01:21:39 2018        (r329779)
@@ -27,6 +27,7 @@
 -- $FreeBSD$
 --
 
+local cli = require("cli")
 local config = require("config")
 local menu = require("menu")
 local password = require("password")
@@ -36,31 +37,6 @@ local result, errstr, errnoval = lfs.attributes("/boot
 -- Effectively discard any errors; we'll just act if it succeeds.
 if result ~= nil then
        local_module = require("local")
-end
-
--- Declares a global function cli_execute that attempts to dispatch the
--- arguments passed as a lua function. This gives lua a chance to intercept
--- builtin CLI commands like "boot"
-function cli_execute(...)
-       local argv = {...}
-       -- Just in case...
-       if #argv == 0 then
-               loader.command(...)
-               return
-       end
-
-       local cmd_name = argv[1]
-       local cmd = _G[cmd_name]
-       if cmd ~= nil and type(cmd) == "function" then
-               -- Pass argv wholesale into cmd. We could omit argv[0] since the
-               -- traditional reasons for including it don't necessarily apply,
-               -- it may not be totally redundant if we want to have one global
-               -- handling multiple commands
-               cmd(...)
-       else
-               loader.command(...)
-       end
-
 end
 
 config.load()
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to