From 5f463be4a96b89939e785e040c0d1ab1f2e11238 Mon Sep 17 00:00:00 2001 From: Sasha Smundak Date: Wed, 15 Sep 2021 18:43:36 -0700 Subject: [PATCH] Fix wildcard ('%') handling in the filter pattern. Fixes: 200094780 Test: internal Change-Id: I5f6a46679cdfa965ad98b9c0c22ef396a13a0bf6 --- mk2rbc/mk2rbc.go | 8 ++++++-- 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 `, },