From f76fee63ed9cb3a30d3c0c092d860b1cb93a481b Mon Sep 17 00:00:00 2001
From: Gerard Smyth <gerard.smyth@gmail.com>
Date: Thu, 08 May 2014 13:09:30 -0400
Subject: [PATCH] Updated the SyndicationServlet to provide an additional option to return details of the tags in the repository instead of the commits. This uses a new 'ot' request parameter to indicate the object type of the content to return, which can be ither TAG or COMMIT. If this is not provided, then COMMIT is assumed to maintain backwards compatability. If tags are returned, then the paging parameters, 'l' and 'pg' are still supported, but searching options are currently ignored.

---
 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