rust/rhg/src/commands/files.rs
changeset 49984 df9eabc9837b
parent 49983 795b5b01cbd2
child 49985 e57f76c28f7b
equal deleted inserted replaced
49983:795b5b01cbd2 49984:df9eabc9837b
     1 use crate::error::CommandError;
     1 use crate::error::CommandError;
     2 use crate::ui::Ui;
     2 use crate::ui::{print_narrow_sparse_warnings, 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::narrow;
     5 use hg::operations::list_rev_tracked_files;
     6 use hg::operations::list_rev_tracked_files;
     6 use hg::repo::Repo;
     7 use hg::repo::Repo;
     7 use hg::utils::filter_map_results;
     8 use hg::utils::filter_map_results;
     8 use hg::utils::hg_path::HgPath;
     9 use hg::utils::hg_path::HgPath;
     9 use rayon::prelude::*;
    10 use rayon::prelude::*;
    58         }
    59         }
    59         let files = list_rev_tracked_files(repo, rev)
    60         let files = list_rev_tracked_files(repo, rev)
    60             .map_err(|e| (e, rev.as_ref()))?;
    61             .map_err(|e| (e, rev.as_ref()))?;
    61         display_files(invocation.ui, repo, files.iter())
    62         display_files(invocation.ui, repo, files.iter())
    62     } else {
    63     } else {
    63         // The dirstate always reflects the sparse narrowspec, so if
    64         // The dirstate always reflects the sparse narrowspec.
    64         // we only have sparse without narrow all is fine.
    65         let (narrow_matcher, narrow_warnings) = narrow::matcher(repo)?;
    65         // If we have narrow, then [hg files] needs to check if
    66         print_narrow_sparse_warnings(
    66         // the store narrowspec is in sync with the one of the dirstate,
    67             &narrow_warnings,
    67         // so we can't support that without explicit code.
    68             &[],
    68         if repo.has_narrow() {
    69             invocation.ui,
    69             return Err(CommandError::unsupported(
    70             repo,
    70                 "rhg files is not supported in narrow clones",
    71         )?;
    71             ));
       
    72         }
       
    73         let dirstate = repo.dirstate_map()?;
    72         let dirstate = repo.dirstate_map()?;
    74         let files_res: Result<Vec<_>, _> =
    73         let files_res: Result<Vec<_>, _> =
    75             filter_map_results(dirstate.iter(), |(path, entry)| {
    74             filter_map_results(dirstate.iter(), |(path, entry)| {
    76                 Ok(if entry.tracked() { Some(path) } else { None })
    75                 Ok(if entry.tracked() && narrow_matcher.matches(path) {
       
    76                     Some(path)
       
    77                 } else {
       
    78                     None
       
    79                 })
    77             })
    80             })
    78             .collect();
    81             .collect();
    79 
    82 
    80         let mut files = files_res?;
    83         let mut files = files_res?;
    81         files.par_sort_unstable();
    84         files.par_sort_unstable();
    82 
    85 
    83         display_files(invocation.ui, repo, files.into_iter().map(Ok))
    86         display_files(
       
    87             invocation.ui,
       
    88             repo,
       
    89             files.into_iter().map::<Result<_, CommandError>, _>(Ok),
       
    90         )
    84     }
    91     }
    85 }
    92 }
    86 
    93 
    87 fn display_files<'a, E>(
    94 fn display_files<'a, E>(
    88     ui: &Ui,
    95     ui: &Ui,