From a874f88ceea97aabd53a36bc9affb767d790aadb Mon Sep 17 00:00:00 2001 From: Cole Faust Date: Fri, 5 May 2023 11:46:51 -0700 Subject: [PATCH] Remove unneeded rbcrun features - rblf_cli and rblf_env - -c and -f This is in preparation for making rbcrun able to function as a more general purpose starlark interpreter. Bug: 280685526 Test: go test, ./out/rbc ./build/make/tests/run.rbc, ./build/bazel/ci/rbc_dashboard.py --quick aosp_arm64 Change-Id: Ifff9ce7b4369422f39c5003bb85a168c78bde7cf --- core/board_config.mk | 2 +- core/product_config.mk | 2 +- core/product_config.rbc | 82 +++++--------------------- tools/rbcrun/host.go | 21 +------ tools/rbcrun/host_test.go | 34 +++-------- tools/rbcrun/rbcrun/rbcrun.go | 26 ++------ tools/rbcrun/testdata/cli_and_env.star | 11 ---- tools/rbcrun/testdata/file_ops.star | 9 ++- tools/rbcrun/testdata/shell.star | 4 +- 9 files changed, 39 insertions(+), 152 deletions(-) delete mode 100644 tools/rbcrun/testdata/cli_and_env.star diff --git a/core/board_config.mk b/core/board_config.mk index fae7aaa2c0..7969b25504 100644 --- a/core/board_config.mk +++ b/core/board_config.mk @@ -256,7 +256,7 @@ else endif $(shell build/soong/scripts/update_out $(OUT_DIR)/rbc/rbc_board_config_results.mk \ - $(OUT_DIR)/rbcrun RBC_OUT="make" $(OUT_DIR)/rbc/boardlauncher.rbc) + $(OUT_DIR)/rbcrun $(OUT_DIR)/rbc/boardlauncher.rbc) ifneq ($(.SHELLSTATUS),0) $(error board configuration runner failed: $(.SHELLSTATUS)) endif diff --git a/core/product_config.mk b/core/product_config.mk index bf48539cd4..914688a44f 100644 --- a/core/product_config.mk +++ b/core/product_config.mk @@ -247,7 +247,7 @@ else endif $(shell build/soong/scripts/update_out $(OUT_DIR)/rbc/rbc_product_config_results.mk \ - $(OUT_DIR)/rbcrun RBC_OUT="make,global" $(OUT_DIR)/rbc/launcher.rbc) + $(OUT_DIR)/rbcrun $(OUT_DIR)/rbc/launcher.rbc) ifneq ($(.SHELLSTATUS),0) $(error product configuration runner failed: $(.SHELLSTATUS)) endif diff --git a/core/product_config.rbc b/core/product_config.rbc index a5e5721270..e5948946a7 100644 --- a/core/product_config.rbc +++ b/core/product_config.rbc @@ -54,25 +54,16 @@ def __print_attr(attr, value): if value == None: return if type(value) == "list": - if _options.rearrange: - value = __printvars_rearrange_list(value) - if _options.format == "pretty": - print(attr, "=", repr(value)) - elif _options.format == "make": - value = list(value) - for i, x in enumerate(value): - if type(x) == "tuple" and len(x) == 1: - value[i] = "@inherit:" + x[0] + ".mk" - elif type(x) != "string": - fail("Wasn't a list of strings:", attr, " value:", value) - print(attr, ":=", " ".join(value)) - elif _options.format == "pretty": - print(attr, "=", repr(value)) - elif _options.format == "make": + value = list(value) + for i, x in enumerate(value): + if type(x) == "tuple" and len(x) == 1: + value[i] = "@inherit:" + x[0] + ".mk" + elif type(x) != "string": + fail("Wasn't a list of strings:", attr, " value:", value) + print(attr, ":=", " ".join(value)) + else: # Trim all spacing to a single space print(attr, ":=", _mkstrip(value)) - else: - fail("bad output format", _options.format) def _printvars(state): """Prints configuration and global variables.""" @@ -83,8 +74,7 @@ def _printvars(state): for nsname, nsvars in sorted(val.items()): # Define SOONG_CONFIG_ for Make, othewise # it cannot be added to .KATI_READONLY list - if _options.format == "make": - print("SOONG_CONFIG_" + nsname, ":=", " ".join(nsvars.keys())) + print("SOONG_CONFIG_" + nsname, ":=", " ".join(nsvars.keys())) for var, val in sorted(nsvars.items()): if val: __print_attr("SOONG_CONFIG_%s_%s" % (nsname, var), val) @@ -105,11 +95,6 @@ def _printvars(state): elif attr not in globals_base or globals_base[attr] != val: __print_attr(attr, val) -def __printvars_rearrange_list(value_list): - """Rearrange value list: return only distinct elements, maybe sorted.""" - seen = {item: 0 for item in value_list} - return sorted(seen.keys()) if _options.rearrange == "sort" else seen.keys() - def __sort_pcm_names(pcm_names): # We have to add an extension back onto the pcm names when sorting, # or else the sort order could be wrong when one is a prefix of another. @@ -695,16 +680,8 @@ def _mkwarning(file, message = ""): rblf_log(file, "warning", message, sep = ':') def _mk2rbc_error(loc, message): - """Prints a message about conversion error and stops. - - If RBC_MK2RBC_CONTINUE environment variable is set, - the execution will continue after the message is printed. - """ - if _options.mk2rbc_continue: - rblf_log(loc, message, sep = ':') - else: - _mkerror(loc, message) - + """Prints a message about conversion error and stops.""" + _mkerror(loc, message) def _mkinfo(file, message = ""): """Prints info.""" @@ -877,39 +854,12 @@ def _clear_var_list(g, h, var_list): # Cause the variable to appear set like the make version does g[v] = "" - -def __get_options(): - """Returns struct containing runtime global settings.""" - settings = dict( - format = "pretty", - rearrange = "", - trace_modules = False, - trace_variables = [], - mk2rbc_continue = False, - ) - for x in getattr(rblf_cli, "RBC_OUT", "").split(","): - if x == "sort" or x == "unique": - if settings["rearrange"]: - fail("RBC_OUT: either sort or unique is allowed (and sort implies unique)") - settings["rearrange"] = x - elif x == "pretty" or x == "make": - settings["format"] = x - elif x == "global": - # TODO: Remove this, kept for backwards compatibility - pass - elif x != "": - fail("RBC_OUT: got %s, should be one of: [pretty|make] [sort|unique]" % x) - for x in getattr(rblf_cli, "RBC_DEBUG", "").split(","): - if x == "!trace": - settings["trace_modules"] = True - elif x != "": - settings["trace_variables"].append(x) - if getattr(rblf_cli, "RBC_MK2RBC_CONTINUE", ""): - settings["mk2rbc_continue"] = True - return struct(**settings) - # Settings used during debugging. -_options = __get_options() +_options = struct( + trace_modules = False, + trace_variables = [], +) + rblf = struct( soong_config_namespace = _soong_config_namespace, soong_config_append = _soong_config_append, diff --git a/tools/rbcrun/host.go b/tools/rbcrun/host.go index 32afa458b9..f2fda4e145 100644 --- a/tools/rbcrun/host.go +++ b/tools/rbcrun/host.go @@ -223,16 +223,6 @@ func makeStringList(items []string) *starlark.List { return starlark.NewList(elems) } -// propsetFromEnv constructs a propset from the array of KEY=value strings -func structFromEnv(env []string) *starlarkstruct.Struct { - sd := make(map[string]starlark.Value, len(env)) - for _, x := range env { - kv := strings.SplitN(x, "=", 2) - sd[kv[0]] = starlark.String(kv[1]) - } - return starlarkstruct.FromStringDict(starlarkstruct.Default, sd) -} - func log(thread *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) { sep := " " if err := starlark.UnpackArgs("print", nil, kwargs, "sep?", &sep); err != nil { @@ -255,12 +245,10 @@ func log(thread *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwa return starlark.None, nil } -func setup(env []string) { +func setup() { // Create the symbols that aid makefile conversion. See README.md builtins = starlark.StringDict{ "struct": starlark.NewBuiltin("struct", starlarkstruct.Make), - "rblf_cli": structFromEnv(env), - "rblf_env": structFromEnv(os.Environ()), // To convert find-copy-subdir and product-copy-files-by pattern "rblf_find_files": starlark.NewBuiltin("rblf_find_files", find), // To convert makefile's $(shell cmd) @@ -285,11 +273,8 @@ func setup(env []string) { // and the name that appears in error messages; // * src is an optional source of bytes to use instead of filename // (it can be a string, or a byte array, or an io.Reader instance) -// * commandVars is an array of "VAR=value" items. They are accessible from -// the starlark script as members of the `rblf_cli` propset. -func Run(filename string, src interface{}, commandVars []string) error { - setup(commandVars) - +func Run(filename string, src interface{}) error { + setup() mainThread := &starlark.Thread{ Name: "main", Print: func(_ *starlark.Thread, msg string) { fmt.Println(msg) }, diff --git a/tools/rbcrun/host_test.go b/tools/rbcrun/host_test.go index 97f6ce9e93..e109c02c54 100644 --- a/tools/rbcrun/host_test.go +++ b/tools/rbcrun/host_test.go @@ -53,8 +53,8 @@ func starlarktestSetup() { } // Common setup for the tests: create thread, change to the test directory -func testSetup(t *testing.T, env []string) *starlark.Thread { - setup(env) +func testSetup(t *testing.T) *starlark.Thread { + setup() thread := &starlark.Thread{ Load: func(thread *starlark.Thread, module string) (starlark.StringDict, error) { if module == "assert.star" { @@ -72,14 +72,16 @@ func testSetup(t *testing.T, env []string) *starlark.Thread { func dataDir() string { _, thisSrcFile, _, _ := runtime.Caller(0) return filepath.Join(filepath.Dir(thisSrcFile), "testdata") - } func exerciseStarlarkTestFile(t *testing.T, starFile string) { // In order to use "assert.star" from go/starlark.net/starlarktest in the tests, provide: // * load function that handles "assert.star" // * starlarktest.DataFile function that finds its location - setup(nil) + setup() + if err := os.Chdir(dataDir()); err != nil { + t.Fatal(err) + } thread := &starlark.Thread{ Load: func(thread *starlark.Thread, module string) (starlark.StringDict, error) { if module == "assert.star" { @@ -98,26 +100,9 @@ func exerciseStarlarkTestFile(t *testing.T, starFile string) { } } -func TestCliAndEnv(t *testing.T) { - // TODO(asmundak): convert this to use exerciseStarlarkTestFile - if err := os.Setenv("TEST_ENVIRONMENT_FOO", "test_environment_foo"); err != nil { - t.Fatal(err) - } - thread := testSetup(t, []string{"CLI_FOO=foo"}) - if _, err := starlark.ExecFile(thread, "cli_and_env.star", nil, builtins); err != nil { - if err, ok := err.(*starlark.EvalError); ok { - t.Fatal(err.Backtrace()) - } - t.Fatal(err) - } -} - func TestFileOps(t *testing.T) { // TODO(asmundak): convert this to use exerciseStarlarkTestFile - if err := os.Setenv("TEST_DATA_DIR", dataDir()); err != nil { - t.Fatal(err) - } - thread := testSetup(t, nil) + thread := testSetup(t) if _, err := starlark.ExecFile(thread, "file_ops.star", nil, builtins); err != nil { if err, ok := err.(*starlark.EvalError); ok { t.Fatal(err.Backtrace()) @@ -128,7 +113,7 @@ func TestFileOps(t *testing.T) { func TestLoad(t *testing.T) { // TODO(asmundak): convert this to use exerciseStarlarkTestFile - thread := testSetup(t, nil) + thread := testSetup(t) thread.Load = func(thread *starlark.Thread, module string) (starlark.StringDict, error) { if module == "assert.star" { return starlarktest.LoadAssertModule() @@ -148,8 +133,5 @@ func TestLoad(t *testing.T) { } func TestShell(t *testing.T) { - if err := os.Setenv("TEST_DATA_DIR", dataDir()); err != nil { - t.Fatal(err) - } exerciseStarlarkTestFile(t, "testdata/shell.star") } diff --git a/tools/rbcrun/rbcrun/rbcrun.go b/tools/rbcrun/rbcrun/rbcrun.go index 4db6a0bf38..8dd0f46c1d 100644 --- a/tools/rbcrun/rbcrun/rbcrun.go +++ b/tools/rbcrun/rbcrun/rbcrun.go @@ -20,44 +20,25 @@ import ( "go.starlark.net/starlark" "os" "rbcrun" - "strings" ) var ( - execprog = flag.String("c", "", "execute program `prog`") rootdir = flag.String("d", ".", "the value of // for load paths") - file = flag.String("f", "", "file to execute") perfFile = flag.String("perf", "", "save performance data") ) func main() { flag.Parse() - filename := *file - var src interface{} - var env []string + filename := "" - rc := 0 for _, arg := range flag.Args() { - if strings.Contains(arg, "=") { - env = append(env, arg) - } else if filename == "" { + if filename == "" { filename = arg } else { quit("only one file can be executed\n") } } - if *execprog != "" { - if filename != "" { - quit("either -c or file name should be present\n") - } - filename = "" - src = *execprog - } if filename == "" { - if len(env) > 0 { - fmt.Fprintln(os.Stderr, - "no file to run -- if your file's name contains '=', use -f to specify it") - } flag.Usage() os.Exit(1) } @@ -75,7 +56,8 @@ func main() { } } rbcrun.LoadPathRoot = *rootdir - err := rbcrun.Run(filename, src, env) + err := rbcrun.Run(filename, nil) + rc := 0 if *perfFile != "" { if err2 := starlark.StopProfile(); err2 != nil { fmt.Fprintln(os.Stderr, err2) diff --git a/tools/rbcrun/testdata/cli_and_env.star b/tools/rbcrun/testdata/cli_and_env.star deleted file mode 100644 index d6f464aa79..0000000000 --- a/tools/rbcrun/testdata/cli_and_env.star +++ /dev/null @@ -1,11 +0,0 @@ -# Tests rblf_env access -load("assert.star", "assert") - - -def test(): - assert.eq(rblf_env.TEST_ENVIRONMENT_FOO, "test_environment_foo") - assert.fails(lambda: rblf_env.FOO_BAR_BAZ, ".*struct has no .FOO_BAR_BAZ attribute$") - assert.eq(rblf_cli.CLI_FOO, "foo") - - -test() diff --git a/tools/rbcrun/testdata/file_ops.star b/tools/rbcrun/testdata/file_ops.star index 2ee78fcc7e..b2b907c2c9 100644 --- a/tools/rbcrun/testdata/file_ops.star +++ b/tools/rbcrun/testdata/file_ops.star @@ -1,22 +1,21 @@ # Tests file ops builtins load("assert.star", "assert") - def test(): myname = "file_ops.star" files = rblf_wildcard("*.star") assert.true(myname in files, "expected %s in %s" % (myname, files)) - files = rblf_wildcard("*.star", rblf_env.TEST_DATA_DIR) + files = rblf_wildcard("*.star") assert.true(myname in files, "expected %s in %s" % (myname, files)) files = rblf_wildcard("*.xxx") assert.true(len(files) == 0, "expansion should be empty but contains %s" % files) mydir = "testdata" myrelname = "%s/%s" % (mydir, myname) - files = rblf_find_files(rblf_env.TEST_DATA_DIR + "/../", "*") + files = rblf_find_files("../", "*") assert.true(mydir in files and myrelname in files, "expected %s and %s in %s" % (mydir, myrelname, files)) - files = rblf_find_files(rblf_env.TEST_DATA_DIR + "/../", "*", only_files=1) + files = rblf_find_files("../", "*", only_files=1) assert.true(mydir not in files, "did not expect %s in %s" % (mydir, files)) assert.true(myrelname in files, "expected %s in %s" % (myrelname, files)) - files = rblf_find_files(rblf_env.TEST_DATA_DIR + "/../", "*.star") + files = rblf_find_files("../", "*.star") assert.true(myrelname in files, "expected %s in %s" % (myrelname, files)) test() diff --git a/tools/rbcrun/testdata/shell.star b/tools/rbcrun/testdata/shell.star index ad106974c4..dd173751b9 100644 --- a/tools/rbcrun/testdata/shell.star +++ b/tools/rbcrun/testdata/shell.star @@ -1,5 +1,5 @@ # Tests "queue" data type load("assert.star", "assert") -assert.eq("load.star shell.star", rblf_shell("cd %s && ls -1 shell.star load.star 2>&1" % rblf_env.TEST_DATA_DIR)) -assert.eq("shell.star", rblf_shell("cd %s && echo shell.sta*" % rblf_env.TEST_DATA_DIR)) +assert.eq("load.star shell.star", rblf_shell("ls -1 shell.star load.star 2>&1")) +assert.eq("shell.star", rblf_shell("echo shell.sta*"))