diff options
author | Laszlo Csomor <laszlocsomor@google.com> | 2017-06-30 16:38:50 +0200 |
---|---|---|
committer | Marcel Hlopko <hlopko@google.com> | 2017-07-03 09:05:44 +0200 |
commit | ed3ba0325e8a41eccf2f9c5e2bf95a2572d9394d (patch) | |
tree | 31d328fa65d59e34e70af00938d42fd1b52d64d0 /src/tools/android/java/com | |
parent | ed41c0a042042ba895bf68c82dda6b7446dfe8a1 (diff) |
Windows, Android: ScopedTemporaryDirectory bugfix
ScopedTemporaryDirectory now makes all files
writable before attempting to delete them. This is
important on Windows where readonly files cannot
be deleted, the attempt resulting in an exception.
See https://github.com/bazelbuild/bazel/issues/3264
Change-Id: If79478a4b419c05d77ce89cc30cb701d42df1b75
PiperOrigin-RevId: 160644599
Diffstat (limited to 'src/tools/android/java/com')
-rw-r--r-- | src/tools/android/java/com/google/devtools/build/android/ScopedTemporaryDirectory.java | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/tools/android/java/com/google/devtools/build/android/ScopedTemporaryDirectory.java b/src/tools/android/java/com/google/devtools/build/android/ScopedTemporaryDirectory.java index 684e5a5919..4f6ba1e812 100644 --- a/src/tools/android/java/com/google/devtools/build/android/ScopedTemporaryDirectory.java +++ b/src/tools/android/java/com/google/devtools/build/android/ScopedTemporaryDirectory.java @@ -20,6 +20,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; +import java.nio.file.attribute.DosFileAttributeView; /** * Creates a temporary directory that will be deleted once a scope closes. NOTE: If an error occurs @@ -39,6 +40,12 @@ final class ScopedTemporaryDirectory extends SimpleFileVisitor<Path> implements @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + // Make the file deletable on Windows. + // Setting this attribute on other platforms than Windows has no effect. + DosFileAttributeView dosAttribs = Files.getFileAttributeView(path, DosFileAttributeView.class); + if (dosAttribs != null) { + dosAttribs.setReadOnly(false); + } Files.delete(file); return FileVisitResult.CONTINUE; } |