mirror of
https://github.com/BurntSushi/walkdir.git
synced 2025-09-27 21:50:35 +00:00
bug: fix use of skip_current_dir
The method sometimes destroyed an internal invariant by not decreasing `oldest_opened`. That then leads to panics in `push`. We fix this by calling the canonical `pop` function, which is what should have happened from the beginning. This includes a regression test that fails without this fix. Fixes #118, Closes #124
This commit is contained in:
parent
e09ce1cc51
commit
7e0754a898
@ -724,10 +724,7 @@ impl IntoIter {
|
||||
/// [`filter_entry`]: #method.filter_entry
|
||||
pub fn skip_current_dir(&mut self) {
|
||||
if !self.stack_list.is_empty() {
|
||||
self.stack_list.pop();
|
||||
}
|
||||
if !self.stack_path.is_empty() {
|
||||
self.stack_path.pop();
|
||||
self.pop();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -990,3 +990,23 @@ fn same_file_system() {
|
||||
];
|
||||
assert_eq!(expected, r.sorted_paths());
|
||||
}
|
||||
|
||||
// Tests that skip_current_dir doesn't destroy internal invariants.
|
||||
//
|
||||
// See: https://github.com/BurntSushi/walkdir/issues/118
|
||||
#[test]
|
||||
fn regression_skip_current_dir() {
|
||||
let dir = Dir::tmp();
|
||||
dir.mkdirp("foo/a/b");
|
||||
dir.mkdirp("foo/1/2");
|
||||
|
||||
let mut wd = WalkDir::new(dir.path()).max_open(1).into_iter();
|
||||
wd.next();
|
||||
wd.next();
|
||||
wd.next();
|
||||
wd.next();
|
||||
|
||||
wd.skip_current_dir();
|
||||
wd.skip_current_dir();
|
||||
wd.next();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user