Mercurial > hg
annotate rust/rhg/src/commands/debugdata.rs @ 51502:a5d8f261b716 stable
obsutil: sort metadata before comparing in geteffectflag()
This is probably less important now that we dropped Python 2. We do still
support Python 3.6 though, and the dictionaries aren't ordered there either
(that was a big change that came with 3.7).
Still, maybe it's a good idea to sort metadata explicitly.
author | Anton Shestakov <av6@dwimlabs.net> |
---|---|
date | Wed, 13 Mar 2024 16:22:13 -0300 |
parents | 532e74ad3ff6 |
children |
rev | line source |
---|---|
46434
3e2d539d0d1a
rust: remove `FooError` structs with only `kind: FooErrorKind` enum field
Simon Sapin <simon.sapin@octobus.net>
parents:
46167
diff
changeset
|
1 use crate::error::CommandError; |
46501
1ecaf09d9964
rhg: Move subcommand CLI arguments definitions to respective modules
Simon Sapin <simon.sapin@octobus.net>
parents:
46500
diff
changeset
|
2 use clap::Arg; |
1ecaf09d9964
rhg: Move subcommand CLI arguments definitions to respective modules
Simon Sapin <simon.sapin@octobus.net>
parents:
46500
diff
changeset
|
3 use clap::ArgGroup; |
46436
252d1bdba33d
rhg: replace `map_*_error` functions with `From` impls
Simon Sapin <simon.sapin@octobus.net>
parents:
46434
diff
changeset
|
4 use hg::operations::{debug_data, DebugDataKind}; |
45528
66756b34c06e
rhg: add a `DebugData` `Command` to prepare the `rhg debugdata` subcommand
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
5 |
66756b34c06e
rhg: add a `DebugData` `Command` to prepare the `rhg debugdata` subcommand
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
6 pub const HELP_TEXT: &str = " |
66756b34c06e
rhg: add a `DebugData` `Command` to prepare the `rhg debugdata` subcommand
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
7 Dump the contents of a data file revision |
66756b34c06e
rhg: add a `DebugData` `Command` to prepare the `rhg debugdata` subcommand
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
8 "; |
66756b34c06e
rhg: add a `DebugData` `Command` to prepare the `rhg debugdata` subcommand
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
9 |
49640
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49480
diff
changeset
|
10 pub fn args() -> clap::Command { |
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49480
diff
changeset
|
11 clap::command!("debugdata") |
46501
1ecaf09d9964
rhg: Move subcommand CLI arguments definitions to respective modules
Simon Sapin <simon.sapin@octobus.net>
parents:
46500
diff
changeset
|
12 .arg( |
49640
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49480
diff
changeset
|
13 Arg::new("changelog") |
46501
1ecaf09d9964
rhg: Move subcommand CLI arguments definitions to respective modules
Simon Sapin <simon.sapin@octobus.net>
parents:
46500
diff
changeset
|
14 .help("open changelog") |
49640
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49480
diff
changeset
|
15 .short('c') |
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49480
diff
changeset
|
16 .action(clap::ArgAction::SetTrue), |
46501
1ecaf09d9964
rhg: Move subcommand CLI arguments definitions to respective modules
Simon Sapin <simon.sapin@octobus.net>
parents:
46500
diff
changeset
|
17 ) |
1ecaf09d9964
rhg: Move subcommand CLI arguments definitions to respective modules
Simon Sapin <simon.sapin@octobus.net>
parents:
46500
diff
changeset
|
18 .arg( |
49640
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49480
diff
changeset
|
19 Arg::new("manifest") |
46501
1ecaf09d9964
rhg: Move subcommand CLI arguments definitions to respective modules
Simon Sapin <simon.sapin@octobus.net>
parents:
46500
diff
changeset
|
20 .help("open manifest") |
49640
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49480
diff
changeset
|
21 .short('m') |
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49480
diff
changeset
|
22 .action(clap::ArgAction::SetTrue), |
46501
1ecaf09d9964
rhg: Move subcommand CLI arguments definitions to respective modules
Simon Sapin <simon.sapin@octobus.net>
parents:
46500
diff
changeset
|
23 ) |
1ecaf09d9964
rhg: Move subcommand CLI arguments definitions to respective modules
Simon Sapin <simon.sapin@octobus.net>
parents:
46500
diff
changeset
|
24 .group( |
49640
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49480
diff
changeset
|
25 ArgGroup::new("revlog") |
51120
532e74ad3ff6
rust: run a clippy pass with the latest stable version
Raphaël Gomès <rgomes@octobus.net>
parents:
49913
diff
changeset
|
26 .args(["changelog", "manifest"]) |
46501
1ecaf09d9964
rhg: Move subcommand CLI arguments definitions to respective modules
Simon Sapin <simon.sapin@octobus.net>
parents:
46500
diff
changeset
|
27 .required(true), |
1ecaf09d9964
rhg: Move subcommand CLI arguments definitions to respective modules
Simon Sapin <simon.sapin@octobus.net>
parents:
46500
diff
changeset
|
28 ) |
1ecaf09d9964
rhg: Move subcommand CLI arguments definitions to respective modules
Simon Sapin <simon.sapin@octobus.net>
parents:
46500
diff
changeset
|
29 .arg( |
49640
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49480
diff
changeset
|
30 Arg::new("rev") |
46501
1ecaf09d9964
rhg: Move subcommand CLI arguments definitions to respective modules
Simon Sapin <simon.sapin@octobus.net>
parents:
46500
diff
changeset
|
31 .help("revision") |
1ecaf09d9964
rhg: Move subcommand CLI arguments definitions to respective modules
Simon Sapin <simon.sapin@octobus.net>
parents:
46500
diff
changeset
|
32 .required(true) |
1ecaf09d9964
rhg: Move subcommand CLI arguments definitions to respective modules
Simon Sapin <simon.sapin@octobus.net>
parents:
46500
diff
changeset
|
33 .value_name("REV"), |
1ecaf09d9964
rhg: Move subcommand CLI arguments definitions to respective modules
Simon Sapin <simon.sapin@octobus.net>
parents:
46500
diff
changeset
|
34 ) |
1ecaf09d9964
rhg: Move subcommand CLI arguments definitions to respective modules
Simon Sapin <simon.sapin@octobus.net>
parents:
46500
diff
changeset
|
35 .about(HELP_TEXT) |
1ecaf09d9964
rhg: Move subcommand CLI arguments definitions to respective modules
Simon Sapin <simon.sapin@octobus.net>
parents:
46500
diff
changeset
|
36 } |
1ecaf09d9964
rhg: Move subcommand CLI arguments definitions to respective modules
Simon Sapin <simon.sapin@octobus.net>
parents:
46500
diff
changeset
|
37 |
49913
c15b415d1bff
rust: use `logging_timer` instead of `micro_timer`
Raphaël Gomès <rgomes@octobus.net>
parents:
49640
diff
changeset
|
38 #[logging_timer::time("trace")] |
46592
80840b651721
rhg: Group values passed to every sub-command into a struct
Simon Sapin <simon.sapin@octobus.net>
parents:
46503
diff
changeset
|
39 pub fn run(invocation: &crate::CliInvocation) -> Result<(), CommandError> { |
80840b651721
rhg: Group values passed to every sub-command into a struct
Simon Sapin <simon.sapin@octobus.net>
parents:
46503
diff
changeset
|
40 let args = invocation.subcommand_args; |
46500
184e46550dc8
rhg: replace command structs with functions
Simon Sapin <simon.sapin@octobus.net>
parents:
46484
diff
changeset
|
41 let rev = args |
49640
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49480
diff
changeset
|
42 .get_one::<String>("rev") |
46500
184e46550dc8
rhg: replace command structs with functions
Simon Sapin <simon.sapin@octobus.net>
parents:
46484
diff
changeset
|
43 .expect("rev should be a required argument"); |
49640
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49480
diff
changeset
|
44 let kind = match ( |
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49480
diff
changeset
|
45 args.get_one::<bool>("changelog").unwrap(), |
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49480
diff
changeset
|
46 args.get_one::<bool>("manifest").unwrap(), |
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49480
diff
changeset
|
47 ) { |
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49480
diff
changeset
|
48 (true, false) => DebugDataKind::Changelog, |
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49480
diff
changeset
|
49 (false, true) => DebugDataKind::Manifest, |
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49480
diff
changeset
|
50 (true, true) => { |
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49480
diff
changeset
|
51 unreachable!("Should not happen since options are exclusive") |
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49480
diff
changeset
|
52 } |
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49480
diff
changeset
|
53 (false, false) => { |
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49480
diff
changeset
|
54 unreachable!("Should not happen since options are required") |
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49480
diff
changeset
|
55 } |
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49480
diff
changeset
|
56 }; |
45528
66756b34c06e
rhg: add a `DebugData` `Command` to prepare the `rhg debugdata` subcommand
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
57 |
46593
5ce2aa7c2ad5
rhg: Move `Repo` object creation into `main()`
Simon Sapin <simon.sapin@octobus.net>
parents:
46592
diff
changeset
|
58 let repo = invocation.repo?; |
49480
0199712c7a6d
rhg: fallback in `debugdata` if repo has `narrow`
Raphaël Gomès <rgomes@octobus.net>
parents:
46593
diff
changeset
|
59 if repo.has_narrow() { |
0199712c7a6d
rhg: fallback in `debugdata` if repo has `narrow`
Raphaël Gomès <rgomes@octobus.net>
parents:
46593
diff
changeset
|
60 return Err(CommandError::unsupported( |
0199712c7a6d
rhg: fallback in `debugdata` if repo has `narrow`
Raphaël Gomès <rgomes@octobus.net>
parents:
46593
diff
changeset
|
61 "support for ellipsis nodes is missing and repo has narrow enabled", |
0199712c7a6d
rhg: fallback in `debugdata` if repo has `narrow`
Raphaël Gomès <rgomes@octobus.net>
parents:
46593
diff
changeset
|
62 )); |
0199712c7a6d
rhg: fallback in `debugdata` if repo has `narrow`
Raphaël Gomès <rgomes@octobus.net>
parents:
46593
diff
changeset
|
63 } |
49640
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49480
diff
changeset
|
64 let data = debug_data(repo, rev, kind).map_err(|e| (e, rev.as_ref()))?; |
45528
66756b34c06e
rhg: add a `DebugData` `Command` to prepare the `rhg debugdata` subcommand
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
65 |
46592
80840b651721
rhg: Group values passed to every sub-command into a struct
Simon Sapin <simon.sapin@octobus.net>
parents:
46503
diff
changeset
|
66 let mut stdout = invocation.ui.stdout_buffer(); |
46500
184e46550dc8
rhg: replace command structs with functions
Simon Sapin <simon.sapin@octobus.net>
parents:
46484
diff
changeset
|
67 stdout.write_all(&data)?; |
184e46550dc8
rhg: replace command structs with functions
Simon Sapin <simon.sapin@octobus.net>
parents:
46484
diff
changeset
|
68 stdout.flush()?; |
45528
66756b34c06e
rhg: add a `DebugData` `Command` to prepare the `rhg debugdata` subcommand
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
69 |
46500
184e46550dc8
rhg: replace command structs with functions
Simon Sapin <simon.sapin@octobus.net>
parents:
46484
diff
changeset
|
70 Ok(()) |
45528
66756b34c06e
rhg: add a `DebugData` `Command` to prepare the `rhg debugdata` subcommand
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
71 } |