Show More
@@ -6,6 +6,7 b' use crate::matchers::get_ignore_function' | |||||
6 | use crate::matchers::Matcher; |
|
6 | use crate::matchers::Matcher; | |
7 | use crate::utils::files::get_bytes_from_os_string; |
|
7 | use crate::utils::files::get_bytes_from_os_string; | |
8 | use crate::utils::hg_path::HgPath; |
|
8 | use crate::utils::hg_path::HgPath; | |
|
9 | use crate::BadMatch; | |||
9 | use crate::DirstateStatus; |
|
10 | use crate::DirstateStatus; | |
10 | use crate::EntryState; |
|
11 | use crate::EntryState; | |
11 | use crate::HgPathBuf; |
|
12 | use crate::HgPathBuf; | |
@@ -69,17 +70,37 b" struct StatusCommon<'tree, 'a> {" | |||||
69 | } |
|
70 | } | |
70 |
|
71 | |||
71 | impl<'tree, 'a> StatusCommon<'tree, 'a> { |
|
72 | impl<'tree, 'a> StatusCommon<'tree, 'a> { | |
|
73 | fn read_dir( | |||
|
74 | &mut self, | |||
|
75 | hg_path: &HgPath, | |||
|
76 | fs_path: &Path, | |||
|
77 | is_at_repo_root: bool, | |||
|
78 | ) -> Result<Vec<DirEntry>, ()> { | |||
|
79 | DirEntry::read_dir(fs_path, is_at_repo_root).map_err(|error| { | |||
|
80 | let errno = error.raw_os_error().expect("expected real OS error"); | |||
|
81 | self.outcome | |||
|
82 | .bad | |||
|
83 | .push((hg_path.to_owned().into(), BadMatch::OsError(errno))) | |||
|
84 | }) | |||
|
85 | } | |||
|
86 | ||||
72 | fn traverse_fs_directory_and_dirstate( |
|
87 | fn traverse_fs_directory_and_dirstate( | |
73 | &mut self, |
|
88 | &mut self, | |
74 | has_ignored_ancestor: bool, |
|
89 | has_ignored_ancestor: bool, | |
75 | dirstate_nodes: &'tree mut ChildNodes, |
|
90 | dirstate_nodes: &'tree mut ChildNodes, | |
76 | directory_hg_path: &HgPath, |
|
91 | directory_hg_path: &'tree HgPath, | |
77 | fs_path: &Path, |
|
92 | directory_fs_path: &Path, | |
78 | is_at_repo_root: bool, |
|
93 | is_at_repo_root: bool, | |
79 | ) { |
|
94 | ) { | |
80 | // TODO: handle I/O errors |
|
95 | let mut fs_entries = if let Ok(entries) = self.read_dir( | |
81 | let mut fs_entries = |
|
96 | directory_hg_path, | |
82 | DirEntry::read_dir(fs_path, is_at_repo_root).unwrap(); |
|
97 | directory_fs_path, | |
|
98 | is_at_repo_root, | |||
|
99 | ) { | |||
|
100 | entries | |||
|
101 | } else { | |||
|
102 | return; | |||
|
103 | }; | |||
83 |
|
104 | |||
84 | // `merge_join_by` requires both its input iterators to be sorted: |
|
105 | // `merge_join_by` requires both its input iterators to be sorted: | |
85 |
|
106 | |||
@@ -295,16 +316,18 b" impl<'tree, 'a> StatusCommon<'tree, 'a> " | |||||
295 | }; |
|
316 | }; | |
296 | if traverse_children { |
|
317 | if traverse_children { | |
297 | let is_at_repo_root = false; |
|
318 | let is_at_repo_root = false; | |
298 | // TODO: handle I/O errors |
|
319 | if let Ok(children_fs_entries) = self.read_dir( | |
299 | let children_fs_entries = |
|
320 | &hg_path, | |
300 |
|
|
321 | &fs_entry.full_path, | |
301 |
|
|
322 | is_at_repo_root, | |
302 | for child_fs_entry in children_fs_entries { |
|
323 | ) { | |
303 | self.traverse_fs_only( |
|
324 | for child_fs_entry in children_fs_entries { | |
304 |
|
|
325 | self.traverse_fs_only( | |
305 |
|
|
326 | is_ignored, | |
306 |
& |
|
327 | &hg_path, | |
307 |
|
|
328 | &child_fs_entry, | |
|
329 | ) | |||
|
330 | } | |||
308 | } |
|
331 | } | |
309 | } |
|
332 | } | |
310 | if self.options.collect_traversed_dirs { |
|
333 | if self.options.collect_traversed_dirs { |
General Comments 0
You need to be logged in to leave comments.
Login now