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/FileSettings.java | 24 +++++++++++++++++++++--- 1 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/com/gitblit/FileSettings.java b/src/com/gitblit/FileSettings.java index 6110058..be1f44f 100644 --- a/src/com/gitblit/FileSettings.java +++ b/src/com/gitblit/FileSettings.java @@ -20,7 +20,6 @@ import java.io.FileNotFoundException; import java.util.Map; import java.util.Properties; -import java.util.regex.Pattern; import com.gitblit.utils.FileUtils; @@ -38,6 +37,8 @@ private final Properties properties = new Properties(); private volatile long lastModified; + + private volatile boolean forceReload; public FileSettings(String file) { super(FileSettings.class); @@ -50,7 +51,7 @@ */ @Override protected synchronized Properties read() { - if (propertiesFile.exists() && (propertiesFile.lastModified() > lastModified)) { + if (propertiesFile.exists() && (forceReload || (propertiesFile.lastModified() > lastModified))) { FileInputStream is = null; try { Properties props = new Properties(); @@ -61,6 +62,7 @@ properties.clear(); properties.putAll(props); lastModified = propertiesFile.lastModified(); + forceReload = false; } catch (FileNotFoundException f) { // IGNORE - won't happen because file.exists() check above } catch (Throwable t) { @@ -85,10 +87,19 @@ String content = FileUtils.readContent(propertiesFile, "\n"); for (Map.Entry<String, String> setting:settings.entrySet()) { String regex = "(?m)^(" + regExEscape(setting.getKey()) + "\\s*+=\\s*+)" - + "(?:[^\r\n\\\\]++|\\\\(?:\r?\n|\r|.))*+$"; + + "(?:[^\r\n\\\\]++|\\\\(?:\r?\n|\r|.))*+$"; + String oldContent = content; content = content.replaceAll(regex, setting.getKey() + " = " + setting.getValue()); + if (content.equals(oldContent)) { + // did not replace value because it does not exist in the file + // append new setting to content (issue-85) + content += "\n" + setting.getKey() + " = " + setting.getValue(); + } } FileUtils.writeContent(propertiesFile, content); + // manually set the forceReload flag because not all JVMs support real + // millisecond resolution of lastModified. (issue-55) + forceReload = true; return true; } @@ -103,6 +114,13 @@ return lastModified; } + /** + * @return the state of the force reload flag + */ + protected boolean forceReload() { + return forceReload; + } + @Override public String toString() { return propertiesFile.getAbsolutePath(); -- Gitblit v1.9.1