66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
# 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
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
|