Merge changes from topic "revert-3069323-revert-3066748-duplicate_entry_fs-CIBDJQYRHU-FVLDIVWUZV" into main

* changes:
  Revert^2 "Filesystem modules follow the installation semantic"
  Revert "Revert "Prevent multiple PackagingSpecs having same inst..."
This commit is contained in:
Jiyong Park
2024-05-04 03:56:55 +00:00
committed by Gerrit Code Review
4 changed files with 58 additions and 3 deletions

View File

@@ -50,6 +50,25 @@ type PackagingSpec struct {
skipInstall bool
}
func (p *PackagingSpec) Equals(other *PackagingSpec) bool {
if other == nil {
return false
}
if p.relPathInPackage != other.relPathInPackage {
return false
}
if p.srcPath != other.srcPath || p.symlinkTarget != other.symlinkTarget {
return false
}
if p.executable != other.executable {
return false
}
if p.partition != other.partition {
return false
}
return true
}
// Get file name of installed package
func (p *PackagingSpec) FileName() string {
if p.relPathInPackage != "" {
@@ -243,9 +262,15 @@ func (p *PackagingBase) GatherPackagingSpecsWithFilter(ctx ModuleContext, filter
continue
}
}
if _, ok := m[ps.relPathInPackage]; !ok {
m[ps.relPathInPackage] = ps
dstPath := ps.relPathInPackage
if existingPs, ok := m[dstPath]; ok {
if !existingPs.Equals(&ps) {
ctx.ModuleErrorf("packaging conflict at %v:\n%v\n%v", dstPath, existingPs, ps)
}
continue
}
m[dstPath] = ps
}
})
return m

View File

@@ -141,6 +141,7 @@ type filesystemProperties struct {
// partitions like system.img. For example, cc_library modules are placed under ./lib[64] directory.
func filesystemFactory() android.Module {
module := &filesystem{}
module.filterPackagingSpec = module.filterInstallablePackagingSpec
initFilesystemModule(module)
return module
}
@@ -193,6 +194,12 @@ func (f *filesystem) partitionName() string {
return proptools.StringDefault(f.properties.Partition_name, f.Name())
}
func (f *filesystem) filterInstallablePackagingSpec(ps android.PackagingSpec) bool {
// Filesystem module respects the installation semantic. A PackagingSpec from a module with
// IsSkipInstall() is skipped.
return !ps.SkipInstall()
}
var pctx = android.NewPackageContext("android/soong/filesystem")
func (f *filesystem) GenerateAndroidBuildActions(ctx android.ModuleContext) {

View File

@@ -442,3 +442,26 @@ func TestInconsistentPartitionTypesInDefaults(t *testing.T) {
}
`)
}
func TestPreventDuplicatedEntries(t *testing.T) {
fixture.ExtendWithErrorHandler(android.FixtureExpectsOneErrorPattern(
"packaging conflict at")).
RunTestWithBp(t, `
android_filesystem {
name: "fs",
deps: [
"foo",
"foo_dup",
],
}
cc_binary {
name: "foo",
}
cc_binary {
name: "foo_dup",
stem: "foo",
}
`)
}

View File

@@ -98,5 +98,5 @@ func (s *systemImage) buildLinkerConfigFile(ctx android.ModuleContext, root andr
// Note that "apex" module installs its contents to "apex"(fake partition) as well
// for symbol lookup by imitating "activated" paths.
func (s *systemImage) filterPackagingSpec(ps android.PackagingSpec) bool {
return ps.Partition() == "system"
return s.filesystem.filterInstallablePackagingSpec(ps) && ps.Partition() == "system"
}