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:
parent
4aed3703dd
commit
6e1aa7830c
2 changed files with 2 additions and 35 deletions
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue