def output(output_path)
require "xz"
output_check(output_path)
checksums = {}
self.files.each do |f|
path = staging_path(f)
if File.symlink?(path)
checksums[f] = "-"
elsif File.file?(path)
checksums[f] = Digest::SHA256.file(path).hexdigest
end
end
pkg_origin = attributes[:freebsd_origin]
if pkg_origin == "fpm/<name>"
pkg_origin = "fpm/#{name}"
end
pkg_version = (iteration and (iteration.to_i > 0)) ? "#{version}-#{iteration}" : "#{version}"
pkgdata = {
"arch" => architecture,
"name" => name,
"version" => pkg_version,
"comment" => description,
"desc" => description,
"origin" => pkg_origin,
"maintainer" => maintainer,
"www" => url,
"prefix" => "/",
}
File.open(staging_path("+COMPACT_MANIFEST"), "w+") do |file|
file.write(pkgdata.to_json + "\n")
end
pkgdata["files"] = {}
checksums.each do |f, shasum|
pkgdata["files"]["/" + f.gsub("%", "%25")] = shasum
end
pkgdata["scripts"] = {}
scripts.each do |name, data|
pkgdata["scripts"][SCRIPT_MAP[name]] = data
end
File.open(staging_path("+MANIFEST"), "w+") do |file|
file.write(pkgdata.to_json + "\n")
end
File.open(output_path, "wb") do |file|
XZ::StreamWriter.new(file) do |xz|
FPM::Util::TarWriter.new(xz) do |tar|
add_path(tar, "+COMPACT_MANIFEST",
File.join(staging_path, "+COMPACT_MANIFEST"))
add_path(tar, "+MANIFEST",
File.join(staging_path, "+MANIFEST"))
checksums.keys.each do |path|
add_path(tar, "/" + path, File.join(staging_path, path))
end
end
end
end
end