configuration: add 'ignore-config-errors' switch

This commit is contained in:
Andrzej Rybczak
2015-05-02 21:16:11 +02:00
parent 77c702100f
commit a40508179a
6 changed files with 14 additions and 9 deletions

View File

@@ -54,6 +54,7 @@ bool configure(int argc, char **argv)
("host,h", po::value<std::string>()->default_value("localhost"), "connect to server at host")
("port,p", po::value<int>()->default_value(6600), "connect to server at port")
("config,c", po::value<std::string>(&config_path)->default_value("~/.ncmpcpp/config"), "specify configuration file")
("ignore-config-errors", po::value<bool>()->default_value(false), "ignore unknown and invalid options in configuration file")
("bindings,b", po::value<std::string>(&bindings_path)->default_value("~/.ncmpcpp/bindings"), "specify bindings file")
("screen,s", po::value<std::string>(), "specify initial screen")
("help,?", "show help message")
@@ -130,7 +131,7 @@ bool configure(int argc, char **argv)
// read configuration
expand_home(config_path);
if (Config.read(config_path) == false)
if (Config.read(config_path, vm["ignore-config-errors"].as<bool>()) == false)
exit(1);
// if bindings file was not specified, use the one from main directory.

View File

@@ -179,7 +179,7 @@ option_parser::worker buffer(NC::Buffer &arg, ValueT &&value, TransformT &&map)
}
bool Configuration::read(const std::string &config_path)
bool Configuration::read(const std::string &config_path, bool ignore_errors)
{
std::string mpd_host;
unsigned mpd_port;
@@ -640,5 +640,5 @@ bool Configuration::read(const std::string &config_path)
));
std::ifstream f(config_path);
return p.run(f);
return p.run(f, ignore_errors);
}

View File

@@ -51,7 +51,7 @@ struct Configuration
: playlist_disable_highlight_delay(0), visualizer_sync_interval(0)
{ }
bool read(const std::string &config_path);
bool read(const std::string &config_path, bool ignore_errors);
std::string ncmpcpp_directory;
std::string lyrics_directory;

View File

@@ -35,7 +35,7 @@
#include "utility/option_parser.h"
bool option_parser::run(std::istream &is)
bool option_parser::run(std::istream &is, bool ignore_errors)
{
// quoted value. leftmost and rightmost quotation marks are the delimiters.
boost::regex quoted("(\\w+)\\h*=\\h*\"(.*)\"[^\"]*");
@@ -56,13 +56,15 @@ bool option_parser::run(std::istream &is)
it->second.parse(match[2]);
} catch (std::exception &e) {
std::cerr << "Error while processing option \"" << option << "\": " << e.what() << "\n";
return false;
if (!ignore_errors)
return false;
}
}
else
{
std::cerr << "Unknown option: " << option << "\n";
return false;
if (!ignore_errors)
return false;
}
}
}
@@ -74,7 +76,8 @@ bool option_parser::run(std::istream &is)
p.second.run_default();
} catch (std::exception &e) {
std::cerr << "Error while finalizing option \"" << p.first << "\": " << e.what() << "\n";
return false;
if (ignore_errors)
return false;
}
}
}

View File

@@ -129,7 +129,7 @@ struct option_parser
m_parsers[option] = std::forward<WorkerT>(w);
}
bool run(std::istream &is);
bool run(std::istream &is, bool ignore_errors);
private:
std::unordered_map<std::string, worker> m_parsers;