simplify m clean

`rm -rf out` used to fail because bazel would not set write permission on some files. Now it's been fixed and thus there is little reason to prefer `m clean` (also users are accustomed to `rm -rf out`)

Bug: NA
Test: verified `m clean` works;interestingly soong_metrics file is created at the end
Change-Id: I000d16508613045811fc7792e5798f7c150dcc05
This commit is contained in:
Usta Shrestha 2023-02-13 18:54:42 -05:00 committed by usta
parent 4aed3703dd
commit 6e1aa7830c
2 changed files with 2 additions and 35 deletions

View file

@ -9,12 +9,8 @@ source "$(dirname "$0")/lib.sh"
function test_m_clean_works { function test_m_clean_works {
setup setup
# Create a directory with files that cannot be removed mkdir -p out/some_directory
mkdir -p out/bad_directory_permissions touch out/some_directory/some_file
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
run_soong clean run_soong clean
} }

View file

@ -17,7 +17,6 @@ package build
import ( import (
"bytes" "bytes"
"fmt" "fmt"
"io/fs"
"io/ioutil" "io/ioutil"
"os" "os"
"path/filepath" "path/filepath"
@ -59,37 +58,9 @@ const (
FILEMODE_USER_EXECUTE = FILEMODE_EXECUTE << FILEMODE_USER_SHIFT 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 // Remove everything under the out directory. Don't remove the out directory
// itself in case it's a symlink. // itself in case it's a symlink.
func clean(ctx Context, config Config) { func clean(ctx Context, config Config) {
ensureOutDirRemovable(ctx, config)
removeGlobs(ctx, filepath.Join(config.OutDir(), "*")) removeGlobs(ctx, filepath.Join(config.OutDir(), "*"))
ctx.Println("Entire build directory removed.") ctx.Println("Entire build directory removed.")
} }