77//! * [`jwalk::WalkDir`](https://docs.rs/jwalk/0.5.1/jwalk/type.WalkDir.html) if `parallel` feature is enabled 
88//! * [walkdir::WalkDir](https://docs.rs/walkdir/2.3.1/walkdir/struct.WalkDir.html) otherwise 
99
10- #[ cfg( any ( feature = "walkdir" ,  feature =  "fs-walkdir-parallel" ) ) ]  
10+ #[ cfg( feature = "walkdir" ) ]  
1111mod  shared { 
1212    /// The desired level of parallelism. 
1313pub  enum  Parallelism  { 
@@ -21,7 +21,7 @@ mod shared {
2121    } 
2222} 
2323
24- #[ cfg( any( feature = "walkdir" ,  feature = "fs-walkdir-parallel"  ,  feature =  "fs- read-dir") ) ]  
24+ #[ cfg( any( feature = "walkdir" ,  feature = "fs-read-dir" ) ) ]  
2525mod  walkdir_precompose { 
2626    use  std:: borrow:: Cow ; 
2727    use  std:: ffi:: OsStr ; 
@@ -83,13 +83,13 @@ mod walkdir_precompose {
8383
8484    /// A platform over entries in a directory, which may or may not precompose unicode after retrieving 
8585/// paths from the file system. 
86- #[ cfg( any ( feature = "walkdir" ,  feature =  "fs-walkdir-parallel" ) ) ]  
86+ #[ cfg( feature = "walkdir" ) ]  
8787    pub  struct  WalkDir < T >  { 
8888        pub ( crate )  inner :  Option < T > , 
8989        pub ( crate )  precompose_unicode :  bool , 
9090    } 
9191
92-     #[ cfg( any ( feature = "walkdir" ,  feature =  "fs-walkdir-parallel" ) ) ]  
92+     #[ cfg( feature = "walkdir" ) ]  
9393    pub  struct  WalkDirIter < T ,  I ,  E > 
9494    where 
9595        T :  Iterator < Item  = Result < I ,  E > > , 
@@ -99,7 +99,7 @@ mod walkdir_precompose {
9999        pub ( crate )  precompose_unicode :  bool , 
100100    } 
101101
102-     #[ cfg( any ( feature = "walkdir" ,  feature =  "fs-walkdir-parallel" ) ) ]  
102+     #[ cfg( feature = "walkdir" ) ]  
103103    impl < T ,  I ,  E >  Iterator  for  WalkDirIter < T ,  I ,  E > 
104104    where 
105105        T :  Iterator < Item  = Result < I ,  E > > , 
@@ -142,128 +142,7 @@ pub mod read_dir {
142142} 
143143
144144/// 
145- #[ cfg( feature = "fs-walkdir-parallel" ) ]  
146- pub  mod  walkdir { 
147-     use  std:: borrow:: Cow ; 
148-     use  std:: ffi:: OsStr ; 
149-     use  std:: fs:: FileType ; 
150-     use  std:: path:: Path ; 
151- 
152-     use  jwalk:: WalkDir  as  WalkDirImpl ; 
153-     pub  use  jwalk:: { DirEntry  as  DirEntryGeneric ,  DirEntryIter  as  DirEntryIterGeneric ,  Error } ; 
154- 
155-     pub  use  super :: shared:: Parallelism ; 
156- 
157-     type  DirEntryImpl  = DirEntryGeneric < ( ( ) ,  ( ) ) > ; 
158- 
159-     /// A directory entry returned by [DirEntryIter]. 
160- pub  type  DirEntry  = super :: walkdir_precompose:: DirEntry < DirEntryImpl > ; 
161-     /// A platform to create a [DirEntryIter] from. 
162- pub  type  WalkDir  = super :: walkdir_precompose:: WalkDir < WalkDirImpl > ; 
163- 
164-     impl  super :: walkdir_precompose:: DirEntryApi  for  DirEntryImpl  { 
165-         fn  path ( & self )  -> Cow < ' _ ,  Path >  { 
166-             self . path ( ) . into ( ) 
167-         } 
168- 
169-         fn  file_name ( & self )  -> Cow < ' _ ,  OsStr >  { 
170-             self . file_name ( ) . into ( ) 
171-         } 
172- 
173-         fn  file_type ( & self )  -> std:: io:: Result < FileType >  { 
174-             Ok ( self . file_type ( ) ) 
175-         } 
176-     } 
177- 
178-     impl  IntoIterator  for  WalkDir  { 
179-         type  Item  = Result < DirEntry ,  jwalk:: Error > ; 
180-         type  IntoIter  = DirEntryIter ; 
181- 
182-         fn  into_iter ( self )  -> Self :: IntoIter  { 
183-             DirEntryIter  { 
184-                 inner :  self . inner . expect ( "always set (builder fix)" ) . into_iter ( ) , 
185-                 precompose_unicode :  self . precompose_unicode , 
186-             } 
187-         } 
188-     } 
189- 
190-     impl  WalkDir  { 
191-         /// Set the minimum component depth of paths of entries. 
192- pub  fn  min_depth ( mut  self ,  min :  usize )  -> Self  { 
193-             self . inner  = Some ( self . inner . take ( ) . expect ( "always set" ) . min_depth ( min) ) ; 
194-             self 
195-         } 
196-         /// Set the maximum component depth of paths of entries. 
197- pub  fn  max_depth ( mut  self ,  max :  usize )  -> Self  { 
198-             self . inner  = Some ( self . inner . take ( ) . expect ( "always set" ) . max_depth ( max) ) ; 
199-             self 
200-         } 
201-         /// Follow symbolic links. 
202- pub  fn  follow_links ( mut  self ,  toggle :  bool )  -> Self  { 
203-             self . inner  = Some ( self . inner . take ( ) . expect ( "always set" ) . follow_links ( toggle) ) ; 
204-             self 
205-         } 
206-     } 
207- 
208-     impl  From < Parallelism >  for  jwalk:: Parallelism  { 
209-         fn  from ( v :  Parallelism )  -> Self  { 
210-             match  v { 
211-                 Parallelism :: Serial  => jwalk:: Parallelism :: Serial , 
212-                 Parallelism :: ThreadPoolPerTraversal  {  thread_name }  => std:: thread:: available_parallelism ( ) 
213-                     . map_or_else ( 
214-                         |_| Parallelism :: Serial . into ( ) , 
215-                         |threads| { 
216-                             let  pool = jwalk:: rayon:: ThreadPoolBuilder :: new ( ) 
217-                                 . num_threads ( threads. get ( ) . min ( 16 ) ) 
218-                                 . stack_size ( 128  *  1024 ) 
219-                                 . thread_name ( move  |idx| format ! ( "{thread_name} {idx}" ) ) 
220-                                 . build ( ) 
221-                                 . expect ( "we only set options that can't cause a build failure" ) ; 
222-                             jwalk:: Parallelism :: RayonExistingPool  { 
223-                                 pool :  pool. into ( ) , 
224-                                 busy_timeout :  None , 
225-                             } 
226-                         } , 
227-                     ) , 
228-             } 
229-         } 
230-     } 
231- 
232-     /// Instantiate a new directory iterator which will not skip hidden files, with the given level of `parallelism`. 
233- /// 
234- /// Use `precompose_unicode` to represent the `core.precomposeUnicode` configuration option. 
235- pub  fn  walkdir_new ( root :  & Path ,  parallelism :  Parallelism ,  precompose_unicode :  bool )  -> WalkDir  { 
236-         WalkDir  { 
237-             inner :  WalkDirImpl :: new ( root) 
238-                 . skip_hidden ( false ) 
239-                 . parallelism ( parallelism. into ( ) ) 
240-                 . into ( ) , 
241-             precompose_unicode, 
242-         } 
243-     } 
244- 
245-     /// Instantiate a new directory iterator which will not skip hidden files and is sorted 
246- /// 
247- /// Use `precompose_unicode` to represent the `core.precomposeUnicode` configuration option. 
248- pub  fn  walkdir_sorted_new ( root :  & Path ,  parallelism :  Parallelism ,  precompose_unicode :  bool )  -> WalkDir  { 
249-         WalkDir  { 
250-             inner :  WalkDirImpl :: new ( root) 
251-                 . skip_hidden ( false ) 
252-                 . sort ( true ) 
253-                 . parallelism ( parallelism. into ( ) ) 
254-                 . into ( ) , 
255-             precompose_unicode, 
256-         } 
257-     } 
258- 
259-     type  DirEntryIterImpl  = DirEntryIterGeneric < ( ( ) ,  ( ) ) > ; 
260- 
261-     /// The Iterator yielding directory items 
262- pub  type  DirEntryIter  = super :: walkdir_precompose:: WalkDirIter < DirEntryIterImpl ,  DirEntryImpl ,  jwalk:: Error > ; 
263- } 
264- 
265- /// 
266- #[ cfg( all( feature = "walkdir" ,  not( feature = "fs-walkdir-parallel" ) ) ) ]  
145+ #[ cfg( feature = "walkdir" ) ]  
267146pub  mod  walkdir { 
268147    use  std:: borrow:: Cow ; 
269148    use  std:: ffi:: OsStr ; 
@@ -338,8 +217,21 @@ pub mod walkdir {
338217/// 
339218/// Use `precompose_unicode` to represent the `core.precomposeUnicode` configuration option. 
340219pub  fn  walkdir_sorted_new ( root :  & Path ,  _:  Parallelism ,  precompose_unicode :  bool )  -> WalkDir  { 
220+         fn  ft_to_number ( ft :  std:: fs:: FileType )  -> usize  { 
221+             if  ft. is_file ( )  { 
222+                 1 
223+             }  else  { 
224+                 2 
225+             } 
226+         } 
341227        WalkDir  { 
342-             inner :  WalkDirImpl :: new ( root) . sort_by_file_name ( ) . into ( ) , 
228+             inner :  WalkDirImpl :: new ( root) 
229+                 . sort_by ( |a,  b| { 
230+                     ft_to_number ( a. file_type ( ) ) 
231+                         . cmp ( & ft_to_number ( b. file_type ( ) ) ) 
232+                         . then_with ( || a. file_name ( ) . cmp ( b. file_name ( ) ) ) 
233+                 } ) 
234+                 . into ( ) , 
343235            precompose_unicode, 
344236        } 
345237    } 
@@ -348,7 +240,7 @@ pub mod walkdir {
348240pub  type  DirEntryIter  = super :: walkdir_precompose:: WalkDirIter < walkdir:: IntoIter ,  DirEntryImpl ,  walkdir:: Error > ; 
349241} 
350242
351- #[ cfg( any ( feature = "walkdir" ,  feature =  "fs-walkdir-parallel" ) ) ]  
243+ #[ cfg( feature = "walkdir" ) ]  
352244pub  use  self :: walkdir:: { walkdir_new,  walkdir_sorted_new,  WalkDir } ; 
353245
354246/// Prepare open options which won't follow symlinks when the file is opened. 
0 commit comments