From e41e8f8c3bc9f5edab1d271464364f95620ece8c Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Thu, 19 Nov 2015 17:55:38 -0500 Subject: [PATCH] Create filestore directory on startup --- src/main/java/com/gitblit/utils/FileUtils.java | 84 +++++++++++++++++++++++++----------------- 1 files changed, 50 insertions(+), 34 deletions(-) diff --git a/src/main/java/com/gitblit/utils/FileUtils.java b/src/main/java/com/gitblit/utils/FileUtils.java index fb3e09c..e7f0104 100644 --- a/src/main/java/com/gitblit/utils/FileUtils.java +++ b/src/main/java/com/gitblit/utils/FileUtils.java @@ -26,15 +26,17 @@ import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.nio.charset.Charset; +import java.nio.file.Path; +import java.nio.file.Paths; /** * Common file utilities. - * + * * @author James Moger - * + * */ public class FileUtils { - + /** 1024 (number of bytes in one kilobyte) */ public static final int KB = 1024; @@ -47,7 +49,7 @@ /** * Returns an int from a string representation of a file size. * e.g. 50m = 50 megabytes - * + * * @param aString * @param defaultValue * @return an int value or the defaultValue if aString can not be parsed @@ -55,24 +57,24 @@ public static int convertSizeToInt(String aString, int defaultValue) { return (int) convertSizeToLong(aString, defaultValue); } - + /** * Returns a long from a string representation of a file size. * e.g. 50m = 50 megabytes - * + * * @param aString * @param defaultValue * @return a long value or the defaultValue if aString can not be parsed */ public static long convertSizeToLong(String aString, long defaultValue) { - // trim string and remove all spaces + // trim string and remove all spaces aString = aString.toLowerCase().trim(); StringBuilder sb = new StringBuilder(); for (String a : aString.split(" ")) { sb.append(a); } aString = sb.toString(); - + // identify value and unit int idx = 0; int len = aString.length(); @@ -99,10 +101,10 @@ } return defaultValue; } - + /** * Returns the byte [] content of the specified file. - * + * * @param file * @return the byte content of the file */ @@ -130,7 +132,7 @@ /** * Returns the string content of the specified file. - * + * * @param file * @param lineEnding * @return the string content of the file @@ -166,7 +168,7 @@ /** * Writes the string content to the file. - * + * * @param file * @param content */ @@ -195,14 +197,14 @@ /** * Recursively traverses a folder and its subfolders to calculate the total * size in bytes. - * + * * @param directory * @return folder size in bytes */ public static long folderSize(File directory) { if (directory == null || !directory.exists()) { return -1; - } + } if (directory.isDirectory()) { long length = 0; for (File file : directory.listFiles()) { @@ -216,8 +218,32 @@ } /** + * Delete a file or recursively delete a folder. + * + * @param fileOrFolder + * @return true, if successful + */ + public static boolean delete(File fileOrFolder) { + boolean success = false; + if (fileOrFolder.isDirectory()) { + File [] files = fileOrFolder.listFiles(); + if (files != null) { + for (File file : files) { + if (file.isDirectory()) { + success |= delete(file); + } else { + success |= file.delete(); + } + } + } + } + success |= fileOrFolder.delete(); + return success; + } + + /** * Copies a file or folder (recursively) to a destination folder. - * + * * @param destinationFolder * @param filesOrFolders * @return @@ -257,39 +283,29 @@ } } } - + /** * Determine the relative path between two files. Takes into account * canonical paths, if possible. - * + * * @param basePath * @param path * @return a relative path from basePath to path */ public static String getRelativePath(File basePath, File path) { - File exactBase = getExactFile(basePath); - File exactPath = getExactFile(path); - if (path.getAbsolutePath().startsWith(basePath.getAbsolutePath())) { - // absolute base-path match - return StringUtils.getRelativePath(basePath.getAbsolutePath(), path.getAbsolutePath()); - } else if (exactPath.getPath().startsWith(exactBase.getPath())) { - // canonical base-path match - return StringUtils.getRelativePath(exactBase.getPath(), exactPath.getPath()); - } else if (exactPath.getPath().startsWith(basePath.getAbsolutePath())) { - // mixed path match - return StringUtils.getRelativePath(basePath.getAbsolutePath(), exactPath.getPath()); - } else if (path.getAbsolutePath().startsWith(exactBase.getPath())) { - // mixed path match - return StringUtils.getRelativePath(exactBase.getPath(), path.getAbsolutePath()); + Path exactBase = Paths.get(getExactFile(basePath).toURI()); + Path exactPath = Paths.get(getExactFile(path).toURI()); + if (exactPath.startsWith(exactBase)) { + return exactBase.relativize(exactPath).toString().replace('\\', '/'); } // no relative relationship return null; } - + /** * Returns the exact path for a file. This path will be the canonical path * unless an exception is thrown in which case it will be the absolute path. - * + * * @param path * @return the exact file */ @@ -303,7 +319,7 @@ public static File resolveParameter(String parameter, File aFolder, String path) { if (aFolder == null) { - // strip any parameter reference + // strip any parameter reference path = path.replace(parameter, "").trim(); if (path.length() > 0 && path.charAt(0) == '/') { // strip leading / -- Gitblit v1.9.1