aboutsummaryrefslogtreecommitdiffstats
path: root/android
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2018-04-16 13:58:10 -0700
committerColin Cross <ccross@android.com>2018-04-16 16:06:53 -0700
commit2071266b28afd6baef08b7b47656fd4f52da48c9 (patch)
tree89233af7ad1508aa35341b57f69661fac78e8db3 /android
parent195f53c0f22ce02aab25f87b96720aca3c56c88c (diff)
downloadbuild_soong-2071266b28afd6baef08b7b47656fd4f52da48c9.tar.gz
build_soong-2071266b28afd6baef08b7b47656fd4f52da48c9.tar.bz2
build_soong-2071266b28afd6baef08b7b47656fd4f52da48c9.zip
Fix module rename inside namespace
Rename was expecting fully qualified names, but context.go always passes it short names. Bug: 77922456 Test: TestRename in namespace_test.go Change-Id: I552ff39fd8ed6ba6da4262925060b45104840ff7 Merged-In: I552ff39fd8ed6ba6da4262925060b45104840ff7 (cherry picked from commit eafb10c23a77432329678917ed6453e9d1c15abe)
Diffstat (limited to 'android')
-rw-r--r--android/namespace.go17
-rw-r--r--android/namespace_test.go38
2 files changed, 37 insertions, 18 deletions
diff --git a/android/namespace.go b/android/namespace.go
index 1f8ef5a6..02305243 100644
--- a/android/namespace.go
+++ b/android/namespace.go
@@ -255,22 +255,7 @@ func (r *NameResolver) ModuleFromName(name string, namespace blueprint.Namespace
}
func (r *NameResolver) Rename(oldName string, newName string, namespace blueprint.Namespace) []error {
- oldNs := r.findNamespace(oldName)
- newNs := r.findNamespace(newName)
- if oldNs != newNs {
- return []error{fmt.Errorf("cannot rename %v to %v because the destination is outside namespace %v", oldName, newName, oldNs.Path)}
- }
-
- oldName, err := filepath.Rel(oldNs.Path, oldName)
- if err != nil {
- panic(err)
- }
- newName, err = filepath.Rel(newNs.Path, newName)
- if err != nil {
- panic(err)
- }
-
- return oldNs.moduleContainer.Rename(oldName, newName, nil)
+ return namespace.(*Namespace).moduleContainer.Rename(oldName, newName, namespace)
}
// resolve each element of namespace.importedNamespaceNames and put the result in namespace.visibleNamespaces
diff --git a/android/namespace_test.go b/android/namespace_test.go
index 8bec0add..9a791a53 100644
--- a/android/namespace_test.go
+++ b/android/namespace_test.go
@@ -582,6 +582,25 @@ func TestConsistentNamespaceNames(t *testing.T) {
}
}
+// so that the generated .ninja file will have consistent names
+func TestRename(t *testing.T) {
+ _ = setupTest(t,
+ map[string]string{
+ "dir1": `
+ soong_namespace {
+ }
+ test_module {
+ name: "a",
+ deps: ["c"],
+ }
+ test_module {
+ name: "b",
+ rename: "c",
+ }
+ `})
+ // setupTest will report any errors
+}
+
// some utils to support the tests
func mockFiles(bps map[string]string) (files map[string][]byte) {
@@ -607,6 +626,9 @@ func setupTestFromFiles(bps map[string][]byte) (ctx *TestContext, errs []error)
ctx.RegisterModuleType("test_module", ModuleFactoryAdaptor(newTestModule))
ctx.RegisterModuleType("soong_namespace", ModuleFactoryAdaptor(NamespaceFactory))
ctx.PreArchMutators(RegisterNamespaceMutator)
+ ctx.PreDepsMutators(func(ctx RegisterMutatorsContext) {
+ ctx.BottomUp("rename", renameMutator)
+ })
ctx.Register()
_, errs = ctx.ParseBlueprintsFiles("Android.bp")
@@ -672,12 +694,16 @@ func findModuleById(ctx *TestContext, id string) (module TestingModule) {
type testModule struct {
ModuleBase
properties struct {
- Deps []string
- Id string
+ Rename string
+ Deps []string
+ Id string
}
}
func (m *testModule) DepsMutator(ctx BottomUpMutatorContext) {
+ if m.properties.Rename != "" {
+ ctx.Rename(m.properties.Rename)
+ }
for _, d := range m.properties.Deps {
ctx.AddDependency(ctx.Module(), nil, d)
}
@@ -686,6 +712,14 @@ func (m *testModule) DepsMutator(ctx BottomUpMutatorContext) {
func (m *testModule) GenerateAndroidBuildActions(ModuleContext) {
}
+func renameMutator(ctx BottomUpMutatorContext) {
+ if m, ok := ctx.Module().(*testModule); ok {
+ if m.properties.Rename != "" {
+ ctx.Rename(m.properties.Rename)
+ }
+ }
+}
+
func newTestModule() Module {
m := &testModule{}
m.AddProperties(&m.properties)