diff --git a/src/ahriman/core/repository/executor.py b/src/ahriman/core/repository/executor.py index f0bce676..0eab6a5e 100644 --- a/src/ahriman/core/repository/executor.py +++ b/src/ahriman/core/repository/executor.py @@ -117,7 +117,8 @@ class Executor(PackageInfo, Cleaner): # build package list based on user input result = Result() - requested = set(packages) + packages = set(packages) # remove duplicates + requested = packages | {f"{package}-debug" for package in packages} # append debug packages for local in self.packages(): if local.base in packages or all(package in requested for package in local.packages): packages_to_remove.update({ @@ -136,7 +137,7 @@ class Executor(PackageInfo, Cleaner): # 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: + for unknown in packages: if unknown in packages_to_remove or unknown in bases_to_remove: continue bases_to_remove.append(unknown) diff --git a/tests/ahriman/core/repository/test_executor.py b/tests/ahriman/core/repository/test_executor.py index eedf4c69..118274c5 100644 --- a/tests/ahriman/core/repository/test_executor.py +++ b/tests/ahriman/core/repository/test_executor.py @@ -89,6 +89,28 @@ def test_process_remove_base(executor: Executor, package_ahriman: Package, mocke commit_sha_mock.assert_called_once_with(package_ahriman.base) +def test_process_remove_with_debug(executor: Executor, package_ahriman: Package, mocker: MockerFixture) -> None: + """ + must run remove debug packages too + """ + package_ahriman.packages = { + package_ahriman.base: package_ahriman.packages[package_ahriman.base], + f"{package_ahriman.base}-debug": package_ahriman.packages[package_ahriman.base], + } + mocker.patch("ahriman.core.repository.executor.Executor.packages", return_value=[package_ahriman]) + mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_clear") + mocker.patch("ahriman.core.database.SQLite.package_clear") + mocker.patch("ahriman.core.status.client.Client.package_remove") + repo_remove_mock = mocker.patch("ahriman.core.alpm.repo.Repo.remove") + + executor.process_remove([package_ahriman.base]) + # must remove via alpm wrapper + repo_remove_mock.assert_has_calls([ + MockCall(package_ahriman.base, package_ahriman.packages[package_ahriman.base].filepath), + MockCall(f"{package_ahriman.base}-debug", package_ahriman.packages[package_ahriman.base].filepath), + ]) + + def test_process_remove_base_multiple(executor: Executor, package_python_schedule: Package, mocker: MockerFixture) -> None: """