mirror of
https://github.com/systemd/systemd.git
synced 2026-07-23 07:50:41 +00:00
sysupdate: Add partial/pending flags to UpdateSet
This commit adds the flags and some basic formatting/printing of them. Following commits will integrate them into the update/acquire/install logic. `UPDATE_PARTIAL` is set if any of the instances in the `UpdateSet` are partial, i.e. have been partially downloaded. `UPDATE_PENDING` is set if any of the instances in the `UpdateSet` are pending, i.e. have been acquired (downloaded) but not yet installed. Signed-off-by: Philip Withnall <pwithnall@gnome.org> Helps: https://github.com/systemd/systemd/issues/34814
This commit is contained in:
@@ -9,6 +9,9 @@ const char* update_set_flags_to_color(UpdateSetFlags flags) {
|
||||
if (flags == 0 || (flags & UPDATE_OBSOLETE))
|
||||
return (flags & UPDATE_NEWEST) ? ansi_highlight_grey() : ansi_grey();
|
||||
|
||||
if (flags & (UPDATE_PARTIAL|UPDATE_PENDING))
|
||||
return ansi_highlight_cyan();
|
||||
|
||||
if (FLAGS_SET(flags, UPDATE_INSTALLED|UPDATE_INCOMPLETE))
|
||||
return ansi_highlight_yellow();
|
||||
|
||||
@@ -29,6 +32,9 @@ const char* update_set_flags_to_glyph(UpdateSetFlags flags) {
|
||||
if (flags == 0 || (flags & UPDATE_OBSOLETE))
|
||||
return glyph(GLYPH_MULTIPLICATION_SIGN);
|
||||
|
||||
if (flags & (UPDATE_PARTIAL|UPDATE_PENDING))
|
||||
return glyph(GLYPH_DOWNLOAD);
|
||||
|
||||
if (FLAGS_SET(flags, UPDATE_INSTALLED|UPDATE_NEWEST))
|
||||
return glyph(GLYPH_BLACK_CIRCLE);
|
||||
|
||||
@@ -54,6 +60,18 @@ const char* update_set_flags_to_string(UpdateSetFlags flags) {
|
||||
case UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_NEWEST|UPDATE_PROTECTED:
|
||||
return "current";
|
||||
|
||||
case UPDATE_INSTALLED|UPDATE_PENDING|UPDATE_NEWEST:
|
||||
case UPDATE_INSTALLED|UPDATE_PENDING|UPDATE_NEWEST|UPDATE_PROTECTED:
|
||||
case UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_PENDING|UPDATE_NEWEST:
|
||||
case UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_PENDING|UPDATE_NEWEST|UPDATE_PROTECTED:
|
||||
return "current+pending";
|
||||
|
||||
case UPDATE_INSTALLED|UPDATE_PARTIAL|UPDATE_NEWEST:
|
||||
case UPDATE_INSTALLED|UPDATE_PARTIAL|UPDATE_NEWEST|UPDATE_PROTECTED:
|
||||
case UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_PARTIAL|UPDATE_NEWEST:
|
||||
case UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_PARTIAL|UPDATE_NEWEST|UPDATE_PROTECTED:
|
||||
return "current+partial";
|
||||
|
||||
case UPDATE_AVAILABLE|UPDATE_NEWEST:
|
||||
case UPDATE_AVAILABLE|UPDATE_NEWEST|UPDATE_PROTECTED:
|
||||
return "candidate";
|
||||
|
||||
@@ -10,6 +10,8 @@ typedef enum UpdateSetFlags {
|
||||
UPDATE_OBSOLETE = 1 << 3,
|
||||
UPDATE_PROTECTED = 1 << 4,
|
||||
UPDATE_INCOMPLETE = 1 << 5,
|
||||
UPDATE_PARTIAL = 1 << 6,
|
||||
UPDATE_PENDING = 1 << 7,
|
||||
} UpdateSetFlags;
|
||||
|
||||
const char* update_set_flags_to_color(UpdateSetFlags flags);
|
||||
|
||||
@@ -595,13 +595,14 @@ static int context_show_version(Context *c, const char *version) {
|
||||
if (!sd_json_format_enabled(arg_json_format_flags))
|
||||
printf("%s%s%s Version: %s\n"
|
||||
" State: %s%s%s\n"
|
||||
"Installed: %s%s\n"
|
||||
"Installed: %s%s%s%s\n"
|
||||
"Available: %s%s\n"
|
||||
"Protected: %s%s%s\n"
|
||||
" Obsolete: %s%s%s\n\n",
|
||||
strempty(update_set_flags_to_color(us->flags)), update_set_flags_to_glyph(us->flags), ansi_normal(), us->version,
|
||||
strempty(update_set_flags_to_color(us->flags)), update_set_flags_to_string(us->flags), ansi_normal(),
|
||||
yes_no(us->flags & UPDATE_INSTALLED), FLAGS_SET(us->flags, UPDATE_INSTALLED|UPDATE_NEWEST) ? " (newest)" : "",
|
||||
FLAGS_SET(us->flags, UPDATE_INSTALLED|UPDATE_PENDING) ? " (pending)" : "", FLAGS_SET(us->flags, UPDATE_INSTALLED|UPDATE_PARTIAL) ? " (partial)" : "",
|
||||
yes_no(us->flags & UPDATE_AVAILABLE), (us->flags & (UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_NEWEST)) == (UPDATE_AVAILABLE|UPDATE_NEWEST) ? " (newest)" : "",
|
||||
FLAGS_SET(us->flags, UPDATE_INSTALLED|UPDATE_PROTECTED) ? ansi_highlight() : "", yes_no(FLAGS_SET(us->flags, UPDATE_INSTALLED|UPDATE_PROTECTED)), ansi_normal(),
|
||||
us->flags & UPDATE_OBSOLETE ? ansi_highlight_red() : "", yes_no(us->flags & UPDATE_OBSOLETE), ansi_normal());
|
||||
@@ -794,7 +795,7 @@ static int context_show_version(Context *c, const char *version) {
|
||||
if (!sd_json_format_enabled(arg_json_format_flags)) {
|
||||
printf("%s%s%s Version: %s\n"
|
||||
" State: %s%s%s\n"
|
||||
"Installed: %s%s%s%s%s\n"
|
||||
"Installed: %s%s%s%s%s%s%s\n"
|
||||
"Available: %s%s\n"
|
||||
"Protected: %s%s%s\n"
|
||||
" Obsolete: %s%s%s\n",
|
||||
@@ -802,6 +803,7 @@ static int context_show_version(Context *c, const char *version) {
|
||||
strempty(update_set_flags_to_color(us->flags)), update_set_flags_to_string(us->flags), ansi_normal(),
|
||||
yes_no(us->flags & UPDATE_INSTALLED), FLAGS_SET(us->flags, UPDATE_INSTALLED|UPDATE_NEWEST) ? " (newest)" : "",
|
||||
FLAGS_SET(us->flags, UPDATE_INCOMPLETE) ? ansi_highlight_yellow() : "", FLAGS_SET(us->flags, UPDATE_INCOMPLETE) ? " (incomplete)" : "", ansi_normal(),
|
||||
FLAGS_SET(us->flags, UPDATE_INSTALLED|UPDATE_PENDING) ? " (pending)" : "", FLAGS_SET(us->flags, UPDATE_INSTALLED|UPDATE_PARTIAL) ? " (partial)" : "",
|
||||
yes_no(us->flags & UPDATE_AVAILABLE), (us->flags & (UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_NEWEST)) == (UPDATE_AVAILABLE|UPDATE_NEWEST) ? " (newest)" : "",
|
||||
FLAGS_SET(us->flags, UPDATE_INSTALLED|UPDATE_PROTECTED) ? ansi_highlight() : "", yes_no(FLAGS_SET(us->flags, UPDATE_INSTALLED|UPDATE_PROTECTED)), ansi_normal(),
|
||||
us->flags & UPDATE_OBSOLETE ? ansi_highlight_red() : "", yes_no(us->flags & UPDATE_OBSOLETE), ansi_normal());
|
||||
@@ -827,6 +829,8 @@ static int context_show_version(Context *c, const char *version) {
|
||||
SD_JSON_BUILD_PAIR_BOOLEAN("newest", FLAGS_SET(us->flags, UPDATE_NEWEST)),
|
||||
SD_JSON_BUILD_PAIR_BOOLEAN("available", FLAGS_SET(us->flags, UPDATE_AVAILABLE)),
|
||||
SD_JSON_BUILD_PAIR_BOOLEAN("installed", FLAGS_SET(us->flags, UPDATE_INSTALLED)),
|
||||
SD_JSON_BUILD_PAIR_BOOLEAN("partial", FLAGS_SET(us->flags, UPDATE_PARTIAL)),
|
||||
SD_JSON_BUILD_PAIR_BOOLEAN("pending", FLAGS_SET(us->flags, UPDATE_PENDING)),
|
||||
SD_JSON_BUILD_PAIR_BOOLEAN("obsolete", FLAGS_SET(us->flags, UPDATE_OBSOLETE)),
|
||||
SD_JSON_BUILD_PAIR_BOOLEAN("protected", FLAGS_SET(us->flags, UPDATE_PROTECTED)),
|
||||
SD_JSON_BUILD_PAIR_BOOLEAN("incomplete", FLAGS_SET(us->flags, UPDATE_INCOMPLETE)),
|
||||
@@ -1193,13 +1197,16 @@ static int verb_list(int argc, char **argv, void *userdata) {
|
||||
_cleanup_(sd_json_variant_unrefp) sd_json_variant *json = NULL;
|
||||
_cleanup_strv_free_ char **versions = NULL;
|
||||
const char *current = NULL;
|
||||
bool current_is_pending = false;
|
||||
|
||||
FOREACH_ARRAY(update_set, context->update_sets, context->n_update_sets) {
|
||||
UpdateSet *us = *update_set;
|
||||
|
||||
if (FLAGS_SET(us->flags, UPDATE_INSTALLED) &&
|
||||
FLAGS_SET(us->flags, UPDATE_NEWEST))
|
||||
FLAGS_SET(us->flags, UPDATE_NEWEST)) {
|
||||
current = us->version;
|
||||
current_is_pending = FLAGS_SET(us->flags, UPDATE_PENDING);
|
||||
}
|
||||
|
||||
r = strv_extend(&versions, us->version);
|
||||
if (r < 0)
|
||||
@@ -1217,7 +1224,7 @@ static int verb_list(int argc, char **argv, void *userdata) {
|
||||
return log_oom();
|
||||
}
|
||||
|
||||
r = sd_json_buildo(&json, SD_JSON_BUILD_PAIR_STRING("current", current),
|
||||
r = sd_json_buildo(&json, SD_JSON_BUILD_PAIR_STRING(current_is_pending ? "current+pending" : "current", current),
|
||||
SD_JSON_BUILD_PAIR_STRV("all", versions),
|
||||
SD_JSON_BUILD_PAIR_STRV("appstreamUrls", appstream_urls));
|
||||
if (r < 0)
|
||||
|
||||
Reference in New Issue
Block a user