# # Find::File patch -- preserve directory traversal order! # # As it stands directories are traversed in the oppisite order that is # expected. Even the UNIX find program traverses directories in the correct # order, it imposes (EG: sorted). # # Modified to ensure sub-directory traversal order is not inverded by stack # push. That is remains in the same order as user pre-processing, or order # returned by readdir(), which is generally sorted. # *** /home/anthony/lib/perl5/File/Find.pm.5.8.0 Wed May 14 12:18:44 2003 --- /home/anthony/lib/perl5/File/Find.pm Wed May 14 12:27:12 2003 *************** *** 7,12 **** --- 7,18 ---- require Exporter; require Cwd; + # + # Modified to ensure sub-directory traversal order is not inverded by stack + # push and pops. That is remains in the same order as in the directory file, + # or user pre-processing (EG:sorted). + # + =head1 NAME File::Find - Traverse a directory tree. *************** *** 854,859 **** --- 860,870 ---- # This dir has subdirectories. $subcount = $nlink - 2; + # HACK: insert directories at this position. so as to preserve + # the user pre-processed ordering of files. + # EG: directory traversal is in user sorted order, not at random. + my $stack_top = @Stack; + for my $FN (@filenames) { next if $FN =~ $File::Find::skip_pattern; if ($subcount > 0 || $no_nlink) { *************** *** 865,871 **** if (-d _) { --$subcount; $FN =~ s/\.dir\z// if $Is_VMS; ! push @Stack,[$CdLvl,$dir_name,$FN,$sub_nlink]; } else { $name = $dir_pref . $FN; # $File::Find::name --- 876,885 ---- if (-d _) { --$subcount; $FN =~ s/\.dir\z// if $Is_VMS; ! # HACK: replace push to preserve dir traversal order ! #push @Stack,[$CdLvl,$dir_name,$FN,$sub_nlink]; ! splice @Stack, $stack_top, 0, ! [$CdLvl,$dir_name,$FN,$sub_nlink]; } else { $name = $dir_pref . $FN; # $File::Find::name