bp2build: add support for planting unresolved symlinks in the symlink forest.
In the isDir check, there's a possibility that the Stat check fails because the path is an unresolved symlink. Verify it with Lstat (which would succeed, since it doesn't follow links), and treat it like a file if Lstat succeeds. Test: new integration test Fixes: 232370097 Change-Id: I9807ca363a5dbdc20639b489b54627bd2cc1ca60
This commit is contained in:
@@ -95,13 +95,19 @@ func isDir(path string, fi os.FileInfo) bool {
|
||||
return fi.IsDir()
|
||||
}
|
||||
|
||||
fi2, err := os.Stat(path)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Cannot stat '%s': %s\n", path, err)
|
||||
fi2, statErr := os.Stat(path)
|
||||
if statErr == nil {
|
||||
return fi2.IsDir()
|
||||
}
|
||||
|
||||
// Check if this is a dangling symlink. If so, treat it like a file, not a dir.
|
||||
_, lstatErr := os.Lstat(path)
|
||||
if lstatErr != nil {
|
||||
fmt.Fprintf(os.Stderr, "Cannot stat or lstat '%s': %s\n%s\n", path, statErr, lstatErr)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
return fi2.IsDir()
|
||||
return false
|
||||
}
|
||||
|
||||
// Recursively plants a symlink forest at forestDir. The symlink tree will
|
||||
|
@@ -169,3 +169,29 @@ EOF
|
||||
}
|
||||
|
||||
test_cc_correctness
|
||||
|
||||
# Regression test for the following failure during symlink forest creation:
|
||||
#
|
||||
# Cannot stat '/tmp/st.rr054/foo/bar/unresolved_symlink': stat /tmp/st.rr054/foo/bar/unresolved_symlink: no such file or directory
|
||||
#
|
||||
function test_bp2build_null_build_with_unresolved_symlink_in_source() {
|
||||
setup
|
||||
|
||||
mkdir -p foo/bar
|
||||
ln -s /tmp/non-existent foo/bar/unresolved_symlink
|
||||
cat > foo/bar/Android.bp <<'EOF'
|
||||
filegroup {
|
||||
name: "fg",
|
||||
srcs: ["unresolved_symlink/non-existent-file.txt"],
|
||||
}
|
||||
EOF
|
||||
|
||||
run_soong bp2build
|
||||
|
||||
dest=$(readlink -f out/soong/workspace/foo/bar/unresolved_symlink)
|
||||
if [[ "$dest" != "/tmp/non-existent" ]]; then
|
||||
fail "expected to plant an unresolved symlink out/soong/workspace/foo/bar/unresolved_symlink that resolves to /tmp/non-existent"
|
||||
fi
|
||||
}
|
||||
|
||||
test_bp2build_null_build_with_unresolved_symlink_in_source
|
||||
|
@@ -127,6 +127,10 @@ function create_mock_bazel() {
|
||||
}
|
||||
|
||||
run_bazel() {
|
||||
# Remove the ninja_build output marker file to communicate to buildbot that this is not a regular Ninja build, and its
|
||||
# output should not be parsed as such.
|
||||
rm -rf out/ninja_build
|
||||
|
||||
tools/bazel "$@"
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user