Signed-off-by: Feng Shao <shaof777@gmail.com>
pull/32063/head
Feng Shao 6 months ago
parent 9885a19630
commit cf980e5472

@ -18,7 +18,6 @@ package util
import ( import (
"errors" "errors"
"fmt" "fmt"
"log"
"log/slog" "log/slog"
"strings" "strings"
@ -45,7 +44,7 @@ func processDependencyConditions(reqs []*chart.Dependency, cvals common.Values,
if util.IsConditionExpression(r.Condition) { if util.IsConditionExpression(r.Condition) {
enabled, err := util.EvaluateConditionExpression(strings.TrimSpace(r.Condition), cvals, cpath, r.Name) enabled, err := util.EvaluateConditionExpression(strings.TrimSpace(r.Condition), cvals, cpath, r.Name)
if err != nil { if err != nil {
log.Printf("Warning: Failed to parse condition expression '%s' for chart %s: %v", strings.TrimSpace(r.Condition), r.Name, err) slog.Warn("failed to parse condition expression", "expression", strings.TrimSpace(r.Condition), "chart", r.Name, "error", err)
continue continue
} }
r.Enabled = enabled r.Enabled = enabled

@ -30,7 +30,6 @@ type conditionExpression interface {
type conditionEvalContext struct { type conditionEvalContext struct {
values common.Values values common.Values
condition string
chartName string chartName string
chartPath string chartPath string
} }
@ -88,16 +87,16 @@ func (n conditionOr) eval(ctx conditionEvalContext) bool {
return n.right.eval(ctx) return n.right.eval(ctx)
} }
type conditionTokenType int type conditionTokenType string
const ( const (
conditionTokenEOF conditionTokenType = iota conditionTokenEOF conditionTokenType = "EOF"
conditionTokenLParen conditionTokenLParen conditionTokenType = "Left Parenthesis"
conditionTokenRParen conditionTokenRParen conditionTokenType = "Right Parenthesis"
conditionTokenAnd conditionTokenAnd conditionTokenType = "And"
conditionTokenOr conditionTokenOr conditionTokenType = "Or"
conditionTokenNot conditionTokenNot conditionTokenType = "Not"
conditionTokenPath conditionTokenPath conditionTokenType = "Path"
) )
type conditionToken struct { type conditionToken struct {
@ -124,23 +123,23 @@ func (t *conditionTokenizer) next() (conditionToken, error) {
switch ch := t.input[t.pos]; ch { switch ch := t.input[t.pos]; ch {
case '(': case '(':
t.pos++ t.pos++
return conditionToken{typeID: conditionTokenLParen, pos: t.pos - 1}, nil return conditionToken{typeID: conditionTokenLParen, value: "(", pos: t.pos - 1}, nil
case ')': case ')':
t.pos++ t.pos++
return conditionToken{typeID: conditionTokenRParen, pos: t.pos - 1}, nil return conditionToken{typeID: conditionTokenRParen, value: ")", pos: t.pos - 1}, nil
case '!': case '!':
t.pos++ t.pos++
return conditionToken{typeID: conditionTokenNot, pos: t.pos - 1}, nil return conditionToken{typeID: conditionTokenNot, value: "!", pos: t.pos - 1}, nil
case '&': case '&':
if t.peek('&') { if t.peek('&') {
t.pos += 2 t.pos += 2
return conditionToken{typeID: conditionTokenAnd, pos: t.pos - 2}, nil return conditionToken{typeID: conditionTokenAnd, value: "&&", pos: t.pos - 2}, nil
} }
return conditionToken{}, fmt.Errorf("unexpected token '&' at position %d", t.pos) return conditionToken{}, fmt.Errorf("unexpected token '&' at position %d", t.pos)
case '|': case '|':
if t.peek('|') { if t.peek('|') {
t.pos += 2 t.pos += 2
return conditionToken{typeID: conditionTokenOr, pos: t.pos - 2}, nil return conditionToken{typeID: conditionTokenOr, value: "||", pos: t.pos - 2}, nil
} }
return conditionToken{}, fmt.Errorf("unexpected token '|' at position %d", t.pos) return conditionToken{}, fmt.Errorf("unexpected token '|' at position %d", t.pos)
default: default:
@ -279,7 +278,7 @@ func (p *conditionParser) parsePrimary() (conditionExpression, error) {
} }
return expr, nil return expr, nil
default: default:
return nil, fmt.Errorf("unexpected token at position %d", p.current.pos) return nil, fmt.Errorf("unexpected token %q (type %v) at position %d", p.current.value, p.current.typeID, p.current.pos)
} }
} }
@ -296,7 +295,6 @@ func EvaluateConditionExpression(condition string, cvals common.Values, cpath, c
ctx := conditionEvalContext{ ctx := conditionEvalContext{
values: cvals, values: cvals,
condition: condition,
chartName: chartName, chartName: chartName,
chartPath: cpath, chartPath: cpath,
} }

Loading…
Cancel
Save