diff --git a/gerrit-common/src/main/java/com/google/gerrit/common/FileUtil.java b/gerrit-common/src/main/java/com/google/gerrit/common/FileUtil.java index bed10d656a..aa2fcbc36e 100644 --- a/gerrit-common/src/main/java/com/google/gerrit/common/FileUtil.java +++ b/gerrit-common/src/main/java/com/google/gerrit/common/FileUtil.java @@ -21,6 +21,7 @@ import org.eclipse.jgit.util.IO; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; +import java.nio.file.Path; import java.util.Arrays; public class FileUtil { @@ -42,6 +43,11 @@ public class FileUtil { } } + public static void chmod(final int mode, final Path path) { + // TODO(dborowitz): Is there a portable way to do this with NIO? + chmod(mode, path.toFile()); + } + public static void chmod(final int mode, final File path) { path.setReadable(false, false /* all */); path.setWritable(false, false /* all */); @@ -63,4 +69,4 @@ public class FileUtil { private FileUtil() { } -} \ No newline at end of file +} diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/gitweb/GitWebServlet.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/gitweb/GitWebServlet.java index 9a7cab01bf..a185985cad 100644 --- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/gitweb/GitWebServlet.java +++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/gitweb/GitWebServlet.java @@ -62,6 +62,7 @@ import java.io.OutputStream; import java.io.PrintWriter; import java.net.URI; import java.net.URISyntaxException; +import java.nio.file.Files; import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; @@ -143,10 +144,11 @@ class GitWebServlet extends HttpServlet { private void makeSiteConfig(final SitePaths site, final GerritConfig gerritConfig) throws IOException { - if (!site.tmp_dir.exists()) { - site.tmp_dir.mkdirs(); + if (!Files.exists(site.tmp_dir)) { + Files.createDirectories(site.tmp_dir); } - File myconf = File.createTempFile("gitweb_config", ".perl", site.tmp_dir); + File myconf = Files.createTempFile(site.tmp_dir, "gitweb_config", ".perl") + .toFile(); // To make our configuration file only readable or writable by us; // this reduces the chances of someone tampering with the file. diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/api/InitUtil.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/api/InitUtil.java index 881208d552..ac911a472c 100644 --- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/api/InitUtil.java +++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/api/InitUtil.java @@ -34,6 +34,8 @@ import java.net.URI; import java.net.URISyntaxException; import java.net.UnknownHostException; import java.nio.ByteBuffer; +import java.nio.file.Files; +import java.nio.file.Path; /** Utility functions to help initialize a site. */ public class InitUtil { @@ -51,9 +53,18 @@ public class InitUtil { } } - public static void mkdir(final File path) { - if (!path.isDirectory() && !path.mkdir()) { - throw die("Cannot make directory " + path); + public static void mkdir(File file) { + mkdir(file.toPath()); + } + + public static void mkdir(Path path) { + if (Files.isDirectory(path)) { + return; + } + try { + Files.createDirectory(path); + } catch (IOException e) { + throw die("Cannot make directory " + path, e); } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/config/SitePaths.java b/gerrit-server/src/main/java/com/google/gerrit/server/config/SitePaths.java index 1cd8fb29ab..c39d7ba263 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/config/SitePaths.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/config/SitePaths.java @@ -33,7 +33,7 @@ public final class SitePaths { public final File bin_dir; public final File etc_dir; public final File lib_dir; - public final File tmp_dir; + public final Path tmp_dir; public final File logs_dir; public final File plugins_dir; public final File data_dir; @@ -68,11 +68,12 @@ public final class SitePaths { public SitePaths(final @SitePath Path sitePath) throws FileNotFoundException { // TODO(dborowitz): Convert all of these to Paths. site_path = sitePath.toFile(); + Path p = sitePath; bin_dir = new File(site_path, "bin"); etc_dir = new File(site_path, "etc"); lib_dir = new File(site_path, "lib"); - tmp_dir = new File(site_path, "tmp"); + tmp_dir = p.resolve("tmp"); plugins_dir = new File(site_path, "plugins"); data_dir = new File(site_path, "data"); logs_dir = new File(site_path, "logs"); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/plugins/JarPluginProvider.java b/gerrit-server/src/main/java/com/google/gerrit/server/plugins/JarPluginProvider.java index 53f39f1cb5..5c0b41c5d6 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/plugins/JarPluginProvider.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/plugins/JarPluginProvider.java @@ -31,6 +31,7 @@ import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; +import java.nio.file.Files; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; @@ -47,7 +48,8 @@ public class JarPluginProvider implements ServerPluginProvider { @Inject JarPluginProvider(SitePaths sitePaths) { - tmpDir = sitePaths.tmp_dir; + // TODO(dborowitz): Convert to NIO. + tmpDir = sitePaths.tmp_dir.toFile(); } @Override @@ -111,10 +113,11 @@ public class JarPluginProvider implements ServerPluginProvider { public static File storeInTemp(String pluginName, InputStream in, SitePaths sitePaths) throws IOException { - if (!sitePaths.tmp_dir.exists()) { - sitePaths.tmp_dir.mkdirs(); + if (!Files.exists(sitePaths.tmp_dir)) { + Files.createDirectories(sitePaths.tmp_dir); } - return asTemp(in, tempNameFor(pluginName), ".jar", sitePaths.tmp_dir); + return asTemp(in, tempNameFor(pluginName), ".jar", + sitePaths.tmp_dir.toFile()); } private ServerPlugin loadJarPlugin(String name, File srcJar,