Mercurial > public > mercurial-scm > hg
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) |