From e45f9e929d26a2f6c1dcdcc93100a69c9f97eedb Mon Sep 17 00:00:00 2001 From: mulhern Date: Wed, 8 Nov 2023 18:33:36 -0500 Subject: [PATCH 1/2] Shift code into a function in _utils.py Signed-off-by: mulhern --- release_management/_utils.py | 47 +++++++++++++++++++++ release_management/gen_bundled_provides.py | 49 +++------------------- 2 files changed, 52 insertions(+), 44 deletions(-) diff --git a/release_management/_utils.py b/release_management/_utils.py index 8a8944f..abb4016 100755 --- a/release_management/_utils.py +++ b/release_management/_utils.py @@ -20,6 +20,7 @@ # isort: STDLIB import os import subprocess +import tarfile import tomllib from datetime import datetime from getpass import getpass @@ -76,6 +77,52 @@ def calc_pre_release_suffix(): return f"{datetime.today():%Y%m%d%H%M}git{commit_hash}" +def get_bundled_provides(vendor_tarfile): + """ + Given absolute path of vendor tarfile generate bundled provides. + """ + with tarfile.open(vendor_tarfile, "r") as tar: + for member in tar.getmembers(): + components = member.name.split("/") + + if ( + len(components) == 3 + and components[0] == "vendor" + and components[2] == "Cargo.toml" + ): + manifest = tar.extractfile(member) + metadata = tomllib.load(manifest) + directory_name = components[1] + package = metadata["package"] + package_version = package["version"] + package_name = package["name"] + if directory_name != package_name and ( + not directory_name.startswith(package_name) + and directory_name[-len(package_version) :] != package_version + ): + raise RuntimeError( + "Unexpected disagreement between directory name " + f"{directory_name} and package name in Cargo.toml, " + f"{package_name}" + ) + continue + + if ( + len(components) == 4 + and components[0] == "vendor" + and components[2] == "src" + and components[3] == "lib.rs" + ): + size = member.size + if size != 0: + if components[1] == directory_name: + yield f"Provides: bundled(crate({package_name})) = {package_version}" + else: + raise RuntimeError( + "Found an entry for bundled provides, but no version information" + ) + + def edit_specfile(specfile_path, *, release_version=None, sources=None, arbitrary=None): """ Edit the specfile in place diff --git a/release_management/gen_bundled_provides.py b/release_management/gen_bundled_provides.py index cbcf43e..5dc015d 100755 --- a/release_management/gen_bundled_provides.py +++ b/release_management/gen_bundled_provides.py @@ -21,8 +21,9 @@ import argparse import os import sys -import tarfile -import tomllib + +# isort: LOCAL +from _utils import get_bundled_provides def main(): @@ -47,48 +48,8 @@ def main(): namespace = parser.parse_args() - with tarfile.open(namespace.vendor_tarfile, "r") as tar: - for member in tar.getmembers(): - components = member.name.split("/") - - if ( - len(components) == 3 - and components[0] == "vendor" - and components[2] == "Cargo.toml" - ): - manifest = tar.extractfile(member) - metadata = tomllib.load(manifest) - directory_name = components[1] - package = metadata["package"] - package_version = package["version"] - package_name = package["name"] - if directory_name != package_name and ( - not directory_name.startswith(package_name) - and directory_name[-len(package_version) :] != package_version - ): - raise RuntimeError( - "Unexpected disagreement between directory name " - f"{directory_name} and package name in Cargo.toml, " - f"{package_name}" - ) - continue - - if ( - len(components) == 4 - and components[0] == "vendor" - and components[2] == "src" - and components[3] == "lib.rs" - ): - size = member.size - if size != 0: - if components[1] == directory_name: - print( - f"Provides: bundled(crate({package_name})) = {package_version}" - ) - else: - raise RuntimeError( - "Found an entry for bundled provides, but no version information" - ) + for line in get_bundled_provides(namespace.vendor_tarfile): + print(line) return 0 From a74a7e6fef5165922ae224d6c0e817b2f17e8f43 Mon Sep 17 00:00:00 2001 From: mulhern Date: Wed, 8 Nov 2023 18:51:15 -0500 Subject: [PATCH 2/2] Insert bundled provides in stratisd spec file Signed-off-by: mulhern --- release_management/create_artifacts.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/release_management/create_artifacts.py b/release_management/create_artifacts.py index c98b495..171ca2e 100755 --- a/release_management/create_artifacts.py +++ b/release_management/create_artifacts.py @@ -28,6 +28,7 @@ ReleaseVersion, calc_pre_release_suffix, edit_specfile, + get_bundled_provides, get_package_info, get_python_package_info, make_source_tarball, @@ -142,6 +143,17 @@ def _stratisd_artifacts(namespace): os.rename(vendor_tarfile_name, vendor_tarfile_path) + def insert_bundled_provides(spec): + """ + Insert bundled provides in the spec file. + """ + with spec.sections() as sections: + preamble = sections.package + preamble.append("%if 0%{?rhel}") + preamble.extend(get_bundled_provides(vendor_tarfile_path)) + preamble.append("%endif") + preamble.append("") + edit_specfile( specfile_path, release_version=release_version, @@ -149,6 +161,7 @@ def _stratisd_artifacts(namespace): os.path.basename(path) for path in [source_tarfile_path, vendor_tarfile_path, crate_path] ], + arbitrary=insert_bundled_provides, )