From 753a555fdde196deeb39a9b0c27112df10b05e4c Mon Sep 17 00:00:00 2001 From: Devin Moore Date: Thu, 27 Oct 2022 23:30:29 +0000 Subject: [PATCH] bpmodify: Add a set-bool flag to set single boolean values This is treated similar to other set commands, but add a single boolean value to the property. Test: bpmodify_test.go Test: bpmodify -d -m android.hardware.drm -property frozen -set-bool false Android.bp Test: Same command above with "true" "misspelled" "1" for -set-bool Bug: 231903487 Change-Id: I598da41a38409877af410f9715838d86b0873173 --- bpmodify/bpmodify.go | 27 +++++++++++++++++++++++--- bpmodify/bpmodify_test.go | 40 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 62 insertions(+), 5 deletions(-) diff --git a/bpmodify/bpmodify.go b/bpmodify/bpmodify.go index ec24d5f..1df808e 100644 --- a/bpmodify/bpmodify.go +++ b/bpmodify/bpmodify.go @@ -8,7 +8,6 @@ import ( "bytes" "flag" "fmt" - "github.com/google/blueprint/parser" "io" "io/ioutil" "os" @@ -17,6 +16,8 @@ import ( "strings" "syscall" "unicode" + + "github.com/google/blueprint/parser" ) var ( @@ -34,6 +35,7 @@ var ( newLocation string setString *string addLiteral *string + setBool *string replaceProperty = new(replacements) ) @@ -43,10 +45,11 @@ func init() { flag.StringVar(&newLocation, "new-location", "", " use with moveProperty to move contents of -property into a property with name -new-location ") flag.Var(targetedProperties, "property", "comma-separated list of fully qualified `name`s of properties to modify (default \"deps\")") flag.Var(addIdents, "a", "comma or whitespace separated list of identifiers to add") - flag.Var(stringPtrFlag{&addLiteral}, "add-literal", "a literal to add") + flag.Var(stringPtrFlag{&addLiteral}, "add-literal", "a literal to add to a list") flag.Var(removeIdents, "r", "comma or whitespace separated list of identifiers to remove") flag.Var(stringPtrFlag{&setString}, "str", "set a string property") flag.Var(replaceProperty, "replace-property", "property names to be replaced, in the form of oldName1=newName1,oldName2=newName2") + flag.Var(stringPtrFlag{&setBool}, "set-bool", "a boolean value to set a property with (not a list)") flag.Usage = usage } @@ -154,6 +157,9 @@ func processModuleProperty(module *parser.Module, moduleName string, } else if setString != nil { // We setting a non-existent string property, so we need to create it first. prop, modified, err = createRecursiveProperty(module, property.name(), property.prefixes(), &parser.String{}) + } else if setBool != nil { + // We are setting a non-existent property, so we need to create it first. + prop, modified, err = createRecursiveProperty(module, property.name(), property.prefixes(), &parser.Bool{}) } else { // We cannot find an existing prop, and we aren't adding anything to the prop, // which means we must be removing something from a non-existing prop, @@ -278,6 +284,21 @@ func processParameter(value parser.Expression, paramName, moduleName string, } list.Values = append(list.Values, value) modified = true + } else if setBool != nil { + res, ok := value.(*parser.Bool) + if !ok { + return false, []error{fmt.Errorf("expected parameter %s in module %s to be bool, found %s", + paramName, moduleName, value.Type().String())} + } + if *setBool == "true" { + res.Value = true + } else if *setBool == "false" { + res.Value = false + } else { + return false, []error{fmt.Errorf("expected parameter %s to be true or false, found %s", + paramName, *setBool)} + } + modified = true } else if setString != nil { str, ok := value.(*parser.String) if !ok { @@ -345,7 +366,7 @@ func main() { return } - if len(addIdents.idents) == 0 && len(removeIdents.idents) == 0 && setString == nil && addLiteral == nil && !*removeProperty && !*moveProperty && (*replaceProperty).size() == 0 { + if len(addIdents.idents) == 0 && len(removeIdents.idents) == 0 && setString == nil && addLiteral == nil && !*removeProperty && !*moveProperty && (*replaceProperty).size() == 0 && setBool == nil { report(fmt.Errorf("-a, -add-literal, -r, -remove-property, -move-property, replace-property or -str parameter is required")) return } diff --git a/bpmodify/bpmodify_test.go b/bpmodify/bpmodify_test.go index c3f7a21..7bd8b57 100644 --- a/bpmodify/bpmodify_test.go +++ b/bpmodify/bpmodify_test.go @@ -14,10 +14,11 @@ package main import ( - "github.com/google/blueprint/parser" - "github.com/google/blueprint/proptools" "strings" "testing" + + "github.com/google/blueprint/parser" + "github.com/google/blueprint/proptools" ) var testCases = []struct { @@ -29,6 +30,7 @@ var testCases = []struct { removeSet string addLiteral *string setString *string + setBool *string removeProperty bool replaceProperty string moveProperty bool @@ -306,6 +308,39 @@ var testCases = []struct { property: "foo", setString: proptools.StringPtr("bar"), }, + { + name: "set bool", + input: ` + cc_foo { + name: "foo", + } + `, + output: ` + cc_foo { + name: "foo", + foo: true, + } + `, + property: "foo", + setBool: proptools.StringPtr("true"), + }, + { + name: "set existing bool", + input: ` + cc_foo { + name: "foo", + foo: true, + } + `, + output: ` + cc_foo { + name: "foo", + foo: false, + } + `, + property: "foo", + setBool: proptools.StringPtr("false"), + }, { name: "remove existing property", input: ` @@ -516,6 +551,7 @@ func TestProcessModule(t *testing.T) { moveProperty = &testCase.moveProperty newLocation = testCase.newLocation setString = testCase.setString + setBool = testCase.setBool addLiteral = testCase.addLiteral replaceProperty.Set(testCase.replaceProperty)