mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-01-21 07:55:00 +00:00
package: Fail diagnostic when not able to resolve
When a package expression cannot be resolved (i.e. not installable), add a diagnostic failure result with appropriate message. Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
parent
45820fbdfa
commit
691817477f
@ -56,6 +56,9 @@ class Package(PackageExpression):
|
||||
self.codename = codename
|
||||
self.architecture = architecture
|
||||
|
||||
def __repr__(self):
|
||||
return self.name
|
||||
|
||||
def __or__(self, other):
|
||||
return PackageOr(self, other)
|
||||
|
||||
@ -79,6 +82,9 @@ class PackageOr(PackageExpression):
|
||||
self.package1 = package1
|
||||
self.package2 = package2
|
||||
|
||||
def __repr__(self):
|
||||
return self.package1.name + ' | ' + self.package2.name
|
||||
|
||||
def possible(self) -> list[str]:
|
||||
return self.package1.possible() + self.package2.possible()
|
||||
|
||||
@ -169,8 +175,15 @@ class Packages(app.FollowerComponent):
|
||||
"""Run diagnostics and return results."""
|
||||
results = super().diagnose()
|
||||
cache = apt.Cache()
|
||||
# XXX: Needs to be able to handle missing packages.
|
||||
for package_name in self.resolve():
|
||||
for package_expression in self.packages:
|
||||
try:
|
||||
package_name = package_expression.actual()
|
||||
except MissingPackageError:
|
||||
message = _('Package {expression} is not available for '
|
||||
'install').format(expression=package_expression)
|
||||
results.append([message, 'failed'])
|
||||
continue
|
||||
|
||||
result = 'warning'
|
||||
latest_version = '?'
|
||||
if package_name in cache:
|
||||
|
||||
@ -126,16 +126,24 @@ def test_diagnose(cache):
|
||||
cache.return_value = {
|
||||
'package2': Mock(candidate=Mock(version='2.0', is_installed=True)),
|
||||
'package3': Mock(candidate=Mock(version='3.0', is_installed=False)),
|
||||
'package7': Mock(candidate=Mock(version='4.0', is_installed=True)),
|
||||
}
|
||||
component = Packages('test-component',
|
||||
['package1', 'package2', 'package3'])
|
||||
component = Packages('test-component', [
|
||||
'package1', 'package2', 'package3',
|
||||
Package('package4') | Package('package5'),
|
||||
Package('package6') | Package('package7')
|
||||
])
|
||||
results = component.diagnose()
|
||||
assert '(?)' in results[0][0]
|
||||
assert results[0][1] == 'warning'
|
||||
assert 'not available for install' in results[0][0]
|
||||
assert results[0][1] == 'failed'
|
||||
assert '(2.0)' in results[1][0]
|
||||
assert results[1][1] == 'passed'
|
||||
assert '(3.0)' in results[2][0]
|
||||
assert results[2][1] == 'warning'
|
||||
assert 'not available for install' in results[3][0]
|
||||
assert results[3][1] == 'failed'
|
||||
assert '(4.0)' in results[4][0]
|
||||
assert results[4][1] == 'passed'
|
||||
|
||||
|
||||
@patch('plinth.package.packages_installed')
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user