From 3ef46ee3e4a58a78b7cb6fe6c0b6f45da4ae21b9 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Sun, 26 Oct 2014 10:09:50 -0400 Subject: [PATCH] Supported include keys in gitblit.properties --- src/main/java/com/gitblit/FileSettings.java | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 55 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/gitblit/FileSettings.java b/src/main/java/com/gitblit/FileSettings.java index 21a2043..2f5f04f 100644 --- a/src/main/java/com/gitblit/FileSettings.java +++ b/src/main/java/com/gitblit/FileSettings.java @@ -18,10 +18,13 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.List; import java.util.Map; import java.util.Properties; import com.gitblit.utils.FileUtils; +import com.gitblit.utils.StringUtils; /** * Dynamically loads and reloads a properties file by keeping track of the last @@ -81,6 +84,9 @@ is = new FileInputStream(propertiesFile); props.load(is); + // ticket-110 + props = readIncludes(props); + // load properties after we have successfully read file properties.clear(); properties.putAll(props); @@ -103,6 +109,55 @@ return properties; } + /** + * Recursively read "include" properties files. + * + * @param properties + * @return + * @throws IOException + */ + private Properties readIncludes(Properties properties) throws IOException { + + Properties baseProperties = new Properties(); + + String include = (String) properties.remove("include"); + if (!StringUtils.isEmpty(include)) { + + // allow for multiples + List<String> names = StringUtils.getStringsFromValue(include, " "); + for (String name : names) { + + // try co-located + File file = new File(propertiesFile.getParentFile(), name.trim()); + if (!file.exists()) { + // try absolute path + file = new File(name.trim()); + } + + if (file.exists()) { + // load properties + try (FileInputStream iis = new FileInputStream(file)) { + baseProperties.load(iis); + } + + // read nested includes + baseProperties = readIncludes(baseProperties); + + } + + } + + } + + // includes are "default" properties, they must be set first and the + // props which specified the "includes" must override + Properties merged = new Properties(); + merged.putAll(baseProperties); + merged.putAll(properties); + + return merged; + } + @Override public boolean saveSettings() { String content = FileUtils.readContent(propertiesFile, "\n"); -- Gitblit v1.9.1