svn commit: r329779 - head/stand/lua
Kyle Evans
kevans at FreeBSD.org
Thu Feb 22 01:21:40 UTC 2018
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 <kevans at FreeBSD.org>
+-- 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()
More information about the svn-src-all
mailing list