more rigorous command line option checking; ensure parser errors are printed to stderr
authorChristian Herdtweck <christian.herdtweck@intra2net.com>
Wed, 12 Nov 2014 13:27:17 +0000 (14:27 +0100)
committerChristian Herdtweck <christian.herdtweck@intra2net.com>
Wed, 12 Nov 2014 13:27:17 +0000 (14:27 +0100)
src/config/configurationcommandline.cpp
src/config/configurationreader.cpp
src/main.cpp

index afce481..c7add1d 100644 (file)
@@ -33,8 +33,6 @@ using boost::program_options::options_description;
 using boost::program_options::parsed_options;
 using boost::program_options::positional_options_description;
 using boost::program_options::variables_map;
-using boost::program_options::collect_unrecognized;
-using boost::program_options::include_positional;
 using I2n::Logger::GlobalLogger;
 
 //-----------------------------------------------------------------------------
@@ -117,25 +115,19 @@ bool ConfigurationCommandLine::process( variables_map *vm )
         parsed_options parsed_opt = command_line_parser( argc, const_cast<char**>( argv ) ).
                 options( cmdline_options ).
                 positional( p ).
-                allow_unregistered().
                 run();
-
-        // TODO not sure whether the "allow_unregistered()" above is required or not
-        // Because of this option, it is easy to make mistakes in options, so at least
-        // warn
-        vector<string> unrecognized_options = collect_unrecognized(parsed_opt.options,
-                                                                   include_positional);
-        if ( !unrecognized_options.empty() )
-        {
-            GlobalLogger.warning() << "Accepted unrecognized options" << endl;
-        }
-
         store( parsed_opt, *vm );
         notify( *vm );
     }
     catch ( const std::exception &ex )
     {
-        GlobalLogger.error() << ex.what() << endl;
+        GlobalLogger.error() << "Error parsing command line options: " << ex.what() << endl;
+
+        if (true) // TODO: if GlobalLogger is not logging to console
+        {   // ensure that error about command line options shows on command line
+            cerr << "Error parsing command line options: " << ex.what() << endl;
+        }
+
         return false;
     }
 
index 48f8261..ef8a62d 100644 (file)
@@ -81,6 +81,12 @@ bool ConfigurationReader::parse(
     }
 
     string file_name = Config.get_config_file_name();
+    if (file_name.empty())
+    {
+        return false;               // otherwise only get message about failed
+        // file name assertion which is confusing because error lies elsewhere
+    }
+
     ConfigurationFile file( file_name );
     bool configuration_file_processed = file.process( &vm );
     if ( configuration_file_processed )
index a467405..25c0da1 100644 (file)
@@ -82,11 +82,6 @@ ConfigurationItem get_configuration(
         Configuration config_obj = config_reader.get_configuration();
         configuration.reset( new Configuration( config_obj ) );
     }
-    else
-    {
-        GlobalLogger.error() << "Failed to parse options from command line and/or config file! "
-           << "Continue with standard values." << endl;
-    }
 
     return configuration;
 }