##// END OF EJS Templates
rust-changelog: introducing an intermediate `ChangelogEntry`...
rust-changelog: introducing an intermediate `ChangelogEntry` Before this change, client code needing to extract, e.g, the Node ID and the description from a changeset had no other choice than calling both `entry_for_rev()` and `data_for_rev()`. This duplicates some (limited) computation, and more importantly imposes bad hygiene for client code: at some point of developement, the client code would have to pass over both entry and data in its internal layers, which at some point of development would raise the question whether they are consistent. We introduce the intermediate `ChangelogEntry` from which both conversion to the generic `RevlogEntry` and extraction of `ChangelogRevisionData` are possible. It might grow some convenience methods in the future. We keep the `data_for_rev()` method of `Changelog` for compatibility, pointing users at the more powerful alternative.

File last commit:

r50808:c15b415d default
r51268:841b13e6 default
Show More
debugdata.rs
71 lines | 2.0 KiB | application/rls-services+xml | RustLexer
Simon Sapin
rust: remove `FooError` structs with only `kind: FooErrorKind` enum field...
r47163 use crate::error::CommandError;
Simon Sapin
rhg: Move subcommand CLI arguments definitions to respective modules...
r47251 use clap::Arg;
use clap::ArgGroup;
Simon Sapin
rhg: replace `map_*_error` functions with `From` impls...
r47165 use hg::operations::{debug_data, DebugDataKind};
Antoine Cezar
rhg: add a `DebugData` `Command` to prepare the `rhg debugdata` subcommand...
r46099
pub const HELP_TEXT: &str = "
Dump the contents of a data file revision
";
Raphaël Gomès
rhg: upgrade `clap` dependency...
r50534 pub fn args() -> clap::Command {
clap::command!("debugdata")
Simon Sapin
rhg: Move subcommand CLI arguments definitions to respective modules...
r47251 .arg(
Raphaël Gomès
rhg: upgrade `clap` dependency...
r50534 Arg::new("changelog")
Simon Sapin
rhg: Move subcommand CLI arguments definitions to respective modules...
r47251 .help("open changelog")
Raphaël Gomès
rhg: upgrade `clap` dependency...
r50534 .short('c')
.action(clap::ArgAction::SetTrue),
Simon Sapin
rhg: Move subcommand CLI arguments definitions to respective modules...
r47251 )
.arg(
Raphaël Gomès
rhg: upgrade `clap` dependency...
r50534 Arg::new("manifest")
Simon Sapin
rhg: Move subcommand CLI arguments definitions to respective modules...
r47251 .help("open manifest")
Raphaël Gomès
rhg: upgrade `clap` dependency...
r50534 .short('m')
.action(clap::ArgAction::SetTrue),
Simon Sapin
rhg: Move subcommand CLI arguments definitions to respective modules...
r47251 )
.group(
Raphaël Gomès
rhg: upgrade `clap` dependency...
r50534 ArgGroup::new("revlog")
Simon Sapin
rhg: Move subcommand CLI arguments definitions to respective modules...
r47251 .args(&["changelog", "manifest"])
.required(true),
)
.arg(
Raphaël Gomès
rhg: upgrade `clap` dependency...
r50534 Arg::new("rev")
Simon Sapin
rhg: Move subcommand CLI arguments definitions to respective modules...
r47251 .help("revision")
.required(true)
.value_name("REV"),
)
.about(HELP_TEXT)
}
Raphaël Gomès
rust: use `logging_timer` instead of `micro_timer`...
r50808 #[logging_timer::time("trace")]
Simon Sapin
rhg: Group values passed to every sub-command into a struct...
r47334 pub fn run(invocation: &crate::CliInvocation) -> Result<(), CommandError> {
let args = invocation.subcommand_args;
Simon Sapin
rhg: replace command structs with functions...
r47250 let rev = args
Raphaël Gomès
rhg: upgrade `clap` dependency...
r50534 .get_one::<String>("rev")
Simon Sapin
rhg: replace command structs with functions...
r47250 .expect("rev should be a required argument");
Raphaël Gomès
rhg: upgrade `clap` dependency...
r50534 let kind = match (
args.get_one::<bool>("changelog").unwrap(),
args.get_one::<bool>("manifest").unwrap(),
) {
(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
rhg: add a `DebugData` `Command` to prepare the `rhg debugdata` subcommand...
r46099
Simon Sapin
rhg: Move `Repo` object creation into `main()`...
r47335 let repo = invocation.repo?;
Raphaël Gomès
rhg: fallback in `debugdata` if repo has `narrow`...
r50375 if repo.has_narrow() {
return Err(CommandError::unsupported(
"support for ellipsis nodes is missing and repo has narrow enabled",
));
}
Raphaël Gomès
rhg: upgrade `clap` dependency...
r50534 let data = debug_data(repo, rev, kind).map_err(|e| (e, rev.as_ref()))?;
Antoine Cezar
rhg: add a `DebugData` `Command` to prepare the `rhg debugdata` subcommand...
r46099
Simon Sapin
rhg: Group values passed to every sub-command into a struct...
r47334 let mut stdout = invocation.ui.stdout_buffer();
Simon Sapin
rhg: replace command structs with functions...
r47250 stdout.write_all(&data)?;
stdout.flush()?;
Antoine Cezar
rhg: add a `DebugData` `Command` to prepare the `rhg debugdata` subcommand...
r46099
Simon Sapin
rhg: replace command structs with functions...
r47250 Ok(())
Antoine Cezar
rhg: add a `DebugData` `Command` to prepare the `rhg debugdata` subcommand...
r46099 }