From 27ae9095639bb228a1b7ff86a3ebe4264abf05be Mon Sep 17 00:00:00 2001
From: mschaefers <mschaefers@scoop-gmbh.de>
Date: Thu, 29 Nov 2012 12:33:09 -0500
Subject: [PATCH] feature: when using LdapUserService one can configure Gitblit to fetch all users from ldap that can possibly login. This allows to see newly generated LDAP users instantly in Gitblit. By now an LDAP user had to log in once to appear in GitBlit.

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

diff --git a/src/com/gitblit/utils/FileUtils.java b/src/com/gitblit/utils/FileUtils.java
index f8d35c8..0b8aeb4 100644
--- a/src/com/gitblit/utils/FileUtils.java
+++ b/src/com/gitblit/utils/FileUtils.java
@@ -34,6 +34,90 @@
  * 
  */
 public class FileUtils {
+	
+	/** 1024 (number of bytes in one kilobyte) */
+	public static final int KB = 1024;
+
+	/** 1024 {@link #KB} (number of bytes in one megabyte) */
+	public static final int MB = 1024 * KB;
+
+	/** 1024 {@link #MB} (number of bytes in one gigabyte) */
+	public static final int GB = 1024 * MB;
+
+	/**
+	 * 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
+	 */
+	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 
+		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();
+		while (Character.isDigit(aString.charAt(idx))) {
+			idx++;
+			if (idx == len) {
+				break;
+			}
+		}
+		long value = 0;
+		String unit = null;
+		try {
+			value = Long.parseLong(aString.substring(0, idx));
+			unit = aString.substring(idx);
+		} catch (Exception e) {
+			return defaultValue;
+		}
+		if (unit.equals("g") || unit.equals("gb")) {
+			return value * GB;
+		} else if (unit.equals("m") || unit.equals("mb")) {
+			return value * MB;
+		} else if (unit.equals("k") || unit.equals("kb")) {
+			return value * KB;
+		}
+		return defaultValue;
+	}
+	
+	/**
+	 * Returns the byte [] content of the specified file.
+	 * 
+	 * @param file
+	 * @return the byte content of the file
+	 */
+	public static byte [] readContent(File file) {
+		byte [] buffer = new byte[(int) file.length()];
+		try {
+			BufferedInputStream is = new BufferedInputStream(new FileInputStream(file));
+			is.read(buffer,  0,  buffer.length);
+			is.close();
+		} catch (Throwable t) {
+			System.err.println("Failed to read byte content of " + file.getAbsolutePath());
+			t.printStackTrace();
+		}
+		return buffer;
+	}
 
 	/**
 	 * Returns the string content of the specified file.
@@ -161,7 +245,21 @@
 	public static String getRelativePath(File basePath, File path) {
 		File exactBase = getExactFile(basePath);
 		File exactPath = getExactFile(path);
-		return StringUtils.getRelativePath(exactBase.getPath(), exactPath.getPath());
+		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());
+		}
+		// no relative relationship
+		return null;
 	}
 	
 	/**

--
Gitblit v1.9.1