aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraamine <aamine@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-04-14 10:00:52 +0000
committeraamine <aamine@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-04-14 10:00:52 +0000
commitaf759b81a1ed2fb2c932b7d10b31f6e8d7397f5b (patch)
treef71a631434a04f00dda47d63764cdda5b71f88fd
parentce7c263fb621099b1aaed1018e56fd7dd7dee258 (diff)
downloadruby-af759b81a1ed2fb2c932b7d10b31f6e8d7397f5b.tar.gz
* 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
-rw-r--r--ChangeLog11
-rw-r--r--lib/fileutils.rb33
-rw-r--r--test/fileutils/test_fileutils.rb39
3 files changed, 62 insertions, 21 deletions
diff --git a/ChangeLog b/ChangeLog
index 656518facd..02288aba48 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Thu Apr 14 18:59:43 2005 Minero Aoki <aamine@loveruby.net>
+
+ * lib/fileutils.rb (remove_file): ignore exceptions caused by
+ chmod.
+
+ * lib/fileutils.rb (remove_dir): try to get rights to rmdir.
+ [ruby-Bugs:1502]
+
Thu Apr 14 18:51:02 2005 Keiju Ishitsuka <keiju@ruby-lang.org>
* lib/irb/ruby-lex.rb, lib/irb/slex.rb: bug fix of [ruby-Bugs-1745]
@@ -16,8 +24,7 @@ Thu Apr 14 05:35:45 2005 Keiju Ishitsuka <keiju@ruby-lang.org>
* doc/irb/irb.rd.ja: a lost of release IRB 0.9.5.
- * lib/irb/slex.rb: bug fix by [ruby-core :04707].
-
+ * lib/irb/slex.rb: bug fix by [ruby-core:04707].
Thu Apr 14 00:20:31 2005 Keiju Ishitsuka <keiju@ruby-lang.org>
* bin/irb lib/irb.rb lib/irb/...: IRB 0.9.5.
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
diff --git a/test/fileutils/test_fileutils.rb b/test/fileutils/test_fileutils.rb
index 6ecd25c0f1..b959f04260 100644
--- a/test/fileutils/test_fileutils.rb
+++ b/test/fileutils/test_fileutils.rb
@@ -89,7 +89,6 @@ class TestFileUtils
my_rm_rf 'data'; mymkdir 'data'
my_rm_rf 'tmp'; mymkdir 'tmp'
prepare_data_file
- prepare_time_data
end
def teardown
@@ -146,9 +145,9 @@ class TestFileUtils
File.utime t-4, t-4, 'data/newer'
end
- def each_sample_file
- TARGETS.each do |srcpath|
- yield srcpath, "tmp/#{File.basename(srcpath)}"
+ def each_srcdest
+ TARGETS.each do |path|
+ yield path, "tmp/#{File.basename(path)}"
end
end
@@ -191,7 +190,7 @@ end
end
def test_cp
- each_sample_file do |srcpath, destpath|
+ each_srcdest do |srcpath, destpath|
cp srcpath, destpath
assert_same_file srcpath, destpath
@@ -753,7 +752,7 @@ end
end
def test_copy_entry
- each_sample_file do |srcpath, destpath|
+ each_srcdest do |srcpath, destpath|
copy_entry srcpath, destpath
assert_same_file srcpath, destpath
assert_equal File.stat(srcpath).ftype, File.stat(destpath).ftype
@@ -766,7 +765,7 @@ end
end
def test_copy_file
- each_sample_file do |srcpath, destpath|
+ each_srcdest do |srcpath, destpath|
copy_file srcpath, destpath
assert_same_file srcpath, destpath
end
@@ -774,7 +773,7 @@ end
def test_copy_stream
# IO
- each_sample_file do |srcpath, destpath|
+ each_srcdest do |srcpath, destpath|
File.open(srcpath) {|src|
File.open(destpath, 'w') {|dest|
copy_stream src, dest
@@ -786,7 +785,7 @@ end
# duck typing test [ruby-dev:25369]
rm_rf 'tmp'
Dir.mkdir 'tmp'
- each_sample_file do |srcpath, destpath|
+ each_srcdest do |srcpath, destpath|
File.open(srcpath) {|src|
File.open(destpath, 'w') {|dest|
copy_stream Stream.new(src), Stream.new(dest)
@@ -797,11 +796,28 @@ end
end
def test_remove_file
- # FIXME
+ File.open('data/tmp', 'w') {|f| f.puts 'dummy' }
+ remove_file 'data/tmp'
+ assert_file_not_exist 'data/tmp'
+if have_file_perm?
+ File.open('data/tmp', 'w') {|f| f.puts 'dummy' }
+ File.chmod 0, 'data/tmp'
+ remove_file 'data/tmp'
+ assert_file_not_exist 'data/tmp'
+end
end
def test_remove_dir
- # FIXME
+ Dir.mkdir 'data/tmpdir'
+ File.open('data/tmpdir/a', 'w') {|f| f.puts 'dummy' }
+ remove_dir 'data/tmpdir'
+ assert_file_not_exist 'data/tmpdir'
+if have_file_perm?
+ Dir.mkdir 'data/tmpdir'
+ File.chmod 0555, 'data/tmpdir'
+ remove_dir 'data/tmpdir'
+ assert_file_not_exist 'data/tmpdir'
+end
end
def test_compare_file
@@ -827,6 +843,7 @@ end
end
def test_uptodate?
+ prepare_time_data
Dir.chdir('data') {
assert( uptodate?('newest', %w(old newer notexist)) )
assert( ! uptodate?('newer', %w(old newest notexist)) )