def add_path(tar, tar_path, path)
stat = File.lstat(path)
if stat.directory?
tar.mkdir(tar_path, stat.mode)
elsif stat.symlink?
tar.add_symlink(tar_path, File.readlink(path), stat.mode)
else
tar.add_file_simple(tar_path, stat.mode, stat.size) do |io|
File.open(path) do |fd|
chunk = nil
size = 0
while chunk = fd.read(16384) do
size += io.write(chunk)
end
if size != stat.size
raise "Failed to add #{path} to the archive; expected to " +
"write #{stat.size} bytes, only wrote #{size}"
end
end
end
end
end