Finished the package changes analysis.

This commit is contained in:
antux18 2024-08-07 12:26:36 +02:00
parent 4b91a6cb5d
commit 56c3682124
2 changed files with 61 additions and 13 deletions

View File

@ -42,7 +42,47 @@ def sources_stats(input_table):
pkgmgr[row[2]] += 1
return pkgmgr
# def pkg_changed(pkgname, )
def pkg_changed(table, artifact_name, pkgname, pkgsource):
"""
Analyzes the given package lists table to determine if the given package
changed for the given artifact.
Parameters
----------
table: str
Table to analyse.
artifact_name: str
Name of the artifact for which we want to analyze package changes.
pkgname: str
The package we want to track changes.
pkgsource: str
Source of the package, in case there is multiple packages with the
same name but different sources.
Returns
-------
changed: bool
True if the version number of the package changed over time, False
otherwise.
"""
changed = False
i = 0
pkgver = ""
while i < len(table) and not changed:
row = table[i]
# Artifact name is in the 4th column, package name in the first,
# and package source in the 3rd:
if row[3] == artifact_name and row[0] == pkgname and row[2] == pkgsource:
# If the first version number has not been saved yet:
if pkgver == "":
pkgver = row[1] # Package version is in the 2nd column
elif row[1] != pkgver:
changed = True
i += 1
return changed
def pkgs_changes(input_table):
"""
@ -59,15 +99,27 @@ def pkgs_changes(input_table):
dict
Output table of the analysis in the form of a dict with headers as keys.
"""
pkgmgr = {}
pkgchanges_dict = {}
# Key is the artifact name, and value is a list of tuples constituted
# of the package that has been checked and its source for this artifact:
# FIXME: Memory usage?
checked_artifacts = {}
i = 0
for row in input_table:
# Third column is the package source:
if row[2] not in pkgmgr:
pkgmgr[row[2]] = 1
else:
pkgmgr[row[2]] += 1
return pkgmgr
artifact_name = row[3] # Artifact name is in the 4th column
if artifact_name not in checked_artifacts.keys():
checked_artifacts[artifact_name] = []
pkgname = row[0] # Package name is in the first column
pkgsource = row[2] # Package source is in the 3rd column
if (pkgname, pkgsource) not in checked_artifacts[artifact_name]:
if pkg_changed(input_table, artifact_name, pkgname, pkgsource):
# Third column is the package source:
if row[2] not in pkgchanges_dict:
pkgchanges_dict[row[2]] = 1
else:
pkgchanges_dict[row[2]] += 1
checked_artifacts[artifact_name].append((pkgname, pkgsource))
return pkgchanges_dict
def pkgs_per_container(input_table):
"""

6
ecg.py
View File

@ -201,7 +201,6 @@ def buildresult_saver(result, buildstatus_path, config_path):
-------
None
"""
file_exists = os.path.exists(buildstatus_path)
buildstatus_file = open(buildstatus_path, "a")
artifact_name = os.path.basename(config_path).split(".")[0]
# # Writing header in case file didn't exist:
@ -244,7 +243,6 @@ def build_image(config, src_dir, image_name, docker_cache = False):
build_command = f"docker build{cache_arg} -t {image_name} ."
build_process = subprocess.run(build_command.split(" "), cwd=path, capture_output=True)
build_output = f"stdout:\n{build_process.stdout.decode('utf-8')}\nstderr:\n{build_process.stderr.decode('utf-8')}"
# build_output = build_process.stderr.decode("utf-8")
logging.info(f"Output of '{build_command}':")
logging.info(build_output)
return_code = build_process.returncode
@ -284,7 +282,7 @@ def check_env(config, src_dir, artifact_name, pkglist_path):
# of the package manager, depending on the package managers.
# Each package manager is associated with a tuple, the first item being
# the package manager's command, the second being the arguments for the
# query (they must be separate for the "--entrypoint" argument of Docker
# query (they must be separated for the "--entrypoint" argument of Docker
# 'run', see below), and the third one being the command that will format
# the output of the query command (this one can be an empty string in case
# the formatting part is already done using the options of the first command).
@ -453,8 +451,6 @@ def main():
try:
config_file = open(config_path, "r")
config = json.loads(config_file.read())
# config = yaml.safe_load(config_file)
# print(config)
config_file.close()
dl_dir = None