##// END OF EJS Templates
rhg: print error message when argument parsing fails...
rhg: print error message when argument parsing fails Differential Revision: https://phab.mercurial-scm.org/D8956

File last commit:

r46011:a6a000ab default
r46011:a6a000ab default
Show More
main.rs
58 lines | 1.7 KiB | application/rls-services+xml | RustLexer
use clap::App;
use clap::AppSettings;
use clap::SubCommand;
mod commands;
mod error;
mod exitcode;
mod ui;
use commands::Command;
fn main() {
let mut app = App::new("rhg")
.setting(AppSettings::AllowInvalidUtf8)
.setting(AppSettings::SubcommandRequired)
.setting(AppSettings::VersionlessSubcommands)
.version("0.0.1")
.subcommand(
SubCommand::with_name("root").about(commands::root::HELP_TEXT),
)
.subcommand(
SubCommand::with_name("files").about(commands::files::HELP_TEXT),
);
let matches = app.clone().get_matches_safe().unwrap_or_else(|err| {
let _ = ui::Ui::new().writeln_stderr_str(&err.message);
std::process::exit(exitcode::UNIMPLEMENTED_COMMAND)
});
let ui = ui::Ui::new();
let command_result = match matches.subcommand_name() {
Some(name) => match name {
"root" => commands::root::RootCommand::new().run(&ui),
"files" => commands::files::FilesCommand::new().run(&ui),
_ => std::process::exit(exitcode::UNIMPLEMENTED_COMMAND),
},
_ => {
match app.print_help() {
Ok(_) => std::process::exit(exitcode::OK),
Err(_) => std::process::exit(exitcode::ABORT),
};
}
};
match command_result {
Ok(_) => std::process::exit(exitcode::OK),
Err(e) => {
let message = e.get_error_message_bytes();
if let Some(msg) = message {
match ui.write_stderr(&msg) {
Ok(_) => (),
Err(_) => std::process::exit(exitcode::ABORT),
};
};
e.exit()
}
}
}