aboutsummaryrefslogtreecommitdiffstats
path: root/android
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2018-04-17 01:07:32 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2018-04-17 01:07:32 +0000
commit0f7e692fff56b04fc004306313c1b0725b351412 (patch)
tree72a5c0ed06abee76b6f1df77b8f64c7cab0418fe /android
parent0148f91348bb2457d5c1455bf7b1b0f54105e0fc (diff)
parent2071266b28afd6baef08b7b47656fd4f52da48c9 (diff)
downloadbuild_soong-0f7e692fff56b04fc004306313c1b0725b351412.tar.gz
build_soong-0f7e692fff56b04fc004306313c1b0725b351412.tar.bz2
build_soong-0f7e692fff56b04fc004306313c1b0725b351412.zip
Merge "Fix module rename inside namespace" into pi-dev
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)