Compare commits

..

2 Commits

Author SHA1 Message Date
78314146b8 regenerate docs 2025-09-16 00:58:01 +03:00
25b66b5b60 add archive trigger 2025-09-16 00:46:05 +03:00
5 changed files with 80 additions and 3 deletions

View File

@ -0,0 +1,29 @@
ahriman.core.archive package
============================
Submodules
----------
ahriman.core.archive.archive\_tree module
-----------------------------------------
.. automodule:: ahriman.core.archive.archive_tree
:members:
:no-undoc-members:
:show-inheritance:
ahriman.core.archive.archive\_trigger module
--------------------------------------------
.. automodule:: ahriman.core.archive.archive_trigger
:members:
:no-undoc-members:
:show-inheritance:
Module contents
---------------
.. automodule:: ahriman.core.archive
:members:
:no-undoc-members:
:show-inheritance:

View File

@ -8,6 +8,7 @@ Subpackages
:maxdepth: 4 :maxdepth: 4
ahriman.core.alpm ahriman.core.alpm
ahriman.core.archive
ahriman.core.auth ahriman.core.auth
ahriman.core.build_tools ahriman.core.build_tools
ahriman.core.configuration ahriman.core.configuration

View File

@ -57,7 +57,7 @@ def test_repo_init(repo: Repo, mocker: MockerFixture) -> None:
assert check_output_mock.call_args[0][0] == "repo-add" assert check_output_mock.call_args[0][0] == "repo-add"
def test_repo_remove(repo: Repo, package_ahriman: Package,mocker: MockerFixture) -> None: def test_repo_remove(repo: Repo, package_ahriman: Package, mocker: MockerFixture) -> None:
""" """
must call repo-remove on package removal must call repo-remove on package removal
""" """

View File

@ -37,4 +37,4 @@ def archive_trigger(configuration: Configuration, gpg: GPG, mocker: MockerFixtur
""" """
mocker.patch("ahriman.core._Context.get", return_value=GPG) mocker.patch("ahriman.core._Context.get", return_value=GPG)
_, repository_id = configuration.check_loaded() _, repository_id = configuration.check_loaded()
return ArchiveTrigger(repository_id, configuration) return ArchiveTrigger(repository_id, configuration)

View File

@ -1,4 +1,3 @@
from dataclasses import replace
from pathlib import Path from pathlib import Path
from pytest_mock import MockerFixture from pytest_mock import MockerFixture
@ -23,6 +22,7 @@ def test_symlinks_create(archive_tree: ArchiveTree, package_ahriman: Package, pa
must create symlinks must create symlinks
""" """
_original_exists = Path.exists _original_exists = Path.exists
def exists_mock(path: Path) -> bool: def exists_mock(path: Path) -> bool:
if path.name in (package.filename for package in package_python_schedule.packages.values()): if path.name in (package.filename for package in package_python_schedule.packages.values()):
return True return True
@ -63,6 +63,53 @@ def test_symlinks_create_empty_filename(archive_tree: ArchiveTree, package_ahrim
symlinks_mock.assert_not_called() symlinks_mock.assert_not_called()
def test_symlinks_fix(archive_tree: ArchiveTree, mocker: MockerFixture) -> None:
"""
must fix broken symlinks
"""
_original_exists = Path.exists
def exists_mock(path: Path) -> bool:
if path.name == "symlink":
return True
return _original_exists(path)
mocker.patch("pathlib.Path.is_symlink", side_effect=[True, True, False])
mocker.patch("pathlib.Path.exists", autospec=True, side_effect=exists_mock)
walk_mock = mocker.patch("ahriman.core.archive.archive_tree.walk", return_value=[
archive_tree.repository_for() / filename
for filename in ("symlink", "broken_symlink", "file")
])
remove_mock = mocker.patch("ahriman.core.alpm.repo.Repo.remove")
archive_tree.symlinks_fix()
walk_mock.assert_called_once_with(archive_tree.paths.archive / "repos")
remove_mock.assert_called_once_with(None, archive_tree.repository_for() / "broken_symlink")
def test_symlinks_fix_foreign_repository(archive_tree: ArchiveTree, mocker: MockerFixture) -> None:
"""
must skip symlinks check if repository name or architecture doesn't match
"""
_original_exists = Path.exists
def exists_mock(path: Path) -> bool:
if path.name == "symlink":
return True
return _original_exists(path)
mocker.patch("pathlib.Path.is_symlink", side_effect=[True, True, False])
mocker.patch("pathlib.Path.exists", autospec=True, side_effect=exists_mock)
mocker.patch("ahriman.core.archive.archive_tree.walk", return_value=[
archive_tree.repository_for().with_name("i686") / filename
for filename in ("symlink", "broken_symlink", "file")
])
remove_mock = mocker.patch("ahriman.core.alpm.repo.Repo.remove")
archive_tree.symlinks_fix()
remove_mock.assert_not_called()
def test_tree_create(archive_tree: ArchiveTree, mocker: MockerFixture) -> None: def test_tree_create(archive_tree: ArchiveTree, mocker: MockerFixture) -> None:
""" """
must create repository root if not exists must create repository root if not exists