From 2071266b28afd6baef08b7b47656fd4f52da48c9 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Mon, 16 Apr 2018 13:58:10 -0700 Subject: 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) --- android/namespace.go | 17 +---------------- android/namespace_test.go | 38 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 37 insertions(+), 18 deletions(-) (limited to 'android') 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) -- cgit v1.2.3