From 13417cf9c6eec555b51da49742e47939d2f5715b Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Fri, 19 Oct 2012 22:47:33 -0400 Subject: [PATCH] Exclude submodules from zip downloads (issue 151) --- src/com/gitblit/utils/FileUtils.java | 81 ++++++++++++++++++++++++++++++++++++++++ 1 files changed, 80 insertions(+), 1 deletions(-) diff --git a/src/com/gitblit/utils/FileUtils.java b/src/com/gitblit/utils/FileUtils.java index f8d35c8..cba88d0 100644 --- a/src/com/gitblit/utils/FileUtils.java +++ b/src/com/gitblit/utils/FileUtils.java @@ -34,6 +34,71 @@ * */ 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 string content of the specified file. @@ -161,7 +226,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