1313
1414extern crate walkdir;
1515
16+ use std:: cmp:: Ordering ;
1617use std:: fs:: File ;
1718use std:: io:: prelude:: * ;
1819use std:: path:: Path ;
19- use std:: cmp:: Ordering ;
2020
2121use walkdir:: { DirEntry , WalkDir } ;
2222
@@ -38,29 +38,32 @@ pub enum Error {
3838/// assert!(dir_diff::is_different("dir/a", "dir/b").unwrap());
3939/// ```
4040pub fn is_different < A : AsRef < Path > , B : AsRef < Path > > ( a_base : A , b_base : B ) -> Result < bool , Error > {
41- let mut a_walker = walk_dir ( a_base) ;
42- let mut b_walker = walk_dir ( b_base) ;
41+ let mut a_walker = walk_dir ( a_base) ? ;
42+ let mut b_walker = walk_dir ( b_base) ? ;
4343
4444 for ( a, b) in ( & mut a_walker) . zip ( & mut b_walker) {
4545 let a = a?;
4646 let b = b?;
4747
48- if a. depth ( ) != b. depth ( ) || a. file_type ( ) != b. file_type ( )
48+ if a. depth ( ) != b. depth ( )
49+ || a. file_type ( ) != b. file_type ( )
4950 || a. file_name ( ) != b. file_name ( )
5051 || ( a. file_type ( ) . is_file ( ) && read_to_vec ( a. path ( ) ) ? != read_to_vec ( b. path ( ) ) ?)
5152 {
5253 return Ok ( true ) ;
5354 }
5455 }
5556
56- Ok ( ! a_walker. next ( ) . is_none ( ) || ! b_walker. next ( ) . is_none ( ) )
57+ Ok ( a_walker. next ( ) . is_some ( ) || b_walker. next ( ) . is_some ( ) )
5758}
5859
59- fn walk_dir < P : AsRef < Path > > ( path : P ) -> std:: iter:: Skip < walkdir:: IntoIter > {
60- WalkDir :: new ( path)
61- . sort_by ( compare_by_file_name)
62- . into_iter ( )
63- . skip ( 1 )
60+ fn walk_dir < P : AsRef < Path > > ( path : P ) -> Result < walkdir:: IntoIter , std:: io:: Error > {
61+ let mut walkdir = WalkDir :: new ( path) . sort_by ( compare_by_file_name) . into_iter ( ) ;
62+ if let Some ( Err ( e) ) = walkdir. next ( ) {
63+ Err ( e. into ( ) )
64+ } else {
65+ Ok ( walkdir)
66+ }
6467}
6568
6669fn compare_by_file_name ( a : & DirEntry , b : & DirEntry ) -> Ordering {
0 commit comments