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],
skip_recommends: bool = False,
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.
'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
is found that conflicting Debian packages are installed on the system.
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)
@ -145,6 +150,7 @@ class Packages(app_module.FollowerComponent):
self.skip_recommends = skip_recommends
self.conflicts = conflicts or []
self.conflicts_action = conflicts_action
self.rerun_setup_on_upgrade = rerun_setup_on_upgrade
@property
def package_expressions(self) -> list[PackageExpression]:

View File

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