rust/rhg/src/commands/debugdata.rs
changeset 49639 37bc3edef76f
parent 49480 0199712c7a6d
child 49913 c15b415d1bff
equal deleted inserted replaced
49638:5844cd8e81ca 49639:37bc3edef76f
     6 
     6 
     7 pub const HELP_TEXT: &str = "
     7 pub const HELP_TEXT: &str = "
     8 Dump the contents of a data file revision
     8 Dump the contents of a data file revision
     9 ";
     9 ";
    10 
    10 
    11 pub fn args() -> clap::App<'static, 'static> {
    11 pub fn args() -> clap::Command {
    12     clap::SubCommand::with_name("debugdata")
    12     clap::command!("debugdata")
    13         .arg(
    13         .arg(
    14             Arg::with_name("changelog")
    14             Arg::new("changelog")
    15                 .help("open changelog")
    15                 .help("open changelog")
    16                 .short("-c")
    16                 .short('c')
    17                 .long("--changelog"),
    17                 .action(clap::ArgAction::SetTrue),
    18         )
    18         )
    19         .arg(
    19         .arg(
    20             Arg::with_name("manifest")
    20             Arg::new("manifest")
    21                 .help("open manifest")
    21                 .help("open manifest")
    22                 .short("-m")
    22                 .short('m')
    23                 .long("--manifest"),
    23                 .action(clap::ArgAction::SetTrue),
    24         )
    24         )
    25         .group(
    25         .group(
    26             ArgGroup::with_name("")
    26             ArgGroup::new("revlog")
    27                 .args(&["changelog", "manifest"])
    27                 .args(&["changelog", "manifest"])
    28                 .required(true),
    28                 .required(true),
    29         )
    29         )
    30         .arg(
    30         .arg(
    31             Arg::with_name("rev")
    31             Arg::new("rev")
    32                 .help("revision")
    32                 .help("revision")
    33                 .required(true)
    33                 .required(true)
    34                 .value_name("REV"),
    34                 .value_name("REV"),
    35         )
    35         )
    36         .about(HELP_TEXT)
    36         .about(HELP_TEXT)
    38 
    38 
    39 #[timed]
    39 #[timed]
    40 pub fn run(invocation: &crate::CliInvocation) -> Result<(), CommandError> {
    40 pub fn run(invocation: &crate::CliInvocation) -> Result<(), CommandError> {
    41     let args = invocation.subcommand_args;
    41     let args = invocation.subcommand_args;
    42     let rev = args
    42     let rev = args
    43         .value_of("rev")
    43         .get_one::<String>("rev")
    44         .expect("rev should be a required argument");
    44         .expect("rev should be a required argument");
    45     let kind =
    45     let kind = match (
    46         match (args.is_present("changelog"), args.is_present("manifest")) {
    46         args.get_one::<bool>("changelog").unwrap(),
    47             (true, false) => DebugDataKind::Changelog,
    47         args.get_one::<bool>("manifest").unwrap(),
    48             (false, true) => DebugDataKind::Manifest,
    48     ) {
    49             (true, true) => {
    49         (true, false) => DebugDataKind::Changelog,
    50                 unreachable!("Should not happen since options are exclusive")
    50         (false, true) => DebugDataKind::Manifest,
    51             }
    51         (true, true) => {
    52             (false, false) => {
    52             unreachable!("Should not happen since options are exclusive")
    53                 unreachable!("Should not happen since options are required")
    53         }
    54             }
    54         (false, false) => {
    55         };
    55             unreachable!("Should not happen since options are required")
       
    56         }
       
    57     };
    56 
    58 
    57     let repo = invocation.repo?;
    59     let repo = invocation.repo?;
    58     if repo.has_narrow() {
    60     if repo.has_narrow() {
    59         return Err(CommandError::unsupported(
    61         return Err(CommandError::unsupported(
    60             "support for ellipsis nodes is missing and repo has narrow enabled",
    62             "support for ellipsis nodes is missing and repo has narrow enabled",
    61         ));
    63         ));
    62     }
    64     }
    63     let data = debug_data(repo, rev, kind).map_err(|e| (e, rev))?;
    65     let data = debug_data(repo, rev, kind).map_err(|e| (e, rev.as_ref()))?;
    64 
    66 
    65     let mut stdout = invocation.ui.stdout_buffer();
    67     let mut stdout = invocation.ui.stdout_buffer();
    66     stdout.write_all(&data)?;
    68     stdout.write_all(&data)?;
    67     stdout.flush()?;
    69     stdout.flush()?;
    68 
    70