wallet cli/rpc: terminate execution with code 0 when --help or --version is given

This commit is contained in:
stoffu 2018-04-15 14:52:53 +09:00
parent 8fdf645397
commit f36132a837
No known key found for this signature in database
GPG key ID: 41DAB8343A9EC012
5 changed files with 36 additions and 10 deletions

View file

@ -174,7 +174,9 @@ int main(int argc, char* argv[])
command_line::add_arg(desc_params, arg_stagenet); command_line::add_arg(desc_params, arg_stagenet);
command_line::add_arg(desc_params, arg_create_address_file); command_line::add_arg(desc_params, arg_create_address_file);
const auto vm = wallet_args::main( boost::optional<po::variables_map> vm;
bool should_terminate = false;
std::tie(vm, should_terminate) = wallet_args::main(
argc, argv, argc, argv,
"monero-gen-multisig [(--testnet|--stagenet)] [--filename-base=<filename>] [--scheme=M/N] [--threshold=M] [--participants=N]", "monero-gen-multisig [(--testnet|--stagenet)] [--filename-base=<filename>] [--scheme=M/N] [--threshold=M] [--participants=N]",
genms::tr("This program generates a set of multisig wallets - use this simpler scheme only if all the participants trust each other"), genms::tr("This program generates a set of multisig wallets - use this simpler scheme only if all the participants trust each other"),
@ -185,6 +187,8 @@ int main(int argc, char* argv[])
); );
if (!vm) if (!vm)
return 1; return 1;
if (should_terminate)
return 0;
bool testnet, stagenet; bool testnet, stagenet;
uint32_t threshold = 0, total = 0; uint32_t threshold = 0, total = 0;

View file

@ -7505,7 +7505,9 @@ int main(int argc, char* argv[])
po::positional_options_description positional_options; po::positional_options_description positional_options;
positional_options.add(arg_command.name, -1); positional_options.add(arg_command.name, -1);
const auto vm = wallet_args::main( boost::optional<po::variables_map> vm;
bool should_terminate = false;
std::tie(vm, should_terminate) = wallet_args::main(
argc, argv, argc, argv,
"monero-wallet-cli [--wallet-file=<file>|--generate-new-wallet=<file>] [<COMMAND>]", "monero-wallet-cli [--wallet-file=<file>|--generate-new-wallet=<file>] [<COMMAND>]",
sw::tr("This is the command line monero wallet. It needs to connect to a monero\ndaemon to work correctly.\nWARNING: Do not reuse your Monero keys on an another fork, UNLESS this fork has key reuse mitigations built in. Doing so will harm your privacy."), sw::tr("This is the command line monero wallet. It needs to connect to a monero\ndaemon to work correctly.\nWARNING: Do not reuse your Monero keys on an another fork, UNLESS this fork has key reuse mitigations built in. Doing so will harm your privacy."),
@ -7520,6 +7522,11 @@ int main(int argc, char* argv[])
return 1; return 1;
} }
if (should_terminate)
{
return 0;
}
cryptonote::simple_wallet w; cryptonote::simple_wallet w;
const bool r = w.init(*vm); const bool r = w.init(*vm);
CHECK_AND_ASSERT_MES(r, 1, sw::tr("Failed to initialize wallet")); CHECK_AND_ASSERT_MES(r, 1, sw::tr("Failed to initialize wallet"));

View file

