Mercurial > public > mercurial-scm > hg-stable
annotate rust/rhg/src/commands/debugignorerhg.rs @ 52774:94e2547e6f3d
rust: move code from utils to utils::strings
This moves string-related functions in hg::utils into the recently added
hg::utils::strings module.
author | Mitchell Kember <mkember@janestreet.com> |
---|---|
date | Thu, 16 Jan 2025 13:15:02 -0500 |
parents | b89c934e6269 |
children |
rev | line source |
---|---|
48403
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
1 use crate::error::CommandError; |
52583
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
2 use crate::ui::Ui; |
52386
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52385
diff
changeset
|
3 use clap::Arg; |
52336
04b9a56c2d25
rust-lib: only export very common types to the top of the crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49987
diff
changeset
|
4 use hg::dirstate::status::StatusError; |
52385
e2e49069eeb6
rust-ignore: make `debugignorerhg` command show a full regex, with exact files
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52336
diff
changeset
|
5 use hg::filepatterns::RegexCompleteness; |
52583
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
6 use hg::matchers::{get_ignore_matcher_pre, ReSyntax}; |
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
7 use hg::repo::Repo; |
48403
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
8 use log::warn; |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
9 |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
10 pub const HELP_TEXT: &str = " |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
11 Show effective hgignore patterns used by rhg. |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
12 |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
13 This is a pure Rust version of `hg debugignore`. |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
14 |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
15 Some options might be missing, check the list below. |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
16 "; |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
17 |
49758
37bc3edef76f
rhg: upgrade `clap` dependency
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49550
diff
changeset
|
18 pub fn args() -> clap::Command { |
52386
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52385
diff
changeset
|
19 clap::command!("debugignorerhg") |
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52385
diff
changeset
|
20 .arg( |
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52385
diff
changeset
|
21 Arg::new("all-patterns") |
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52385
diff
changeset
|
22 .help("include all patterns, including ones for exact file matches") |
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52385
diff
changeset
|
23 .short('a') |
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52385
diff
changeset
|
24 .action(clap::ArgAction::SetTrue) |
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52385
diff
changeset
|
25 .long("all-patterns"), |
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52385
diff
changeset
|
26 ).about(HELP_TEXT) |
48403
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
27 } |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
28 |
52583
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
29 pub enum WhichPatterns { |
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
30 All, |
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
31 SlowPathOnly, |
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
32 } |
48403
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
33 |
52583
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
34 pub fn work( |
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
35 repo: &Repo, |
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
36 ui: &Ui, |
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
37 which: WhichPatterns, |
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
38 syntax: ReSyntax, |
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
39 ) -> Result<(), CommandError> { |
48403
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
40 let ignore_file = repo.working_directory_vfs().join(".hgignore"); // TODO hardcoded |
52583
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
41 let all_patterns = matches!(which, WhichPatterns::All); |
48403
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
42 |
52385
e2e49069eeb6
rust-ignore: make `debugignorerhg` command show a full regex, with exact files
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52336
diff
changeset
|
43 let (ignore_matcher, warnings) = get_ignore_matcher_pre( |
48403
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
44 vec![ignore_file], |
49987
58074252db3c
rust: run `cargo clippy`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49758
diff
changeset
|
45 repo.working_directory_path(), |
49550
363923bd51cd
dirstate-v2: hash the source of the ignore patterns as well
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48403
diff
changeset
|
46 &mut |_source, _pattern_bytes| (), |
48403
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
47 ) |
49987
58074252db3c
rust: run `cargo clippy`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49758
diff
changeset
|
48 .map_err(StatusError::from)?; |
48403
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
49 |
52386
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52385
diff
changeset
|
50 let regex_config = if all_patterns { |
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52385
diff
changeset
|
51 RegexCompleteness::Complete |
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52385
diff
changeset
|
52 } else { |
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52385
diff
changeset
|
53 RegexCompleteness::ExcludeExactFiles |
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52385
diff
changeset
|
54 }; |
52385
e2e49069eeb6
rust-ignore: make `debugignorerhg` command show a full regex, with exact files
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52336
diff
changeset
|
55 let ignore_matcher = ignore_matcher |
52386
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52385
diff
changeset
|
56 .build_debug_matcher(regex_config) |
52385
e2e49069eeb6
rust-ignore: make `debugignorerhg` command show a full regex, with exact files
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52336
diff
changeset
|
57 .map_err(StatusError::from)?; |
e2e49069eeb6
rust-ignore: make `debugignorerhg` command show a full regex, with exact files
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52336
diff
changeset
|
58 |
48403
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
59 if !warnings.is_empty() { |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
60 warn!("Pattern warnings: {:?}", &warnings); |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
61 } |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
62 |
52583
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
63 let patterns = ignore_matcher.debug_get_patterns(syntax); |
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
64 ui.write_stdout(&patterns)?; |
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
65 ui.write_stdout(b"\n")?; |
48403
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
66 Ok(()) |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
67 } |
52583
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
68 |
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
69 pub fn run(invocation: &crate::CliInvocation) -> Result<(), CommandError> { |
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
70 let repo = invocation.repo?; |
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
71 let args = invocation.subcommand_args; |
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
72 |
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
73 let all_patterns = args.get_flag("all-patterns"); |
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
74 let patterns = if all_patterns { |
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
75 WhichPatterns::All |
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
76 } else { |
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
77 WhichPatterns::SlowPathOnly |
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
78 }; |
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
79 |
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
80 work(repo, invocation.ui, patterns, ReSyntax::Internal) |
b89c934e6269
rust-hgignore: add a scripting command to print the hgignore regexp
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52386
diff
changeset
|
81 } |