Project

General

Profile

Bug #12520

Updated by nobu (Nobuyoshi Nakada) almost 8 years ago

`FileUtils`を利用した`:preserve FileUtilsを利用した:preserve => true`の`cp_r`中に例外となります。(題名が真の原因かは不明。それ以外に思い当たる点がない) trueのcp_r中に例外となります。(題名が真の原因かは不明。それ以外に思い当たる点がない) 
 システムはDebian jessieです。 

 
 ~~~ 
 Linux version 3.16.0-4-amd64 (debian-kernel@lists.debian.org) (gcc version 4.8.4 (Debian 4.8.4-1) ) #1 SMP Debian 3.16.7-ckt25-2 (2016-04-08) 
 ~~~ 
 具体的には以下のようになりました。 

 
 ~~~ 
 /usr/local/lib/ruby/2.3.0/fileutils.rb:1411:in `chown': Permission denied @ chown_internal - /mnt/media/Music2/iTunes/iTunes Music/Jeanette/Porque Te Vas/02 Porqué Te Vas_.m4a (Errno::EACCES) 
	 from /usr/local/lib/ruby/2.3.0/fileutils.rb:1411:in `copy_metadata' 
	 from /usr/local/lib/ruby/2.3.0/fileutils.rb:475:in `block in copy_entry' 
	 from /usr/local/lib/ruby/2.3.0/fileutils.rb:1504:in `wrap_traverse' 
	 from /usr/local/lib/ruby/2.3.0/fileutils.rb:1501:in `block in wrap_traverse' 
	 from /usr/local/lib/ruby/2.3.0/fileutils.rb:1500:in `each' 
	 from /usr/local/lib/ruby/2.3.0/fileutils.rb:1500:in `wrap_traverse' 
	 from /usr/local/lib/ruby/2.3.0/fileutils.rb:1501:in `block in wrap_traverse' 
	 from /usr/local/lib/ruby/2.3.0/fileutils.rb:1500:in `each' 
	 from /usr/local/lib/ruby/2.3.0/fileutils.rb:1500:in `wrap_traverse' 
	 from /usr/local/lib/ruby/2.3.0/fileutils.rb:469:in `copy_entry' 
	 from /usr/local/lib/ruby/2.3.0/fileutils.rb:444:in `block in cp_r' 
	 from /usr/local/lib/ruby/2.3.0/fileutils.rb:1571:in `block in fu_each_src_dest' 
 ~~~ 
 やりたいことはmtimeのコピーですが、`FileUtils.cp_r`では`:mtime`を個々のファイルごとに指定できないので`:preserve`を利用する以外に方法がありません(ここに別解があればそれでも良いのでBUGではなくMiscにしています)。 やりたいことはmtimeのコピーですが、FileUtils.cp_rでは:mtimeを個々のファイルごとに指定できないので:preserveを利用する以外に方法がありません(ここに別解があればそれでも良いのでBUGではなくMiscにしています)。 
 リファレンスによれば、`:preserve`は、 

 > リファレンスによれば、:preserveは、 
 ~~~ 
 :preserve 
     真を指定すると更新時刻と、可能なら所有ユーザ・所有グループもコピーします。 
 ~~~ 

 と、`chown`については努力目標となっています。 
 というわけで、以下のように`Errno::EACCES`も救済したいです。 

 ~~~diff と、chownについては努力目標となっています。 
 というわけで、以下のようにErrno::EACCESも救済したいです。 
 ~~~ 
 --- devl/ruby-2.3.1/lib/fileutils.rb 	 2015-12-16 14:07:31.000000000 +0900 
 +++ /usr/local/lib/ruby/2.3.0/fileutils.rb 	 2016-06-26 20:24:57.552398812 +0900 
 @@ -1410,7 +1410,7 @@ module FileUtils 
          else 
            File.chown st.uid, st.gid, path 
          end 
 -        rescue Errno::EPERM 
 +        rescue Errno::EPERM, Errno::EACCES 
          # clear setuid/setgid 
          if st.symlink? 
            begin 
 ~~~ 
 よろしくお願いします。

Back