Fix include paths that match one file being included unconditionally
In aosp/1962181 an "optimization" was added where if an include path with a variable only matches one file, that file would be called directly instead of going through the whole _entry variable. This doesn't work when there is an inherit-product-if-exists call that matches one file, but that file isn't the one that is specified at runtime. In reality, the inherit-product-if-exists call should see that the file doesn't exist and not include anything. Fixes: 222341691 Test: go test Change-Id: If8789de0013726137683078355161eecdec009b1
This commit is contained in:
@@ -807,20 +807,16 @@ func (ctx *parseContext) handleSubConfig(
|
||||
if len(matchingPaths) > maxMatchingFiles {
|
||||
return []starlarkNode{ctx.newBadNode(v, "there are >%d files matching the pattern, please rewrite it", maxMatchingFiles)}
|
||||
}
|
||||
if len(matchingPaths) == 1 {
|
||||
res := inheritedStaticModule{ctx.newDependentModule(matchingPaths[0], loadAlways && ctx.ifNestLevel == 0), loadAlways}
|
||||
return []starlarkNode{processModule(res)}
|
||||
} else {
|
||||
needsWarning := pathPattern[0] == "" && len(ctx.includeTops) == 0
|
||||
res := inheritedDynamicModule{*varPath, []*moduleInfo{}, loadAlways, ctx.errorLocation(v), needsWarning}
|
||||
for _, p := range matchingPaths {
|
||||
// A product configuration files discovered dynamically may attempt to inherit
|
||||
// from another one which does not exist in this source tree. Prevent load errors
|
||||
// by always loading the dynamic files as optional.
|
||||
res.candidateModules = append(res.candidateModules, ctx.newDependentModule(p, true))
|
||||
}
|
||||
return []starlarkNode{processModule(res)}
|
||||
|
||||
needsWarning := pathPattern[0] == "" && len(ctx.includeTops) == 0
|
||||
res := inheritedDynamicModule{*varPath, []*moduleInfo{}, loadAlways, ctx.errorLocation(v), needsWarning}
|
||||
for _, p := range matchingPaths {
|
||||
// A product configuration files discovered dynamically may attempt to inherit
|
||||
// from another one which does not exist in this source tree. Prevent load errors
|
||||
// by always loading the dynamic files as optional.
|
||||
res.candidateModules = append(res.candidateModules, ctx.newDependentModule(p, true))
|
||||
}
|
||||
return []starlarkNode{processModule(res)}
|
||||
}
|
||||
|
||||
func (ctx *parseContext) findMatchingPaths(pattern []string) []string {
|
||||
|
Reference in New Issue
Block a user