updatectl: fix feature JSON parsing

The feature JSON payload switched to `id`, `isEnabled`, and `appstream`,
and made `documentation` an array of URLs.
`updatectl` still parsed legacy table-derived names and a single URL.
This broke feature JSON parsing and made output inconsistent.
Features without documentation could also cause a null dereference.

Align `updatectl` with the current schema and preserve all
documentation URLs across sysupdate, D-Bus, and Varlink payloads.
Propagate condition evaluation errors through `condition_test_list()`
and `feature_is_suggested()`, with consistent JSON error handling and
tests.
The `suggested` field is now optional and always a boolean when
present; it is omitted rather than set to an error string when
SuggestOn*= conditions cannot be evaluated.
Add `suggested` metadata and document the field transition.

Follow-up for 3e34ccf6df.
Follow-up for 75a247d4de.
Follow-up for 40e727c93b.

Fixes #43603
This commit is contained in:
dongshengyuan
2026-09-08 16:05:36 +02:00
committed by Zbigniew Jędrzejewski-Szmek
parent 8839a9810e
commit a6f7ded859
10 changed files with 206 additions and 68 deletions
+6
View File
@@ -143,6 +143,12 @@ CHANGES WITH 262 in spe:
"none" returned previously. In the human-readable table output a
hierarchy that is not merged is now shown as "-" instead of "none".
* The JSON payload returned by systemd-sysupdated's DescribeFeature()
method changed the "name" and "enabled" keys to "id" and
"isEnabled", respectively. The "appStream" key is now "appstream",
and the "documentation" key is now an array of strings. Consumers
of this interface must update their JSON parsing accordingly.
Changes in the system and service manager:
* The manager now embeds a basic set of unit files (basic.target,