package: Allow app to say it wants to rerun setup after updates

Tests:

- Unit tests pass.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
Sunil Mohan Adapa 2025-03-27 20:43:35 -07:00 committed by James Valleroy
parent 1d4e9eacff
commit 97bae21e65
No known key found for this signature in database
GPG Key ID: 77C0C75E7B650808
2 changed files with 11 additions and 2 deletions

View File

@ -113,7 +113,8 @@ class Packages(app_module.FollowerComponent):
packages: list[str | PackageExpression], packages: list[str | PackageExpression],
skip_recommends: bool = False, skip_recommends: bool = False,
conflicts: list[str] | None = None, conflicts: list[str] | None = None,
conflicts_action: ConflictsAction | None = None): conflicts_action: ConflictsAction | None = None,
rerun_setup_on_upgrade: bool = False):
"""Initialize a new packages component. """Initialize a new packages component.
'component_id' should be a unique ID across all components of an app 'component_id' should be a unique ID across all components of an app
@ -131,6 +132,10 @@ class Packages(app_module.FollowerComponent):
'conflicts_action' is a string representing the action to take when it 'conflicts_action' is a string representing the action to take when it
is found that conflicting Debian packages are installed on the system. is found that conflicting Debian packages are installed on the system.
None if there are no known conflicting packages. None if there are no known conflicting packages.
'rerun_setup_on_upgrade' is a boolean to specify whether app's setup
process should be rerun if a .deb package is upgraded (by someone other
than FreedomBox process).
""" """
super().__init__(component_id) super().__init__(component_id)
@ -145,6 +150,7 @@ class Packages(app_module.FollowerComponent):
self.skip_recommends = skip_recommends self.skip_recommends = skip_recommends
self.conflicts = conflicts or [] self.conflicts = conflicts or []
self.conflicts_action = conflicts_action self.conflicts_action = conflicts_action
self.rerun_setup_on_upgrade = rerun_setup_on_upgrade
@property @property
def package_expressions(self) -> list[PackageExpression]: def package_expressions(self) -> list[PackageExpression]:

View File

@ -63,17 +63,20 @@ def test_packages_init():
assert not component.skip_recommends assert not component.skip_recommends
assert component.conflicts == [] assert component.conflicts == []
assert component.conflicts_action is None assert component.conflicts_action is None
assert not component.rerun_setup_on_upgrade
with pytest.raises(ValueError): with pytest.raises(ValueError):
Packages(None, []) Packages(None, [])
component = Packages('test-component', [], skip_recommends=True, component = Packages('test-component', [], skip_recommends=True,
conflicts=['conflict1', 'conflict2'], conflicts=['conflict1', 'conflict2'],
conflicts_action=Packages.ConflictsAction.IGNORE) conflicts_action=Packages.ConflictsAction.IGNORE,
rerun_setup_on_upgrade=True)
assert component.possible_packages == [] assert component.possible_packages == []
assert component.skip_recommends assert component.skip_recommends
assert component.conflicts == ['conflict1', 'conflict2'] assert component.conflicts == ['conflict1', 'conflict2']
assert component.conflicts_action == Packages.ConflictsAction.IGNORE assert component.conflicts_action == Packages.ConflictsAction.IGNORE
assert component.rerun_setup_on_upgrade
def test_packages_get_actual_packages(): def test_packages_get_actual_packages():