Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 543d4f3b authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge changes from topic "duplicate_entry_fs" into main

* changes:
  Filesystem modules follow the installation semantic
  Prevent multiple PackagingSpecs having same installation path
parents 6ab1b1fd 742f54c4
Loading
Loading
Loading
Loading
+27 −2
Original line number Diff line number Diff line
@@ -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
+7 −0
Original line number Diff line number Diff line
@@ -137,6 +137,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
}
@@ -189,6 +190,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) {
+23 −0
Original line number Diff line number Diff line
@@ -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",
		}
	`)
}
+1 −1
Original line number Diff line number Diff line
@@ -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"
}