diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-12-13 14:48:54 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-12-13 14:48:54 +0000 |
commit | c48a4c293650efe407049e6aceed53fcd35a741b (patch) | |
tree | 39ee539b98db696a16741c2292da77ca48eb777f | |
parent | f62310ac626f8fd729a066ba5f31619bf3d15f56 (diff) | |
download | ruby-c48a4c293650efe407049e6aceed53fcd35a741b.tar.gz |
* lib/find.rb (Find.find): sort directory entries. [ruby-dev:39847]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26075 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | lib/find.rb | 29 |
2 files changed, 17 insertions, 16 deletions
@@ -1,3 +1,7 @@ +Sun Dec 13 23:48:25 2009 Tanaka Akira <akr@fsij.org> + + * lib/find.rb (Find.find): sort directory entries. [ruby-dev:39847] + Sun Dec 13 20:55:30 2009 Tanaka Akira <akr@fsij.org> * test/ruby/envutil.rb (invoke_ruby): call to_str for stdin_data to diff --git a/lib/find.rb b/lib/find.rb index f9bc754152..12e2a5a938 100644 --- a/lib/find.rb +++ b/lib/find.rb @@ -46,22 +46,19 @@ module Find end begin if s.directory? then - d = Dir.open(file) - begin - for f in d - next if f == "." or f == ".." - if File::ALT_SEPARATOR and file =~ /^(?:[\/\\]|[A-Za-z]:[\/\\]?)$/ then - f = file + f - elsif file == "/" then - f = "/" + f - else - f = File.join(file, f) - end - paths.unshift f.untaint - end - ensure - d.close - end + fs = Dir.entries(file) + fs.sort! + fs.reverse_each {|f| + next if f == "." or f == ".." + if File::ALT_SEPARATOR and file =~ /^(?:[\/\\]|[A-Za-z]:[\/\\]?)$/ then + f = file + f + elsif file == "/" then + f = "/" + f + else + f = File.join(file, f) + end + paths.unshift f.untaint + } end rescue Errno::ENOENT, Errno::EACCES end |