summaryrefslogtreecommitdiffstats
path: root/src/com/gitblit/FileSettings.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/gitblit/FileSettings.java')
-rw-r--r--src/com/gitblit/FileSettings.java22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/com/gitblit/FileSettings.java b/src/com/gitblit/FileSettings.java
index 56aac8b7..61100587 100644
--- a/src/com/gitblit/FileSettings.java
+++ b/src/com/gitblit/FileSettings.java
@@ -18,7 +18,11 @@ package com.gitblit;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
+import java.util.Map;
import java.util.Properties;
+import java.util.regex.Pattern;
+
+import com.gitblit.utils.FileUtils;
/**
* Dynamically loads and reloads a properties file by keeping track of the last
@@ -75,6 +79,24 @@ public class FileSettings extends IStoredSettings {
}
/**
+ * Updates the specified settings in the settings file.
+ */
+ public synchronized boolean saveSettings(Map<String, String> settings) {
+ 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|.))*+$";
+ content = content.replaceAll(regex, setting.getKey() + " = " + setting.getValue());
+ }
+ FileUtils.writeContent(propertiesFile, content);
+ return true;
+ }
+
+ private String regExEscape(String input) {
+ return input.replace(".", "\\.");
+ }
+
+ /**
* @return the last modification date of the properties file
*/
protected long lastModified() {