mirror of
https://github.com/Llewellynvdm/exa.git
synced 2024-09-28 05:09:01 +00:00
Make transform_files stateful
Using `retain` instead of `filter` means we can just re-use the same Vec.
This commit is contained in:
parent
8f36dbbc6f
commit
2be30f36f2
@ -80,7 +80,8 @@ fn exa(options: &Options) {
|
||||
|
||||
match Dir::readdir(&dir_path) {
|
||||
Ok(ref dir) => {
|
||||
let files = options.transform_files(dir.files(false));
|
||||
let mut files = dir.files(false);
|
||||
options.transform_files(&mut files);
|
||||
|
||||
// When recursing, add any directories to the dirs stack
|
||||
// backwards: the *last* element of the stack is used each
|
||||
|
@ -80,7 +80,7 @@ impl Options {
|
||||
})
|
||||
}
|
||||
|
||||
pub fn transform_files<'a>(&self, files: Vec<File<'a>>) -> Vec<File<'a>> {
|
||||
pub fn transform_files<'a>(&self, files: &mut Vec<File<'a>>) {
|
||||
self.filter.transform_files(files)
|
||||
}
|
||||
|
||||
@ -92,10 +92,10 @@ impl Options {
|
||||
|
||||
impl FileFilter {
|
||||
/// Transform the files (sorting, reversing, filtering) before listing them.
|
||||
pub fn transform_files<'a>(&self, mut files: Vec<File<'a>>) -> Vec<File<'a>> {
|
||||
pub fn transform_files<'a>(&self, files: &mut Vec<File<'a>>) {
|
||||
|
||||
if !self.show_invisibles {
|
||||
files = files.into_iter().filter(|f| !f.is_dotfile()).collect();
|
||||
files.retain(|f| !f.is_dotfile());
|
||||
}
|
||||
|
||||
match self.sort_field {
|
||||
@ -116,8 +116,6 @@ impl FileFilter {
|
||||
if self.reverse {
|
||||
files.reverse();
|
||||
}
|
||||
|
||||
files
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -194,7 +194,8 @@ fn get_files(columns: &[Column], cache: &mut OSUsers, recurse: bool, dest: &mut
|
||||
|
||||
if recurse {
|
||||
if let Some(ref dir) = file.this {
|
||||
let files = filter.transform_files(dir.files(true));
|
||||
let mut files = dir.files(true);
|
||||
filter.transform_files(&mut files);
|
||||
get_files(columns, cache, recurse, dest, files.as_slice(), depth + 1, filter);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user