@ -82,7 +82,7 @@ namespace wallet_args
return i18n_translate(str, "wallet_args"); return i18n_translate(str, "wallet_args");
} }
boost::optional<boost::program_options::variables_map> main( std::pair<boost::optional<boost::program_options::variables_map>, bool> main(
int argc, char** argv, int argc, char** argv,
const char* const usage, const char* const usage,
const char* const notice, const char* const notice,
@ -127,6 +127,7 @@ namespace wallet_args
po::options_description desc_all; po::options_description desc_all;
desc_all.add(desc_general).add(desc_params); desc_all.add(desc_general).add(desc_params);
po::variables_map vm; po::variables_map vm;
bool should_terminate = false;
bool r = command_line::handle_error_helper(desc_all, [&]() bool r = command_line::handle_error_helper(desc_all, [&]()
{ {
auto parser = po::command_line_parser(argc, argv).options(desc_all).positional(positional_options); auto parser = po::command_line_parser(argc, argv).options(desc_all).positional(positional_options);
@ -139,12 +140,14 @@ namespace wallet_args
"daemon to work correctly.") << ENDL; "daemon to work correctly.") << ENDL;
Print(print) << wallet_args::tr("Usage:") << ENDL << " " << usage; Print(print) << wallet_args::tr("Usage:") << ENDL << " " << usage;
Print(print) << desc_all; Print(print) << desc_all;
return false; should_terminate = true;
return true;
} }
else if (command_line::get_arg(vm, command_line::arg_version)) else if (command_line::get_arg(vm, command_line::arg_version))
{ {
Print(print) << "Monero '" << MONERO_RELEASE_NAME << "' (v" << MONERO_VERSION_FULL << ")"; Print(print) << "Monero '" << MONERO_RELEASE_NAME << "' (v" << MONERO_VERSION_FULL << ")";
return false; should_terminate = true;
return true;
} }
if(command_line::has_arg(vm, arg_config_file)) if(command_line::has_arg(vm, arg_config_file))
@ -167,7 +170,10 @@ namespace wallet_args
return true; return true;
}); });
if (!r) if (!r)
return boost::none; return {boost::none, true};
if (should_terminate)
return {std::move(vm), should_terminate};
std::string log_path; std::string log_path;
if (!command_line::is_arg_defaulted(vm, arg_log_file)) if (!command_line::is_arg_defaulted(vm, arg_log_file))
@ -196,6 +202,6 @@ namespace wallet_args
Print(print) << boost::format(wallet_args::tr("Logging to %s")) % log_path; Print(print) << boost::format(wallet_args::tr("Logging to %s")) % log_path;
return {std::move(vm)}; return {std::move(vm), should_terminate};
} }
} }

View file

@ -44,8 +44,11 @@ namespace wallet_args
concurrency. Log file and concurrency arguments are handled, along with basic concurrency. Log file and concurrency arguments are handled, along with basic
global init for the wallet process. global init for the wallet process.
\return The list of parsed options, iff there are no errors.*/ \return
boost::optional<boost::program_options::variables_map> main( pair.first: The list of parsed options, iff there are no errors.
pair.second: Should the execution terminate succesfully without actually launching the application
*/
std::pair<boost::optional<boost::program_options::variables_map>, bool> main(
int argc, char** argv, int argc, char** argv,
const char* const usage, const char* const usage,
const char* const notice, const char* const notice,

View file

@ -2895,7 +2895,9 @@ int main(int argc, char** argv) {
command_line::add_arg(desc_params, arg_wallet_dir); command_line::add_arg(desc_params, arg_wallet_dir);
command_line::add_arg(desc_params, arg_prompt_for_password); command_line::add_arg(desc_params, arg_prompt_for_password);
const auto vm = wallet_args::main( boost::optional<po::variables_map> vm;
bool should_terminate = false;
std::tie(vm, should_terminate) = wallet_args::main(
argc, argv, argc, argv,
"monero-wallet-rpc [--wallet-file=<file>|--generate-from-json=<file>|--wallet-dir=<directory>] [--rpc-bind-port=<port>]", "monero-wallet-rpc [--wallet-file=<file>|--generate-from-json=<file>|--wallet-dir=<directory>] [--rpc-bind-port=<port>]",
tools::wallet_rpc_server::tr("This is the RPC monero wallet. It needs to connect to a monero\ndaemon to work correctly."), tools::wallet_rpc_server::tr("This is the RPC monero wallet. It needs to connect to a monero\ndaemon to work correctly."),
@ -2909,6 +2911,10 @@ int main(int argc, char** argv) {
{ {
return 1; return 1;
} }
if (should_terminate)
{
return 0;
}
std::unique_ptr<tools::wallet2> wal; std::unique_ptr<tools::wallet2> wal;
try try