mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-09-19 04:59:01 +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.codename = codename
|
||||||
self.architecture = architecture
|
self.architecture = architecture
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
def __or__(self, other):
|
def __or__(self, other):
|
||||||
return PackageOr(self, other)
|
return PackageOr(self, other)
|
||||||
|
|
||||||
@ -79,6 +82,9 @@ class PackageOr(PackageExpression):
|
|||||||
self.package1 = package1
|
self.package1 = package1
|
||||||
self.package2 = package2
|
self.package2 = package2
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return self.package1.name + ' | ' + self.package2.name
|
||||||
|
|
||||||
def possible(self) -> list[str]:
|
def possible(self) -> list[str]:
|
||||||
return self.package1.possible() + self.package2.possible()
|
return self.package1.possible() + self.package2.possible()
|
||||||
|
|
||||||
@ -169,8 +175,15 @@ class Packages(app.FollowerComponent):
|
|||||||
"""Run diagnostics and return results."""
|
"""Run diagnostics and return results."""
|
||||||
results = super().diagnose()
|
results = super().diagnose()
|
||||||
cache = apt.Cache()
|
cache = apt.Cache()
|
||||||
# XXX: Needs to be able to handle missing packages.
|
for package_expression in self.packages:
|
||||||
for package_name in self.resolve():
|
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'
|
result = 'warning'
|
||||||
latest_version = '?'
|
latest_version = '?'
|
||||||
if package_name in cache:
|
if package_name in cache:
|
||||||
|
|||||||
@ -126,16 +126,24 @@ def test_diagnose(cache):
|
|||||||
cache.return_value = {
|
cache.return_value = {
|
||||||
'package2': Mock(candidate=Mock(version='2.0', is_installed=True)),
|
'package2': Mock(candidate=Mock(version='2.0', is_installed=True)),
|
||||||
'package3': Mock(candidate=Mock(version='3.0', is_installed=False)),
|
'package3': Mock(candidate=Mock(version='3.0', is_installed=False)),
|
||||||
|
'package7': Mock(candidate=Mock(version='4.0', is_installed=True)),
|
||||||
}
|
}
|
||||||
component = Packages('test-component',
|
component = Packages('test-component', [
|
||||||
['package1', 'package2', 'package3'])
|
'package1', 'package2', 'package3',
|
||||||
|
Package('package4') | Package('package5'),
|
||||||
|
Package('package6') | Package('package7')
|
||||||
|
])
|
||||||
results = component.diagnose()
|
results = component.diagnose()
|
||||||
assert '(?)' in results[0][0]
|
assert 'not available for install' in results[0][0]
|
||||||
assert results[0][1] == 'warning'
|
assert results[0][1] == 'failed'
|
||||||
assert '(2.0)' in results[1][0]
|
assert '(2.0)' in results[1][0]
|
||||||
assert results[1][1] == 'passed'
|
assert results[1][1] == 'passed'
|
||||||
assert '(3.0)' in results[2][0]
|
assert '(3.0)' in results[2][0]
|
||||||
assert results[2][1] == 'warning'
|
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')
|
@patch('plinth.package.packages_installed')
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user