Make inidirectory files supercede distro files
parent
fea8345f56
commit
8c2b41b01d
|
@ -139,12 +139,29 @@ namespace OpenSim
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_config = new OpenSimConfigSource();
|
||||||
|
m_config.Source = new IniConfigSource();
|
||||||
|
m_config.Source.Merge(DefaultConfig());
|
||||||
|
|
||||||
|
m_log.Info("[CONFIG]: Reading configuration settings");
|
||||||
|
|
||||||
|
for (int i = 0 ; i < sources.Count ; i++)
|
||||||
|
{
|
||||||
|
if (ReadConfig(m_config, sources[i]))
|
||||||
|
{
|
||||||
|
iniFileExists = true;
|
||||||
|
AddIncludes(m_config, sources);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Override distro settings with contents of inidirectory
|
||||||
string iniDirName = startupConfig.GetString("inidirectory", "config");
|
string iniDirName = startupConfig.GetString("inidirectory", "config");
|
||||||
string iniDirPath = Path.Combine(Util.configDir(), iniDirName);
|
string iniDirPath = Path.Combine(Util.configDir(), iniDirName);
|
||||||
|
|
||||||
if (Directory.Exists(iniDirPath))
|
if (Directory.Exists(iniDirPath))
|
||||||
{
|
{
|
||||||
m_log.InfoFormat("Searching folder {0} for config ini files", iniDirPath);
|
m_log.InfoFormat("[CONFIG]: Searching folder {0} for config ini files", iniDirPath);
|
||||||
|
List<string> overrideSources = new List<string>();
|
||||||
|
|
||||||
string[] fileEntries = Directory.GetFiles(iniDirName);
|
string[] fileEntries = Directory.GetFiles(iniDirName);
|
||||||
foreach (string filePath in fileEntries)
|
foreach (string filePath in fileEntries)
|
||||||
|
@ -152,40 +169,45 @@ namespace OpenSim
|
||||||
if (Path.GetExtension(filePath).ToLower() == ".ini")
|
if (Path.GetExtension(filePath).ToLower() == ".ini")
|
||||||
{
|
{
|
||||||
if (!sources.Contains(Path.GetFullPath(filePath)))
|
if (!sources.Contains(Path.GetFullPath(filePath)))
|
||||||
sources.Add(Path.GetFullPath(filePath));
|
{
|
||||||
|
overrideSources.Add(Path.GetFullPath(filePath));
|
||||||
|
// put it in sources too, to avoid circularity
|
||||||
|
sources.Add(Path.GetFullPath(filePath));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
m_config = new OpenSimConfigSource();
|
|
||||||
m_config.Source = new IniConfigSource();
|
|
||||||
m_config.Source.Merge(DefaultConfig());
|
|
||||||
|
|
||||||
m_log.Info("[CONFIG]: Reading configuration settings");
|
if (overrideSources.Count > 0)
|
||||||
|
{
|
||||||
|
OpenSimConfigSource overrideConfig = new OpenSimConfigSource();
|
||||||
|
overrideConfig.Source = new IniConfigSource();
|
||||||
|
|
||||||
|
for (int i = 0 ; i < overrideSources.Count ; i++)
|
||||||
|
{
|
||||||
|
if (ReadConfig(overrideConfig, overrideSources[i]))
|
||||||
|
{
|
||||||
|
iniFileExists = true;
|
||||||
|
AddIncludes(overrideConfig, overrideSources);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_config.Source.Merge(overrideConfig.Source);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (sources.Count == 0)
|
if (sources.Count == 0)
|
||||||
{
|
{
|
||||||
m_log.FatalFormat("[CONFIG]: Could not load any configuration");
|
m_log.FatalFormat("[CONFIG]: Could not load any configuration");
|
||||||
Environment.Exit(1);
|
Environment.Exit(1);
|
||||||
}
|
}
|
||||||
|
else if (!iniFileExists)
|
||||||
for (int i = 0 ; i < sources.Count ; i++)
|
|
||||||
{
|
|
||||||
if (ReadConfig(sources[i]))
|
|
||||||
{
|
|
||||||
iniFileExists = true;
|
|
||||||
AddIncludes(sources);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!iniFileExists)
|
|
||||||
{
|
{
|
||||||
m_log.FatalFormat("[CONFIG]: Could not load any configuration");
|
m_log.FatalFormat("[CONFIG]: Could not load any configuration");
|
||||||
m_log.FatalFormat("[CONFIG]: Configuration exists, but there was an error loading it!");
|
m_log.FatalFormat("[CONFIG]: Configuration exists, but there was an error loading it!");
|
||||||
Environment.Exit(1);
|
Environment.Exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure command line options take precedence
|
// Make sure command line options take precedence
|
||||||
m_config.Source.Merge(argvSource);
|
m_config.Source.Merge(argvSource);
|
||||||
|
|
||||||
IConfig enVars = m_config.Source.Configs["Environment"];
|
IConfig enVars = m_config.Source.Configs["Environment"];
|
||||||
|
@ -214,10 +236,10 @@ namespace OpenSim
|
||||||
/// Adds the included files as ini configuration files
|
/// Adds the included files as ini configuration files
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="sources">List of URL strings or filename strings</param>
|
/// <param name="sources">List of URL strings or filename strings</param>
|
||||||
private void AddIncludes(List<string> sources)
|
private void AddIncludes(OpenSimConfigSource configSource, List<string> sources)
|
||||||
{
|
{
|
||||||
//loop over config sources
|
//loop over config sources
|
||||||
foreach (IConfig config in m_config.Source.Configs)
|
foreach (IConfig config in configSource.Source.Configs)
|
||||||
{
|
{
|
||||||
// Look for Include-* in the key name
|
// Look for Include-* in the key name
|
||||||
string[] keys = config.GetKeys();
|
string[] keys = config.GetKeys();
|
||||||
|
@ -284,7 +306,7 @@ namespace OpenSim
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="iniPath">Full path to the ini</param>
|
/// <param name="iniPath">Full path to the ini</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private bool ReadConfig(string iniPath)
|
private bool ReadConfig(OpenSimConfigSource configSource, string iniPath)
|
||||||
{
|
{
|
||||||
bool success = false;
|
bool success = false;
|
||||||
|
|
||||||
|
@ -292,7 +314,7 @@ namespace OpenSim
|
||||||
{
|
{
|
||||||
m_log.InfoFormat("[CONFIG]: Reading configuration file {0}", Path.GetFullPath(iniPath));
|
m_log.InfoFormat("[CONFIG]: Reading configuration file {0}", Path.GetFullPath(iniPath));
|
||||||
|
|
||||||
m_config.Source.Merge(new IniConfigSource(iniPath));
|
configSource.Source.Merge(new IniConfigSource(iniPath));
|
||||||
success = true;
|
success = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -305,7 +327,7 @@ namespace OpenSim
|
||||||
{
|
{
|
||||||
XmlReader r = XmlReader.Create(iniPath);
|
XmlReader r = XmlReader.Create(iniPath);
|
||||||
XmlConfigSource cs = new XmlConfigSource(r);
|
XmlConfigSource cs = new XmlConfigSource(r);
|
||||||
m_config.Source.Merge(cs);
|
configSource.Source.Merge(cs);
|
||||||
|
|
||||||
success = true;
|
success = true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue