aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2024-05-09 22:15:46 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2024-05-09 22:15:46 +0000
commit515e7991fc118127aa009bd96611aa43bc936740 (patch)
treef6bfe253ba8d895f0956318680ebd11660b8235f
parent0bc93e1a92cf75d128feab01119681fab2a2da29 (diff)
parenteb077c31231b6931194a4ea3d6cb860249c627b1 (diff)
downloadblueprint-main.tar.gz
Merge "Handle nil variant in applyTransitions" into mainHEADmastermain
-rw-r--r--context.go9
-rw-r--r--transition_test.go32
2 files changed, 35 insertions, 6 deletions
diff --git a/context.go b/context.go
index 7932c74..e4a7b0d 100644
--- a/context.go
+++ b/context.go
@@ -1877,7 +1877,7 @@ func (c *Context) findReverseDependency(module *moduleInfo, config any, destName
// modify the requested variation. It finds a variant that existed before the TransitionMutator ran that is
// a subset of the requested variant to use as the module context for IncomingTransition.
func (c *Context) applyTransitions(config any, module *moduleInfo, group *moduleGroup, variant variationMap,
- requestedVariations []Variation) {
+ requestedVariations []Variation) variationMap {
for _, transitionMutator := range c.transitionMutators {
// Apply the outgoing transition if it was not explicitly requested.
explicitlyRequested := slices.ContainsFunc(requestedVariations, func(variation Variation) bool {
@@ -1903,6 +1903,9 @@ func (c *Context) applyTransitions(config any, module *moduleInfo, group *module
}
finalVariation := transitionMutator.mutator.IncomingTransition(ctx, outgoingVariation)
+ if variant == nil {
+ variant = make(variationMap)
+ }
variant[transitionMutator.name] = finalVariation
appliedIncomingTransition = true
break
@@ -1914,6 +1917,8 @@ func (c *Context) applyTransitions(config any, module *moduleInfo, group *module
delete(variant, transitionMutator.name)
}
}
+
+ return variant
}
func (c *Context) findVariant(module *moduleInfo, config any,
@@ -1940,7 +1945,7 @@ func (c *Context) findVariant(module *moduleInfo, config any,
newVariant[v.Mutator] = v.Variation
}
- c.applyTransitions(config, module, possibleDeps, newVariant, requestedVariations)
+ newVariant = c.applyTransitions(config, module, possibleDeps, newVariant, requestedVariations)
check := func(variant variationMap) bool {
if far {
diff --git a/transition_test.go b/transition_test.go
index a380b86..7c6e1f4 100644
--- a/transition_test.go
+++ b/transition_test.go
@@ -86,7 +86,18 @@ const testTransitionBp = `
}
transition_module {
- name: "F"
+ name: "F",
+ }
+
+ transition_module {
+ name: "G",
+ outgoing: "h",
+ %s
+ }
+
+ transition_module {
+ name: "H",
+ split: ["h"],
}
`
@@ -128,7 +139,7 @@ func checkTransitionMutate(t *testing.T, m *transitionModule, variant string) {
}
func TestTransition(t *testing.T) {
- ctx, errs := testTransition(fmt.Sprintf(testTransitionBp, ""))
+ ctx, errs := testTransition(fmt.Sprintf(testTransitionBp, "", ""))
assertNoErrors(t, errs)
// Module A uses Split to create a and b variants
@@ -154,6 +165,8 @@ func TestTransition(t *testing.T) {
D_d := getTransitionModule(ctx, "D", "d")
E_d := getTransitionModule(ctx, "E", "d")
F := getTransitionModule(ctx, "F", "")
+ G := getTransitionModule(ctx, "G", "")
+ H_h := getTransitionModule(ctx, "H", "h")
checkTransitionDeps(t, ctx, A_a, "B(a)", "C(a)")
checkTransitionDeps(t, ctx, A_b, "B(b)", "C(b)")
@@ -165,6 +178,8 @@ func TestTransition(t *testing.T) {
checkTransitionDeps(t, ctx, D_d, "E(d)")
checkTransitionDeps(t, ctx, E_d)
checkTransitionDeps(t, ctx, F)
+ checkTransitionDeps(t, ctx, G)
+ checkTransitionDeps(t, ctx, H_h)
checkTransitionMutate(t, A_a, "a")
checkTransitionMutate(t, A_b, "b")
@@ -176,11 +191,14 @@ func TestTransition(t *testing.T) {
checkTransitionMutate(t, D_d, "d")
checkTransitionMutate(t, E_d, "d")
checkTransitionMutate(t, F, "")
+ checkTransitionMutate(t, G, "")
+ checkTransitionMutate(t, H_h, "h")
}
func TestPostTransitionDeps(t *testing.T) {
ctx, errs := testTransition(fmt.Sprintf(testTransitionBp,
- `post_transition_deps: ["C", "D:late", "E:d", "F"],`))
+ `post_transition_deps: ["C", "D:late", "E:d", "F"],`,
+ `post_transition_deps: ["H"],`))
assertNoErrors(t, errs)
// Module A uses Split to create a and b variants
@@ -206,6 +224,8 @@ func TestPostTransitionDeps(t *testing.T) {
D_d := getTransitionModule(ctx, "D", "d")
E_d := getTransitionModule(ctx, "E", "d")
F := getTransitionModule(ctx, "F", "")
+ G := getTransitionModule(ctx, "G", "")
+ H_h := getTransitionModule(ctx, "H", "h")
checkTransitionDeps(t, ctx, A_a, "B(a)", "C(a)")
checkTransitionDeps(t, ctx, A_b, "B(b)", "C(b)")
@@ -222,6 +242,8 @@ func TestPostTransitionDeps(t *testing.T) {
checkTransitionDeps(t, ctx, D_d, "E(d)")
checkTransitionDeps(t, ctx, E_d)
checkTransitionDeps(t, ctx, F)
+ checkTransitionDeps(t, ctx, G, "H(h)")
+ checkTransitionDeps(t, ctx, H_h)
checkTransitionMutate(t, A_a, "a")
checkTransitionMutate(t, A_b, "b")
@@ -233,12 +255,14 @@ func TestPostTransitionDeps(t *testing.T) {
checkTransitionMutate(t, D_d, "d")
checkTransitionMutate(t, E_d, "d")
checkTransitionMutate(t, F, "")
+ checkTransitionMutate(t, G, "")
+ checkTransitionMutate(t, H_h, "h")
}
func TestPostTransitionDepsMissingVariant(t *testing.T) {
// TODO: eventually this will create the missing variant on demand
_, errs := testTransition(fmt.Sprintf(testTransitionBp,
- `post_transition_deps: ["E:missing"],`))
+ `post_transition_deps: ["E:missing"],`, ""))
expectedError := `Android.bp:8:4: dependency "E" of "B" missing variant:
transition:missing
available variants: