mirror of
https://github.com/arcan1s/ahriman.git
synced 2025-04-24 15:27:17 +00:00
handle packages load from aur by package name also
In general package names array may not contain package base, thus it leads to inability to load packages from aur by its base during update process
This commit is contained in:
parent
f5fe200247
commit
95f52f7ebe
@ -20,6 +20,7 @@
|
|||||||
from collections.abc import Iterable
|
from collections.abc import Iterable
|
||||||
|
|
||||||
from ahriman.core.build_tools.sources import Sources
|
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.cleaner import Cleaner
|
||||||
from ahriman.models.package import Package
|
from ahriman.models.package import Package
|
||||||
from ahriman.models.package_source import PackageSource
|
from ahriman.models.package_source import PackageSource
|
||||||
@ -53,6 +54,19 @@ class UpdateHandler(Cleaner):
|
|||||||
Returns:
|
Returns:
|
||||||
list[Package]: list of packages which are out-of-dated
|
list[Package]: list of packages which are out-of-dated
|
||||||
"""
|
"""
|
||||||
|
def load_remote(package: Package) -> Package:
|
||||||
|
source = package.remote.source if package.remote is not None else None
|
||||||
|
|
||||||
|
# try to load package from base and if none found try to load by separated packages
|
||||||
|
for probe in [package.base] + sorted(package.packages.keys()):
|
||||||
|
try:
|
||||||
|
if source == PackageSource.Repository:
|
||||||
|
return Package.from_official(probe, self.pacman, None)
|
||||||
|
return Package.from_aur(probe, self.pacman, None)
|
||||||
|
except UnknownPackageError:
|
||||||
|
continue
|
||||||
|
raise UnknownPackageError(package.base)
|
||||||
|
|
||||||
result: list[Package] = []
|
result: list[Package] = []
|
||||||
|
|
||||||
for local in self.packages():
|
for local in self.packages():
|
||||||
@ -61,13 +75,9 @@ class UpdateHandler(Cleaner):
|
|||||||
continue
|
continue
|
||||||
if filter_packages and local.base not in filter_packages:
|
if filter_packages and local.base not in filter_packages:
|
||||||
continue
|
continue
|
||||||
source = local.remote.source if local.remote is not None else None
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if source == PackageSource.Repository:
|
remote = load_remote(local)
|
||||||
remote = Package.from_official(local.base, self.pacman, None)
|
|
||||||
else:
|
|
||||||
remote = Package.from_aur(local.base, self.pacman, None)
|
|
||||||
|
|
||||||
if local.is_outdated(
|
if local.is_outdated(
|
||||||
remote, self.paths,
|
remote, self.paths,
|
||||||
|
@ -2,7 +2,9 @@ import pytest
|
|||||||
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from pytest_mock import MockerFixture
|
from pytest_mock import MockerFixture
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
from ahriman.core.exceptions import UnknownPackageError
|
||||||
from ahriman.core.repository.update_handler import UpdateHandler
|
from ahriman.core.repository.update_handler import UpdateHandler
|
||||||
from ahriman.models.package import Package
|
from ahriman.models.package import Package
|
||||||
from ahriman.models.package_source import PackageSource
|
from ahriman.models.package_source import PackageSource
|
||||||
@ -107,6 +109,35 @@ def test_updates_aur_ignore_vcs(update_handler: UpdateHandler, package_ahriman:
|
|||||||
calculate_version=False)
|
calculate_version=False)
|
||||||
|
|
||||||
|
|
||||||
|
def test_updates_aur_load_by_package(update_handler: UpdateHandler, package_python_schedule: Package,
|
||||||
|
mocker: MockerFixture) -> None:
|
||||||
|
"""
|
||||||
|
must load package by package name if none found by base
|
||||||
|
"""
|
||||||
|
def package_selector(name: str, *_: Any) -> Package:
|
||||||
|
if name == package_python_schedule.base:
|
||||||
|
raise UnknownPackageError(name)
|
||||||
|
return package_python_schedule
|
||||||
|
|
||||||
|
mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.packages",
|
||||||
|
return_value=[package_python_schedule])
|
||||||
|
mocker.patch("ahriman.models.package.Package.from_aur", side_effect=package_selector)
|
||||||
|
mocker.patch("ahriman.models.package.Package.is_outdated", return_value=True)
|
||||||
|
assert update_handler.updates_aur([], vcs=True) == [package_python_schedule]
|
||||||
|
|
||||||
|
|
||||||
|
def test_updates_load_by_package_aur_failed(update_handler: UpdateHandler, package_ahriman: Package,
|
||||||
|
mocker: MockerFixture) -> None:
|
||||||
|
"""
|
||||||
|
must update status via client for failed load
|
||||||
|
"""
|
||||||
|
mocker.patch("ahriman.core.repository.update_handler.UpdateHandler.packages", return_value=[package_ahriman])
|
||||||
|
mocker.patch("ahriman.models.package.Package.from_aur", side_effect=UnknownPackageError(package_ahriman.base))
|
||||||
|
mocker.patch("ahriman.core.status.client.Client.set_failed")
|
||||||
|
|
||||||
|
update_handler.updates_aur([], vcs=True)
|
||||||
|
|
||||||
|
|
||||||
def test_updates_local(update_handler: UpdateHandler, package_ahriman: Package, mocker: MockerFixture) -> None:
|
def test_updates_local(update_handler: UpdateHandler, package_ahriman: Package, mocker: MockerFixture) -> None:
|
||||||
"""
|
"""
|
||||||
must check for updates for locally stored packages
|
must check for updates for locally stored packages
|
||||||
|
Loading…
Reference in New Issue
Block a user