Mercurial > hg-stable
view rust/rhg/src/main.rs @ 45385:26440adbe3e9
rhg: add a limited `rhg files` subcommand
Differential Revision: https://phab.mercurial-scm.org/D8869
author | Antoine Cezar <antoine.cezar@octobus.net> |
---|---|
date | Fri, 17 Jul 2020 17:24:54 +0200 |
parents | 47997afadf08 |
children | ed95ccc94333 |
line wrap: on
line source
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(|_| { 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(&ui).run(), "files" => commands::files::FilesCommand::new(&ui).run(), _ => 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() } } }