From 46fb33bb9aa51e19793488d4c82d41b0fa233127 Mon Sep 17 00:00:00 2001 From: Evgeniy Alekseev Date: Sat, 27 Mar 2021 17:36:54 +0300 Subject: [PATCH] handle exceptions in actual_version calls --- src/ahriman/models/package.py | 31 ++++++++++++++++------------ tests/ahriman/models/test_package.py | 13 +++++++++++- 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/src/ahriman/models/package.py b/src/ahriman/models/package.py index 3b6780d0..8374cd65 100644 --- a/src/ahriman/models/package.py +++ b/src/ahriman/models/package.py @@ -218,20 +218,25 @@ class Package: logger = logging.getLogger("build_details") Task.fetch(clone_dir, self.git_url) - # update pkgver first - Package._check_output("makepkg", "--nodeps", "--nobuild", exception=None, cwd=clone_dir, logger=logger) - # generate new .SRCINFO and put it to parser - srcinfo_source = Package._check_output( - "makepkg", - "--printsrcinfo", - exception=None, - cwd=clone_dir, - logger=logger) - srcinfo, errors = parse_srcinfo(srcinfo_source) - if errors: - raise InvalidPackageInfo(errors) + try: + # update pkgver first + Package._check_output("makepkg", "--nodeps", "--nobuild", exception=None, cwd=clone_dir, logger=logger) + # generate new .SRCINFO and put it to parser + srcinfo_source = Package._check_output( + "makepkg", + "--printsrcinfo", + exception=None, + cwd=clone_dir, + logger=logger) + srcinfo, errors = parse_srcinfo(srcinfo_source) + if errors: + raise InvalidPackageInfo(errors) - return self.full_version(srcinfo.get("epoch"), srcinfo["pkgver"], srcinfo["pkgrel"]) + return self.full_version(srcinfo.get("epoch"), srcinfo["pkgver"], srcinfo["pkgrel"]) + except Exception: + logger.exception("cannot determine version of VCS package, make sure that you have VCS tools installed") + + return self.version def is_outdated(self, remote: Package, paths: RepositoryPaths) -> bool: """ diff --git a/tests/ahriman/models/test_package.py b/tests/ahriman/models/test_package.py index 8ed18472..cb3b9640 100644 --- a/tests/ahriman/models/test_package.py +++ b/tests/ahriman/models/test_package.py @@ -97,11 +97,22 @@ def test_actual_version_vcs(package_tpacpi_bat_git: Package, repository_paths: R srcinfo = (resource_path_root / "models" / "package_tpacpi-bat-git_srcinfo").read_text() mocker.patch("ahriman.models.package.Package._check_output", return_value=srcinfo) - mocker.patch("ahriman.core.build_tools.task.Task.fetch", return_value=None) + mocker.patch("ahriman.core.build_tools.task.Task.fetch") assert package_tpacpi_bat_git.actual_version(repository_paths) == "3.1.r13.g4959b52-1" +def test_actual_version_vcs_failed(package_tpacpi_bat_git: Package, repository_paths: RepositoryPaths, + mocker: MockerFixture) -> None: + """ + must return same version in case if exception occurred + """ + mocker.patch("ahriman.models.package.Package._check_output", side_effect=Exception()) + mocker.patch("ahriman.core.build_tools.task.Task.fetch") + + assert package_tpacpi_bat_git.actual_version(repository_paths) == package_tpacpi_bat_git.version + + def test_is_outdated_false(package_ahriman: Package, repository_paths: RepositoryPaths) -> None: """ must be not outdated for the same package