toolkit/mangle/generators/prepopulate_parser.py

93 lines
3.2 KiB
Python
Raw Normal View History

2022-09-26 02:31:40 +00:00
#!/usr/bin/env python3
import os
import os.path
import json
2022-10-31 22:39:38 +00:00
import argparse
2022-09-26 02:31:40 +00:00
import dnf
import createrepo_c as cr
from common import *
# Source packages we do not ship or are rocky branded
IGNORES = [
'insights-client',
2024-03-31 06:46:08 +00:00
'lorax-templates-rhel',
2024-06-08 16:02:46 +00:00
'shim',
2024-10-17 22:37:15 +00:00
'shim-unsigned-x64',
'shim-unsigned-aarch64',
2023-10-12 19:32:43 +00:00
'redhat-cloud-client-configuration',
2022-09-26 02:31:40 +00:00
'rhc',
2023-10-12 19:32:43 +00:00
'rhc-worker-playbook',
2022-09-26 02:31:40 +00:00
'centos-indexhtml',
'centos-logos',
'centos-stream-release',
'redhat-indexhtml',
'redhat-logos',
'redhat-release',
2024-12-04 11:36:16 +00:00
'redhat-flatpak-data',
'openssl-fips-provider'
2022-09-26 02:31:40 +00:00
]
2022-10-31 22:39:38 +00:00
parser = argparse.ArgumentParser()
parser.add_argument('--version', type=str, required=True)
2022-10-31 22:39:38 +00:00
parser.add_argument("--pungi", help="local pungi is here", action='store_true')
parser.add_argument('--stream', action='store_true', help="Stream koji only")
2023-09-03 23:38:07 +00:00
parser.add_argument('--all', action='store_true', help="All repo")
results = parser.parse_args()
REPOS = switcher.rlver(results.version,
2023-09-03 23:38:07 +00:00
stream=results.stream, all_repo=results.all)
2022-10-31 22:39:38 +00:00
if results.pungi:
2022-10-31 22:39:38 +00:00
APPEND_TO_PATH = '/os'
else:
APPEND_TO_PATH = ''
2022-09-26 02:31:40 +00:00
def warningcb(warning_type, message):
print("WARNING: %s" % message)
return True
repo_prepop = {}
for k in REPOS:
repo_prepop[k] = {}
for arch in REPOS[k]:
PRIMARY_XML_PATH = None
FILELISTS_XML_PATH = None
OTHER_XML_PATH = None
2022-10-31 22:39:38 +00:00
REPO_PATH = k + '/' + arch + APPEND_TO_PATH
2022-09-26 02:31:40 +00:00
repomd = cr.Repomd()
cr.xml_parse_repomd(os.path.join(REPO_PATH, "repodata/repomd.xml"), repomd, warningcb)
for record in repomd.records:
if record.type == "primary":
PRIMARY_XML_PATH = os.path.join(REPO_PATH, record.location_href)
elif record.type == "filelists":
FILELISTS_XML_PATH = os.path.join(REPO_PATH, record.location_href)
elif record.type == "other":
OTHER_XML_PATH = os.path.join(REPO_PATH, record.location_href)
package_iterator = cr.PackageIterator(primary_path=PRIMARY_XML_PATH, filelists_path=FILELISTS_XML_PATH, other_path=OTHER_XML_PATH, warningcb=warningcb)
repo_prepop[k][arch] = {}
for pkg in package_iterator:
name = pkg.name + '.' + pkg.arch
subject = dnf.subject.Subject(pkg.rpm_sourcerpm)
possible_nevra = subject.get_nevra_possibilities()
srcname = possible_nevra[0].name
# Ignore packages (by source) that we do not ship
if srcname in IGNORES:
continue
# Create the initial list if the package (by source) does not exist
if srcname not in repo_prepop[k][arch]:
repo_prepop[k][arch][srcname] = []
# Avoids duplicate entries - This is especially helpful for modules
if name not in repo_prepop[k][arch][srcname]:
repo_prepop[k][arch][srcname].append(name)
# Sorts the list items
repo_prepop[k][arch][srcname].sort()
entry_point = open('/tmp/prepopulate.json', 'w+')
json.dump(repo_prepop, entry_point, indent=2, sort_keys=True)
entry_point.close()