Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 22 Feb 2018 01:21:39 +0000 (UTC)
From:      Kyle Evans <kevans@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r329779 - head/stand/lua
Message-ID:  <201802220121.w1M1Ldb3036876@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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@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()



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201802220121.w1M1Ldb3036876>