[#30408] Ruby 1.8.6 preview2 has been released — "Akinori MUSHA" <knu@...>

 Ruby 1.8.6 preview2 をリリースしました。

20 messages 2007/02/24
[#30414] fail to autoload at $SAFE==4 (Re: Ruby 1.8.6 preview2 has been released) — Hidetoshi NAGAI <nagai@...> 2007/02/25

永井@知能.九工大です.

[#30418] Re: fail to autoload at $SAFE==4 (Re: Ruby 1.8.6 preview2 has been released) — Nobuyoshi Nakada <nobu@...> 2007/02/25

なかだです。

[ruby-dev:30411] FileUtils.mv raises Errno::EPERM

From: "GO Noguchi" <gonoguti@...>
Date: 2007-02-25 06:06:26 UTC
List: ruby-dev #30411
野口と申します。

File.renameがErrno::EXDEVになる状況でディレクトリを移動すると
ディレクトリに対してFile.unlinkしようとして、FileUtils.mvが
エラーになります。

$ cd ~
$ mkdir foo
$ touch foo/1
home/ruby/local/ruby185/bin/ruby -rfileutils -ve 'FileUtils.mv("foo", "/tmp")'
ruby 1.8.5 (2007-02-14 patchlevel 20) [i386-freebsd6.1]
$ /home/ruby/local/ruby185/lib/ruby/1.8/fileutils.rb:504:in `unlink':
Operation not permitted - foo (Errno::EPERM)
        from /home/ruby/local/ruby185/lib/ruby/1.8/fileutils.rb:504:in `mv'
        from /home/ruby/local/ruby185/lib/ruby/1.8/fileutils.rb:1379:in
`fu_each_src_dest'
        from /home/ruby/local/ruby185/lib/ruby/1.8/fileutils.rb:1393:in
`fu_each_src_dest0'
        from /home/ruby/local/ruby185/lib/ruby/1.8/fileutils.rb:1377:in
`fu_each_src_dest'
        from /home/ruby/local/ruby185/lib/ruby/1.8/fileutils.rb:490:in `mv'
        from -e:1

妥当かどうかわかりませんが、一応パッチをつけておきます。

--- fileutils.rb.orig   Sun Feb 25 14:46:44 2007
+++ fileutils.rb        Sun Feb 25 14:53:16 2007
@@ -484,7 +484,7 @@
   #   FileUtils.mv Dir.glob('test*.rb'), 'test', :noop => true,
:verbose => true
   #
   def mv(src, dest, options = {})
-    fu_check_options options, :force, :noop, :verbose
+    fu_check_options options, :force, :noop, :verbose, :secure
     fu_output_message "mv#{options[:force] ? ' -f' : ''}
#{[src,dest].flatten.join ' '}" if options[:verbose]
     return if options[:noop]
     fu_each_src_dest(src, dest) do |s, d|
@@ -501,7 +501,11 @@
           File.rename s, d
         rescue Errno::EXDEV
           copy_entry s, d, true
-          File.unlink s
+          if options[:secure]
+            remove_entry_secure s, options[:force]
+          else
+            remove_entry s, options[:force]
+          end
         end
       rescue SystemCallError
         raise unless options[:force]
@@ -514,7 +518,7 @@
   module_function :move

   OPT_TABLE['mv']   =
-  OPT_TABLE['move'] = %w( noop verbose force )
+  OPT_TABLE['move'] = %w( noop verbose force secure )

   def rename_cannot_overwrite_file?   #:nodoc:
     /djgpp|cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM

---
GO Noguchi<[email protected]>

In This Thread

Prev Next