From 783c16b2edf7da5f1190fe0abe3daaa2d26173fe Mon Sep 17 00:00:00 2001 From: Evgeniy Alekseev Date: Thu, 7 Apr 2022 20:32:55 +0300 Subject: [PATCH] trim versions before dependency list calculation When dependencies list contains same package with version it tries to find packages which don't exists --- src/ahriman/models/package.py | 18 +++--- tests/ahriman/core/test_util.py | 1 + tests/ahriman/models/test_package.py | 10 ++++ .../models/package_gcc10_srcinfo | 57 +++++++++++++++++++ 4 files changed, 78 insertions(+), 8 deletions(-) create mode 100644 tests/testresources/models/package_gcc10_srcinfo diff --git a/src/ahriman/models/package.py b/src/ahriman/models/package.py index 9c723bdb..cdfd440b 100644 --- a/src/ahriman/models/package.py +++ b/src/ahriman/models/package.py @@ -211,23 +211,25 @@ class Package: :return: list of package dependencies including makedepends array, but excluding packages from this base """ # additional function to remove versions from dependencies - def trim_version(name: str) -> str: + def extract_packages(raw_packages_list: List[str]) -> Set[str]: + return {trim_version(package_name) for package_name in raw_packages_list} + + def trim_version(package_name: str) -> str: for symbol in ("<", "=", ">"): - name = name.split(symbol)[0] - return name + package_name = package_name.split(symbol)[0] + return package_name srcinfo, errors = parse_srcinfo((path / ".SRCINFO").read_text()) if errors: raise InvalidPackageInfo(errors) - makedepends = srcinfo.get("makedepends", []) + makedepends = extract_packages(srcinfo.get("makedepends", [])) # sum over each package - depends: List[str] = srcinfo.get("depends", []) + depends = extract_packages(srcinfo.get("depends", [])) for package in srcinfo["packages"].values(): - depends.extend(package.get("depends", [])) + depends |= extract_packages(package.get("depends", [])) # we are not interested in dependencies inside pkgbase packages = set(srcinfo["packages"].keys()) - full_list = set(depends + makedepends) - packages - return {trim_version(package_name) for package_name in full_list} + return (depends | makedepends) - packages def actual_version(self, paths: RepositoryPaths) -> str: """ diff --git a/tests/ahriman/core/test_util.py b/tests/ahriman/core/test_util.py index 4248fb62..3397bb1f 100644 --- a/tests/ahriman/core/test_util.py +++ b/tests/ahriman/core/test_util.py @@ -317,6 +317,7 @@ def test_walk(resource_path_root: Path) -> None: resource_path_root / "models" / "package_ahriman_aur", resource_path_root / "models" / "package_akonadi_aur", resource_path_root / "models" / "package_ahriman_srcinfo", + resource_path_root / "models" / "package_gcc10_srcinfo", resource_path_root / "models" / "package_tpacpi-bat-git_srcinfo", resource_path_root / "models" / "package_yay_srcinfo", resource_path_root / "web" / "templates" / "build-status" / "login-modal.jinja2", diff --git a/tests/ahriman/models/test_package.py b/tests/ahriman/models/test_package.py index 2af0b70e..7998aa2c 100644 --- a/tests/ahriman/models/test_package.py +++ b/tests/ahriman/models/test_package.py @@ -261,6 +261,16 @@ def test_dependencies_with_version(mocker: MockerFixture, resource_path_root: Pa assert Package.dependencies(Path("path")) == {"git", "go", "pacman"} +def test_dependencies_with_version_and_overlap(mocker: MockerFixture, resource_path_root: Path) -> None: + """ + must load correct list of dependencies with version + """ + srcinfo = (resource_path_root / "models" / "package_gcc10_srcinfo").read_text() + mocker.patch("pathlib.Path.read_text", return_value=srcinfo) + + assert Package.dependencies(Path("path")) == {"glibc", "doxygen", "binutils", "git", "libmpc", "python", "zstd"} + + def test_actual_version(package_ahriman: Package, repository_paths: RepositoryPaths) -> None: """ must return same actual_version as version is diff --git a/tests/testresources/models/package_gcc10_srcinfo b/tests/testresources/models/package_gcc10_srcinfo new file mode 100644 index 00000000..a3a4ce65 --- /dev/null +++ b/tests/testresources/models/package_gcc10_srcinfo @@ -0,0 +1,57 @@ +pkgbase = gcc10 + pkgdesc = The GNU Compiler Collection (10.x.x) + pkgver = 10.3.0 + pkgrel = 2 + url = https://gcc.gnu.org + arch = x86_64 + license = GPL + license = LGPL + license = FDL + license = custom + checkdepends = dejagnu + checkdepends = inetutils + makedepends = binutils + makedepends = doxygen + makedepends = git + makedepends = libmpc + makedepends = python + options = !emptydirs + options = !lto + source = https://sourceware.org/pub/gcc/releases/gcc-10.3.0/gcc-10.3.0.tar.xz + source = https://sourceware.org/pub/gcc/releases/gcc-10.3.0/gcc-10.3.0.tar.xz.sig + source = https://mirror.sobukus.de/files/src/isl/isl-0.24.tar.xz + source = c89 + source = c99 + validpgpkeys = F3691687D867B81B51CE07D9BBE43771487328A9 + validpgpkeys = 86CFFCA918CF3AF47147588051E8B148A9999C34 + validpgpkeys = 13975A70E63C361C73AE69EF6EEB81F8981C74C7 + validpgpkeys = D3A93CAD751C2AF4F8C7AD516C35B99309B5FA62 + b2sums = ac7898f5eb8a7c5f151a526d1bb38913a68b50a65e4d010ac09fa20b6c801c671c790d780f23ccb8e4ecdfc686f4aa588082ccc9eb5c80c7b0e30788f824c1eb + b2sums = SKIP + b2sums = 39cbfd18ad05778e3a5a44429261b45e4abc3efe7730ee890674d968890fe5e52c73bc1f8d271c7c3bc72d5754e3f7fcb209bd139e823d19cb9ea4ce1440164d + b2sums = a76d19c7830b0a141302890522086fc1548c177611501caac7e66d576e541b64ca3f6e977de715268a9872dfdd6368a011b92e01f7944ec0088f899ac0d2a2a5 + b2sums = 02b655b5668f7dea51c3b3e4ff46d5a4aee5a04ed5e26b98a6470f39c2e98ddc0519bffeeedd982c31ef3c171457e4d1beaff32767d1aedd9346837aac4ec3ee + +pkgname = gcc10 + pkgdesc = The GNU Compiler Collection - C and C++ frontends (10.x.x) + depends = gcc10-libs=10.3.0-2 + depends = binutils>=2.28 + depends = libmpc + depends = zstd + options = !emptydirs + options = staticlibs + +pkgname = gcc10-libs + pkgdesc = Runtime libraries shipped by GCC (10.x.x) + depends = glibc>=2.27 + provides = libgfortran.so + provides = libubsan.so + provides = libasan.so + provides = libtsan.so + provides = liblsan.so + options = !emptydirs + options = !strip + +pkgname = gcc10-fortran + pkgdesc = Fortran front-end for GCC (10.x.x) + depends = gcc10=10.3.0-2