diff options
Diffstat (limited to 'lib/find.rb')
-rw-r--r-- | lib/find.rb | 47 |
1 files changed, 24 insertions, 23 deletions
diff --git a/lib/find.rb b/lib/find.rb index 340461c653..5ecc54329c 100644 --- a/lib/find.rb +++ b/lib/find.rb @@ -8,31 +8,32 @@ # module Find - extend Find - - def findpath(path, ary) - ary.push(path) - d = Dir.open(path) - for f in d - continue if f =~ /^\.\.?$/ - f = path + "/" + f - if File.directory? f - findpath(f, ary) - else - ary.push(f) - end + def find(*path) + while file = path.shift + catch(:prune) { + yield file + if File.directory? file and not File.symlink? file then + d = Dir.open(file) + begin + for f in d + next if f =~ /^\.\.?$/ + if file == "/" then + f = "/" + f + else + f = file + "/" + f + end + path.unshift f + end + ensure + d.close + end + end + } end end - private :findpath - def find(*path) - ary = [] - for p in path - findpath(p, ary) - for f in ary - yield f - end - end + def prune + throw :prune end - module_function :find + module_function :find, :prune end |