diff options
| author | 2021-09-15 18:43:36 -0700 | |
|---|---|---|
| committer | 2021-10-06 09:38:22 -0700 | |
| commit | 5f463be4a96b89939e785e040c0d1ab1f2e11238 (patch) | |
| tree | f852d9439335d3e57d0b21d08b9e7941cbeabac4 | |
| parent | ba26bdc3164e4ecf95f96bff1da52deaaec3b038 (diff) | |
Fix wildcard ('%') handling in the filter pattern.
Fixes: 200094780
Test: internal
Change-Id: I5f6a46679cdfa965ad98b9c0c22ef396a13a0bf6
| -rw-r--r-- | mk2rbc/mk2rbc.go | 8 | ||||
| -rw-r--r-- | mk2rbc/mk2rbc_test.go | 13 |
2 files changed, 16 insertions, 5 deletions
diff --git a/mk2rbc/mk2rbc.go b/mk2rbc/mk2rbc.go index 3ae8ab94c..b377fd828 100644 --- a/mk2rbc/mk2rbc.go +++ b/mk2rbc/mk2rbc.go @@ -1162,17 +1162,21 @@ func (ctx *parseContext) parseCompareFilterFuncResult(cond *mkparser.Directive, } // Either pattern or text should be const, and the // non-const one should be varRefExpr - if xInList, ok = xPattern.(*stringLiteralExpr); ok { + if xInList, ok = xPattern.(*stringLiteralExpr); ok && !strings.ContainsRune(xInList.literal, '%') && xText.typ() == starlarkTypeList { expr = xText } else if xInList, ok = xText.(*stringLiteralExpr); ok { expr = xPattern } else { - return &callExpr{ + expr = &callExpr{ object: nil, name: filterFuncCall.name, args: filterFuncCall.args, returnType: starlarkTypeBool, } + if negate { + expr = ¬Expr{expr: expr} + } + return expr } case *variableRefExpr: if v, ok := xPattern.(*variableRefExpr); ok { diff --git a/mk2rbc/mk2rbc_test.go b/mk2rbc/mk2rbc_test.go index 434500bf7..fe1fa0813 100644 --- a/mk2rbc/mk2rbc_test.go +++ b/mk2rbc/mk2rbc_test.go @@ -360,20 +360,27 @@ ifeq ($(TARGET_BUILD_VARIANT), $(filter $(TARGET_BUILD_VARIANT), userdebug eng)) endif ifneq (,$(filter true, $(v1)$(v2))) endif +ifeq (,$(filter barbet coral%,$(TARGET_PRODUCT))) +else ifneq (,$(filter barbet%,$(TARGET_PRODUCT))) +endif `, expected: `load("//build/make/core:product_config.rbc", "rblf") def init(g, handle): cfg = rblf.cfg(handle) - if g["TARGET_BUILD_VARIANT"] not in ["userdebug", "eng"]: + if not rblf.filter("userdebug eng", g["TARGET_BUILD_VARIANT"]): pass - if g["TARGET_BUILD_VARIANT"] == "userdebug": + if rblf.filter("userdebug", g["TARGET_BUILD_VARIANT"]): pass if "plaf" in g.get("PLATFORM_LIST", []): pass if g["TARGET_BUILD_VARIANT"] in ["userdebug", "eng"]: pass - if "%s%s" % (_v1, _v2) == "true": + if rblf.filter("true", "%s%s" % (_v1, _v2)): + pass + if not rblf.filter("barbet coral%", g["TARGET_PRODUCT"]): + pass + elif rblf.filter("barbet%", g["TARGET_PRODUCT"]): pass `, }, |