diff options
author | aamine <aamine@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-04-14 10:00:52 +0000 |
---|---|---|
committer | aamine <aamine@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-04-14 10:00:52 +0000 |
commit | af759b81a1ed2fb2c932b7d10b31f6e8d7397f5b (patch) | |
tree | f71a631434a04f00dda47d63764cdda5b71f88fd /lib/fileutils.rb | |
parent | ce7c263fb621099b1aaed1018e56fd7dd7dee258 (diff) |
* lib/fileutils.rb (remove_file): ignore exceptions caused by chmod.
* lib/fileutils.rb (remove_dir): try to get rights to rmdir. [ruby-Bugs:1502]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@8330 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/fileutils.rb')
-rw-r--r-- | lib/fileutils.rb | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/lib/fileutils.rb b/lib/fileutils.rb index 52575e18f1..60a5456e77 100644 --- a/lib/fileutils.rb +++ b/lib/fileutils.rb @@ -702,24 +702,30 @@ module FileUtils alias rmtree rm_rf - def remove_file(fname, force = false) #:nodoc: + # Removes a file +path+. + # This method ignores StandardError if +force+ is true. + def remove_file(path, force = false) first_time_p = true begin - File.unlink fname + File.unlink path rescue Errno::ENOENT raise unless force - rescue + rescue => err if first_time_p - # try once more for Windows first_time_p = false - File.chmod 0777, fname - retry + begin + File.chmod 0777, path + retry + rescue SystemCallError + end end - raise unless force + raise err unless force end end - def remove_dir(dir, force = false) #:nodoc: + # Removes a directory +dir+ and its contents recursively. + # This method ignores StandardError if +force+ is true. + def remove_dir(dir, force = false) Dir.foreach(dir) do |file| next if /\A\.\.?\z/ =~ file path = "#{dir}/#{file.untaint}" @@ -731,10 +737,21 @@ module FileUtils remove_file path, force end end + first_time_p = true begin Dir.rmdir dir.sub(%r</\z>, '') rescue Errno::ENOENT raise unless force + rescue => err + if first_time_p + first_time_p = false + begin + File.chmod 0777, dir + retry + rescue SystemCallError + end + end + raise err unless force end end |