From 1dc877db5ded4908a3ee017ef211cd3250b16c51 Mon Sep 17 00:00:00 2001 From: jsteemann Date: Fri, 26 Feb 2016 22:31:44 +0100 Subject: [PATCH 1/2] allow or disallow overriding options --- lib/ProgramOptions2/ProgramOptions.h | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/ProgramOptions2/ProgramOptions.h b/lib/ProgramOptions2/ProgramOptions.h index ee58cc4d99..7aa966a5bb 100644 --- a/lib/ProgramOptions2/ProgramOptions.h +++ b/lib/ProgramOptions2/ProgramOptions.h @@ -105,9 +105,15 @@ class ProgramOptions { ProcessingResult& processingResult() { return _processingResult; } // seal the options - // tryin to add an option or a section after sealing will throw an error + // trying to add an option or a section after sealing will throw an error void seal() { _sealed = true; } + // allow or disallow overriding already set options + bool allowOverride(bool value) { + checkIfSealed(); + _overrideOptions = value; + } + // set context for error reporting void setContext(std::string const& value) { _context = value; } @@ -260,6 +266,11 @@ class ProgramOptions { // sets a value for an option bool setValue(std::string const& name, std::string const& value) { + if (!_overrideOptions && _processingResult.touched(name)) { + // option already set. don't override it + return true; + } + auto parts = Option::splitName(name); auto it = _sections.find(parts.first); @@ -463,6 +474,8 @@ class ProgramOptions { ProcessingResult _processingResult; // whether or not the program options setup is still mutable bool _sealed; + // allow or disallow overriding already set options + bool _overrideOptions; }; } } From 05094a23700081aae7630c927e87e736051f53b9 Mon Sep 17 00:00:00 2001 From: jsteemann Date: Fri, 26 Feb 2016 22:32:31 +0100 Subject: [PATCH 2/2] initialize variable --- lib/ProgramOptions2/ProgramOptions.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/ProgramOptions2/ProgramOptions.h b/lib/ProgramOptions2/ProgramOptions.h index 7aa966a5bb..cf3c7c0a7e 100644 --- a/lib/ProgramOptions2/ProgramOptions.h +++ b/lib/ProgramOptions2/ProgramOptions.h @@ -87,7 +87,8 @@ class ProgramOptions { _terminalWidth(terminalWidth), _similarity(similarity), _processingResult(), - _sealed(false) { + _sealed(false), + _overrideOptions(false) { // find progname wildcard in string size_t const pos = _usage.find(ARANGODB_PROGRAM_OPTIONS_PROGNAME); @@ -109,10 +110,14 @@ class ProgramOptions { void seal() { _sealed = true; } // allow or disallow overriding already set options - bool allowOverride(bool value) { + void allowOverride(bool value) { checkIfSealed(); _overrideOptions = value; } + + bool allowOverride() const { + return _overrideOptions; + } // set context for error reporting void setContext(std::string const& value) { _context = value; }