File use-nio-files-createTempFile-rather-than-File-createTempFile.patch of Package gradle.28588
Index: gradle-4.4.1/subprojects/core/src/main/java/org/gradle/api/internal/file/DefaultTemporaryFileProvider.java
===================================================================
--- gradle-4.4.1.orig/subprojects/core/src/main/java/org/gradle/api/internal/file/DefaultTemporaryFileProvider.java
+++ gradle-4.4.1/subprojects/core/src/main/java/org/gradle/api/internal/file/DefaultTemporaryFileProvider.java
@@ -23,13 +23,27 @@ import org.gradle.util.CollectionUtils;
import org.gradle.util.GFileUtils;
import javax.annotation.Nullable;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.attribute.FileAttribute;
+import java.nio.file.attribute.PosixFileAttributeView;
+import java.nio.file.attribute.PosixFilePermission;
+import java.nio.file.attribute.PosixFilePermissions;
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
+import java.util.EnumSet;
public class DefaultTemporaryFileProvider implements TemporaryFileProvider, Serializable {
private final Factory<File> baseDirFactory;
+ private static final FileAttribute[] TMPFILE_ATTRIBUTES =
+ new FileAttribute[] {
+ PosixFilePermissions.asFileAttribute(EnumSet.of(PosixFilePermission.OWNER_READ,
+ PosixFilePermission.OWNER_WRITE))
+ };
+ private static final FileAttribute[] NO_TMPFILE_ATTRIBUTES = new FileAttribute[0];
+
public DefaultTemporaryFileProvider(final Factory<File> fileFactory) {
this.baseDirFactory = fileFactory;
}
@@ -50,11 +64,17 @@ public class DefaultTemporaryFileProvide
public File createTemporaryDirectory(@Nullable String prefix, @Nullable String suffix, @Nullable String... path) {
File dir = new File(baseDirFactory.create(), CollectionUtils.join("/", path));
+ File tmpDir;
GFileUtils.mkdirs(dir);
try {
// TODO: This is not a great paradigm for creating a temporary directory.
// See http://guava-libraries.googlecode.com/svn/tags/release08/javadoc/com/google/common/io/Files.html#createTempDir%28%29 for an alternative.
- File tmpDir = File.createTempFile("gradle", "projectDir", dir);
+ final Path parentPath = dir.toPath();
+ final PosixFileAttributeView parentPosixAttributes =
+ Files.getFileAttributeView(parentPath, PosixFileAttributeView.class);
+ tmpDir = Files.createTempFile(parentPath, prefix, suffix,
+ parentPosixAttributes != null ? TMPFILE_ATTRIBUTES : NO_TMPFILE_ATTRIBUTES)
+ .toFile();
tmpDir.delete();
tmpDir.mkdir();
return tmpDir;
Index: gradle-4.4.1/subprojects/core/src/test/groovy/org/gradle/api/internal/file/DefaultTemporaryFileProviderTest.groovy
===================================================================
--- gradle-4.4.1.orig/subprojects/core/src/test/groovy/org/gradle/api/internal/file/DefaultTemporaryFileProviderTest.groovy
+++ gradle-4.4.1/subprojects/core/src/test/groovy/org/gradle/api/internal/file/DefaultTemporaryFileProviderTest.groovy
@@ -15,8 +15,14 @@
*/
package org.gradle.api.internal.file
+import java.nio.file.attribute.PosixFileAttributeView;
+import java.nio.file.attribute.PosixFilePermission;
+import java.util.Set;
+
import org.gradle.internal.Factory
import org.gradle.test.fixtures.file.TestNameTestDirectoryProvider
+import org.hamcrest.Matcher;
+import org.hamcrest.Matchers;
import org.junit.Rule
import spock.lang.Specification
@@ -60,5 +66,13 @@ class DefaultTemporaryFileProviderTest e
assert file.name.startsWith("prefix")
assert file.name.endsWith("suffix")
assert file.path.startsWith(new File(tmpDir.testDirectory, "foo/bar").path)
+ final PosixFileAttributeView attributes =
+ Files.getFileAttributeView(tmp1.toPath(), PosixFileAttributeView.class);
+ if (attributes != null) {
+ final Set<PosixFilePermission> perm = attributes.readAttributes().permissions();
+ assertThat(perm,
+ containsInAnyOrder(PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE));
+ assertThat(perm, hasSize(2));
+ }
}
}