Show More
@@ -6,9 +6,10 | |||
|
6 | 6 | // GNU General Public License version 2 or any later version. |
|
7 | 7 | |
|
8 | 8 | use crate::error::CommandError; |
|
9 |
use crate::ui:: |
|
|
9 | use crate::ui::Ui; | |
|
10 | 10 | use crate::utils::path_utils::relativize_paths; |
|
11 | 11 | use clap::{Arg, SubCommand}; |
|
12 | use format_bytes::format_bytes; | |
|
12 | 13 | use hg; |
|
13 | 14 | use hg::config::Config; |
|
14 | 15 | use hg::dirstate::{has_exec_bit, TruncatedTimestamp}; |
@@ -20,7 +21,6 use hg::utils::files::get_bytes_from_os_ | |||
|
20 | 21 | use hg::utils::hg_path::{hg_path_to_os_string, HgPath}; |
|
21 | 22 | use hg::{HgPathCow, StatusOptions}; |
|
22 | 23 | use log::{info, warn}; |
|
23 | use std::borrow::Cow; | |
|
24 | 24 | |
|
25 | 25 | pub const HELP_TEXT: &str = " |
|
26 | 26 | Show changed files in the working directory |
@@ -82,6 +82,12 pub fn args() -> clap::App<'static, 'sta | |||
|
82 | 82 | .short("-i") |
|
83 | 83 | .long("--ignored"), |
|
84 | 84 | ) |
|
85 | .arg( | |
|
86 | Arg::with_name("no-status") | |
|
87 | .help("hide status prefix") | |
|
88 | .short("-n") | |
|
89 | .long("--no-status"), | |
|
90 | ) | |
|
85 | 91 | } |
|
86 | 92 | |
|
87 | 93 | /// Pure data type allowing the caller to specify file states to display |
@@ -182,6 +188,7 pub fn run(invocation: &crate::CliInvoca | |||
|
182 | 188 | requested |
|
183 | 189 | } |
|
184 | 190 | }; |
|
191 | let no_status = args.is_present("no-status"); | |
|
185 | 192 | |
|
186 | 193 | let repo = invocation.repo?; |
|
187 | 194 | let mut dmap = repo.dirstate_map_mut()?; |
@@ -240,25 +247,74 pub fn run(invocation: &crate::CliInvoca | |||
|
240 | 247 | } |
|
241 | 248 | } |
|
242 | 249 | if display_states.modified { |
|
243 | display_status_paths(ui, repo, config, &mut ds_status.modified, b"M")?; | |
|
250 | display_status_paths( | |
|
251 | ui, | |
|
252 | repo, | |
|
253 | config, | |
|
254 | no_status, | |
|
255 | &mut ds_status.modified, | |
|
256 | b"M", | |
|
257 | )?; | |
|
244 | 258 | } |
|
245 | 259 | if display_states.added { |
|
246 | display_status_paths(ui, repo, config, &mut ds_status.added, b"A")?; | |
|
260 | display_status_paths( | |
|
261 | ui, | |
|
262 | repo, | |
|
263 | config, | |
|
264 | no_status, | |
|
265 | &mut ds_status.added, | |
|
266 | b"A", | |
|
267 | )?; | |
|
247 | 268 | } |
|
248 | 269 | if display_states.removed { |
|
249 | display_status_paths(ui, repo, config, &mut ds_status.removed, b"R")?; | |
|
270 | display_status_paths( | |
|
271 | ui, | |
|
272 | repo, | |
|
273 | config, | |
|
274 | no_status, | |
|
275 | &mut ds_status.removed, | |
|
276 | b"R", | |
|
277 | )?; | |
|
250 | 278 | } |
|
251 | 279 | if display_states.deleted { |
|
252 | display_status_paths(ui, repo, config, &mut ds_status.deleted, b"!")?; | |
|
280 | display_status_paths( | |
|
281 | ui, | |
|
282 | repo, | |
|
283 | config, | |
|
284 | no_status, | |
|
285 | &mut ds_status.deleted, | |
|
286 | b"!", | |
|
287 | )?; | |
|
253 | 288 | } |
|
254 | 289 | if display_states.unknown { |
|
255 | display_status_paths(ui, repo, config, &mut ds_status.unknown, b"?")?; | |
|
290 | display_status_paths( | |
|
291 | ui, | |
|
292 | repo, | |
|
293 | config, | |
|
294 | no_status, | |
|
295 | &mut ds_status.unknown, | |
|
296 | b"?", | |
|
297 | )?; | |
|
256 | 298 | } |
|
257 | 299 | if display_states.ignored { |
|
258 | display_status_paths(ui, repo, config, &mut ds_status.ignored, b"I")?; | |
|
300 | display_status_paths( | |
|
301 | ui, | |
|
302 | repo, | |
|
303 | config, | |
|
304 | no_status, | |
|
305 | &mut ds_status.ignored, | |
|
306 | b"I", | |
|
307 | )?; | |
|
259 | 308 | } |
|
260 | 309 | if display_states.clean { |
|
261 | display_status_paths(ui, repo, config, &mut ds_status.clean, b"C")?; | |
|
310 | display_status_paths( | |
|
311 | ui, | |
|
312 | repo, | |
|
313 | config, | |
|
314 | no_status, | |
|
315 | &mut ds_status.clean, | |
|
316 | b"C", | |
|
317 | )?; | |
|
262 | 318 | } |
|
263 | 319 | Ok(()) |
|
264 | 320 | } |
@@ -269,6 +325,7 fn display_status_paths( | |||
|
269 | 325 | ui: &Ui, |
|
270 | 326 | repo: &Repo, |
|
271 | 327 | config: &Config, |
|
328 | no_status: bool, | |
|
272 | 329 | paths: &mut [HgPathCow], |
|
273 | 330 | status_prefix: &[u8], |
|
274 | 331 | ) -> Result<(), CommandError> { |
@@ -277,23 +334,23 fn display_status_paths( | |||
|
277 | 334 | relative = config |
|
278 | 335 | .get_option(b"commands", b"status.relative")? |
|
279 | 336 | .unwrap_or(relative); |
|
337 | let print_path = |path: &[u8]| { | |
|
338 | // TODO optim, probably lots of unneeded copies here, especially | |
|
339 | // if out stream is buffered | |
|
340 | if no_status { | |
|
341 | ui.write_stdout(&format_bytes!(b"{}\n", path)) | |
|
342 | } else { | |
|
343 | ui.write_stdout(&format_bytes!(b"{} {}\n", status_prefix, path)) | |
|
344 | } | |
|
345 | }; | |
|
346 | ||
|
280 | 347 | if relative && !ui.plain() { |
|
281 | relativize_paths( | |
|
282 |
|
|
|
283 | paths.iter().map(Ok), | |
|
284 | |path: Cow<[u8]>| -> Result<(), UiError> { | |
|
285 | ui.write_stdout( | |
|
286 | &[status_prefix, b" ", path.as_ref(), b"\n"].concat(), | |
|
287 | ) | |
|
288 | }, | |
|
289 | )?; | |
|
348 | relativize_paths(repo, paths.iter().map(Ok), |path| { | |
|
349 | print_path(&path) | |
|
350 | })?; | |
|
290 | 351 | } else { |
|
291 | 352 | for path in paths { |
|
292 | // Same TODO as in commands::root | |
|
293 | let bytes: &[u8] = path.as_bytes(); | |
|
294 | // TODO optim, probably lots of unneeded copies here, especially | |
|
295 | // if out stream is buffered | |
|
296 | ui.write_stdout(&[status_prefix, b" ", bytes, b"\n"].concat())?; | |
|
353 | print_path(path.as_bytes())? | |
|
297 | 354 | } |
|
298 | 355 | } |
|
299 | 356 | Ok(()) |
@@ -222,6 +222,13 hg status: | |||
|
222 | 222 | ! deleted |
|
223 | 223 | ? unknown |
|
224 | 224 | |
|
225 | hg status -n: | |
|
226 | $ env RHG_STATUS=1 RHG_ON_UNSUPPORTED=abort hg status -n | |
|
227 | added | |
|
228 | removed | |
|
229 | deleted | |
|
230 | unknown | |
|
231 | ||
|
225 | 232 | hg status modified added removed deleted unknown never-existed ignored: |
|
226 | 233 | |
|
227 | 234 | $ hg status modified added removed deleted unknown never-existed ignored |
General Comments 0
You need to be logged in to leave comments.
Login now