Merge "build: Fix bp2build panic issue"
diff --git a/apex/apex_test.go b/apex/apex_test.go
index c1d80a3..2dad22b 100644
--- a/apex/apex_test.go
+++ b/apex/apex_test.go
@@ -6260,8 +6260,7 @@
sdk_version: "current",
system_modules: "none",
privileged: true,
- privapp_allowlist: "perms.xml",
- package_name: "com.android.AppFooPriv",
+ privapp_allowlist: "privapp_allowlist_com.android.AppFooPriv.xml",
stl: "none",
apex_available: [ "myapex" ],
}
diff --git a/java/app.go b/java/app.go
index 366005c..d0bde6f 100755
--- a/java/app.go
+++ b/java/app.go
@@ -621,13 +621,21 @@
return a.installApkName
}
-func (a *AndroidApp) createPrivappAllowlist(ctx android.ModuleContext) *android.OutputPath {
+func (a *AndroidApp) createPrivappAllowlist(ctx android.ModuleContext) android.Path {
if a.appProperties.Privapp_allowlist == nil {
return nil
}
+
+ isOverrideApp := a.GetOverriddenBy() != ""
+ if !isOverrideApp {
+ // if this is not an override, we don't need to rewrite the existing privapp allowlist
+ return android.PathForModuleSrc(ctx, *a.appProperties.Privapp_allowlist)
+ }
+
if a.overridableAppProperties.Package_name == nil {
ctx.PropertyErrorf("privapp_allowlist", "package_name must be set to use privapp_allowlist")
}
+
packageName := *a.overridableAppProperties.Package_name
fileName := "privapp_allowlist_" + packageName + ".xml"
outPath := android.PathForModuleOut(ctx, fileName).OutputPath
diff --git a/java/app_test.go b/java/app_test.go
index c485478..4b78c48 100644
--- a/java/app_test.go
+++ b/java/app_test.go
@@ -3563,9 +3563,8 @@
android_app {
name: "foo",
srcs: ["a.java"],
- privapp_allowlist: "perms.xml",
+ privapp_allowlist: "privapp_allowlist_com.android.foo.xml",
privileged: true,
- package_name: "com.android.foo",
sdk_version: "current",
}
override_android_app {
@@ -3578,17 +3577,12 @@
app := result.ModuleForTests("foo", "android_common")
overrideApp := result.ModuleForTests("foo", "android_common_bar")
- // verify that privapp allowlist is created
- app.Output("out/soong/.intermediates/foo/android_common/privapp_allowlist_com.android.foo.xml")
+ // verify that privapp allowlist is created for override apps
overrideApp.Output("out/soong/.intermediates/foo/android_common_bar/privapp_allowlist_com.google.android.foo.xml")
- expectedAllowlist := "perms.xml"
- actualAllowlist := app.Rule("modifyAllowlist").Input.String()
- if expectedAllowlist != actualAllowlist {
- t.Errorf("expected allowlist to be %q; got %q", expectedAllowlist, actualAllowlist)
- }
- overrideActualAllowlist := overrideApp.Rule("modifyAllowlist").Input.String()
- if expectedAllowlist != overrideActualAllowlist {
- t.Errorf("expected override allowlist to be %q; got %q", expectedAllowlist, overrideActualAllowlist)
+ expectedAllowlistInput := "privapp_allowlist_com.android.foo.xml"
+ overrideActualAllowlistInput := overrideApp.Rule("modifyAllowlist").Input.String()
+ if expectedAllowlistInput != overrideActualAllowlistInput {
+ t.Errorf("expected override allowlist to be %q; got %q", expectedAllowlistInput, overrideActualAllowlistInput)
}
// verify that permissions are copied to device
diff --git a/tests/soong_test.sh b/tests/soong_test.sh
index f7bee40..6779d8a 100755
--- a/tests/soong_test.sh
+++ b/tests/soong_test.sh
@@ -9,12 +9,8 @@
function test_m_clean_works {
setup
- # Create a directory with files that cannot be removed
- mkdir -p out/bad_directory_permissions
- touch out/bad_directory_permissions/unremovable_file
- # File permissions are fine but directory permissions are bad
- chmod a+rwx out/bad_directory_permissions/unremovable_file
- chmod a-rwx out/bad_directory_permissions
+ mkdir -p out/some_directory
+ touch out/some_directory/some_file
run_soong clean
}
diff --git a/ui/build/cleanbuild.go b/ui/build/cleanbuild.go
index fd60177..ee53327 100644
--- a/ui/build/cleanbuild.go
+++ b/ui/build/cleanbuild.go
@@ -17,7 +17,6 @@
import (
"bytes"
"fmt"
- "io/fs"
"io/ioutil"
"os"
"path/filepath"
@@ -59,37 +58,9 @@
FILEMODE_USER_EXECUTE = FILEMODE_EXECUTE << FILEMODE_USER_SHIFT
)
-// Ensures that files and directories in the out dir can be deleted.
-// For example, Bazen can generate output directories where the write bit isn't set, causing 'm' clean' to fail.
-func ensureOutDirRemovable(ctx Context, config Config) {
- err := filepath.WalkDir(config.OutDir(), func(path string, d fs.DirEntry, err error) error {
- if err != nil {
- return err
- }
- if d.IsDir() {
- info, err := d.Info()
- if err != nil {
- return err
- }
- // Equivalent to running chmod u+rwx on each directory
- newMode := info.Mode() | FILEMODE_USER_READ | FILEMODE_USER_WRITE | FILEMODE_USER_EXECUTE
- if err := os.Chmod(path, newMode); err != nil {
- return err
- }
- }
- // Continue walking the out dir...
- return nil
- })
- if err != nil && !os.IsNotExist(err) {
- // Display the error, but don't crash.
- ctx.Println(err.Error())
- }
-}
-
// Remove everything under the out directory. Don't remove the out directory
// itself in case it's a symlink.
func clean(ctx Context, config Config) {
- ensureOutDirRemovable(ctx, config)
removeGlobs(ctx, filepath.Join(config.OutDir(), "*"))
ctx.Println("Entire build directory removed.")
}