Prevent multiple PackagingSpecs having same installation path
This fixes a bug that different PackagingSpecs having the same installation path were silently allowed. Previously, a PackagingSpec that comes the first for the given installation path won, effectively eclipsing other PackagingSpecs destined for the same installation path. Bug: 335506668 Test: go test ./... Change-Id: Ia36f656e8364f95c4be78fff6e9dc16966307526
This commit is contained in:
@@ -50,6 +50,25 @@ type PackagingSpec struct {
|
|||||||
skipInstall bool
|
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
|
// Get file name of installed package
|
||||||
func (p *PackagingSpec) FileName() string {
|
func (p *PackagingSpec) FileName() string {
|
||||||
if p.relPathInPackage != "" {
|
if p.relPathInPackage != "" {
|
||||||
@@ -243,9 +262,15 @@ func (p *PackagingBase) GatherPackagingSpecsWithFilter(ctx ModuleContext, filter
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if _, ok := m[ps.relPathInPackage]; !ok {
|
dstPath := ps.relPathInPackage
|
||||||
m[ps.relPathInPackage] = ps
|
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
|
return m
|
||||||
|
@@ -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",
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user