comparison rust/rhg/src/commands/files.rs @ 49985:e57f76c28f7b

rhg-files: add support for narrow when specifying a revision This makes it so that `rhg files -r NODE` works properly when using narrow.
author Rapha?l Gom?s <rgomes@octobus.net>
date Wed, 11 Jan 2023 17:30:55 +0100
parents df9eabc9837b
children 74e4dbb0fcd5
comparison
equal deleted inserted replaced
49984:df9eabc9837b 49985:e57f76c28f7b
49 return Err(CommandError::unsupported( 49 return Err(CommandError::unsupported(
50 "repo is using sparse, but sparse extension is not enabled", 50 "repo is using sparse, but sparse extension is not enabled",
51 )); 51 ));
52 } 52 }
53 53
54 let (narrow_matcher, narrow_warnings) = narrow::matcher(repo)?;
55 print_narrow_sparse_warnings(&narrow_warnings, &[], invocation.ui, repo)?;
56
54 if let Some(rev) = rev { 57 if let Some(rev) = rev {
55 if repo.has_narrow() { 58 let files = list_rev_tracked_files(repo, rev, narrow_matcher)
56 return Err(CommandError::unsupported(
57 "rhg files -r <rev> is not supported in narrow clones",
58 ));
59 }
60 let files = list_rev_tracked_files(repo, rev)
61 .map_err(|e| (e, rev.as_ref()))?; 59 .map_err(|e| (e, rev.as_ref()))?;
62 display_files(invocation.ui, repo, files.iter()) 60 display_files(invocation.ui, repo, files.iter())
63 } else { 61 } else {
64 // The dirstate always reflects the sparse narrowspec. 62 // The dirstate always reflects the sparse narrowspec.
65 let (narrow_matcher, narrow_warnings) = narrow::matcher(repo)?;
66 print_narrow_sparse_warnings(
67 &narrow_warnings,
68 &[],
69 invocation.ui,
70 repo,
71 )?;
72 let dirstate = repo.dirstate_map()?; 63 let dirstate = repo.dirstate_map()?;
73 let files_res: Result<Vec<_>, _> = 64 let files_res: Result<Vec<_>, _> =
74 filter_map_results(dirstate.iter(), |(path, entry)| { 65 filter_map_results(dirstate.iter(), |(path, entry)| {
75 Ok(if entry.tracked() && narrow_matcher.matches(path) { 66 Ok(if entry.tracked() && narrow_matcher.matches(path) {
76 Some(path) 67 Some(path)