package: Prevent freedombox's deps from removal during app uninstall

- If an app declares dependency on package that is also a dependency for
freedombox, then during the app's uninstall, the dependency is attempt to be
removed and will fail (because freedombox package will be held state).

- Add freedombox (and thus its dependencies) to the list packages that should be
removed from list of packages to be removed during app uninstall.

- In test case, update list of packages attempted removal as the 'freedombox'
package is installed only in some environments.

Tests:

- Uninstall janus works. Log messages show that libjs-bootstrap5 and
node-popper2 are in the list of packages originally set to removed during app
uninstall but are later filtered out.

- Run pytest with 'freedombox' package installed and ensure all 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-11-11 12:39:24 -08:00 committed by James Valleroy
parent b6bade7d06
commit 6c3b2e1f82
No known key found for this signature in database
GPG Key ID: 77C0C75E7B650808
2 changed files with 5 additions and 5 deletions

View File

@ -308,9 +308,9 @@ class Packages(app_module.FollowerComponent):
"""
packages_set: set[str] = set(packages)
# Get list of packages needed by other installed apps (packages to
# keep).
keep_packages: set[str] = set()
# Get list of packages needed by other installed apps and by freedombox
# itself (packages to keep).
keep_packages: set[str] = {'freedombox'}
for app in app_module.App.list():
# uninstall() will be called on Packages of this app separately
# for uninstalling this app.

View File

@ -178,11 +178,11 @@ def test_packages_uninstall(uninstall, _refresh_package_lists):
"""Test app"""
app_id = 'test-app'
component = Packages('test-component', ['python3', 'bash'])
component = Packages('test-component', ['bash', 'dash'])
app = TestApp()
app.add(component)
app.uninstall()
uninstall.assert_has_calls([call(['python3', 'bash'], purge=True)])
uninstall.assert_has_calls([call(['bash', 'dash'], purge=True)])
@patch('plinth.package.refresh_package_lists')