From a9eb6b1105cd47f00ae45dacda9af8e829ade191 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 11 Apr 2012 09:04:42 -0400
Subject: [PATCH] Reset build identifiers for the next release

---
 src/com/gitblit/utils/FileUtils.java |  122 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 122 insertions(+), 0 deletions(-)

diff --git a/src/com/gitblit/utils/FileUtils.java b/src/com/gitblit/utils/FileUtils.java
index 468b2a8..f8d35c8 100644
--- a/src/com/gitblit/utils/FileUtils.java
+++ b/src/com/gitblit/utils/FileUtils.java
@@ -15,10 +15,16 @@
  */
 package com.gitblit.utils;
 
+import java.io.BufferedInputStream;
 import java.io.BufferedReader;
+import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
 import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
 import java.nio.charset.Charset;
 
 /**
@@ -56,4 +62,120 @@
 		}
 		return sb.toString();
 	}
+
+	/**
+	 * Writes the string content to the file.
+	 * 
+	 * @param file
+	 * @param content
+	 */
+	public static void writeContent(File file, String content) {
+		try {
+			OutputStreamWriter os = new OutputStreamWriter(new FileOutputStream(file),
+					Charset.forName("UTF-8"));
+			BufferedWriter writer = new BufferedWriter(os);
+			writer.append(content);
+			writer.close();
+		} catch (Throwable t) {
+			System.err.println("Failed to write content of " + file.getAbsolutePath());
+			t.printStackTrace();
+		}
+	}
+
+	/**
+	 * 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.isFile()) {
+			return directory.length();
+		}
+		long length = 0;
+		for (File file : directory.listFiles()) {
+			if (file.isFile()) {
+				length += file.length();
+			} else {
+				length += folderSize(file);
+			}
+		}
+		return length;
+	}
+
+	/**
+	 * Copies a file or folder (recursively) to a destination folder.
+	 * 
+	 * @param destinationFolder
+	 * @param filesOrFolders
+	 * @return
+	 * @throws FileNotFoundException
+	 * @throws IOException
+	 */
+	public static void copy(File destinationFolder, File... filesOrFolders)
+			throws FileNotFoundException, IOException {
+		destinationFolder.mkdirs();
+		for (File file : filesOrFolders) {
+			if (file.isDirectory()) {
+				copy(new File(destinationFolder, file.getName()), file.listFiles());
+			} else {
+				File dFile = new File(destinationFolder, file.getName());
+				BufferedInputStream bufin = null;
+				FileOutputStream fos = null;
+				try {
+					bufin = new BufferedInputStream(new FileInputStream(file));
+					fos = new FileOutputStream(dFile);
+					int len = 8196;
+					byte[] buff = new byte[len];
+					int n = 0;
+					while ((n = bufin.read(buff, 0, len)) != -1) {
+						fos.write(buff, 0, n);
+					}
+				} finally {
+					try {
+						bufin.close();
+					} catch (Throwable t) {
+					}
+					try {
+						fos.close();
+					} catch (Throwable t) {
+					}
+				}
+				dFile.setLastModified(file.lastModified());
+			}
+		}
+	}
+	
+	/**
+	 * 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);
+		return StringUtils.getRelativePath(exactBase.getPath(), exactPath.getPath());
+	}
+	
+	/**
+	 * 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
+	 */
+	public static File getExactFile(File path) {
+		try {
+			return path.getCanonicalFile();
+		} catch (IOException e) {
+			return path.getAbsoluteFile();
+		}
+	}
 }

--
Gitblit v1.9.1