Mercurial > public > mercurial-scm > hg
annotate rust/rhg/src/ui.rs @ 52760: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 | bbf1c52252ae |
children | 6183949219b2 |
rev | line source |
---|---|
48733
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
1 use crate::color::ColorConfig; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
2 use crate::color::Effect; |
49981
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
3 use crate::error::CommandError; |
45984
fada33872b5b
rhg: use `format_bytes!` for error messages
Rapha?l Gom?s <rgomes@octobus.net>
parents:
45528
diff
changeset
|
4 use format_bytes::format_bytes; |
48733
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
5 use format_bytes::write_bytes; |
48730
1aaf11e35aec
rhg: Pass a &Config to Ui::new
Simon Sapin <simon.sapin@octobus.net>
parents:
48729
diff
changeset
|
6 use hg::config::Config; |
49513
467d9df98c68
rhg: centralize PlainInfo
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49512
diff
changeset
|
7 use hg::config::PlainInfo; |
52756
bbf1c52252ae
rust: add encoding.rs
Mitchell Kember <mkember@janestreet.com>
parents:
52726
diff
changeset
|
8 use hg::encoding::Encoder; |
48731
f591b377375f
rhg: Make Ui::new falliable, add Ui::new_infallible
Simon Sapin <simon.sapin@octobus.net>
parents:
48730
diff
changeset
|
9 use hg::errors::HgError; |
52303
22d24f6d6411
rust-lib: remove exports for not too common pattern-related types
Rapha?l Gom?s <rgomes@octobus.net>
parents:
51117
diff
changeset
|
10 use hg::filepatterns::PatternFileWarning; |
49981
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
11 use hg::repo::Repo; |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
12 use hg::sparse; |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
13 use hg::utils::files::get_bytes_from_path; |
45049
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
14 use std::io; |
52726
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
15 use std::io::BufWriter; |
52309
56e8841a454c
rust: remove `atty` dependency
Rapha?l Gom?s <rgomes@octobus.net>
parents:
52303
diff
changeset
|
16 use std::io::IsTerminal; |
52726
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
17 use std::io::StdoutLock; |
45362
eb55274d3650
rhg: add buffered stdout writing possibility
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45049
diff
changeset
|
18 use std::io::{ErrorKind, Write}; |
45049
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
19 |
45362
eb55274d3650
rhg: add buffered stdout writing possibility
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45049
diff
changeset
|
20 pub struct Ui { |
eb55274d3650
rhg: add buffered stdout writing possibility
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45049
diff
changeset
|
21 stdout: std::io::Stdout, |
eb55274d3650
rhg: add buffered stdout writing possibility
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45049
diff
changeset
|
22 stderr: std::io::Stderr, |
48733
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
23 colors: Option<ColorConfig>, |
52756
bbf1c52252ae
rust: add encoding.rs
Mitchell Kember <mkember@janestreet.com>
parents:
52726
diff
changeset
|
24 encoder: Encoder, |
45362
eb55274d3650
rhg: add buffered stdout writing possibility
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45049
diff
changeset
|
25 } |
45049
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
26 |
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
27 /// The kind of user interface error |
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
28 pub enum UiError { |
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
29 /// The standard output stream cannot be written to |
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
30 StdoutError(io::Error), |
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
31 /// The standard error stream cannot be written to |
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
32 StderrError(io::Error), |
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
33 } |
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
34 |
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
35 /// The commandline user interface |
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
36 impl Ui { |
48733
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
37 pub fn new(config: &Config) -> Result<Self, HgError> { |
48731
f591b377375f
rhg: Make Ui::new falliable, add Ui::new_infallible
Simon Sapin <simon.sapin@octobus.net>
parents:
48730
diff
changeset
|
38 Ok(Ui { |
48733
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
39 // If using something else, also adapt `isatty()` below. |
48731
f591b377375f
rhg: Make Ui::new falliable, add Ui::new_infallible
Simon Sapin <simon.sapin@octobus.net>
parents:
48730
diff
changeset
|
40 stdout: std::io::stdout(), |
48733
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
41 |
48731
f591b377375f
rhg: Make Ui::new falliable, add Ui::new_infallible
Simon Sapin <simon.sapin@octobus.net>
parents:
48730
diff
changeset
|
42 stderr: std::io::stderr(), |
48733
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
43 colors: ColorConfig::new(config)?, |
52756
bbf1c52252ae
rust: add encoding.rs
Mitchell Kember <mkember@janestreet.com>
parents:
52726
diff
changeset
|
44 encoder: Encoder::from_env()?, |
48731
f591b377375f
rhg: Make Ui::new falliable, add Ui::new_infallible
Simon Sapin <simon.sapin@octobus.net>
parents:
48730
diff
changeset
|
45 }) |
f591b377375f
rhg: Make Ui::new falliable, add Ui::new_infallible
Simon Sapin <simon.sapin@octobus.net>
parents:
48730
diff
changeset
|
46 } |
f591b377375f
rhg: Make Ui::new falliable, add Ui::new_infallible
Simon Sapin <simon.sapin@octobus.net>
parents:
48730
diff
changeset
|
47 |
f591b377375f
rhg: Make Ui::new falliable, add Ui::new_infallible
Simon Sapin <simon.sapin@octobus.net>
parents:
48730
diff
changeset
|
48 /// Default to no color if color configuration errors. |
f591b377375f
rhg: Make Ui::new falliable, add Ui::new_infallible
Simon Sapin <simon.sapin@octobus.net>
parents:
48730
diff
changeset
|
49 /// |
f591b377375f
rhg: Make Ui::new falliable, add Ui::new_infallible
Simon Sapin <simon.sapin@octobus.net>
parents:
48730
diff
changeset
|
50 /// Useful when we’re already handling another error. |
48733
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
51 pub fn new_infallible(config: &Config) -> Self { |
45362
eb55274d3650
rhg: add buffered stdout writing possibility
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45049
diff
changeset
|
52 Ui { |
48733
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
53 // If using something else, also adapt `isatty()` below. |
45362
eb55274d3650
rhg: add buffered stdout writing possibility
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45049
diff
changeset
|
54 stdout: std::io::stdout(), |
48733
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
55 |
45362
eb55274d3650
rhg: add buffered stdout writing possibility
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45049
diff
changeset
|
56 stderr: std::io::stderr(), |
48733
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
57 colors: ColorConfig::new(config).unwrap_or(None), |
52756
bbf1c52252ae
rust: add encoding.rs
Mitchell Kember <mkember@janestreet.com>
parents:
52726
diff
changeset
|
58 encoder: Encoder::default(), |
45362
eb55274d3650
rhg: add buffered stdout writing possibility
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45049
diff
changeset
|
59 } |
eb55274d3650
rhg: add buffered stdout writing possibility
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45049
diff
changeset
|
60 } |
eb55274d3650
rhg: add buffered stdout writing possibility
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45049
diff
changeset
|
61 |
eb55274d3650
rhg: add buffered stdout writing possibility
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45049
diff
changeset
|
62 /// Returns a buffered handle on stdout for faster batch printing |
eb55274d3650
rhg: add buffered stdout writing possibility
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45049
diff
changeset
|
63 /// operations. |
52726
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
64 pub fn stdout_buffer(&self) -> StdoutBuffer<'_, BufWriter<StdoutLock>> { |
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
65 StdoutBuffer { |
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
66 stdout: BufWriter::new(self.stdout.lock()), |
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
67 colors: &self.colors, |
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
68 } |
45049
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
69 } |
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
70 |
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
71 /// Write bytes to stdout |
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
72 pub fn write_stdout(&self, bytes: &[u8]) -> Result<(), UiError> { |
45362
eb55274d3650
rhg: add buffered stdout writing possibility
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45049
diff
changeset
|
73 let mut stdout = self.stdout.lock(); |
45049
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
74 |
45439
fbc373b7cbc3
rhg: fix `clippy` warnings
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45367
diff
changeset
|
75 stdout.write_all(bytes).or_else(handle_stdout_error)?; |
45049
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
76 |
45439
fbc373b7cbc3
rhg: fix `clippy` warnings
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45367
diff
changeset
|
77 stdout.flush().or_else(handle_stdout_error) |
45049
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
78 } |
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
79 |
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
80 /// Write bytes to stderr |
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
81 pub fn write_stderr(&self, bytes: &[u8]) -> Result<(), UiError> { |
45362
eb55274d3650
rhg: add buffered stdout writing possibility
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45049
diff
changeset
|
82 let mut stderr = self.stderr.lock(); |
45049
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
83 |
45439
fbc373b7cbc3
rhg: fix `clippy` warnings
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45367
diff
changeset
|
84 stderr.write_all(bytes).or_else(handle_stderr_error)?; |
45049
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
85 |
45439
fbc373b7cbc3
rhg: fix `clippy` warnings
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45367
diff
changeset
|
86 stderr.flush().or_else(handle_stderr_error) |
45049
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
87 } |
52756
bbf1c52252ae
rust: add encoding.rs
Mitchell Kember <mkember@janestreet.com>
parents:
52726
diff
changeset
|
88 |
bbf1c52252ae
rust: add encoding.rs
Mitchell Kember <mkember@janestreet.com>
parents:
52726
diff
changeset
|
89 // TODO: use this |
bbf1c52252ae
rust: add encoding.rs
Mitchell Kember <mkember@janestreet.com>
parents:
52726
diff
changeset
|
90 #[allow(dead_code)] |
bbf1c52252ae
rust: add encoding.rs
Mitchell Kember <mkember@janestreet.com>
parents:
52726
diff
changeset
|
91 pub fn encoder(&self) -> &Encoder { |
bbf1c52252ae
rust: add encoding.rs
Mitchell Kember <mkember@janestreet.com>
parents:
52726
diff
changeset
|
92 &self.encoder |
bbf1c52252ae
rust: add encoding.rs
Mitchell Kember <mkember@janestreet.com>
parents:
52726
diff
changeset
|
93 } |
52726
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
94 } |
48176
38deb65d4441
rhg: add ui.plain() and check it before showing relative paths in status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46591
diff
changeset
|
95 |
52726
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
96 /// A buffered stdout writer for faster batch printing operations. |
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
97 pub struct StdoutBuffer<'a, W> { |
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
98 colors: &'a Option<ColorConfig>, |
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
99 stdout: W, |
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
100 } |
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
101 |
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
102 impl<'a, W: Write> StdoutBuffer<'a, W> { |
48733
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
103 /// Write bytes to stdout with the given label |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
104 /// |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
105 /// Like the optional `label` parameter in `mercurial/ui.py`, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
106 /// this label influences the color used for this output. |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
107 pub fn write_stdout_labelled( |
52726
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
108 &mut self, |
48733
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
109 bytes: &[u8], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
110 label: &str, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
111 ) -> Result<(), UiError> { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
112 if let Some(colors) = &self.colors { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
113 if let Some(effects) = colors.styles.get(label.as_bytes()) { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
114 if !effects.is_empty() { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
115 return self |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
116 .write_stdout_with_effects(bytes, effects) |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
117 .or_else(handle_stdout_error); |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
118 } |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
119 } |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
120 } |
52726
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
121 self.write_all(bytes) |
48733
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
122 } |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
123 |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
124 fn write_stdout_with_effects( |
52726
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
125 &mut self, |
48733
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
126 bytes: &[u8], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
127 effects: &[Effect], |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
128 ) -> io::Result<()> { |
52726
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
129 let stdout = &mut self.stdout; |
48733
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
130 let mut write_line = |line: &[u8], first: bool| { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
131 // `line` does not include the newline delimiter |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
132 if !first { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
133 stdout.write_all(b"\n")?; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
134 } |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
135 if line.is_empty() { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
136 return Ok(()); |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
137 } |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
138 /// 0x1B == 27 == 0o33 |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
139 const ASCII_ESCAPE: &[u8] = b"\x1b"; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
140 write_bytes!(stdout, b"{}[0", ASCII_ESCAPE)?; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
141 for effect in effects { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
142 write_bytes!(stdout, b";{}", effect)?; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
143 } |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
144 write_bytes!(stdout, b"m")?; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
145 stdout.write_all(line)?; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
146 write_bytes!(stdout, b"{}[0m", ASCII_ESCAPE) |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
147 }; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
148 let mut lines = bytes.split(|&byte| byte == b'\n'); |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
149 if let Some(first) = lines.next() { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
150 write_line(first, true)?; |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
151 for line in lines { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
152 write_line(line, false)? |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
153 } |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
154 } |
52726
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
155 Ok(()) |
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
156 } |
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
157 |
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
158 /// Write bytes to stdout buffer |
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
159 pub fn write_all(&mut self, bytes: &[u8]) -> Result<(), UiError> { |
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
160 self.stdout.write_all(bytes).or_else(handle_stdout_error) |
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
161 } |
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
162 |
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
163 /// Flush bytes to stdout |
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
164 pub fn flush(&mut self) -> Result<(), UiError> { |
65839176cea9
rhg: buffer the output of `rhg status`
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
52309
diff
changeset
|
165 self.stdout.flush().or_else(handle_stdout_error) |
48733
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
166 } |
48729
99b1dfc06571
rhg: Add support for HGPLAINEXPECT
Simon Sapin <simon.sapin@octobus.net>
parents:
48513
diff
changeset
|
167 } |
99b1dfc06571
rhg: Add support for HGPLAINEXPECT
Simon Sapin <simon.sapin@octobus.net>
parents:
48513
diff
changeset
|
168 |
49513
467d9df98c68
rhg: centralize PlainInfo
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49512
diff
changeset
|
169 // TODO: pass the PlainInfo to call sites directly and |
467d9df98c68
rhg: centralize PlainInfo
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49512
diff
changeset
|
170 // delete this function |
48733
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
171 pub fn plain(opt_feature: Option<&str>) -> bool { |
49513
467d9df98c68
rhg: centralize PlainInfo
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49512
diff
changeset
|
172 let plain_info = PlainInfo::from_env(); |
467d9df98c68
rhg: centralize PlainInfo
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49512
diff
changeset
|
173 match opt_feature { |
467d9df98c68
rhg: centralize PlainInfo
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49512
diff
changeset
|
174 None => plain_info.is_plain(), |
467d9df98c68
rhg: centralize PlainInfo
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49512
diff
changeset
|
175 Some(feature) => plain_info.is_feature_plain(feature), |
48176
38deb65d4441
rhg: add ui.plain() and check it before showing relative paths in status
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46591
diff
changeset
|
176 } |
45049
513b3ef277a3
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents:
diff
changeset
|
177 } |
45362
eb55274d3650
rhg: add buffered stdout writing possibility
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45049
diff
changeset
|
178 |
45366
10c36ead86f8
rhg: extract function handle_stdout_error
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45362
diff
changeset
|
179 /// Sometimes writing to stdout is not possible, try writing to stderr to |
10c36ead86f8
rhg: extract function handle_stdout_error
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45362
diff
changeset
|
180 /// signal that failure, otherwise just bail. |
10c36ead86f8
rhg: extract function handle_stdout_error
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45362
diff
changeset
|
181 fn handle_stdout_error(error: io::Error) -> Result<(), UiError> { |
10c36ead86f8
rhg: extract function handle_stdout_error
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45362
diff
changeset
|
182 if let ErrorKind::BrokenPipe = error.kind() { |
10c36ead86f8
rhg: extract function handle_stdout_error
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45362
diff
changeset
|
183 // This makes `| head` work for example |
10c36ead86f8
rhg: extract function handle_stdout_error
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45362
diff
changeset
|
184 return Ok(()); |
10c36ead86f8
rhg: extract function handle_stdout_error
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45362
diff
changeset
|
185 } |
10c36ead86f8
rhg: extract function handle_stdout_error
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45362
diff
changeset
|
186 let mut stderr = io::stderr(); |
10c36ead86f8
rhg: extract function handle_stdout_error
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45362
diff
changeset
|
187 |
10c36ead86f8
rhg: extract function handle_stdout_error
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45362
diff
changeset
|
188 stderr |
45984
fada33872b5b
rhg: use `format_bytes!` for error messages
Rapha?l Gom?s <rgomes@octobus.net>
parents:
45528
diff
changeset
|
189 .write_all(&format_bytes!( |
fada33872b5b
rhg: use `format_bytes!` for error messages
Rapha?l Gom?s <rgomes@octobus.net>
parents:
45528
diff
changeset
|
190 b"abort: {}\n", |
fada33872b5b
rhg: use `format_bytes!` for error messages
Rapha?l Gom?s <rgomes@octobus.net>
parents:
45528
diff
changeset
|
191 error.to_string().as_bytes() |
fada33872b5b
rhg: use `format_bytes!` for error messages
Rapha?l Gom?s <rgomes@octobus.net>
parents:
45528
diff
changeset
|
192 )) |
45439
fbc373b7cbc3
rhg: fix `clippy` warnings
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45367
diff
changeset
|
193 .map_err(UiError::StderrError)?; |
45366
10c36ead86f8
rhg: extract function handle_stdout_error
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45362
diff
changeset
|
194 |
45439
fbc373b7cbc3
rhg: fix `clippy` warnings
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45367
diff
changeset
|
195 stderr.flush().map_err(UiError::StderrError)?; |
45366
10c36ead86f8
rhg: extract function handle_stdout_error
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45362
diff
changeset
|
196 |
10c36ead86f8
rhg: extract function handle_stdout_error
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45362
diff
changeset
|
197 Err(UiError::StdoutError(error)) |
10c36ead86f8
rhg: extract function handle_stdout_error
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45362
diff
changeset
|
198 } |
45367
53af26aa5951
rhg: handle broken pipe error for stderr
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45366
diff
changeset
|
199 |
53af26aa5951
rhg: handle broken pipe error for stderr
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45366
diff
changeset
|
200 /// Sometimes writing to stderr is not possible. |
53af26aa5951
rhg: handle broken pipe error for stderr
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45366
diff
changeset
|
201 fn handle_stderr_error(error: io::Error) -> Result<(), UiError> { |
53af26aa5951
rhg: handle broken pipe error for stderr
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45366
diff
changeset
|
202 // A broken pipe should not result in a error |
53af26aa5951
rhg: handle broken pipe error for stderr
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45366
diff
changeset
|
203 // like with `| head` for example |
53af26aa5951
rhg: handle broken pipe error for stderr
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45366
diff
changeset
|
204 if let ErrorKind::BrokenPipe = error.kind() { |
53af26aa5951
rhg: handle broken pipe error for stderr
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45366
diff
changeset
|
205 return Ok(()); |
53af26aa5951
rhg: handle broken pipe error for stderr
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45366
diff
changeset
|
206 } |
53af26aa5951
rhg: handle broken pipe error for stderr
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45366
diff
changeset
|
207 Err(UiError::StdoutError(error)) |
53af26aa5951
rhg: handle broken pipe error for stderr
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45366
diff
changeset
|
208 } |
45528
66756b34c06e
rhg: add a `DebugData` `Command` to prepare the `rhg debugdata` subcommand
Antoine Cezar <antoine.cezar@octobus.net>
parents:
45440
diff
changeset
|
209 |
48733
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
210 /// Should formatted output be used? |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
211 /// |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
212 /// Note: rhg does not have the formatter mechanism yet, |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
213 /// but this is also used when deciding whether to use color. |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
214 pub fn formatted(config: &Config) -> Result<bool, HgError> { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
215 if let Some(formatted) = config.get_option(b"ui", b"formatted")? { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
216 Ok(formatted) |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
217 } else { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
218 isatty(config) |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
219 } |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
220 } |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
221 |
50536
74e4dbb0fcd5
rhg: make `rhg files` work if `ui.relative-files=true` is specified
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49981
diff
changeset
|
222 pub enum RelativePaths { |
74e4dbb0fcd5
rhg: make `rhg files` work if `ui.relative-files=true` is specified
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49981
diff
changeset
|
223 Legacy, |
74e4dbb0fcd5
rhg: make `rhg files` work if `ui.relative-files=true` is specified
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49981
diff
changeset
|
224 Bool(bool), |
74e4dbb0fcd5
rhg: make `rhg files` work if `ui.relative-files=true` is specified
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49981
diff
changeset
|
225 } |
74e4dbb0fcd5
rhg: make `rhg files` work if `ui.relative-files=true` is specified
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49981
diff
changeset
|
226 |
74e4dbb0fcd5
rhg: make `rhg files` work if `ui.relative-files=true` is specified
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49981
diff
changeset
|
227 pub fn relative_paths(config: &Config) -> Result<RelativePaths, HgError> { |
74e4dbb0fcd5
rhg: make `rhg files` work if `ui.relative-files=true` is specified
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49981
diff
changeset
|
228 Ok(match config.get(b"ui", b"relative-paths") { |
74e4dbb0fcd5
rhg: make `rhg files` work if `ui.relative-files=true` is specified
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49981
diff
changeset
|
229 None | Some(b"legacy") => RelativePaths::Legacy, |
74e4dbb0fcd5
rhg: make `rhg files` work if `ui.relative-files=true` is specified
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49981
diff
changeset
|
230 _ => RelativePaths::Bool(config.get_bool(b"ui", b"relative-paths")?), |
74e4dbb0fcd5
rhg: make `rhg files` work if `ui.relative-files=true` is specified
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49981
diff
changeset
|
231 }) |
74e4dbb0fcd5
rhg: make `rhg files` work if `ui.relative-files=true` is specified
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49981
diff
changeset
|
232 } |
74e4dbb0fcd5
rhg: make `rhg files` work if `ui.relative-files=true` is specified
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49981
diff
changeset
|
233 |
48733
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
234 fn isatty(config: &Config) -> Result<bool, HgError> { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
235 Ok(if config.get_bool(b"ui", b"nontty")? { |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
236 false |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
237 } else { |
52309
56e8841a454c
rust: remove `atty` dependency
Rapha?l Gom?s <rgomes@octobus.net>
parents:
52303
diff
changeset
|
238 std::io::stdout().is_terminal() |
48733
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
239 }) |
39c447e03dbc
rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net>
parents:
48731
diff
changeset
|
240 } |
49981
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
241 |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
242 /// Return the formatted bytestring corresponding to a pattern file warning, |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
243 /// as expected by the CLI. |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
244 pub(crate) fn format_pattern_file_warning( |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
245 warning: &PatternFileWarning, |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
246 repo: &Repo, |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
247 ) -> Vec<u8> { |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
248 match warning { |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
249 PatternFileWarning::InvalidSyntax(path, syntax) => format_bytes!( |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
250 b"{}: ignoring invalid syntax '{}'\n", |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
251 get_bytes_from_path(path), |
51117
532e74ad3ff6
rust: run a clippy pass with the latest stable version
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50536
diff
changeset
|
252 syntax |
49981
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
253 ), |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
254 PatternFileWarning::NoSuchFile(path) => { |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
255 let path = if let Ok(relative) = |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
256 path.strip_prefix(repo.working_directory_path()) |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
257 { |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
258 relative |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
259 } else { |
51117
532e74ad3ff6
rust: run a clippy pass with the latest stable version
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50536
diff
changeset
|
260 path |
49981
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
261 }; |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
262 format_bytes!( |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
263 b"skipping unreadable pattern file '{}': \ |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
264 No such file or directory\n", |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
265 get_bytes_from_path(path), |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
266 ) |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
267 } |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
268 } |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
269 } |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
270 |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
271 /// Print with `Ui` the formatted bytestring corresponding to a |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
272 /// sparse/narrow warning, as expected by the CLI. |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
273 pub(crate) fn print_narrow_sparse_warnings( |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
274 narrow_warnings: &[sparse::SparseWarning], |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
275 sparse_warnings: &[sparse::SparseWarning], |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
276 ui: &Ui, |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
277 repo: &Repo, |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
278 ) -> Result<(), CommandError> { |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
279 for warning in narrow_warnings.iter().chain(sparse_warnings) { |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
280 match &warning { |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
281 sparse::SparseWarning::RootWarning { context, line } => { |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
282 let msg = format_bytes!( |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
283 b"warning: {} profile cannot use paths \" |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
284 starting with /, ignoring {}\n", |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
285 context, |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
286 line |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
287 ); |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
288 ui.write_stderr(&msg)?; |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
289 } |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
290 sparse::SparseWarning::ProfileNotFound { profile, rev } => { |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
291 let msg = format_bytes!( |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
292 b"warning: sparse profile '{}' not found \" |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
293 in rev {} - ignoring it\n", |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
294 profile, |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
295 rev |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
296 ); |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
297 ui.write_stderr(&msg)?; |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
298 } |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
299 sparse::SparseWarning::Pattern(e) => { |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
300 ui.write_stderr(&format_pattern_file_warning(e, repo))?; |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
301 } |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
302 } |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
303 } |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
304 Ok(()) |
364e78389653
rust-ui: refactor ui code for printing narrow/sparse warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents:
49513
diff
changeset
|
305 } |