diff --git a/pungi/scripts/create_packages_json.py b/pungi/scripts/create_packages_json.py index f4143453..a04cb412 100644 --- a/pungi/scripts/create_packages_json.py +++ b/pungi/scripts/create_packages_json.py @@ -44,6 +44,7 @@ def is_xz_file(first_two_bytes): initial_bytes=b'fd37', ) + @dataclass class RepoInfo: # path to a directory with repo directories. E.g. '/var/repos' contains diff --git a/pungi/scripts/gather_modules.py b/pungi/scripts/gather_modules.py index 1f80a0a1..ac0053b6 100644 --- a/pungi/scripts/gather_modules.py +++ b/pungi/scripts/gather_modules.py @@ -1,3 +1,4 @@ +import binascii import gzip import lzma import os @@ -12,11 +13,29 @@ import yaml import createrepo_c as cr from typing.io import BinaryIO -from .create_packages_json import PackagesGenerator, is_gzip_file, is_xz_file +from pungi.scripts.create_packages_json import PackagesGenerator EMPTY_FILE = '.empty' +def _is_compressed_file(first_two_bytes: bytes, initial_bytes: bytes): + return binascii.hexlify(first_two_bytes) == initial_bytes + + +def is_gzip_file(first_two_bytes): + return _is_compressed_file( + first_two_bytes=first_two_bytes, + initial_bytes=b'1f8b', + ) + + +def is_xz_file(first_two_bytes): + return _is_compressed_file( + first_two_bytes=first_two_bytes, + initial_bytes=b'fd37', + ) + + def read_modules_yaml(modules_yaml_path: Union[str, Path]) -> BytesIO: with open(modules_yaml_path, 'rb') as fp: return BytesIO(fp.read()) @@ -79,8 +98,6 @@ def read_modules_yaml_from_specific_repo(repo_path: AnyStr) -> List[BytesIO]: record.location_href, ) return [read_modules_yaml(modules_yaml_path=modules_yaml_path)] - else: - return [] def collect_modules( @@ -95,13 +112,10 @@ def collect_modules( Returns: object: """ - xor_flag = grep_only_modules_defaults_data is grep_only_modules_data modules_path = os.path.join(target_dir, 'modules') module_defaults_path = os.path.join(target_dir, 'module_defaults') - if grep_only_modules_data or xor_flag: - os.makedirs(modules_path, exist_ok=True) - if grep_only_modules_defaults_data or xor_flag: - os.makedirs(module_defaults_path, exist_ok=True) + os.makedirs(modules_path, exist_ok=True) + os.makedirs(module_defaults_path, exist_ok=True) # Defaults modules can be empty, but pungi detects # empty folder while copying and raises the exception in this case Path(os.path.join(module_defaults_path, EMPTY_FILE)).touch() @@ -113,6 +127,7 @@ def collect_modules( elif is_xz_file(data[:2]): data = lzma.decompress(data) documents = yaml.load_all(data, Loader=yaml.BaseLoader) + xor_flag = grep_only_modules_defaults_data is grep_only_modules_data for doc in documents: path = None if doc['document'] == 'modulemd-defaults' and \ @@ -175,22 +190,17 @@ def cli_main(): help='Path to a directory which contains repodirs. E.g. /var/repos' ) path_group.add_argument( - '-rd', '--repodata-paths', + '-rd', '--repodata-path', required=False, type=str, - nargs='+', - default=[], - help='Paths/urls to the directories with directory `repodata`', + default=None, + help='Path/url to a directory with repodata dir', ) parser.add_argument('-t', '--target', required=True) namespace = parser.parse_args() - if namespace.repodata_paths: - modules = [] - for repodata_path in namespace.repodata_paths: - modules.extend(read_modules_yaml_from_specific_repo( - repodata_path, - )) + if namespace.repodata_path is not None: + modules = read_modules_yaml_from_specific_repo(namespace.repodata_path) elif namespace.path is not None: modules = namespace.path else: