ad_find_all_files { -include_backup 0 -include_dirs 0 -max_depth 10 } pathWhat it does:
Returns a list of full paths to all files under $path in the directory tree (descending the tree to a depth of up to $max_depth). Includes backup files only if $include_backup is true; includes directories in the returned list only if $include_dirs is true. Ignores all files for which apm_ignore_file_p returns true. Clients should not depend on the order of files returned.Defined in: /web/philip/packages/acs-core/apm-procs.tcl
Source code:
arg_parser_for_ad_find_all_files $args
# Use the examined_files array to track files that we've examined.
array set examined_files [list]
# A list of files that we will return (in the order in which we
# examined them).
set files [list]
# A list of files that we still need to examine.
set files_to_examine [list $path]
# Perform a breadth-first search of the file tree. For each level,
# examine files in $files_to_examine; if we encounter any directories,
# add contained files to $new_files_to_examine (which will become
# $files_to_examine in the next iteration).
while { [incr max_depth -1] > 0 && [llength $files_to_examine] != 0 } {
set new_files_to_examine [list]
foreach file $files_to_examine {
# Only examine the file if we haven't already. (This is just a safeguard
# in case, e.g., Tcl decides to play funny games with symbolic links so
# we end up encountering the same file twice.)
if { ![info exists examined_files($file)] } {
# Remember that we've examined the file.
set examined_files($file) 1
# If (a) we shouldn't ignore the file, and (b) either it's not a
# backup file or we specifically want to include backup files in
# our list...
if { ![apm_ignore_file_p $file] && ($include_backup == 1 || ![apm_backup_file_p $file]) } {
# If it's a file, add to our list. If it's a
# directory, add its contents to our list of files to
# examine next time.
if { [file isfile $file] } {
lappend files $file
} elseif { [file isdirectory $file] } {
if { $include_dirs == 1 } {
lappend files $file
}
set new_files_to_examine [concat $new_files_to_examine [glob -nocomplain "$file/*"]]
}
}
}
}
set files_to_examine $new_files_to_examine
}
return $files