@@ -28,6 +28,7 @@ extern crate serde_derive;
28
28
extern crate serde_json;
29
29
extern crate test;
30
30
extern crate rustfix;
31
+ extern crate walkdir;
31
32
32
33
use common:: CompareMode ;
33
34
use common:: { expected_output_path, output_base_dir, output_relative_path, UI_EXTENSIONS } ;
@@ -43,6 +44,7 @@ use std::path::{Path, PathBuf};
43
44
use std:: process:: Command ;
44
45
use test:: ColorConfig ;
45
46
use util:: logv;
47
+ use walkdir:: WalkDir ;
46
48
47
49
use self :: header:: { EarlyProps , Ignore } ;
48
50
@@ -682,18 +684,13 @@ fn stamp(config: &Config, testpaths: &TestPaths, revision: Option<&str>) -> Path
682
684
output_base_dir ( config, testpaths, revision) . join ( "stamp" )
683
685
}
684
686
685
- /// Walk the directory at `path` and collect timestamps of all files into `inputs`.
686
- fn collect_timestamps ( path : & PathBuf , inputs : & mut Vec < FileTime > ) {
687
- let mut entries = path. read_dir ( ) . unwrap ( ) . collect :: < Vec < _ > > ( ) ;
688
- while let Some ( entry) = entries. pop ( ) {
689
- let entry = entry. unwrap ( ) ;
690
- let path = entry. path ( ) ;
691
- if entry. metadata ( ) . unwrap ( ) . is_file ( ) {
692
- inputs. push ( mtime ( & path) ) ;
693
- } else {
694
- entries. extend ( path. read_dir ( ) . unwrap ( ) ) ;
695
- }
696
- }
687
+ /// Return an iterator over timestamps of files in the directory at `path`.
688
+ fn collect_timestamps ( path : & PathBuf ) -> impl Iterator < Item =FileTime > {
689
+ WalkDir :: new ( path)
690
+ . into_iter ( )
691
+ . map ( |entry| entry. unwrap ( ) )
692
+ . filter ( |entry| entry. metadata ( ) . unwrap ( ) . is_file ( ) )
693
+ . map ( |entry| mtime ( entry. path ( ) ) )
697
694
}
698
695
699
696
fn up_to_date (
@@ -739,7 +736,7 @@ fn up_to_date(
739
736
for pretty_printer_file in & pretty_printer_files {
740
737
inputs. push ( mtime ( & rust_src_dir. join ( pretty_printer_file) ) ) ;
741
738
}
742
- collect_timestamps ( & config. run_lib_path , & mut inputs ) ;
739
+ inputs . extend ( collect_timestamps ( & config. run_lib_path ) ) ;
743
740
if let Some ( ref rustdoc_path) = config. rustdoc_path {
744
741
inputs. push ( mtime ( & rustdoc_path) ) ;
745
742
inputs. push ( mtime ( & rust_src_dir. join ( "src/etc/htmldocck.py" ) ) ) ;
@@ -752,7 +749,7 @@ fn up_to_date(
752
749
}
753
750
754
751
// Compiletest itself.
755
- collect_timestamps ( & rust_src_dir. join ( "src/tools/compiletest/" ) , & mut inputs ) ;
752
+ inputs . extend ( collect_timestamps ( & rust_src_dir. join ( "src/tools/compiletest/" ) ) ) ;
756
753
757
754
inputs. iter ( ) . any ( |input| * input > stamp)
758
755
}
0 commit comments