debugdata.rs
65 lines
| 1.8 KiB
| application/rls-services+xml
|
RustLexer
Simon Sapin
|
r47163 | use crate::error::CommandError; | ||
Simon Sapin
|
r47251 | use clap::Arg; | ||
use clap::ArgGroup; | ||||
Simon Sapin
|
r47165 | use hg::operations::{debug_data, DebugDataKind}; | ||
Antoine Cezar
|
r46101 | use micro_timer::timed; | ||
Antoine Cezar
|
r46099 | |||
pub const HELP_TEXT: &str = " | ||||
Dump the contents of a data file revision | ||||
"; | ||||
Simon Sapin
|
r47251 | pub fn args() -> clap::App<'static, 'static> { | ||
clap::SubCommand::with_name("debugdata") | ||||
.arg( | ||||
Arg::with_name("changelog") | ||||
.help("open changelog") | ||||
.short("-c") | ||||
.long("--changelog"), | ||||
) | ||||
.arg( | ||||
Arg::with_name("manifest") | ||||
.help("open manifest") | ||||
.short("-m") | ||||
.long("--manifest"), | ||||
) | ||||
.group( | ||||
ArgGroup::with_name("") | ||||
.args(&["changelog", "manifest"]) | ||||
.required(true), | ||||
) | ||||
.arg( | ||||
Arg::with_name("rev") | ||||
.help("revision") | ||||
.required(true) | ||||
.value_name("REV"), | ||||
) | ||||
.about(HELP_TEXT) | ||||
} | ||||
Simon Sapin
|
r47250 | #[timed] | ||
Simon Sapin
|
r47334 | pub fn run(invocation: &crate::CliInvocation) -> Result<(), CommandError> { | ||
let args = invocation.subcommand_args; | ||||
Simon Sapin
|
r47250 | let rev = args | ||
.value_of("rev") | ||||
.expect("rev should be a required argument"); | ||||
let kind = | ||||
match (args.is_present("changelog"), args.is_present("manifest")) { | ||||
(true, false) => DebugDataKind::Changelog, | ||||
(false, true) => DebugDataKind::Manifest, | ||||
(true, true) => { | ||||
unreachable!("Should not happen since options are exclusive") | ||||
} | ||||
(false, false) => { | ||||
unreachable!("Should not happen since options are required") | ||||
} | ||||
}; | ||||
Antoine Cezar
|
r46099 | |||
Simon Sapin
|
r47335 | let repo = invocation.repo?; | ||
let data = debug_data(repo, rev, kind).map_err(|e| (e, rev))?; | ||||
Antoine Cezar
|
r46099 | |||
Simon Sapin
|
r47334 | let mut stdout = invocation.ui.stdout_buffer(); | ||
Simon Sapin
|
r47250 | stdout.write_all(&data)?; | ||
stdout.flush()?; | ||||
Antoine Cezar
|
r46099 | |||
Simon Sapin
|
r47250 | Ok(()) | ||
Antoine Cezar
|
r46099 | } | ||