From a341a5e8d5080142583fc03ea34dc1db7eb10364 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Mon, 05 May 2014 09:28:09 -0400
Subject: [PATCH] Update releases.moxie
---
src/main/java/com/gitblit/FileSettings.java | 46 +++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 43 insertions(+), 3 deletions(-)
diff --git a/src/main/java/com/gitblit/FileSettings.java b/src/main/java/com/gitblit/FileSettings.java
index 12739d2..21a2043 100644
--- a/src/main/java/com/gitblit/FileSettings.java
+++ b/src/main/java/com/gitblit/FileSettings.java
@@ -32,7 +32,7 @@
*/
public class FileSettings extends IStoredSettings {
- protected final File propertiesFile;
+ protected File propertiesFile;
private final Properties properties = new Properties();
@@ -40,9 +40,32 @@
private volatile boolean forceReload;
- public FileSettings(String file) {
+ public FileSettings() {
super(FileSettings.class);
+ }
+
+ public FileSettings(String file) {
+ this();
+ load(file);
+ }
+
+ public void load(String file) {
this.propertiesFile = new File(file);
+ }
+
+ /**
+ * Merges the provided settings into this instance. This will also
+ * set the target file for this instance IFF it is unset AND the merge
+ * source is also a FileSettings. This is a little sneaky.
+ */
+ @Override
+ public void merge(IStoredSettings settings) {
+ super.merge(settings);
+
+ // sneaky: set the target file from the merge source
+ if (propertiesFile == null && settings instanceof FileSettings) {
+ this.propertiesFile = ((FileSettings) settings).propertiesFile;
+ }
}
/**
@@ -51,7 +74,7 @@
*/
@Override
protected synchronized Properties read() {
- if (propertiesFile.exists() && (forceReload || (propertiesFile.lastModified() > lastModified))) {
+ if (propertiesFile != null && propertiesFile.exists() && (forceReload || (propertiesFile.lastModified() > lastModified))) {
FileInputStream is = null;
try {
Properties props = new Properties();
@@ -80,6 +103,23 @@
return properties;
}
+ @Override
+ public boolean saveSettings() {
+ String content = FileUtils.readContent(propertiesFile, "\n");
+ for (String key : removals) {
+ String regex = "(?m)^(" + regExEscape(key) + "\\s*+=\\s*+)"
+ + "(?:[^\r\n\\\\]++|\\\\(?:\r?\n|\r|.))*+$";
+ content = content.replaceAll(regex, "");
+ }
+ removals.clear();
+
+ 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;
+ }
+
/**
* Updates the specified settings in the settings file.
*/
--
Gitblit v1.9.1