loolwsd/LOOLWSD.cpp | 20 ++++++++++++++++++-- loolwsd/LOOLWSD.hpp | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 3 deletions(-)
New commits: commit 8798943f08f9faa33468e9415e396ec77c779a6e Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Sat Jun 25 12:31:22 2016 -0400 bccu#1909 - loolwsd command line options vs. config file and package upgrades Support overriding config settings via the command-line. By using --o:name=value (or --override:name=value) the setting called 'name' can be replaced by 'value'. Ex. --o:per_document.max_concurrency=12 The above will override the max_concurrency to 12, regardless of what the XML has set. Change-Id: If7ffa5dcdc9ce2a8d1a89c8203b8ba870cb624ac Reviewed-on: https://gerrit.libreoffice.org/26668 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp index 6766b98..8ce6303 100644 --- a/loolwsd/LOOLWSD.cpp +++ b/loolwsd/LOOLWSD.cpp @@ -1260,6 +1260,10 @@ void LOOLWSD::initialize(Application& self) loadConfiguration(configPath, PRIO_DEFAULT); } + // Override any settings passed on the command-line. + AutoPtr<AppConfigMap> pOverrideConfig(new AppConfigMap(_overrideSettings)); + conf.addWriteable(pOverrideConfig, PRIO_APPLICATION); // Highest priority + // This overrides whatever is in the config file, // which forces admins to set this flag on the command-line. config().setBool("storage.filesystem[@allow]", AllowLocalStorage); @@ -1316,10 +1320,10 @@ void LOOLWSD::initialize(Application& self) if (NumPreSpawnedChildren == 0) { // Default to 1 child. - NumPreSpawnedChildren = config().getUInt("num_prespawn_children", 1); + NumPreSpawnedChildren = getUIntConfigValue(conf, "num_prespawn_children", 1); } - const auto maxConcurrency = config().getInt("per_document.max_concurrency", 4); + const auto maxConcurrency = getUIntConfigValue(conf, "per_document.max_concurrency", 4); if (maxConcurrency > 0) { setenv("MAX_CONCURRENCY", std::to_string(maxConcurrency).c_str(), 1); @@ -1438,6 +1442,11 @@ void LOOLWSD::defineOptions(OptionSet& optionSet) .required(false) .repeatable(false)); + optionSet.addOption(Option("override", "o", "Override any setting by providing fullxmlpath=value.") + .required(false) + .repeatable(true) + .argument("xmlpath")); + #if ENABLE_DEBUG optionSet.addOption(Option("unitlib", "", "Unit testing library path.") .required(false) @@ -1494,6 +1503,13 @@ void LOOLWSD::handleOption(const std::string& optionName, NoCapsForKit = true; else if (optionName == "careerspan") careerSpanSeconds = std::stoi(value); + else if (optionName == "override") + { + std::string optName; + std::string optValue; + LOOLProtocol::parseNameValuePair(value, optName, optValue); + _overrideSettings[optName] = optValue; + } static const char* clientPort = getenv("LOOL_TEST_CLIENT_PORT"); if (clientPort) diff --git a/loolwsd/LOOLWSD.hpp b/loolwsd/LOOLWSD.hpp index 8de18e4..248b240 100644 --- a/loolwsd/LOOLWSD.hpp +++ b/loolwsd/LOOLWSD.hpp @@ -66,10 +66,37 @@ private: void displayHelp(); Poco::Process::PID createForKit(); + static + bool getSafeUIntConfig(Poco::Util::LayeredConfiguration& config, const std::string& name, unsigned int& value) + { + try + { + value = config.getUInt(name); + return true; + } + catch (Poco::SyntaxException) + { + } + + return false; + } + + static + unsigned int getUIntConfigValue(Poco::Util::LayeredConfiguration& config, const std::string& name, const unsigned int def) + { + unsigned int value = def; + if (getSafeUIntConfig(config, name, value) || + getSafeUIntConfig(config, name + "[@default]", value)) + { + return value; + } + + return def; + } + /// Reads and processes path entries with the given property /// from the configuration. /// Converts relative paths to absolute. - //TODO: Move to a better namespace. std::string getPathFromConfig(const std::string& property) const { auto path = config().getString(property); @@ -88,6 +115,10 @@ private: return path; } + +private: + /// Settings passed from the command-line to override those in the config file. + std::map<std::string, std::string> _overrideSettings; }; #endif _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits