Compare commits

..

17 Commits

Author SHA1 Message Date
93ccf7aa62 add separate function for symlinks creation 2026-01-26 01:57:12 +02:00
5d783eff4a fix sttyle 2026-01-26 01:57:12 +02:00
69aadb4e8b remove generators 2026-01-26 01:57:12 +02:00
4e996c4ed9 simplify symlionk creation 2026-01-26 01:57:12 +02:00
4f4d2a4c01 drop excess REQUIRES_REPOSITORY 2026-01-26 01:57:12 +02:00
2e5382bd5b support requires repostory flag 2026-01-26 01:57:12 +02:00
77d56f701f gpg loader fix 2026-01-26 01:57:12 +02:00
b4435552d0 regenerate docs 2026-01-26 01:57:12 +02:00
5441990ecb add archive trigger 2026-01-26 01:57:12 +02:00
fa0b7f2334 add archive trigger 2026-01-26 01:57:12 +02:00
c234123560 lookup through archive packages before build 2026-01-26 01:57:12 +02:00
1f47d52719 use generic packages tree for all repos 2026-01-26 01:57:12 +02:00
2750c85b87 implement atomic_move method, move files only with lock 2026-01-26 01:57:12 +02:00
c776c1c4a1 write tests to support new changes 2026-01-26 01:57:12 +02:00
acf3df2222 store built packages in archive tree instead of repository 2026-01-26 01:57:12 +02:00
799dc73d8a feat: update package status to success in case if package is up-to-date 2026-01-26 01:56:30 +02:00
4e79cbf71a fix: fallback to package name for missing bases in archive
package zoom is being generated without base, leading to None there

Closes #155
2026-01-22 16:34:19 +02:00
4 changed files with 39 additions and 3 deletions

View File

@@ -23,6 +23,7 @@ from ahriman.core.build_tools.sources import Sources
from ahriman.core.exceptions import UnknownPackageError
from ahriman.core.repository.cleaner import Cleaner
from ahriman.core.repository.package_info import PackageInfo
from ahriman.models.build_status import BuildStatusEnum
from ahriman.models.event import EventType
from ahriman.models.package import Package
from ahriman.models.package_source import PackageSource
@@ -71,6 +72,8 @@ class UpdateHandler(PackageInfo, Cleaner):
self.reporter.set_pending(local.base)
self.event(local.base, EventType.PackageOutdated, "Remote version is newer than local")
result.append(remote)
else:
self.reporter.package_status_update(local.base, BuildStatusEnum.Success)
except Exception:
self.reporter.set_failed(local.base)
self.logger.exception("could not load remote package %s", local.base)
@@ -79,7 +82,8 @@ class UpdateHandler(PackageInfo, Cleaner):
def updates_dependencies(self, filter_packages: Iterable[str]) -> list[Package]:
"""
check packages which ae required to be rebuilt based on dynamic dependencies (e.g. linking, modules paths, etc.)
check packages which are required to be rebuilt based on dynamic dependencies
(e.g. linking, modules paths, etc.)
Args:
filter_packages(Iterable[str]): do not check every package just specified in the list

View File

@@ -205,7 +205,7 @@ class Package(LazyLogging):
package = pacman.handle.load_pkg(str(path))
description = PackageDescription.from_package(package, path)
return cls(
base=package.base,
base=package.base or package.name,
version=package.version,
remote=RemoteSource(source=PackageSource.Archive),
packages={package.name: description},

View File

@@ -6,6 +6,7 @@ from typing import Any
from ahriman.core.exceptions import UnknownPackageError
from ahriman.core.repository.update_handler import UpdateHandler
from ahriman.models.build_status import BuildStatusEnum
from ahriman.models.dependencies import Dependencies
from ahriman.models.event import EventType
from ahriman.models.package import Package
@@ -66,6 +67,20 @@ def test_updates_aur_failed(update_handler: UpdateHandler, package_ahriman: Pack
status_client_mock.assert_called_once_with(package_ahriman.base)
def test_updates_aur_up_to_date(update_handler: UpdateHandler, package_ahriman: Package,
mocker: MockerFixture) -> None:
"""
must set success status for packages which are not out-of-dated
"""
mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.packages", return_value=[package_ahriman])
mocker.patch("ahriman.models.package.Package.from_aur", return_value=package_ahriman)
mocker.patch("ahriman.models.package.Package.is_outdated", return_value=False)
status_client_mock = mocker.patch("ahriman.core.status.local_client.LocalClient.package_status_update")
assert update_handler.updates_aur([], vcs=True) == []
status_client_mock.assert_called_once_with(package_ahriman.base, BuildStatusEnum.Success)
def test_updates_aur_local(update_handler: UpdateHandler, package_ahriman: Package,
mocker: MockerFixture) -> None:
"""

View File

@@ -2,7 +2,7 @@ import copy
from pathlib import Path
from pytest_mock import MockerFixture
from unittest.mock import MagicMock, call as MockCall
from unittest.mock import MagicMock, PropertyMock, call as MockCall
from ahriman.core.alpm.pacman import Pacman
from ahriman.core.configuration import Configuration
@@ -163,6 +163,23 @@ def test_from_archive(package_ahriman: Package, pyalpm_handle: MagicMock, mocker
assert generated == package_ahriman
def test_from_archive_empty_base(package_ahriman: Package, pyalpm_package_ahriman: MagicMock,
mocker: MockerFixture) -> None:
"""
must construct package with empty base from alpm library
"""
pyalpm_handle = MagicMock()
type(pyalpm_package_ahriman).base = PropertyMock(return_value=None)
pyalpm_handle.handle.load_pkg.return_value = pyalpm_package_ahriman
mocker.patch("ahriman.models.package_description.PackageDescription.from_package",
return_value=package_ahriman.packages[package_ahriman.base])
generated = Package.from_archive(Path("path"), pyalpm_handle)
generated.remote = package_ahriman.remote
assert generated == package_ahriman
def test_from_aur(package_ahriman: Package, aur_package_ahriman: AURPackage, mocker: MockerFixture) -> None:
"""
must construct package from aur