Merge "Revert "Implement detecting container violations."" into main
This commit is contained in:
@@ -16,7 +16,6 @@ package android
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"slices"
|
||||
"sort"
|
||||
"strconv"
|
||||
@@ -146,17 +145,6 @@ func (i ApexInfo) InApexModule(apexModuleName string) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
// To satisfy the comparable interface
|
||||
func (i ApexInfo) Equal(other any) bool {
|
||||
otherApexInfo, ok := other.(ApexInfo)
|
||||
return ok && i.ApexVariationName == otherApexInfo.ApexVariationName &&
|
||||
i.MinSdkVersion == otherApexInfo.MinSdkVersion &&
|
||||
i.Updatable == otherApexInfo.Updatable &&
|
||||
i.UsePlatformApis == otherApexInfo.UsePlatformApis &&
|
||||
reflect.DeepEqual(i.InApexVariants, otherApexInfo.InApexVariants) &&
|
||||
reflect.DeepEqual(i.InApexModules, otherApexInfo.InApexModules)
|
||||
}
|
||||
|
||||
// ApexTestForInfo stores the contents of APEXes for which this module is a test - although this
|
||||
// module is not part of the APEX - and thus has access to APEX internals.
|
||||
type ApexTestForInfo struct {
|
||||
|
@@ -15,10 +15,8 @@
|
||||
package android
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"slices"
|
||||
"strings"
|
||||
|
||||
"github.com/google/blueprint"
|
||||
)
|
||||
@@ -397,40 +395,6 @@ func (c *ContainersInfo) UpdatableApex() bool {
|
||||
|
||||
var ContainersInfoProvider = blueprint.NewProvider[ContainersInfo]()
|
||||
|
||||
func satisfyAllowedExceptions(ctx ModuleContext, allowedExceptionLabels []exceptionHandleFuncLabel, m, dep Module) bool {
|
||||
for _, label := range allowedExceptionLabels {
|
||||
if exceptionHandleFunctionsTable[label](ctx, m, dep) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (c *ContainersInfo) GetViolations(mctx ModuleContext, m, dep Module, depInfo ContainersInfo) []string {
|
||||
var violations []string
|
||||
|
||||
// Any containers that the module belongs to but the dependency does not belong to must be examined.
|
||||
_, containersUniqueToModule, _ := ListSetDifference(c.belongingContainers, depInfo.belongingContainers)
|
||||
|
||||
// Apex container should be examined even if both the module and the dependency belong to
|
||||
// the apex container to check that the two modules belong to the same apex.
|
||||
if InList(ApexContainer, c.belongingContainers) && !InList(ApexContainer, containersUniqueToModule) {
|
||||
containersUniqueToModule = append(containersUniqueToModule, ApexContainer)
|
||||
}
|
||||
|
||||
for _, containerUniqueToModule := range containersUniqueToModule {
|
||||
for _, restriction := range containerUniqueToModule.restricted {
|
||||
if InList(restriction.dependency, depInfo.belongingContainers) {
|
||||
if !satisfyAllowedExceptions(mctx, restriction.allowedExceptions, m, dep) {
|
||||
violations = append(violations, restriction.errorMessage)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return violations
|
||||
}
|
||||
|
||||
func generateContainerInfo(ctx ModuleContext) ContainersInfo {
|
||||
var containers []*container
|
||||
|
||||
@@ -472,32 +436,3 @@ func setContainerInfo(ctx ModuleContext) {
|
||||
SetProvider(ctx, ContainersInfoProvider, containersInfo)
|
||||
}
|
||||
}
|
||||
|
||||
func checkContainerViolations(ctx ModuleContext) {
|
||||
if _, ok := ctx.Module().(InstallableModule); ok {
|
||||
containersInfo, _ := getContainerModuleInfo(ctx, ctx.Module())
|
||||
ctx.VisitDirectDepsIgnoreBlueprint(func(dep Module) {
|
||||
if !dep.Enabled(ctx) {
|
||||
return
|
||||
}
|
||||
|
||||
// Pre-existing violating dependencies are tracked in containerDependencyViolationAllowlist.
|
||||
// If this dependency is allowlisted, do not check for violation.
|
||||
// If not, check if this dependency matches any restricted dependency and
|
||||
// satisfies any exception functions, which allows bypassing the
|
||||
// restriction. If all of the exceptions are not satisfied, throw an error.
|
||||
if depContainersInfo, ok := getContainerModuleInfo(ctx, dep); ok {
|
||||
if allowedViolations, ok := ContainerDependencyViolationAllowlist[ctx.ModuleName()]; ok && InList(dep.Name(), allowedViolations) {
|
||||
return
|
||||
} else {
|
||||
violations := containersInfo.GetViolations(ctx, ctx.Module(), dep, depContainersInfo)
|
||||
if len(violations) > 0 {
|
||||
errorMessage := fmt.Sprintf("%s cannot depend on %s. ", ctx.ModuleName(), dep.Name())
|
||||
errorMessage += strings.Join(violations, " ")
|
||||
ctx.ModuleErrorf(errorMessage)
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@@ -1778,9 +1778,6 @@ func (m *ModuleBase) GenerateBuildActions(blueprintCtx blueprint.ModuleContext)
|
||||
}
|
||||
|
||||
setContainerInfo(ctx)
|
||||
if ctx.Config().Getenv("DISABLE_CONTAINER_CHECK") != "true" {
|
||||
checkContainerViolations(ctx)
|
||||
}
|
||||
|
||||
ctx.licenseMetadataFile = PathForModuleOut(ctx, "meta_lic")
|
||||
|
||||
|
Reference in New Issue
Block a user