"Error: TestFileUtils#test_rmdir: Errno::EEXIST: File exists @ dir_s_rmdir - data" on Solaris

Issue #9571 has been updated by Tomoyuki C…

Backport changed from 1.9.3: REQUIRED, 2.0.0: UNKNOWN, 2.1: REQUIRED to
1.9.3: REQUIRED, 2.0.0: UNKNOWN, 2.1: DONE

Backported into ruby_2_1 branch at r46910.


Bug #9571: “Error: TestFileUtils#test_rmdir: Errno::EEXIST: File exists
@ dir_s_rmdir - data” on Solaris

  • Author: Naohisa G.
  • Status: Closed
  • Priority: Normal
  • Assignee:
  • Category:
  • Target version:
  • ruby -v: ruby 2.2.0dev (2014-02-26) [sparc64-solaris2.10]
  • Backport: 1.9.3: REQUIRED, 2.0.0: UNKNOWN, 2.1: DONE

Solarisにて、いつからかは忘れましたが、make test-all にて以下のErrorが生じています。

52) Error:
TestFileUtils#test_rmdir:
Errno::EEXIST: File exists @ dir_s_rmdir - data
/XXXXX/lib/fileutils.rb:277:in `rmdir'
/XXXXX/lib/fileutils.rb:277:in `block in rmdir'
/XXXXX/lib/fileutils.rb:271:in `each'
/XXXXX/lib/fileutils.rb:271:in `rmdir'
/XXXXX/test/fileutils/test_fileutils.rb:1380:in `block in 

test_rmdir’
/XXXXX/lib/test/unit/assertions.rb:166:in assert_nothing_raised' /XXXXX/test/fileutils/test_fileutils.rb:1379:in test_rmdir’

Solaris では、中身が残っているディレクトリをrmdirしようとしたとき、errno に EEXIST をセットします。

$ irb
irb(main):001:0> Dir.mkdir('aaa')
=> 0
irb(main):002:0> Dir.mkdir('aaa/bbb')
=> 0
irb(main):003:0> Dir.rmdir('aaa')
Errno::EEXIST: File exists - aaa
from (irb):3:in `rmdir'
from (irb):3
from /usr/local/64/bin/irb:12:in `<main>'
irb(main):004:0>

SunOS 4 では ENOTEMPTY を使用していたが Solaris では EEXIST に変更になったとの記述も見つけました。
http://docs.oracle.com/cd/E19455-01/806-2724/6jbu1b2ck/index.html

しかし、fileutils.rbのrmdirは、これに対応していないため、エラーになるようです。