mirror of
https://github.com/arcan1s/ahriman.git
synced 2025-04-24 15:27:17 +00:00
try to remove unknown packages from api
This commit is contained in:
parent
39fde7cd5f
commit
9503a9f2ae
@ -21,7 +21,7 @@ import shutil
|
||||
|
||||
from pathlib import Path
|
||||
from tempfile import TemporaryDirectory
|
||||
from typing import Iterable, List, Optional
|
||||
from typing import Dict, Iterable, List, Optional
|
||||
|
||||
from ahriman.core.build_tools.task import Task
|
||||
from ahriman.core.repository.cleaner import Cleaner
|
||||
@ -122,26 +122,40 @@ class Executor(Cleaner):
|
||||
except Exception:
|
||||
self.logger.exception("could not remove %s", package)
|
||||
|
||||
packages_to_remove: Dict[str, Path] = {}
|
||||
bases_to_remove: List[str] = []
|
||||
|
||||
# build package list based on user input
|
||||
requested = set(packages)
|
||||
for local in self.packages():
|
||||
if local.base in packages or all(package in requested for package in local.packages):
|
||||
to_remove = {
|
||||
packages_to_remove.update({
|
||||
package: properties.filepath
|
||||
for package, properties in local.packages.items()
|
||||
if properties.filepath is not None
|
||||
}
|
||||
remove_base(local.base)
|
||||
})
|
||||
bases_to_remove.append(local.base)
|
||||
elif requested.intersection(local.packages.keys()):
|
||||
to_remove = {
|
||||
packages_to_remove.update({
|
||||
package: properties.filepath
|
||||
for package, properties in local.packages.items()
|
||||
if package in requested and properties.filepath is not None
|
||||
}
|
||||
else:
|
||||
to_remove = {}
|
||||
})
|
||||
|
||||
for package, filename in to_remove.items():
|
||||
remove_package(package, filename)
|
||||
# check for packages which were requested to remove, but weren't found locally
|
||||
# it might happen for example, if there were no success build before
|
||||
for unknown in requested:
|
||||
if unknown in packages_to_remove or unknown in bases_to_remove:
|
||||
continue
|
||||
bases_to_remove.append(unknown)
|
||||
|
||||
# remove packages from repository files
|
||||
for package, filename in packages_to_remove.items():
|
||||
remove_package(package, filename)
|
||||
|
||||
# remove bases from registered
|
||||
for package in bases_to_remove:
|
||||
remove_base(package)
|
||||
|
||||
return self.repo.repo_path
|
||||
|
||||
|
@ -144,6 +144,19 @@ def test_process_remove_nothing(executor: Executor, package_ahriman: Package, pa
|
||||
repo_remove_mock.assert_not_called()
|
||||
|
||||
|
||||
def test_process_remove_unknown(executor: Executor, package_ahriman: Package, mocker: MockerFixture) -> None:
|
||||
"""
|
||||
must remove unknown package base
|
||||
"""
|
||||
mocker.patch("ahriman.core.repository.executor.Executor.packages", return_value=[])
|
||||
repo_remove_mock = mocker.patch("ahriman.core.alpm.repo.Repo.remove")
|
||||
status_client_mock = mocker.patch("ahriman.core.status.client.Client.remove")
|
||||
|
||||
executor.process_remove([package_ahriman.base])
|
||||
repo_remove_mock.assert_not_called()
|
||||
status_client_mock.assert_called_once_with(package_ahriman.base)
|
||||
|
||||
|
||||
def test_process_update(executor: Executor, package_ahriman: Package, mocker: MockerFixture) -> None:
|
||||
"""
|
||||
must run update process
|
||||
|
Loading…
Reference in New Issue
Block a user