mirror of
https://github.com/arcan1s/ahriman.git
synced 2025-04-24 07:17:17 +00:00
use intersection of from_database and depends_on filters for the rebuild subcommand
Old logic used OR condition, i.e. if set from-database, it would ignore the --depends-on flag. In new logic it calculates dependencies based on the package list, which can be retrieved from database
This commit is contained in:
parent
9fc2b681d4
commit
f817b32976
@ -51,10 +51,8 @@ class Rebuild(Handler):
|
|||||||
application = Application(architecture, configuration, report=report, unsafe=unsafe)
|
application = Application(architecture, configuration, report=report, unsafe=unsafe)
|
||||||
application.on_start()
|
application.on_start()
|
||||||
|
|
||||||
if args.from_database:
|
packages = Rebuild.extract_packages(application, from_database=args.from_database)
|
||||||
updates = Rebuild.extract_packages(application)
|
updates = application.repository.packages_depend_on(packages, depends_on)
|
||||||
else:
|
|
||||||
updates = application.repository.packages_depend_on(depends_on)
|
|
||||||
|
|
||||||
Rebuild.check_if_empty(args.exit_code, not updates)
|
Rebuild.check_if_empty(args.exit_code, not updates)
|
||||||
if args.dry_run:
|
if args.dry_run:
|
||||||
@ -66,14 +64,17 @@ class Rebuild(Handler):
|
|||||||
Rebuild.check_if_empty(args.exit_code, result.is_empty)
|
Rebuild.check_if_empty(args.exit_code, result.is_empty)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def extract_packages(application: Application) -> List[Package]:
|
def extract_packages(application: Application, *, from_database: bool) -> List[Package]:
|
||||||
"""
|
"""
|
||||||
extract packages from database file
|
extract packages from database file
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
application(Application): application instance
|
application(Application): application instance
|
||||||
|
from_database(bool): extract packages from database instead of repository filesystem
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
List[Package]: list of packages which were stored in database
|
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()]
|
return [package for (package, _) in application.database.packages_get()]
|
||||||
|
@ -99,17 +99,17 @@ class Repository(Executor, UpdateHandler):
|
|||||||
"""
|
"""
|
||||||
return list(filter(package_like, self.paths.packages.iterdir()))
|
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
|
extract list of packages which depends on specified package
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
packages(List[Package]): list of packages to be filtered
|
||||||
depends_on(Optional[Iterable[str]]): dependencies of the packages
|
depends_on(Optional[Iterable[str]]): dependencies of the packages
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
List[Package]: list of repository packages which depend on specified packages
|
List[Package]: list of repository packages which depend on specified packages
|
||||||
"""
|
"""
|
||||||
packages = self.packages()
|
|
||||||
if depends_on is None:
|
if depends_on is None:
|
||||||
return packages # no list provided extract everything by default
|
return packages # no list provided extract everything by default
|
||||||
depends_on = set(depends_on)
|
depends_on = set(depends_on)
|
||||||
|
@ -37,6 +37,7 @@ def test_run(args: argparse.Namespace, package_ahriman: Package,
|
|||||||
result = Result()
|
result = Result()
|
||||||
result.add_success(package_ahriman)
|
result.add_success(package_ahriman)
|
||||||
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
|
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",
|
application_packages_mock = mocker.patch("ahriman.core.repository.repository.Repository.packages_depend_on",
|
||||||
return_value=[package_ahriman])
|
return_value=[package_ahriman])
|
||||||
application_mock = mocker.patch("ahriman.application.application.Application.update", return_value=result)
|
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")
|
on_start_mock = mocker.patch("ahriman.application.application.Application.on_start")
|
||||||
|
|
||||||
Rebuild.run(args, "x86_64", configuration, report=False, unsafe=False)
|
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])
|
application_mock.assert_called_once_with([package_ahriman])
|
||||||
check_mock.assert_has_calls([MockCall(False, False), MockCall(False, False)])
|
check_mock.assert_has_calls([MockCall(False, False), MockCall(False, False)])
|
||||||
on_start_mock.assert_called_once_with()
|
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=[])
|
extract_mock = mocker.patch("ahriman.application.handlers.Rebuild.extract_packages", return_value=[])
|
||||||
|
|
||||||
Rebuild.run(args, "x86_64", configuration, report=False, unsafe=False)
|
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,
|
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")
|
application_packages_mock = mocker.patch("ahriman.core.repository.repository.Repository.packages_depend_on")
|
||||||
|
|
||||||
Rebuild.run(args, "x86_64", configuration, report=False, unsafe=False)
|
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:
|
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")
|
application_packages_mock = mocker.patch("ahriman.core.repository.repository.Repository.packages_depend_on")
|
||||||
|
|
||||||
Rebuild.run(args, "x86_64", configuration, report=False, unsafe=False)
|
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,
|
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
|
must extract packages from database
|
||||||
"""
|
"""
|
||||||
packages_mock = mocker.patch("ahriman.core.database.SQLite.packages_get")
|
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()
|
packages_mock.assert_called_once_with()
|
||||||
|
@ -92,7 +92,7 @@ def test_packages_depend_on(repository: Repository, package_ahriman: Package, pa
|
|||||||
"""
|
"""
|
||||||
mocker.patch("ahriman.core.repository.repository.Repository.packages",
|
mocker.patch("ahriman.core.repository.repository.Repository.packages",
|
||||||
return_value=[package_ahriman, package_python_schedule])
|
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,
|
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",
|
mocker.patch("ahriman.core.repository.repository.Repository.packages",
|
||||||
return_value=[package_ahriman, package_python_schedule])
|
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]
|
||||||
|
Loading…
Reference in New Issue
Block a user