From 97bae21e653b519209c22fb3222c7010498b02ee Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Thu, 27 Mar 2025 20:43:35 -0700 Subject: [PATCH] package: Allow app to say it wants to rerun setup after updates Tests: - Unit tests pass. Signed-off-by: Sunil Mohan Adapa Reviewed-by: James Valleroy --- plinth/package.py | 8 +++++++- plinth/tests/test_package.py | 5 ++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/plinth/package.py b/plinth/package.py index 22a158f41..4cbb59b3a 100644 --- a/plinth/package.py +++ b/plinth/package.py @@ -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]: diff --git a/plinth/tests/test_package.py b/plinth/tests/test_package.py index 3a811e4e4..8c27c3330 100644 --- a/plinth/tests/test_package.py +++ b/plinth/tests/test_package.py @@ -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():