diff --git a/src/ahriman/core/build_tools/package_archive.py b/src/ahriman/core/build_tools/package_archive.py index 37f6eb50..4401b08e 100644 --- a/src/ahriman/core/build_tools/package_archive.py +++ b/src/ahriman/core/build_tools/package_archive.py @@ -136,7 +136,7 @@ class PackageArchive: dependencies, roots = self.depends_on_paths() installed_packages = self.installed_packages() # build list of packages, which contains both the package itself and (possible) debug packages - packages = list(self.package.packages) + [f"{package}-debug" for package in self.package.packages] + packages = list(self.package.packages) + [f"{self.package.base}-debug"] # build initial map of file path -> packages containing this path # in fact, keys will contain all libraries the package linked to and all directories it contains diff --git a/src/ahriman/core/repository/executor.py b/src/ahriman/core/repository/executor.py index 327419cc..41755e79 100644 --- a/src/ahriman/core/repository/executor.py +++ b/src/ahriman/core/repository/executor.py @@ -62,6 +62,8 @@ class Executor(PackageInfo, Cleaner): patches = self.reporter.package_patches_get(package.base, None) commit_sha = task.init(local_path, patches, local_version) built = task.build(local_path, PACKAGER=packager_id) + + package.with_packages(built, self.pacman) for src in built: dst = self.paths.packages / src.name shutil.move(src, dst) diff --git a/src/ahriman/models/package.py b/src/ahriman/models/package.py index a5317b86..c51eb2b6 100644 --- a/src/ahriman/models/package.py +++ b/src/ahriman/models/package.py @@ -568,3 +568,19 @@ class Package(LazyLogging): dict[str, Any]: json-friendly dictionary """ return dataclass_view(self) + + def with_packages(self, packages: list[Path], pacman: Pacman) -> None: + """ + replace packages descriptions with ones from archives + + Args: + packages(Iterable[Path]): paths to package archives + pacman(Pacman): alpm wrapper instance + """ + self.packages = {} # reset state + for package in packages: + archive = self.from_archive(package, pacman) + if archive.base != self.base: + continue + + self.packages.update(archive.packages) diff --git a/tests/ahriman/core/repository/test_executor.py b/tests/ahriman/core/repository/test_executor.py index cc93c90b..6431fd93 100644 --- a/tests/ahriman/core/repository/test_executor.py +++ b/tests/ahriman/core/repository/test_executor.py @@ -29,9 +29,11 @@ def test_process_build(executor: Executor, package_ahriman: Package, passwd: Any depends_on_mock = mocker.patch("ahriman.core.build_tools.package_archive.PackageArchive.depends_on", return_value=Dependencies()) dependencies_mock = mocker.patch("ahriman.core.status.local_client.LocalClient.package_dependencies_update") + with_packages_mock = mocker.patch("ahriman.models.package.Package.with_packages") executor.process_build([package_ahriman], Packagers("packager"), bump_pkgrel=False) init_mock.assert_called_once_with(pytest.helpers.anyvar(int), pytest.helpers.anyvar(int), None) + with_packages_mock.assert_called_once_with([Path(package_ahriman.base)], executor.pacman) changes_mock.assert_called_once_with(package_ahriman.base) depends_on_mock.assert_called_once_with() dependencies_mock.assert_called_once_with(package_ahriman.base, Dependencies()) diff --git a/tests/ahriman/models/test_package.py b/tests/ahriman/models/test_package.py index be8b9dae..e38e2298 100644 --- a/tests/ahriman/models/test_package.py +++ b/tests/ahriman/models/test_package.py @@ -1,6 +1,8 @@ +import copy + from pathlib import Path from pytest_mock import MockerFixture -from unittest.mock import MagicMock +from unittest.mock import MagicMock, call as MockCall from ahriman.core.alpm.pacman import Pacman from ahriman.core.configuration import Configuration @@ -493,3 +495,23 @@ def test_build_status_pretty_print(package_ahriman: Package) -> None: """ assert package_ahriman.pretty_print() assert isinstance(package_ahriman.pretty_print(), str) + + +def test_with_packages(package_ahriman: Package, package_python_schedule: Package, pacman: Pacman, + mocker: MockerFixture) -> None: + """ + must correctly replace packages descriptions + """ + paths = [Path("1"), Path("2")] + from_archive_mock = mocker.patch("ahriman.models.package.Package.from_archive", side_effect=[ + package_ahriman, package_python_schedule + ]) + + result = copy.deepcopy(package_ahriman) + package_ahriman.packages[package_ahriman.base].architecture = "i686" + + result.with_packages(paths, pacman) + from_archive_mock.assert_has_calls([ + MockCall(path, pacman) for path in paths + ]) + assert result.packages[result.base] == package_ahriman.packages[package_ahriman.base]