Command line - improved error handling
This commit is contained in:
parent
f5b30237ea
commit
2bb4b4e691
@ -713,11 +713,8 @@ bool DynamicConfig::read_cli(int argc, char** argv, t_config_option_keys* extra,
|
|||||||
// Look for the cli -> option mapping.
|
// Look for the cli -> option mapping.
|
||||||
const auto it = opts.find(token);
|
const auto it = opts.find(token);
|
||||||
if (it == opts.end()) {
|
if (it == opts.end()) {
|
||||||
printf("Warning: unknown option --%s\n", token.c_str());
|
boost::nowide::cerr << "Unknown option --" << token.c_str() << std::endl;
|
||||||
// instead of continuing, return false to caller
|
|
||||||
// to stop execution and print usage
|
|
||||||
return false;
|
return false;
|
||||||
//continue;
|
|
||||||
}
|
}
|
||||||
const t_config_option_key opt_key = it->second;
|
const t_config_option_key opt_key = it->second;
|
||||||
const ConfigOptionDef &optdef = this->def()->options.at(opt_key);
|
const ConfigOptionDef &optdef = this->def()->options.at(opt_key);
|
||||||
@ -725,8 +722,8 @@ bool DynamicConfig::read_cli(int argc, char** argv, t_config_option_keys* extra,
|
|||||||
// look for it in the next token.
|
// look for it in the next token.
|
||||||
if (optdef.type != coBool && optdef.type != coBools && value.empty()) {
|
if (optdef.type != coBool && optdef.type != coBools && value.empty()) {
|
||||||
if (i == (argc-1)) {
|
if (i == (argc-1)) {
|
||||||
printf("No value supplied for --%s\n", token.c_str());
|
boost::nowide::cerr << "No value supplied for --" << token.c_str() << std::endl;
|
||||||
continue;
|
return false;
|
||||||
}
|
}
|
||||||
value = argv[++ i];
|
value = argv[++ i];
|
||||||
}
|
}
|
||||||
@ -759,7 +756,10 @@ bool DynamicConfig::read_cli(int argc, char** argv, t_config_option_keys* extra,
|
|||||||
static_cast<ConfigOptionString*>(opt_base)->value = value;
|
static_cast<ConfigOptionString*>(opt_base)->value = value;
|
||||||
} else {
|
} else {
|
||||||
// Any scalar value of a type different from Bool and String.
|
// Any scalar value of a type different from Bool and String.
|
||||||
this->set_deserialize(opt_key, value, false);
|
if (! this->set_deserialize(opt_key, value, false)) {
|
||||||
|
boost::nowide::cerr << "Invalid value supplied for --" << token.c_str() << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -523,6 +523,8 @@ bool CLI::setup(int argc, char **argv)
|
|||||||
// If any option is unsupported, print usage and abort immediately.
|
// If any option is unsupported, print usage and abort immediately.
|
||||||
t_config_option_keys opt_order;
|
t_config_option_keys opt_order;
|
||||||
if (! m_config.read_cli(argc, argv, &m_input_files, &opt_order)) {
|
if (! m_config.read_cli(argc, argv, &m_input_files, &opt_order)) {
|
||||||
|
// Separate error message reported by the CLI parser from the help.
|
||||||
|
boost::nowide::cerr << std::endl;
|
||||||
this->print_help();
|
this->print_help();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -615,7 +617,7 @@ std::string CLI::output_filepath(const Model &model, IO::ExportFormat format) co
|
|||||||
};
|
};
|
||||||
auto proposed_path = boost::filesystem::path(model.propose_export_file_name_and_path(ext));
|
auto proposed_path = boost::filesystem::path(model.propose_export_file_name_and_path(ext));
|
||||||
// use --output when available
|
// use --output when available
|
||||||
std::string cmdline_param = m_config.opt_string("output", false);
|
std::string cmdline_param = m_config.opt_string("output");
|
||||||
if (! cmdline_param.empty()) {
|
if (! cmdline_param.empty()) {
|
||||||
// if we were supplied a directory, use it and append our automatically generated filename
|
// if we were supplied a directory, use it and append our automatically generated filename
|
||||||
boost::filesystem::path cmdline_path(cmdline_param);
|
boost::filesystem::path cmdline_path(cmdline_param);
|
||||||
|
Loading…
Reference in New Issue
Block a user