Actions
Bug #13889
closedFileUtils.rmdir が Errno::ENOTEMPTY を無視している
Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.1.6p336 (2015-04-13 revision 50298)
Description
2.1 や最新のリファレンスには FileUtils.rmdir で削除対象のディレクトリが空ではない場合は Errno::ENOTEMPTY が発生すると書かれていますが、
FileUtils.rmdir を空でないディレクトリに対して呼んでもエラーにはならず、削除もされません。
irb(main):002:0> FileUtils.mkdir("dir")
=> ["dir"]
irb(main):003:0> FileUtils.touch("dir/file")
=> ["dir/file"]
irb(main):004:0> FileUtils.rmdir("dir")
=> ["dir"] #<= エラーは出ない
irb(main):005:0> File.exist?("dir") #<= 残っている
=> true
irb(main):006:0> File.exist?("dir/file")
=> true
fileutils.rb のソースで ENOTEMPTY が rescue されているようです。(trunk でも)
def rmdir(list, options = {})
fu_check_options options, OPT_TABLE['rmdir']
list = fu_list(list)
parents = options[:parents]
fu_output_message "rmdir #{parents ? '-p ' : ''}#{list.join ' '}" if options[:verbose]
return if options[:noop]
list.each do |dir|
begin
Dir.rmdir(dir = remove_tailing_slash(dir))
if parents
until (parent = File.dirname(dir)) == '.' or parent == dir
dir = parent
Dir.rmdir(dir)
end
end
rescue Errno::ENOTEMPTY, Errno::EEXIST, Errno::ENOENT <= ここです
end
end
end
module_function :rmdir
実際無視するのが正しいならリファレンスの方を修正していただければと思います。
Actions
Like0
Like0Like0Like0Like0Like0Like0Like0Like0