Mercurial > hg
annotate rust/rhg/src/commands/debugrhgsparse.rs @ 50427:98fc949bec14
rhg: support `status --print0`
This seems very easy to support, and useful because it makes it possible
to parse the [hg status] output even if the user creates files
with '\n' characters by accident.
author | Arseniy Alekseyev <aalekseyev@janestreet.com> |
---|---|
date | Thu, 06 Apr 2023 11:41:51 +0100 |
parents | 58074252db3c |
children |
rev | line source |
---|---|
49640
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49484
diff
changeset
|
1 use std::{ |
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49484
diff
changeset
|
2 ffi::{OsStr, OsString}, |
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49484
diff
changeset
|
3 os::unix::prelude::OsStrExt, |
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49484
diff
changeset
|
4 }; |
49484
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
5 |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
6 use crate::error::CommandError; |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
7 use hg::{self, utils::hg_path::HgPath}; |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
8 |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
9 pub const HELP_TEXT: &str = ""; |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
10 |
49640
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49484
diff
changeset
|
11 pub fn args() -> clap::Command { |
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49484
diff
changeset
|
12 clap::command!("debugrhgsparse") |
49484
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
13 .arg( |
49640
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49484
diff
changeset
|
14 clap::Arg::new("files") |
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49484
diff
changeset
|
15 .value_name("FILES") |
49484
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
16 .required(true) |
49640
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49484
diff
changeset
|
17 .num_args(1..) |
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49484
diff
changeset
|
18 .value_parser(clap::value_parser!(std::ffi::OsString)) |
49484
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
19 .help("Files to check against sparse profile"), |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
20 ) |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
21 .about(HELP_TEXT) |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
22 } |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
23 |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
24 pub fn run(invocation: &crate::CliInvocation) -> Result<(), CommandError> { |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
25 let repo = invocation.repo?; |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
26 |
49914
58074252db3c
rust: run `cargo clippy`
Raphaël Gomès <rgomes@octobus.net>
parents:
49640
diff
changeset
|
27 let (matcher, _warnings) = hg::sparse::matcher(repo).unwrap(); |
49640
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49484
diff
changeset
|
28 let files = invocation.subcommand_args.get_many::<OsString>("files"); |
49484
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
29 if let Some(files) = files { |
49640
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49484
diff
changeset
|
30 let files: Vec<&OsStr> = files |
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49484
diff
changeset
|
31 .filter(|s| !s.is_empty()) |
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49484
diff
changeset
|
32 .map(|s| s.as_os_str()) |
37bc3edef76f
rhg: upgrade `clap` dependency
Raphaël Gomès <rgomes@octobus.net>
parents:
49484
diff
changeset
|
33 .collect(); |
49484
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
34 for file in files { |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
35 invocation.ui.write_stdout(b"matches: ")?; |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
36 invocation.ui.write_stdout( |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
37 if matcher.matches(HgPath::new(file.as_bytes())) { |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
38 b"yes" |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
39 } else { |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
40 b"no" |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
41 }, |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
42 )?; |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
43 invocation.ui.write_stdout(b" | file: ")?; |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
44 invocation.ui.write_stdout(file.as_bytes())?; |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
45 invocation.ui.write_stdout(b"\n")?; |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
46 } |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
47 } |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
48 Ok(()) |
85f5d11c77dd
rhg: add debugrhgsparse command to help figure out bugs in rhg
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
49 } |