comparison rust/rhg/src/commands/files.rs @ 49980:95ffa065204e

rhg-files: reuse centralized dirstate logic The `files` logic predates the centralized dirstate logic. It was duplicated, an didn't receive bugfixes along the way.
author Raphaël Gomès <rgomes@octobus.net>
date Wed, 11 Jan 2023 16:29:29 +0100
parents e43f91244de2
children 795b5b01cbd2
comparison
equal deleted inserted replaced
49979:f5b168979626 49980:95ffa065204e
2 use crate::ui::Ui; 2 use crate::ui::Ui;
3 use crate::utils::path_utils::RelativizePaths; 3 use crate::utils::path_utils::RelativizePaths;
4 use clap::Arg; 4 use clap::Arg;
5 use hg::errors::HgError; 5 use hg::errors::HgError;
6 use hg::operations::list_rev_tracked_files; 6 use hg::operations::list_rev_tracked_files;
7 use hg::operations::Dirstate;
8 use hg::repo::Repo; 7 use hg::repo::Repo;
8 use hg::utils::filter_map_results;
9 use hg::utils::hg_path::HgPath; 9 use hg::utils::hg_path::HgPath;
10 use rayon::prelude::*;
10 11
11 pub const HELP_TEXT: &str = " 12 pub const HELP_TEXT: &str = "
12 List tracked files. 13 List tracked files.
13 14
14 Returns 0 on success. 15 Returns 0 on success.
68 if repo.has_narrow() { 69 if repo.has_narrow() {
69 return Err(CommandError::unsupported( 70 return Err(CommandError::unsupported(
70 "rhg files is not supported in narrow clones", 71 "rhg files is not supported in narrow clones",
71 )); 72 ));
72 } 73 }
73 let dirstate = Dirstate::new(repo)?; 74 let dirstate = repo.dirstate_map()?;
74 let files = dirstate.tracked_files()?; 75 let files_res: Result<Vec<_>, _> =
76 filter_map_results(dirstate.iter(), |(path, entry)| {
77 Ok(if entry.tracked() { Some(path) } else { None })
78 })
79 .collect();
80
81 let mut files = files_res?;
82 files.par_sort_unstable();
83
75 display_files(invocation.ui, repo, files.into_iter().map(Ok)) 84 display_files(invocation.ui, repo, files.into_iter().map(Ok))
76 } 85 }
77 } 86 }
78 87
79 fn display_files<'a>( 88 fn display_files<'a>(