diff --git a/src/ahriman/application/handlers/rebuild.py b/src/ahriman/application/handlers/rebuild.py index 50cdd7eb..89dda905 100644 --- a/src/ahriman/application/handlers/rebuild.py +++ b/src/ahriman/application/handlers/rebuild.py @@ -51,10 +51,8 @@ class Rebuild(Handler): application = Application(architecture, configuration, report=report, unsafe=unsafe) application.on_start() - if args.from_database: - updates = Rebuild.extract_packages(application) - else: - updates = application.repository.packages_depend_on(depends_on) + packages = Rebuild.extract_packages(application, from_database=args.from_database) + updates = application.repository.packages_depend_on(packages, depends_on) Rebuild.check_if_empty(args.exit_code, not updates) if args.dry_run: @@ -66,14 +64,17 @@ class Rebuild(Handler): Rebuild.check_if_empty(args.exit_code, result.is_empty) @staticmethod - def extract_packages(application: Application) -> List[Package]: + def extract_packages(application: Application, *, from_database: bool) -> List[Package]: """ extract packages from database file Args: application(Application): application instance + from_database(bool): extract packages from database instead of repository filesystem Returns: List[Package]: list of packages which were stored in database """ + if from_database: + return application.repository.packages() return [package for (package, _) in application.database.packages_get()] diff --git a/src/ahriman/core/repository/repository.py b/src/ahriman/core/repository/repository.py index eeabc801..90720dc9 100644 --- a/src/ahriman/core/repository/repository.py +++ b/src/ahriman/core/repository/repository.py @@ -99,17 +99,17 @@ class Repository(Executor, UpdateHandler): """ return list(filter(package_like, self.paths.packages.iterdir())) - def packages_depend_on(self, depends_on: Optional[Iterable[str]]) -> List[Package]: + def packages_depend_on(self, packages: List[Package], depends_on: Optional[Iterable[str]]) -> List[Package]: """ extract list of packages which depends on specified package Args: + packages(List[Package]): list of packages to be filtered depends_on(Optional[Iterable[str]]): dependencies of the packages Returns: List[Package]: list of repository packages which depend on specified packages """ - packages = self.packages() if depends_on is None: return packages # no list provided extract everything by default depends_on = set(depends_on) diff --git a/tests/ahriman/application/handlers/test_handler_rebuild.py b/tests/ahriman/application/handlers/test_handler_rebuild.py index dc95023c..bd8e8334 100644 --- a/tests/ahriman/application/handlers/test_handler_rebuild.py +++ b/tests/ahriman/application/handlers/test_handler_rebuild.py @@ -37,6 +37,7 @@ def test_run(args: argparse.Namespace, package_ahriman: Package, result = Result() result.add_success(package_ahriman) mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create") + extract_mock = mocker.patch("ahriman.application.handlers.Rebuild.extract_packages", return_value=[package_ahriman]) application_packages_mock = mocker.patch("ahriman.core.repository.repository.Repository.packages_depend_on", return_value=[package_ahriman]) application_mock = mocker.patch("ahriman.application.application.Application.update", return_value=result) @@ -44,7 +45,8 @@ def test_run(args: argparse.Namespace, package_ahriman: Package, on_start_mock = mocker.patch("ahriman.application.application.Application.on_start") Rebuild.run(args, "x86_64", configuration, report=False, unsafe=False) - application_packages_mock.assert_called_once_with(None) + extract_mock.assert_called_once_with(pytest.helpers.anyvar(int), from_database=args.from_database) + application_packages_mock.assert_called_once_with([package_ahriman], None) application_mock.assert_called_once_with([package_ahriman]) check_mock.assert_has_calls([MockCall(False, False), MockCall(False, False)]) on_start_mock.assert_called_once_with() @@ -62,7 +64,7 @@ def test_run_extract_packages(args: argparse.Namespace, configuration: Configura extract_mock = mocker.patch("ahriman.application.handlers.Rebuild.extract_packages", return_value=[]) Rebuild.run(args, "x86_64", configuration, report=False, unsafe=False) - extract_mock.assert_called_once_with(pytest.helpers.anyvar(int)) + extract_mock.assert_called_once_with(pytest.helpers.anyvar(int), from_database=args.from_database) def test_run_dry_run(args: argparse.Namespace, configuration: Configuration, @@ -93,7 +95,7 @@ def test_run_filter(args: argparse.Namespace, configuration: Configuration, mock application_packages_mock = mocker.patch("ahriman.core.repository.repository.Repository.packages_depend_on") Rebuild.run(args, "x86_64", configuration, report=False, unsafe=False) - application_packages_mock.assert_called_once_with({"python-aur"}) + application_packages_mock.assert_called_once_with([], {"python-aur"}) def test_run_without_filter(args: argparse.Namespace, configuration: Configuration, mocker: MockerFixture) -> None: @@ -106,7 +108,7 @@ def test_run_without_filter(args: argparse.Namespace, configuration: Configurati application_packages_mock = mocker.patch("ahriman.core.repository.repository.Repository.packages_depend_on") Rebuild.run(args, "x86_64", configuration, report=False, unsafe=False) - application_packages_mock.assert_called_once_with(None) + application_packages_mock.assert_called_once_with([], None) def test_run_update_empty_exception(args: argparse.Namespace, configuration: Configuration, @@ -146,5 +148,14 @@ def test_extract_packages(application: Application, mocker: MockerFixture) -> No must extract packages from database """ packages_mock = mocker.patch("ahriman.core.database.SQLite.packages_get") - Rebuild.extract_packages(application) + Rebuild.extract_packages(application, from_database=False) + packages_mock.assert_called_once_with() + + +def test_extract_packages_from_database(application: Application, mocker: MockerFixture) -> None: + """ + must extract packages from database + """ + packages_mock = mocker.patch("ahriman.core.repository.repository.Repository.packages") + Rebuild.extract_packages(application, from_database=True) packages_mock.assert_called_once_with() diff --git a/tests/ahriman/core/repository/test_repository.py b/tests/ahriman/core/repository/test_repository.py index 1f1f704a..7f4dd175 100644 --- a/tests/ahriman/core/repository/test_repository.py +++ b/tests/ahriman/core/repository/test_repository.py @@ -92,7 +92,7 @@ def test_packages_depend_on(repository: Repository, package_ahriman: Package, pa """ mocker.patch("ahriman.core.repository.repository.Repository.packages", return_value=[package_ahriman, package_python_schedule]) - assert repository.packages_depend_on(["python-aur"]) == [package_ahriman] + assert repository.packages_depend_on([package_ahriman], ["python-aur"]) == [package_ahriman] def test_packages_depend_on_empty(repository: Repository, package_ahriman: Package, package_python_schedule: Package, @@ -102,4 +102,5 @@ def test_packages_depend_on_empty(repository: Repository, package_ahriman: Packa """ mocker.patch("ahriman.core.repository.repository.Repository.packages", return_value=[package_ahriman, package_python_schedule]) - assert repository.packages_depend_on(None) == [package_ahriman, package_python_schedule] + assert repository.packages_depend_on([package_ahriman, package_python_schedule], None) ==\ + [package_ahriman, package_python_schedule]