From 0e44acbb2fec928a1606dc60f427a148fff405c9 Mon Sep 17 00:00:00 2001
From: Mohamed Ragab <moragab@gmail.com>
Date: Wed, 02 May 2012 11:15:01 -0400
Subject: [PATCH] Added a script to facilitate setting the proxy host and port and no proxy hosts, and then it concatenates all the java system properties for setting the java proxy configurations and puts the resulting string in an environment variable JAVA_PROXY_CONFIG, modified the scirpts gitblit,  gitblit-ubuntu, and gitblit-centos to source the java-proxy-config.sh script and then include the resulting java proxy configuration in the java command

---
 src/com/gitblit/utils/StringUtils.java |  209 +++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 182 insertions(+), 27 deletions(-)

diff --git a/src/com/gitblit/utils/StringUtils.java b/src/com/gitblit/utils/StringUtils.java
index 77d3cbb..2c35724 100644
--- a/src/com/gitblit/utils/StringUtils.java
+++ b/src/com/gitblit/utils/StringUtils.java
@@ -19,6 +19,9 @@
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 import java.util.regex.PatternSyntaxException;
 
@@ -31,6 +34,8 @@
 public class StringUtils {
 
 	public static final String MD5_TYPE = "MD5:";
+
+	public static final String COMBINED_MD5_TYPE = "CMD5:";
 
 	/**
 	 * Returns true if the string is null or empty.
@@ -123,7 +128,7 @@
 	 * @param values
 	 * @return flattened list
 	 */
-	public static String flattenStrings(List<String> values) {
+	public static String flattenStrings(Collection<String> values) {
 		return flattenStrings(values, " ");
 	}
 
@@ -135,10 +140,14 @@
 	 * @param separator
 	 * @return flattened list
 	 */
-	public static String flattenStrings(List<String> values, String separator) {
+	public static String flattenStrings(Collection<String> values, String separator) {
 		StringBuilder sb = new StringBuilder();
 		for (String value : values) {
 			sb.append(value).append(separator);
+		}
+		if (sb.length() > 0) {
+			// truncate trailing separator
+			sb.setLength(sb.length() - separator.length());
 		}
 		return sb.toString().trim();
 	}
@@ -157,16 +166,6 @@
 			return value;
 		}
 		return value.substring(0, max - 3) + "...";
-	}
-
-	/**
-	 * Returns a trimmed shortlog message.
-	 * 
-	 * @param string
-	 * @return trimmed shortlog message
-	 */
-	public static String trimShortLog(String string) {
-		return trimString(string, 60);
 	}
 
 	/**
@@ -328,20 +327,24 @@
 	 * @return list of strings
 	 */
 	public static List<String> getStringsFromValue(String value, String separator) {
-		List<String> strings = new ArrayList<String>();
-		try {
-			String[] chunks = value.split(separator);
-			for (String chunk : chunks) {
-				chunk = chunk.trim();
-				if (chunk.length() > 0) {
-					strings.add(chunk);
-				}
-			}
-		} catch (PatternSyntaxException e) {
-			throw new RuntimeException(e);
-		}
-		return strings;
-	}
+        List<String> strings = new ArrayList<String>();
+        try {
+            String[] chunks = value.split(separator + "(?=([^\"]*\"[^\"]*\")*[^\"]*$)");            
+            for (String chunk : chunks) {
+                chunk = chunk.trim();
+                if (chunk.length() > 0) {
+                    if (chunk.charAt(0) == '"' && chunk.charAt(chunk.length() - 1) == '"') {
+                        // strip double quotes
+                        chunk = chunk.substring(1, chunk.length() - 1).trim();
+                    }
+                    strings.add(chunk);
+                }
+            }
+        } catch (PatternSyntaxException e) {
+            throw new RuntimeException(e);
+        }
+        return strings;
+    }
 
 	/**
 	 * Validates that a name is composed of letters, digits, or limited other
@@ -395,4 +398,156 @@
 		}
 		return false;
 	}
-}
+
+	/**
+	 * Compare two repository names for proper group sorting.
+	 * 
+	 * @param r1
+	 * @param r2
+	 * @return
+	 */
+	public static int compareRepositoryNames(String r1, String r2) {
+		// sort root repositories first, alphabetically
+		// then sort grouped repositories, alphabetically
+		int s1 = r1.indexOf('/');
+		int s2 = r2.indexOf('/');
+		if (s1 == -1 && s2 == -1) {
+			// neither grouped
+			return r1.compareTo(r2);
+		} else if (s1 > -1 && s2 > -1) {
+			// both grouped
+			return r1.compareTo(r2);
+		} else if (s1 == -1) {
+			return -1;
+		} else if (s2 == -1) {
+			return 1;
+		}
+		return 0;
+	}
+
+	/**
+	 * Sort grouped repository names.
+	 * 
+	 * @param list
+	 */
+	public static void sortRepositorynames(List<String> list) {
+		Collections.sort(list, new Comparator<String>() {
+			@Override
+			public int compare(String o1, String o2) {
+				return compareRepositoryNames(o1, o2);
+			}
+		});
+	}
+
+	public static String getColor(String value) {
+		int cs = 0;
+		for (char c : getMD5(value.toLowerCase()).toCharArray()) {
+			cs += c;
+		}
+		int n = (cs % 360);		
+		float hue = ((float) n) / 360;
+		return hsvToRgb(hue, 0.90f, 0.65f);
+	}
+
+	public static String hsvToRgb(float hue, float saturation, float value) {
+		int h = (int) (hue * 6);
+		float f = hue * 6 - h;
+		float p = value * (1 - saturation);
+		float q = value * (1 - f * saturation);
+		float t = value * (1 - (1 - f) * saturation);
+
+		switch (h) {
+		case 0:
+			return rgbToString(value, t, p);
+		case 1:
+			return rgbToString(q, value, p);
+		case 2:
+			return rgbToString(p, value, t);
+		case 3:
+			return rgbToString(p, q, value);
+		case 4:
+			return rgbToString(t, p, value);
+		case 5:
+			return rgbToString(value, p, q);
+		default:
+			throw new RuntimeException(
+					"Something went wrong when converting from HSV to RGB. Input was " + hue + ", "
+							+ saturation + ", " + value);
+		}
+	}
+
+	public static String rgbToString(float r, float g, float b) {
+		String rs = Integer.toHexString((int) (r * 256));
+		String gs = Integer.toHexString((int) (g * 256));
+		String bs = Integer.toHexString((int) (b * 256));
+		return "#" + rs + gs + bs;
+	}
+	
+	/**
+	 * Strips a trailing ".git" from the value.
+	 * 
+	 * @param value
+	 * @return a stripped value or the original value if .git is not found
+	 */
+	public static String stripDotGit(String value) {
+		if (value.toLowerCase().endsWith(".git")) {
+			return value.substring(0, value.length() - 4);
+		}
+		return value;
+	}
+	
+	/**
+	 * Count the number of lines in a string.
+	 * 
+	 * @param value
+	 * @return the line count
+	 */
+	public static int countLines(String value) {
+		if (isEmpty(value)) {
+			return 0;
+		}
+		return value.split("\n").length;
+	}
+	
+	/**
+	 * Returns the file extension of a path.
+	 * 
+	 * @param path
+	 * @return a blank string or a file extension
+	 */
+	public static String getFileExtension(String path) {
+		int lastDot = path.lastIndexOf('.');
+		if (lastDot > -1) {
+			return path.substring(lastDot + 1);
+		}
+		return "";
+	}
+	
+	/**
+	 * Replace all occurences of a substring within a string with
+	 * another string.
+	 * 
+	 * From Spring StringUtils.
+	 * 
+	 * @param inString String to examine
+	 * @param oldPattern String to replace
+	 * @param newPattern String to insert
+	 * @return a String with the replacements
+	 */
+	public static String replace(String inString, String oldPattern, String newPattern) {
+		StringBuilder sb = new StringBuilder();
+		int pos = 0; // our position in the old string
+		int index = inString.indexOf(oldPattern);
+		// the index of an occurrence we've found, or -1
+		int patLen = oldPattern.length();
+		while (index >= 0) {
+			sb.append(inString.substring(pos, index));
+			sb.append(newPattern);
+			pos = index + patLen;
+			index = inString.indexOf(oldPattern, pos);
+		}
+		sb.append(inString.substring(pos));
+		// remember to append any characters to the right of a match
+		return sb.toString();
+	}
+}
\ No newline at end of file

--
Gitblit v1.9.1