begin
#...
rescue => e
#...
end
will trap e if it is a StandardError. SystemCallErrrors are
supposed to handle Errorcodes from the OS. All of these are
subclasses of Exception. So why do I get this failure under Cygwin:
$ ruby BACKUP.RB "C:\\" "D:\\buzz_c"
cp -rp C:\ D:\buzz_c
/usr/lib/ruby/1.8/new_fileutils.rb:1251:in `initialize': Device or resource busy
- C:\/WINDOWS/WIN386.SWP (Errno::EBUSY)
from /usr/lib/ruby/1.8/new_fileutils.rb:1251:in `copy_file'
from /usr/lib/ruby/1.8/new_fileutils.rb:1221:in `copy'
from /usr/lib/ruby/1.8/new_fileutils.rb:455:in `copy_entry'
from /usr/lib/ruby/1.8/new_fileutils.rb:1314:in `traverse'
from /usr/lib/ruby/1.8/new_fileutils.rb:453:in `copy_entry'
from /usr/lib/ruby/1.8/new_fileutils.rb:424:in `cp_r'
from /usr/lib/ruby/1.8/new_fileutils.rb:1385:in `fu_each_src_dest'
from /usr/lib/ruby/1.8/new_fileutils.rb:1401:in `fu_each_src_dest0'
from /usr/lib/ruby/1.8/new_fileutils.rb:1383:in `fu_each_src_dest'
from /usr/lib/ruby/1.8/new_fileutils.rb:422:in `cp_r'
from BACKUP.RB:27
hgs@buzz ~/downloads
when my modified FileUtils.cp_r has
begin
copy_entry ...
rescue Exception => e
logger.error("backup"){"Error was #{e}")
end
(essentially. Theres a bit more to it than that, but the details
shouldn't matter for my question.) So why can't I rescue it? (I'm
trying to log, and skip files I can't backup so at least I get most
of the files, and know which ones I have not.)
Anyone also reading ruby-core will realize that my patch didn't work
in practice.
Thank you,
Hugh