author | Arseniy Alekseyev <aalekseyev@janestreet.com> |
Tue, 03 Dec 2024 14:39:00 +0000 | |
changeset 52354 | ff19ddb256b3 |
parent 52353 | e2e49069eeb6 |
child 52557 | b89c934e6269 |
permissions | -rw-r--r-- |
48355
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
1 |
use crate::error::CommandError; |
52354
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52353
diff
changeset
|
2 |
use clap::Arg; |
52300
04b9a56c2d25
rust-lib: only export very common types to the top of the crate
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49914
diff
changeset
|
3 |
use hg::dirstate::status::StatusError; |
52353
e2e49069eeb6
rust-ignore: make `debugignorerhg` command show a full regex, with exact files
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52300
diff
changeset
|
4 |
use hg::filepatterns::RegexCompleteness; |
e2e49069eeb6
rust-ignore: make `debugignorerhg` command show a full regex, with exact files
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52300
diff
changeset
|
5 |
use hg::matchers::get_ignore_matcher_pre; |
48355
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
6 |
use log::warn; |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
7 |
|
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
8 |
pub const HELP_TEXT: &str = " |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
9 |
Show effective hgignore patterns used by rhg. |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
10 |
|
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
11 |
This is a pure Rust version of `hg debugignore`. |
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 |
Some options might be missing, check the list below. |
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 |
|
49640
37bc3edef76f
rhg: upgrade `clap` dependency
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49558
diff
changeset
|
16 |
pub fn args() -> clap::Command { |
52354
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52353
diff
changeset
|
17 |
clap::command!("debugignorerhg") |
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52353
diff
changeset
|
18 |
.arg( |
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52353
diff
changeset
|
19 |
Arg::new("all-patterns") |
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52353
diff
changeset
|
20 |
.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:
52353
diff
changeset
|
21 |
.short('a') |
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52353
diff
changeset
|
22 |
.action(clap::ArgAction::SetTrue) |
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52353
diff
changeset
|
23 |
.long("all-patterns"), |
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52353
diff
changeset
|
24 |
).about(HELP_TEXT) |
48355
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
25 |
} |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
26 |
|
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
27 |
pub fn run(invocation: &crate::CliInvocation) -> Result<(), CommandError> { |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
28 |
let repo = invocation.repo?; |
52354
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52353
diff
changeset
|
29 |
let args = invocation.subcommand_args; |
48355
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
30 |
|
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
31 |
let ignore_file = repo.working_directory_vfs().join(".hgignore"); // TODO hardcoded |
52354
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52353
diff
changeset
|
32 |
let all_patterns = args.get_flag("all-patterns"); |
48355
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
33 |
|
52353
e2e49069eeb6
rust-ignore: make `debugignorerhg` command show a full regex, with exact files
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52300
diff
changeset
|
34 |
let (ignore_matcher, warnings) = get_ignore_matcher_pre( |
48355
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
35 |
vec![ignore_file], |
49914
58074252db3c
rust: run `cargo clippy`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49640
diff
changeset
|
36 |
repo.working_directory_path(), |
49558
363923bd51cd
dirstate-v2: hash the source of the ignore patterns as well
Rapha?l Gom?s <rgomes@octobus.net>
parents:
48355
diff
changeset
|
37 |
&mut |_source, _pattern_bytes| (), |
48355
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
38 |
) |
49914
58074252db3c
rust: run `cargo clippy`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49640
diff
changeset
|
39 |
.map_err(StatusError::from)?; |
48355
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
40 |
|
52354
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52353
diff
changeset
|
41 |
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:
52353
diff
changeset
|
42 |
RegexCompleteness::Complete |
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52353
diff
changeset
|
43 |
} else { |
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52353
diff
changeset
|
44 |
RegexCompleteness::ExcludeExactFiles |
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52353
diff
changeset
|
45 |
}; |
52353
e2e49069eeb6
rust-ignore: make `debugignorerhg` command show a full regex, with exact files
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52300
diff
changeset
|
46 |
let ignore_matcher = ignore_matcher |
52354
ff19ddb256b3
rust-ignore: add some tests of `debugignorerhg`, add flag -a to control output
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52353
diff
changeset
|
47 |
.build_debug_matcher(regex_config) |
52353
e2e49069eeb6
rust-ignore: make `debugignorerhg` command show a full regex, with exact files
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52300
diff
changeset
|
48 |
.map_err(StatusError::from)?; |
e2e49069eeb6
rust-ignore: make `debugignorerhg` command show a full regex, with exact files
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52300
diff
changeset
|
49 |
|
48355
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
50 |
if !warnings.is_empty() { |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
51 |
warn!("Pattern warnings: {:?}", &warnings); |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
52 |
} |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
53 |
|
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
54 |
let patterns = ignore_matcher.debug_get_patterns(); |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
55 |
invocation.ui.write_stdout(patterns)?; |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
56 |
invocation.ui.write_stdout(b"\n")?; |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
57 |
Ok(()) |
6d4daf51283c
rhg: implement the debugignorerhg subcommand
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
diff
changeset
|
58 |
} |