class EC2::Platform::Linux::Rsync
Public Class Methods
symlinking?()
click to toggle source
# File lib/ec2/platform/linux/rsync.rb, line 66 def self.symlinking? begin src = FileUtil.tempdir('ec2-ami-tools-rsync-test-src') dst = FileUtil.tempdir('ec2-ami-tools-rsync-test-dst') FileUtils.mkdir(src) FileUtils.touch("#{src}/foo") FileUtils.symlink("#{src}/foo", "#{src}/bar") FileUtils.mkdir("#{src}/baz") File.open("#{src}/baz/food", 'w+'){|io| io << IO.read(__FILE__) } FileUtils.symlink("#{src}/baz/food", "#{src}/baz/bard") FileUtils.mkdir(dst) incantation = Command.new.archive.recursive.sparse.links.src("#{src}/").dst("#{dst}") `#{incantation.expand} 2>&1` rc = $?.exitstatus return true if rc == 0 if rc == 23 #check that the structure was copied reasonably anyway slist = Dir["#{src}/**/**"] dlist = Dir["#{dst}/**/**"] return false unless dlist == dlist slist.each do |sitem| ditem = item.gsub(src, dst) return false unless dlist.include? ditem if File.file?(sitem) or File.symlink?(sitem) @out.print "comparing #{sitem} to #{ditem}" if @out return false unless IO.read(ditem) == IO.read(sitem) end if ['food', 'bard'].include? File.basename(ditem) return false unless IO.read(sitem) == IO.read(__FILE__) end end return true end return false rescue Exception return false ensure FileUtils.rm_rf src FileUtils.rm_rf dst end end
usable?()
click to toggle source
# File lib/ec2/platform/linux/rsync.rb, line 108 def self.usable?() @@usable ||= self.symlinking? end