From: nagachika00@... Date: 2017-12-06T05:23:23+00:00 Subject: [ruby-dev:50337] [Ruby trunk Bug#13889][Closed] FileUtils.rmdir が Errno::ENOTEMPTY を無視している Issue #13889 has been updated by nagachika (Tomoyuki Chikanaga). Status changed from Open to Closed Backport changed from 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN to 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: DONTNEED 「しかし存在しない名前を FileUtils.rmdir に指定した時にエラーにならなかったのが Errno::ENOENT が発生するなるようになってしまっている」 については、fileutils はコマンドラインツールの挙動に倣うもので、rmdir(1) が存在しないパスを指定された時にはエラーになるので、r59934 後の挙動のほうが正しいということで閉じてしまいます。 一応挙動が変わるので、Backport 欄は 2.4 は DONTNEED にしておきます。 ---------------------------------------- Bug #13889: FileUtils.rmdir が Errno::ENOTEMPTY を無視している https://bugs.ruby-lang.org/issues/13889#change-68204 * Author: tkubo_ncs (Takehiro KUBO) * Status: Closed * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.1.6p336 (2015-04-13 revision 50298) * Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: DONTNEED ---------------------------------------- 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 ~~~ 実際無視するのが正しいならリファレンスの方を修正していただければと思います。 -- https://bugs.ruby-lang.org/