##// END OF EJS Templates
rhg: make output of `files` relative to the current directory and the root...
rhg: make output of `files` relative to the current directory and the root This matches the behavior of `hg files`. The util is added in `hg-core` instead of `rhg` because this operation could be useful for other external tools. (this was definitely not prompted by rust issue #50784, I swear) Differential Revision: https://phab.mercurial-scm.org/D8872

File last commit:

r45924:26440adb default
r46007:1b319704 default
Show More
main.rs
57 lines | 1.6 KiB | application/rls-services+xml | RustLexer
Antoine Cezar
rhg: add a limited `rhg root` subcommand...
r45593 use clap::App;
use clap::AppSettings;
use clap::SubCommand;
Antoine Cezar
rhg: add Command trait for subcommands implemented by rhg...
r45515 mod commands;
mod error;
Antoine Cezar
rhg: add rhg crate...
r45503 mod exitcode;
Antoine Cezar
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`...
r45592 mod ui;
Antoine Cezar
rhg: add a limited `rhg root` subcommand...
r45593 use commands::Command;
Antoine Cezar
rhg: add rhg crate...
r45503
fn main() {
Antoine Cezar
rhg: add a limited `rhg root` subcommand...
r45593 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),
Antoine Cezar
rhg: add a limited `rhg files` subcommand...
r45924 )
.subcommand(
SubCommand::with_name("files").about(commands::files::HELP_TEXT),
Antoine Cezar
rhg: add a limited `rhg root` subcommand...
r45593 );
let matches = app.clone().get_matches_safe().unwrap_or_else(|_| {
std::process::exit(exitcode::UNIMPLEMENTED_COMMAND)
});
Antoine Cezar
rhg: ask the error message from `CommandError`...
r45920 let ui = ui::Ui::new();
Antoine Cezar
rhg: add a limited `rhg root` subcommand...
r45593 let command_result = match matches.subcommand_name() {
Some(name) => match name {
Antoine Cezar
rhg: ask the error message from `CommandError`...
r45920 "root" => commands::root::RootCommand::new(&ui).run(),
Antoine Cezar
rhg: add a limited `rhg files` subcommand...
r45924 "files" => commands::files::FilesCommand::new(&ui).run(),
Antoine Cezar
rhg: add a limited `rhg root` subcommand...
r45593 _ => 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),
Antoine Cezar
rhg: ask the error message from `CommandError`...
r45920 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()
}
Antoine Cezar
rhg: add a limited `rhg root` subcommand...
r45593 }
Antoine Cezar
rhg: add rhg crate...
r45503 }