From 42a0d5dc312a0e90fb502d6e4bc835f9437f9a71 Mon Sep 17 00:00:00 2001 From: Luka Vandervelden Date: Tue, 10 Sep 2019 16:30:30 +0200 Subject: [PATCH] `.weird` manifest format update. --- src/backends/weird.cr | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/backends/weird.cr b/src/backends/weird.cr index 66c662f..8034b0e 100644 --- a/src/backends/weird.cr +++ b/src/backends/weird.cr @@ -1,3 +1,5 @@ +require "openssl" + require "../backends.cr" @@ -18,11 +20,14 @@ class WeirdBackend < Package::Backend::Packaging context.detail "Generating control.spec" generate_spec package, "#{tmpdir}/control.spec" + context.detail "Generating manifest" + generate_manifest context, package, "#{tmpdir}/manifest" + context.detail "Assembling '#{destination_package_file}'" r = context.run tmpdir, "tar", [ "cf", destination_package_file, - "control.spec", "data.tar.xz" + "control.spec", "manifest", "data.tar.xz" ] r.exit_status == 0 @@ -46,5 +51,30 @@ class WeirdBackend < Package::Backend::Packaging file.close end + + def generate_manifest(context : Package::Context, package : Package::Package, file_name : String) + old_pwd = Dir.current + + manifest = File.open(file_name, "w").not_nil! + + Dir.cd package.fake_root_directory + + FileUtils.find "." do |path| + if File.symlink? path + manifest.puts [path, "symlink", File.readlink(path)].join ':' + elsif File.directory? path + manifest.puts [path, "directory"].join ':' + elsif File.info?(path).try &.file? + digest = OpenSSL::Digest.new("sha256").file(path).hexdigest + manifest.puts [path, "file", digest].join ':' + else + manifest.puts [path, "other"].join ':' + end + end + + manifest.close + ensure + Dir.cd old_pwd.not_nil! + end end