create-spdx: Use gzip for compression

The master version of the SPDX classes uses zstd for efficient
compression, but it relies on the zstd tool to be present on the host
system. Since dunfell supports older distros, we don't want to add this
tool as an additional requirement so switch to using gzip instead.

(From OE-Core rev: 55b08fd641767a3d2e080727828ca37d9e610109)

Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Joshua Watt
2023-03-27 15:05:29 -05:00
committed by Richard Purdie
parent 77e8b40bae
commit 006f140687

View File

@@ -466,13 +466,11 @@ python do_create_spdx() {
@contextmanager @contextmanager
def optional_tarfile(name, guard, mode="w"): def optional_tarfile(name, guard, mode="w"):
import tarfile import tarfile
import bb.compress.zstd import gzip
num_threads = int(d.getVar("BB_NUMBER_THREADS"))
if guard: if guard:
name.parent.mkdir(parents=True, exist_ok=True) name.parent.mkdir(parents=True, exist_ok=True)
with bb.compress.zstd.open(name, mode=mode + "b", num_threads=num_threads) as f: with gzip.open(name, mode=mode + "b") as f:
with tarfile.open(fileobj=f, mode=mode + "|") as tf: with tarfile.open(fileobj=f, mode=mode + "|") as tf:
yield tf yield tf
else: else:
@@ -550,7 +548,7 @@ python do_create_spdx() {
add_download_packages(d, doc, recipe) add_download_packages(d, doc, recipe)
if process_sources(d) and include_sources: if process_sources(d) and include_sources:
recipe_archive = deploy_dir_spdx / "recipes" / (doc.name + ".tar.zst") recipe_archive = deploy_dir_spdx / "recipes" / (doc.name + ".tar.gz")
with optional_tarfile(recipe_archive, archive_sources) as archive: with optional_tarfile(recipe_archive, archive_sources) as archive:
spdx_get_src(d) spdx_get_src(d)
@@ -618,7 +616,7 @@ python do_create_spdx() {
package_doc.add_relationship(spdx_package, "GENERATED_FROM", "%s:%s" % (recipe_ref.externalDocumentId, recipe.SPDXID)) package_doc.add_relationship(spdx_package, "GENERATED_FROM", "%s:%s" % (recipe_ref.externalDocumentId, recipe.SPDXID))
package_doc.add_relationship(package_doc, "DESCRIBES", spdx_package) package_doc.add_relationship(package_doc, "DESCRIBES", spdx_package)
package_archive = deploy_dir_spdx / "packages" / (package_doc.name + ".tar.zst") package_archive = deploy_dir_spdx / "packages" / (package_doc.name + ".tar.gz")
with optional_tarfile(package_archive, archive_packaged) as archive: with optional_tarfile(package_archive, archive_packaged) as archive:
package_files = add_package_files( package_files = add_package_files(
d, d,
@@ -899,8 +897,8 @@ python image_combine_spdx() {
if link != target_path: if link != target_path:
link.symlink_to(os.path.relpath(target_path, link.parent)) link.symlink_to(os.path.relpath(target_path, link.parent))
spdx_tar_path = imgdeploydir / (image_name + ".spdx.tar.zst") spdx_tar_path = imgdeploydir / (image_name + ".spdx.tar.gz")
make_image_link(spdx_tar_path, ".spdx.tar.zst") make_image_link(spdx_tar_path, ".spdx.tar.gz")
} }
python sdk_host_combine_spdx() { python sdk_host_combine_spdx() {
@@ -931,7 +929,7 @@ def combine_spdx(d, rootfs_name, rootfs_deploydir, rootfs_spdxid, packages, spdx
from datetime import timezone, datetime from datetime import timezone, datetime
from pathlib import Path from pathlib import Path
import tarfile import tarfile
import bb.compress.zstd import gzip
creation_time = datetime.now(tz=timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ") creation_time = datetime.now(tz=timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
deploy_dir_spdx = Path(d.getVar("DEPLOY_DIR_SPDX")) deploy_dir_spdx = Path(d.getVar("DEPLOY_DIR_SPDX"))
@@ -1002,8 +1000,8 @@ def combine_spdx(d, rootfs_name, rootfs_deploydir, rootfs_spdxid, packages, spdx
index = {"documents": []} index = {"documents": []}
spdx_tar_path = rootfs_deploydir / (rootfs_name + ".spdx.tar.zst") spdx_tar_path = rootfs_deploydir / (rootfs_name + ".spdx.tar.gz")
with bb.compress.zstd.open(spdx_tar_path, "w", num_threads=num_threads) as f: with gzip.open(spdx_tar_path, "w") as f:
with tarfile.open(fileobj=f, mode="w|") as tar: with tarfile.open(fileobj=f, mode="w|") as tar:
def collect_spdx_document(path): def collect_spdx_document(path):
nonlocal tar nonlocal tar